Skip to content

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.

These components are working today:

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

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 │
└─────────────────────────────────────────────────┘
  • 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

The indexer extracts events matching these types:

TypeExamples
BookmarksPinboard saves, Readwise highlights
ListensSpotify plays, Last.fm scrobbles
NotesApple Notes, Notion pages
PostsTweets, toots, skeets
PhotosApple Photos with location/description
Check-insFoursquare visits
TasksThings to-dos
EventsCalendar entries
CodeGitHub commits, issues, PRs

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.

Think of Otso as an append‑only event log plus projections:

  1. Sources (SQLite databases with your data)
  2. Events (normalized records in a unified store)
  3. Projections (FTS5 search index, timeline views)

Projections are rebuildable. If something goes wrong, rebuild from the event store.