---
title: indexer | CodeWeaver Docs
description: API reference for codeweaver.engine.config.indexer
url: "https://docs.knitli.com/api/engine/config/indexer"
type: static
generatedAt: "2026-04-17T17:21:08.491Z"
---

# indexer
       [Open in ChatGPT](https://chatgpt.com/?q=Read%20https%3A%2F%2Fdocs.knitli.com%2Fcodeweaver%2Fapi%2Fengine%2Fconfig%2Findexer%2F.%20I%20want%20to%20ask%20questions%20about%20it.)[Open in Claude](https://claude.ai/new?q=Read%20https%3A%2F%2Fdocs.knitli.com%2Fcodeweaver%2Fapi%2Fengine%2Fconfig%2Findexer%2F.%20I%20want%20to%20ask%20questions%20about%20it.)[View in Markdown](/codeweaver/api/engine/config/indexer.md)       [Share on LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https%3A%2F%2Fdocs.knitli.com%2Fcodeweaver%2Fapi%2Fengine%2Fconfig%2Findexer%2F)[Share on X](https://x.com/intent/tweet?url=https%3A%2F%2Fdocs.knitli.com%2Fcodeweaver%2Fapi%2Fengine%2Fconfig%2Findexer%2F&text=indexer)[Share on Threads](https://threads.net/intent/post?url=https%3A%2F%2Fdocs.knitli.com%2Fcodeweaver%2Fapi%2Fengine%2Fconfig%2Findexer%2F&text=indexer)[Share on Bluesky](https://bsky.app/intent/compose?text=indexer%20https%3A%2F%2Fdocs.knitli.com%2Fcodeweaver%2Fapi%2Fengine%2Fconfig%2Findexer%2F)[Share on Facebook](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fdocs.knitli.com%2Fcodeweaver%2Fapi%2Fengine%2Fconfig%2Findexer%2F)[Share on Reddit](https://reddit.com/submit?url=https%3A%2F%2Fdocs.knitli.com%2Fcodeweaver%2Fapi%2Fengine%2Fconfig%2Findexer%2F&title=indexer)[Share on Hacker News](https://news.ycombinator.com/submitlink?u=https%3A%2F%2Fdocs.knitli.com%2Fcodeweaver%2Fapi%2Fengine%2Fconfig%2Findexer%2F&t=indexer)[Share on Email](mailto:?subject=indexer&body=https%3A%2F%2Fdocs.knitli.com%2Fcodeweaver%2Fapi%2Fengine%2Fconfig%2Findexer%2F)[Share on WhatsApp](https://wa.me/?text=indexer%20https%3A%2F%2Fdocs.knitli.com%2Fcodeweaver%2Fapi%2Fengine%2Fconfig%2Findexer%2F)[Share on Telegram](https://t.me/share/url?url=https%3A%2F%2Fdocs.knitli.com%2Fcodeweaver%2Fapi%2Fengine%2Fconfig%2Findexer%2F&text=indexer)
# `codeweaver.engine.config.indexer`
[Section titled “codeweaver.engine.config.indexer”](#codeweaverengineconfigindexer)
Indexing configuration settings for CodeWeaver.

Settings for `codeweaver.engineIndexer`, `codeweaver.engineFileWatcher`, and related components.

## Class: `FilteredPaths`
[Section titled “Class: FilteredPaths”](#class-filteredpaths)
Tuple of included and excluded file paths.

### Method: `from_settings`
[Section titled “Method: from_settings”](#method-from_settings)

**

```
from_settings()
```

Resolve included and excluded files based on filter settings.

Resolves glob patterns for include and exclude paths, filtering includes for excluded extensions.

If a file is specifically included in the `forced_includes`, it will not be excluded even if it matches an excluded extension or excludes.

“Specifically included” means that it was defined directly in the `forced_includes`, and **not** as a glob pattern.

This constructor is async so that it can resolve quietly in the background without slowing initialization.

## Class: `IndexerSettings`
[Section titled “Class: IndexerSettings”](#class-indexersettings)
Settings for indexing and file filtering.

## How File Filtering Works
[Section titled “How File Filtering Works”](#how-file-filtering-works)
CodeWeaver uses the `rignore` library (a Python wrapper for Rust’s `ignore` crate) to efficiently walk directories while respecting various ignore rules. The filtering happens in this order:

 1. **Override patterns** (highest priority): Whitelist patterns for tooling dirs, ignore patterns for excluded dirs (note: any positive whitelist here — meaning not beginning with a `!` — is treated as an *only* — files not matching them will be ignored entirely.)
 1. **Ignore files**: .gitignore, .ignore, .git/info/exclude, global gitignore
 1. **Hidden files**: Files/dirs starting with . are ignored by default
 1. **Extension filter**: Only files with known extensions are included

## Default Behavior
[Section titled “Default Behavior”](#default-behavior)
With default settings, CodeWeaver will:

 - Respect .gitignore files (including parent directories and global gitignore)
 - Ignore hidden files and directories
 - Include .github, .circleci, and common tooling dirs (.vscode, .claude, etc.)
 - Exclude common build/cache dirs (node_modules, **pycache**, .git, etc.)
 - Only index files with known extensions (~360 supported file types)

## Key Settings
[Section titled “Key Settings”](#key-settings)
 - `use_gitignore`: Respect .gitignore rules (default: True)
 - `ignore_hidden`: Ignore hidden files/dirs (default: True)
 - `include_tooling_dirs`: Whitelist common tooling dirs despite ignore_hidden (default: True)
 - `excludes`: Additional directories to exclude (default: common build/cache dirs)
 - `excluded_extensions`: File extensions to exclude (default: binaries, media, etc.)

## Path Resolution
[Section titled “Path Resolution”](#path-resolution)
All paths should be relative to the project root. CodeWeaver deconflicts paths:

 - Files in `forced_includes` are always included, even if they match excludes
 - Tooling directories are whitelisted via overrides, still respecting .gitignore
 - The `excludes` list is converted to ignore patterns

### Method: `construct_filter`
[Section titled “Method: construct_filter”](#method-construct_filter)

**

```
construct_filter()
```

Construct the filter function for rignore’s `should_exclude_entry` parameter.

Returns a function that returns True for paths that should be EXCLUDED.

This filter:

 1. Allows directories to pass through (rignore handles dir filtering)
 1. Allows files in whitelisted tooling directories
 1. Excludes hidden files not in tooling directories (when ignore_hidden=True)
 1. Excludes files with explicitly excluded extensions
 1. Excludes files with extensions not in our known extensions list

### Method: `model_post_init`
[Section titled “Method: model_post_init”](#method-model_post_init)

**

```
model_post_init()
```

Post-initialization processing.

### Method: `set_inc_exc`
[Section titled “Method: set_inc_exc”](#method-set_inc_exc)

**

```
set_inc_exc()
```

Set that includes and excludes have been configured.

### Method: `to_settings`
[Section titled “Method: to_settings”](#method-to_settings)

**

```
to_settings()
```

Serialize to `RignoreSettings`.

## Class: `IndexerSettingsDict`
[Section titled “Class: IndexerSettingsDict”](#class-indexersettingsdict)
A serialized `IndexerSettings` object.

## Class: `RignoreSettings`
[Section titled “Class: RignoreSettings”](#class-rignoresettings)
Settings for the rignore library.

Maps to parameters of rignore.Walker. See [https://pypi.org/project/rignore/ ↗](https://pypi.org/project/rignore/)

Key parameters:

 - path: Root directory to walk
 - ignore_hidden: If True, ignore hidden files/directories (starting with .)
 - read_git_ignore: If True, respect .gitignore files
 - read_ignore_files: If True, respect .ignore files (ripgrep-style)
 - overrides: Glob patterns for whitelist/ignore. Plain patterns whitelist, patterns starting with ! ignore (e.g., “**/.github/**” whitelists, ”!**/node_modules/**” ignores)
 - should_exclude_entry: Callback returning True to exclude a path

## Function: `get_storage_path`
[Section titled “Function: get_storage_path”](#function-get_storage_path)

**

```
get_storage_path()
```

Get the default storage directory for index and checkpoint data.