Skip to content

Repository files navigation

Chronicle

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.

Install

npm install -g @chronicle.app/cli

To run without installing, use npx @chronicle.app/cli@latest <command>.

Usage

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, or table to change it.
  • --output <file> writes to a file instead of stdout.
  • --limit defaults to 100. --limit 0 reads everything.

Run chronicle extract <source> --help for a source's options. See the CLI README for more.

Sources

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 email mbox (export)
Facebook export facebook 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 instagram archive (export)
Last.fm listens, loved tracks, and friends lastfm api
LinkedIn data export linkedin 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 twitter archive (export)
WhatsApp messages whatsapp 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.

Why

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.

Roadmap

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.

How it works

  • 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.

Development

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.

License

MIT

About

Own your data, own your history

Resources

Stars

8 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages