Interlinked.

Guides · measured July 2026

The answer is in a file. Your tools were told to skip it.

Build output, .env, node_modules, datasets, logs: the untracked majority of a real project. ripgrep skips it by default. Cursor never puts it in the index. Here is how to search the git-ignored files anyway, and why an index that never skips quietly changes the job.

TL;DR · key takeaways

  • 01

    .gitignore is a filter your search silently obeys. ripgrep, Cursor and VS Code all read it and quietly narrow to tracked files, hiding the .env, node_modules, dist, datasets and logs you open the moment something breaks.

  • 02

    Un-skipping works, but it costs you. rg -uu, plain grep, or search.useIgnoreFiles: false pull the ignored files back in, yet every flag hands the walker more files, not fewer, and Cursor’s index has no flag at all.

  • 03

    A whole-disk index never skips. Filenames resolve in 85 μs, contents in 7 to 9 ms: the query ripgrep walks in 93.8 s returns in 16 ms, 58,625× faster, on the very files ripgrep skips.

  • 04

    Light, and always fresh. It rests at about 44 MB idle and is searchable roughly 1 ms after each save. Everything local is free forever, no card. Hosting starts at $5.99/mo.

What your tools actually see

Eight file types. Your search reaches two.

.gitignore keeps generated, secret, and oversized files out of version control. Every git-aware search tool reads that same file and narrows its world to match. Genuinely useful, until the thing you need lives on the other side of the line.

GIT-AWAREripgrep · Cursor · VS CodeWHOLE DISKInterlinked.gitignoresrc/**/*.tsthe source you wroteREADME.mdcommitted docs.env .env.localsecrets, the real API URL, DB stringsnode_modules/the dependency source actually runningdist/ build/ .next/the compiled bundle you shipdata/*.csv *.parquetdatasets, fixtures, exportslogs/ *.logwhat actually happened at runtime.venv/ vendor/the environment it all runs in

Six of the eight categories are untracked. They are also the ones you open when a build breaks, a secret is wrong, a dataset looks off, or a dependency misbehaves: precisely the moments you reach for search.

Why it happens, and why it is usually right

Skipping .gitignore is a feature. Until it is not.

The ignore file is a near-perfect signal for “machine-generated, secret, or huge”, the stuff you almost never grep. Honoring it gives fewer, cleaner, faster results, so the tools you use every day do exactly that out of the box:

ToolDefault on .gitignoreWhat that hides
ripgrepRespects it, plus hidden and binary filesnode_modules, dist, .env, logs
CursorExcludes it from the codebase indexthe AI cannot see ignored files at all
VS Code searchRespects it via search.useIgnoreFilesignored files absent from results
grep / findNot git-aware: walks everything you point atnothing hidden, but no index either

The first three are the tools you actually reach for. All three, by default, are blind to the untracked half of your disk. That is correct behavior 95% of the time, and a wall the other 5%.

Search them anyway

The flags that turn the skipping off.

ripgrep
rg -uu "pattern"

-u stops reading .gitignore, -uu also searches hidden files, -uuu even scans binaries. --no-ignore disables the ignore files alone.

grep
grep -rn "pattern" .

Plain grep never knew about .gitignore. It reads whatever path you point it at: nothing hidden, and no index either.

VS Code
"search.useIgnoreFiles": false

Or open the Search view, click the three dots, and turn off Use Ignore Files. Now results include the ignored folders.

Cursor
@ the-file.env

No setting re-indexes ignored files. Attach one by hand for a single message; the searchable index stays blind to the rest.

These get you an answer. On a real disk, they get you a slow one, or, for Cursor, none at all.

The catch

Un-skipping is either slower or impossible.

Every un-skip flag hands the walker more files, not fewer. node_modules alone can be hundreds of thousands of files. The floor was already high, and you just raised it.

And Cursor has no flag at all: the index is built to honor .gitignore, so ignored files never enter it. You can hand the model one file at a time; you cannot search across them.

93.8 s

one ripgrep content query on 4.47M files, measured with the skips still ON. Turning them off only adds work.

The index that never skips

One index. The whole disk, ignored files and all.

A purpose-built engine keeps a live index of every file on the machine, tracked or not, because to it they are all just files. The untracked half is not a special case; it is already indexed. So the query you could only run slowly, or not at all, becomes the same instant lookup as everything else.

Same content query · same drive

ripgrep

93.8 s

walking the tree, skips on

Interlinked

16 ms

one index lookup, nothing skipped

58,625×
faster than ripgrep across the content set, while indexing the files ripgrep skips
7 to 9 ms
typical content query on the benchmark set; exact phrases ~16 ms
85 μs
find that .env by name (139 μs median across 4.47M files)
~1 ms
from save to searchable, so a fresh .env or a new build shows up right away

Methodology: Ryzen 9 9950X3D · 64 GB DDR5 · NVMe · Windows 11 · 4,470,000 files. Same query, same drive. The index sits under 1% of the disk and rests at about 44 MB when nobody is asking it anything.

NO FLAG TO REMEMBER · NO FOLDER TO EXCLUDE · THE IGNORED FILES ARE ALREADY IN.

Common questions

Searching what git hides. Answered.

QHow do I make ripgrep search git-ignored files?

Add -u to stop reading .gitignore, -uu to include hidden files too, or -uuu to scan binaries; --no-ignore disables just the ignore files. It works, but on a real disk it only hands the walker more files, so a content query that already takes 93.8 s gets slower, not faster.

QWhy can't Cursor find my .env or code inside node_modules?

Cursor’s codebase index is built to honor .gitignore, so ignored files never enter it and no setting re-indexes them. You can attach a single file by hand with @, but you cannot search across the ignored files at all.

QDoes searching ignored files leak my secrets into git?

No. .gitignore still governs what git tracks; un-skipping only changes what your search tool reads on disk. A whole-disk index behaves the same way: it reads files locally and nothing ever leaves the machine.

QIs a whole-disk index really faster than grepping directly?

By a wide margin. A filename resolves in 85 μs (139 μs median across 4.47M files) and contents in 7 to 9 ms: the content query ripgrep walks in 93.8 s returns in 16 ms, about 58,625× faster, while indexing the very files ripgrep skips.

QWhat does it cost, and how much does it weigh?

Everything (including the MCP layer Claude Code, Cursor and the rest plug into) is free forever, no card. Hosting starts at $5.99/mo. The index rests at about 44 MB idle and stays fresh roughly 1 ms after each save.

Do this today

Stop choosing between fast and complete.

1

Install once. One signed installer auto-configures 19 AI clients: Claude Code, Cursor, Copilot, Windsurf, Cline and the rest. No JSON editing.

2

Search the whole disk. Names in microseconds, contents in milliseconds, including the git-ignored files ripgrep and Cursor skip.

3

Keep your repo tools. .gitignore still does its job in git. This is the layer that sees across it the moment you need to.

4

Trust it stays fresh. Edit a .env or rebuild, and it is searchable about a millisecond later: no re-index, no waiting.

Everything local is free forever, on all your devices, no card. Hosting starts at $5.99/mo. Download for Windows.

Measured July 2026 · Ryzen 9 9950X3D · 4.47M files · Windows 11← All research