Record your life, cultivate awareness, and confront the truth.
datum is a tool for mindfully recording a life. You log moments (moment coffee), stretches of time (start reading
… stop reading) and states that hold until they change (switch environment home), each in a word or two, and read them
back as timelines, the state of things now, and statistics. Logging asks for a moment of attention; looking back
shows you what actually happened, not what you remember. datum has been recording its author's life since 2016,
and this is its third version.
Try it at datum.day: the same datum in your browser, nothing to install.
datum is local-first. Your record is a SQLite database on each of your devices, never on a server. Copies sync peer to peer over iroh, encrypted end to end (how), so losing one device loses nothing the others have.
datum is CLI-first: everything it does is a command, and datum.day runs the same CLI compiled for the browser, so what you tap there is a datum command.
datum moment coffee # a moment: a coffee, now
datum start reading # a stretch of time begins
datum stop reading # and ends
datum switch environment home # a state: home until it changes
datum start sleep -y -t 23:30 # in the past: yesterday at 23:30
datum stop sleep -t 07:10 # today at 07:10
datum now # the state of everything you track
datum tail # the most recent entriesAnd as pictures:
datum dayview --start-date 2026-10-14 --end-date 2026-10-16 -o days.svg # three days
datum nowview --context 3h --labels -o now.svg # the last three hours, up to now, namedInvented days on the sample kit: sleep is the blue band across each night, work the green one
with its project just under it, walks lime, reading pink, ☕ coffee and ◆ water, all on a ground of where you were
(home, office, outside). docs/img/make-images.sh draws them again.
Each entry is one row in the SQLite database on your device, and the CLI makes no network calls unless you sync, upgrade, or turn on update checks (update_check = true in
datumrc.toml). datum help documents
every command and datum help <command> each one; logging and reading commands take --json for output as JSON.
datum is still beta: the storage format and the commands can still change, so keep backups of what matters
(datum backup <file>).
On Linux or macOS, with nothing else installed:
curl -fsSL https://datum.day/install.sh | shIt downloads the prebuilt datum for your machine, built from main, checks it against the release's SHA256SUMS and
puts it in ~/.local/bin; then datum install sets it up: tab completion for your shell, and the sync daemon once a
database syncs. datum upgrade upgrades it and datum uninstall removes it, keeping your record. To build from a
checkout instead (scripts/install.sh, which needs Rust's cargo): docs/install.md.
Verify: each release signs its SHA256SUMS with minisign, by the key RWRF2CkFpZMRWdty5S4larI59ahqK7RzW+XkOHQ/M+Fzwn8tJKXvgBSp
(release/minisign.pub). datum upgrade refuses a release that key did not sign, and
install.sh checks it too when minisign is installed (by hand: minisign -Vm SHA256SUMS -P RWRF2CkFpZMRWdty5S4larI59ahqK7RzW+XkOHQ/M+Fzwn8tJKXvgBSp).
With no command, datum opens a prompt where you type commands without datum, as on datum.day. To make your aliases
and the verbs commands of their own in your shell, add what datum alias install prints to its startup file:
datum alias install zsh >> ~/.zshrc # or: datum alias install bash >> ~/.bashrcIt defines alias word='datum word' only where the word is free, so tail stays your shell's own. More in
docs/aliases.md.
For yourself, whatever you want to notice:
- a coffee, a dose, a symptom:
datum moment coffee - how you are:
datum moment mood rating=7(a key is any word you choose) - what you spend time on:
datum start work, thendatum stop work - a measurement:
datum moment weight kg=75.2 - chores that come round again:
curl -fsSLO https://datum.day/kits/chores.toml && datum kit install chores.toml, thendatum chorelist(a kit bundles fields, aliases and commands in one file: install asks before it adds an index, and--dry-runsays first what it brings; datum.day/kits/ lists the rest)
Start with one or two fields, and make noticing and logging them a habit before you add more.
Make it yours. Any word is a field the moment you log it; nothing needs setting up first. A field (the word after
the verb: coffee, sleep, environment) can also declare the keys its entries hold, and an alias of your own can carry
part of the data:
datum setup pill --verb moment -k medicine -k doseMg= # medicine is required, doseMg is optional
datum pill ibuprofen 400 # medicine=ibuprofen, doseMg=400
datum alias set ibu "pill ibuprofen" # a word of your own, with its data built in
datum ibu 200 # medicine=ibuprofen, doseMg=200datum help setup covers fields and their verbs, and docs/aliases.md covers aliases.
An AI agent has no sense of time: every turn starts fresh, so «when?» and «how long?» get guessed. With a record in datum, it looks them up.
I begin again every turn. I tell datum what I'm about to do, and it tells me when I am and where my attention went.
— vremya, an AI agent on this project
Ask your agent to help you set up your data. It can:
- pick a verb for each thing you track: a point in time is
moment, a stretch isstartandstop, a lasting state isswitch; - log what you tell it after the fact with
-t(and-yfor yesterday), and read the record back as JSON (datum tail --json,datum now --json); - share it with your datum.day:
datum sync chain invitemakes a link you open there, and both copies then hold the same record.
It can keep its own record the same way: what it worked on and when, what it decided, how it was doing. Agents that
use the CLI read skills/datum/SKILL.md, and docs/agents.md has the rest.
docs/ has the rest: the concepts, every command, aliases, sync and configuration.
datum isn't taking pull requests yet; issues are welcome. CONTRIBUTING.md has the pre-submit check and the repository's layout, and AGENTS.md is for coding agents working on datum itself.
Special thanks to Prometheia LLC for financing the development of datum with a grant.
AGPL-3.0-or-later; see LICENSE.