work / vectorless

Vectorless

Document retrieval where a language model reads a document's section tree instead of searching a vector index.

Years
2026
Status
active
Live
vectorless.store
Source
hallelx2/vectorless-engine

What it is

Vectorless parses a document into a tree of its real sections, with titles and page ranges. At query time a model reads that map and picks whole sections, up to six, and the answer comes back with page ranges and verbatim quotes. No embeddings, no similarity search, no vector database. The only splitting is structural: a PDF leaf longer than 2,400 characters becomes roughly 900-character child sections at word boundaries, each keeping its parent's page range.

Read more

The engine is open-source Go, about 38,000 lines plus 560 tests, and ships as one Docker container with a bundled Postgres and a web UI. Ingest is asynchronous behind River, Asynq or QStash. Any answer can be replayed byte for byte from its trace token, and the provider key can travel per request (Anthropic, OpenAI, Gemini or GLM).

Around it: TypeScript, Python and Go SDKs, an MCP server, a multi-tenant control plane with billing and quotas, a FinanceBench harness, and two Go libraries pulled out of the engine, llmgate and pdfgrab.

Stack

  • Go
  • Postgres
  • River
  • Asynq
  • QStash
  • S3 / R2
  • Docker
  • Anthropic
  • OpenAI
  • Gemini
  • Z.ai GLM
  • TypeScript
  • Python
  • Next.js
  • MCP

Counted

  • 235engine commits
    git rev-list origin/main, 2026-10-12
  • 37,767Go lines in the engine
    non-test, excluding generated code
  • 560engine test cases
    func Test across 86 files
  • 22REST routes
    cmd/server router, plus 13 Connect-RPC methods
  • 4LLM providers
    Anthropic, OpenAI, Gemini, GLM

How it works

The system as a machine on a bench. Hover or use the arrow keys to drive it.

10-K000000
A whole section drawer, in the carriage's handSection drawers: titles and page ranges, the tree the model readsThe cutter, locked: no embedding chunks, no top-KVectorless keeps a document as a tree of real sections. The model reads titles and summaries, lifts out whole sections (up to six cited ranges), and answers with page ranges and a trace token that /v1/replay plays back byte for byte. The 10-K and its questions are an example.

The path through it

  1. POST /v1/documentsMultipart upload, answered 202; the job goes on a queue.
  2. Parse into a treePDF, DOCX, Markdown or a URL becomes a hierarchy of sections with titles and page ranges (ToC extracted, generated, or both).
  3. PersistThe tree in Postgres, the source bytes in object storage.
  4. POST /v1/answer/treewalkThe model reads titles and summaries and selects 1 to N whole sections.
  5. Answer with citationsThe engine fetches the full sections; the answer carries page ranges, verbatim quotes and a trace token.
  6. POST /v1/replayAny answer replays byte for byte from its trace token.