Own your data, own your history.
Chronicle is an open-source, local-first memex that archives and indexes your digital history, so that your personal records are yours to keep and to search.
Today, Chronicle is a command-line tool that extracts your data from apps and services into a common JSON-LD format. It reads files and databases on your machine and writes to stdout.
npm install -g @chronicle.app/cliTo run without installing, use npx @chronicle.app/cli@latest <command>.
chronicle sources # list available sources
chronicle extract shell --limit 10 # 10 shell history records
chronicle extract things-todo --type tasks # one record type
chronicle extract claude-code --loader yaml --output sessions.yaml- Output is JSON by default. Use
--loader csv,yaml, ortableto change it. --output <file>writes to a file instead of stdout.--limitdefaults to 100.--limit 0reads everything.
Run chronicle extract <source> --help for a source's options. See the
CLI README for more.
The CLI bundles shell, imessage, safari, things-todo, and claude-code. Install any
other source by name, for example chronicle plugins install lastfm, or let
chronicle extract <source> offer to install it.
| Source | Package | Strategies |
|---|---|---|
| Claude Code transcripts | claude-code | transcripts (local) |
| iMessage/SMS, with iCloud and contact enrichment | imessage | app-db (local) |
| Safari browsing history | safari | app-db (local) |
| Shell history (bash, zsh, fish) | shell | history (local) |
| Things 3 | things-todo | app-db (local) |
| Phone and FaceTime calls (Apple Call History) | apple-call-history | app-db (local) |
| Arc Timeline visits and trips | arc-timeline | icloud-backup (local) |
| Are.na channels, blocks, comments, and follows | arena | api |
| Bluesky follows, followers, and likes | bluesky | api |
| Email from mbox files | mbox (export) | |
| Facebook export | archive (export) | |
| FoodNoms meal logs | foodnoms | app-db (local) |
| Foursquare/Swarm check-ins | foursquare | api |
| Goodreads shelves and reading history | goodreads | csv (export) |
| GitHub pull requests, issues, comments, reviews, stars, and gists | github | api |
| Hacker News submissions, comments, and replies | hackernews | api |
| Instagram data export | archive (export) | |
| Last.fm listens, loved tracks, and friends | lastfm | api |
| LinkedIn data export | archive (export) | |
| Obsidian notes and links | obsidian | vault (local) |
| Pinboard bookmarks | pinboard | api |
| Slack messages from a slackdump export | slack | archive (export) |
| Spotify listens, saved tracks and albums, playlists | spotify | api |
| Timing app usage, time entries, and calls | timing-app | app-db (local) |
| Twitter/X archive tweets, likes, and DMs | archive (export) | |
| WhatsApp messages | app-db (local), backup (export) | |
| YouTube likes, subscriptions, playlists, uploads, and Takeout history | youtube | api, takeout (export) |
| Zotero works, highlights, notes, and reading | zotero | app-db (local) |
For services that no longer exist, shown by chronicle sources --all:
| Source | Package | Strategies |
|---|---|---|
| Google Reader archive actions | google-reader | takeout (export) |
| Marvin reading sessions and highlights | marvin | csv (export) |
| Moves export places and moves | moves-app | moves-export (export) |
chronicle plugins install also takes a package name or a local path.
chronicle plugins new my-source creates a plugin of your own for a source, and
chronicle plugins add ./my-source runs one you're writing in place.
chronicle plugins lists what is installed.
Imagine if your complete personal history was accessible to you in a single, unified archive: one place to search everything you've messaged, read, watched, and listened to.
In 1945, the Memex was supposed to be this device, but it was never built. Chronicle is the open-source adaptation of an experimental personal project that attempted to build a modern-day memex. Read the full story.
- Local-first. Your data stays on your machine and never touches a third-party service.
- Open-source. You can inspect everything that touches your data.
- Connected. Records from different sources share one schema, so they can be linked and searched together.
Available now:
- Extract. Read records from a source and output them as JSON-LD.
Planned:
- Archive. Import extracted records into a local archive.
- Query. Search across everything in the archive.
- Sync. Keep the archive in sync across devices.
- A source is where records come from: a service, an application, or an export.
- A plugin reads records from a source and transforms them to the schema.
- The schema (core/schema) defines the shared types and properties.
Each plugin exports an extractor and a transformer. You can use them from code with the
ETL framework. SQLite sources use the
read-only SQLite adapter. All packages are published to npm
under @chronicle.app.
Requires Node.js 22.13.0 or newer.
nvm install
npm ci
npm run quality| Directory | Contents |
|---|---|
core/ |
Schema, ETL framework, and shared tooling |
packages/ |
Reusable libraries |
apps/ |
Applications, including the CLI |
plugins/ |
Source plugins |
tools/ |
Development tools |
Tests use synthetic fixtures, not personal data. After changing packages or
dependencies, run npm run packages:check to test the packed packages in an isolated
install. See RELEASING.md for publishing.