Site search, hosted on the edge

Search that finds it, in every script your readers type.

suo indexes your site or app, ranks results in an order you can explain, and gets English and CJK right — down to a half-typed word. Set up in five minutes — paste a URL, run the CLI, or push through the API.

Terminal transcript of npx @suo/cli init
$ npx @suo/cli init

◇  Detected fumadocs at apps/docs
◇  Created suo.config.ts
◇  Crawling docs.example.com …
◇  Found 184 pages via sitemap.xml
◇  Indexed 184 pages
◇  Search key suo_search_••••••••7f3a
✓  Widget wired into DocsLayout

Your search is live at docs.example.com

Try it — this is a live suo widget, searching sample data.

CJK, done right

Built for CJK, not translated for it.

Most search boxes segment Chinese and Japanese into whole words and stop there, so a query in progress finds nothing. suo indexes character bigrams underneath, so a half-typed word still gets you home.

Same partial query, two engines:

Query: 清华

Other search

No results found

Whole-word segmentation only matches a full 清华大学.

suo

清华大学 · 主页

Character bigrams give recall inside the word, not just at its edges.

Query: 稍後閱

Other search

No results found

The segmenter splits 稍後 | 閱 mid-token and drops the fragment.

suo

稍後閱讀清單 · 圖書館

Bigrams match inside the word on every keystroke, no full word required.

Query: 東京

Other search

No results found

Whole-word segmentation only matches a full 東京都.

suo

東京都の天気予報

Character bigrams give recall inside the word, not just at its edges.

Read why we built it this way →

Set up in five minutes

Paste a URL. Or run one command. Or push through the API.

However your content lives, there's a way in that doesn't touch your build.

  1. 01

    Paste a URL

    We find your sitemap, crawl the pages and index them. Works for docs and marketing sites.

  2. 02

    npx @suo/cli init

    Detects fumadocs, Next or plain HTML, wires up the widget and ships your first index.

  3. 03

    Push with the API

    For app content no crawler can see — records, highlights, per-user partitions.

Reliable by default

No stateful servers between you and an answer.

Runs on Cloudflare's edge

Reads answer from the replica nearest your reader. Writes are ordered and versioned, so a read after a write always sees it.

Your data, in its own partition

Every account gets its own partition inside the index. Clearing one for account deletion is a single call.

Keys shown once

Admin, write and search keys, scoped and rate-limited. A secret is displayed once, never stored in plain form.

First customer

Toread replaced two search boxes with one.

docs.toread.app is moving to suo, replacing a static, English-only index. The reading library runs it behind ⌘K, one partition per reader — so a highlight from last year is never more than a keystroke away, in whatever language it was written in.

Toread

“A highlight from last year used to be gone for good. Now it's a keystroke away, in whatever language I wrote it in.”

Illustrative quote — not an endorsement from an actual Toread engineer

Free, while we're in beta

No pricing page yet. Just fair quotas, and a button to start.

Records, monthly queries and partitions are metered, not charged. We'll tell you well before that changes.

Start free