What Is Otso
Otso is a local‑first toolkit that helps you own your content and activity across the web. It indexes your digital trails from dozens of sources and makes them searchable on your machine.
Current Components
Section titled “Current Components”These components are working today:
otso-indexer (Rust)
Section titled “otso-indexer (Rust)”The indexer reads data from SQLite databases and builds a unified, searchable event store.
- Configuration-driven — Add sources via
sources.toml, no code changes needed - Parallel processing — Indexes multiple sources concurrently
- Transaction-safe — Batch operations with automatic rollback on failure
- Robust parsing — Handles 15+ timestamp formats automatically
otso-search (SvelteKit)
Section titled “otso-search (SvelteKit)”A web UI for searching your indexed data.
- Full-text search — FTS5-powered search across all sources
- Timeline histogram — Visual overview of your activity over time
- Category filters — Filter by source type (reading, music, social, etc.)
- Keyboard navigation — Arrow keys, Enter to open, Escape to close
┌─────────────────────────────────────────────────┐│ SOURCE DATA (SQLite databases) ││ Twitter, Pinboard, Spotify, GitHub, etc. │└───────────────────────┬─────────────────────────┘ ▼┌─────────────────────────────────────────────────┐│ otso-indexer (Rust) ││ Configurable via sources.toml │└───────────────────────┬─────────────────────────┘ ▼┌─────────────────────────────────────────────────┐│ Event Store + FTS5 Search Index (SQLite) │└───────────────────────┬─────────────────────────┘ ▼┌─────────────────────────────────────────────────┐│ otso-search (SvelteKit) ││ Timeline · Filters · Full-text search │└─────────────────────────────────────────────────┘Planned Components
Section titled “Planned Components”- CLI — Commands for import, publish, and maintenance (
otso import,otso publish) - Web dashboard — Compose posts, review imports, manage accounts
- Site generator — Render posts with Microformats2 and Webmention support
- Live API connectors — PESOS import from Mastodon, Bluesky, and more
Supported content types
Section titled “Supported content types”The indexer extracts events matching these types:
| Type | Examples |
|---|---|
| Bookmarks | Pinboard saves, Readwise highlights |
| Listens | Spotify plays, Last.fm scrobbles |
| Notes | Apple Notes, Notion pages |
| Posts | Tweets, toots, skeets |
| Photos | Apple Photos with location/description |
| Check-ins | Foursquare visits |
| Tasks | Things to-dos |
| Events | Calendar entries |
| Code | GitHub commits, issues, PRs |
Visibility & privacy
Section titled “Visibility & privacy”Every item can carry a visibility: public, unlisted, private, or secret.
- Public: included in search results
- Unlisted: searchable but not in feeds
- Private: visible only in local tools
- Secret: excluded from search indexes entirely
The search projection enforces these rules—private and secret items are never indexed.
Quick mental model
Section titled “Quick mental model”Think of Otso as an append‑only event log plus projections:
- Sources (SQLite databases with your data)
- Events (normalized records in a unified store)
- Projections (FTS5 search index, timeline views)
Projections are rebuildable. If something goes wrong, rebuild from the event store.