Seek.js

Getting Started

What Seek is, its current status, and how it will be used

Seek adds instant search and AI answers with real citations to any site that ships HTML. One build command, no backend, no database, and no vendor account. It is MIT-licensed, with no hosted service and no paid tier.

Project status: v0, in development

Seek is not released yet. Nothing is published to npm, and the packages in the repository are still stubs, so the API described here is the design being built against rather than something you can install today. The roadmap tracks what lands in what order.

If you need site search in production now, Pagefind, Algolia DocSearch, and Orama Cloud all ship today — see Comparison.

The pipeline

Two properties follow from that shape. Seek reads build output, so there is no per-framework or per-language integration — anything that emits HTML works. And there is no embedding step and no vector database: retrieval is a lexical index, and the semantic work happens at query time, where the model can search again with different terms if the first results are thin.

How it will be used

The four steps below are the target design, at the level of detail worth reviewing now.

1. Build your site

Whatever you already do. Seek only reads the directory of HTML that comes out.

Planned API
hugo                # or: astro build, mkdocs build, next build, jekyll build

2. Index the output

Planned API
seek build ./dist

This emits a sharded static index into your output directory, plus a few small context files the answer endpoint reads at query time. No model runs, so it finishes in seconds and is safe on every commit. Languages are detected from each page's <html lang> attribute, so multilingual sites need no configuration.

3. Deploy the answer endpoint

One file, copied into your own project, holding your own API key.

Planned API
seek deploy --template cloudflare   # or: vercel, netlify

The endpoint is where the key lives. The browser sends only the question — never context — so the endpoint cannot be used as a general-purpose LLM relay against your key. See Architecture.

4. Add the component

In plain HTML, with no build step:

Planned API
<script type="module" src="/_seek/element.js"></script>

<seek-search index="/pagefind/" endpoint="/api/seek/answer"></seek-search>

Or drive it directly in React:

Planned API
import { useSeek } from "@seekjs/react";

export function DocSearch() {
  const { query, setQuery, results, ask, answer, citations, status } = useSeek({
    index: "/pagefind/",
    endpoint: "/api/seek/answer",
  });

  return (
    <>
      <input value={query} onChange={(e) => setQuery(e.target.value)} />
      {results.map((r) => (
        <a key={r.url} href={r.url}>
          {r.title}
        </a>
      ))}
      <button onClick={ask}>Ask AI</button>
      {answer ? <Answer text={answer} citations={citations} /> : null}
    </>
  );
}

Typing hits the static index only, so it is instant, free, and keyless. The endpoint is called only when someone clicks Ask AI, and answers are cached by normalized question.

What it costs

Search is free: it is static files on hosting you already pay for. Only an "Ask AI" click reaches a model, on your key, billed by your provider. On a small site using a free model tier — for example Gemini Flash-Lite's roughly 1,000 requests per day — that comes to $0.

Next steps

  • Architecture — the pipeline, and why the browser never sends context.
  • Packages — the packages and the dependency policy.
  • Comparison — how Seek compares to Pagefind, Algolia DocSearch, Orama Cloud, ask0, and DocsGPT.
  • Roadmap — what is being built, in order.

Credits

Retrieval is built on Pagefind by CloudCannon, an MIT-licensed static search library that handles sharded index chunks, URL and anchor binding, chrome removal, and multilingual indexing. Seek could not be this small without it.

On this page