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.
$ 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
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.
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.
- 01
Paste a URL
We find your sitemap, crawl the pages and index them. Works for docs and marketing sites.
- 02
npx @suo/cli init
Detects fumadocs, Next or plain HTML, wires up the widget and ships your first index.
- 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.
“A highlight from last year used to be gone for good. Now it's a keystroke away, in whatever language I wrote it in.”
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.