Overview
Moment Tally runs entirely on your Mac. Timers, labels, and notes are stored locally and work with no network — there's nothing to sign up for. When you're ready for multi-device or multi-user use, point Moment Tally at a Moment Tally Server you host. The server is built from Traggo Server internals and extended for the Moment Tally workflow; the app is the same either way.
APP
Moment Tally
macOS menu bar · offline-first
SERVER · OPTIONAL
Moment Tally Server
Multi-user · multi-device sync
EDGE
Caddy
TLS + reverse proxy
Install Moment Tally
Install with Homebrew — or download the latest notarized build from GitHub releases and drag MomentTally.app to /Applications. On first launch Moment Tally lives in the menu bar and is ready to track — no configuration needed.
# Homebrew cask (recommended)
brew install --cask sf1tzp/tap/moment-tally
# …or unzip the release .zip and drag MomentTally.app to /ApplicationsMoment Tally has no dock icon — look for the timer icon in the menu bar; it turns into a running count while a timer is live. Updates arrive in-app via Sparkle.
Label your time
Moment Tally's label system is inspired by Prometheus metrics: instead of one rigid hierarchy, you attach key: value dimensions to a span. Keys are lower-cased with spaces turned into dashes; missing keys are created automatically. Group them into label sets with their own colors and launcher icons.
repo: sfi/sfi-website
feat: kb-knowledge-graph
type: review
client: acmeBecause time is dimensioned rather than filed, you can later query it across any axis — by repo, by client, by kind of work — without having decided the hierarchy up front.
Export your data
Your history is yours. Moment Tally exports to JSON first — a format that's trivial to inspect, diff, and write custom connectors against — so you can feed bookkeeping tools or join spans to source control.
# export a date range to JSON
moment-tally export --from 2026-07-01 --to 2026-07-31 --format json > july.jsonSelf-host Moment Tally Server
Want your labels and history on every device, or shared across a team? Run Moment Tally Server. It ships as a single container backed by SQLite.
services:
moment-tally-server:
image: momenttally/server:latest
restart: unless-stopped
container_name: moment-tally-server
environment:
- MOMENTTALLY_DEFAULT_USER_NAME=admin
- MOMENTTALLY_DEFAULT_USER_PASS=change-me
- MOMENTTALLY_DATABASE_DIALECT=sqlite3
- MOMENTTALLY_DATABASE_CONNECTION=/data/momenttally.db
volumes:
- ./data:/data
networks:
- caddy_network
networks:
caddy_network:
driver: bridgemkdir -p ~/momenttally/data
# copy the compose file to ~/moment-tally-server-compose.yaml, then:
nerdctl compose -f ~/moment-tally-server-compose.yaml up -dThe server listens on :3030. Put Caddy in front for automatic TLS:
momenttally.example.com {
encode gzip zstd
reverse_proxy moment-tally-server:3030
}Connect your devices
- 1 In Moment Tally, open Settings → Sync and enter your server URL (https://momenttally.example.com).
- 2 Sign in. Your local history is uploaded and kept in sync from then on.
- 3 Repeat on any other Mac — every device shares the same labels, spans, and label sets.
Backups & upkeep
On a self-hosted server, all of your data is the database plus its volume. Back up the ./data directory on a schedule and you can restore the entire history anywhere. (Running app-only? Your JSON export is your backup.)
# nightly snapshot of the Moment Tally Server volume
tar czf ~/backups/momenttally-$(date +%F).tar.gz -C ~/momenttally data
# update to the latest server image
nerdctl compose -f ~/moment-tally-server-compose.yaml pull
nerdctl compose -f ~/moment-tally-server-compose.yaml up -dNeed help? Head to the Help & how-to guides, or see how we use Moment Tally in the case study.