
Epoch is a modern, terminal-based task logger and time tracker built with TypeScript, React, and Ink. It features a three-pane layout designed for efficiency and keyboard-centric workflows, allowing you to manage nested tasks and track your time without ever leaving the terminal.
# Install dependencies
pnpm install
# Run in development mode (with hot reload)
pnpm dev
# Build and start production version
pnpm build
pnpm start
Epoch is designed to be used entirely without a mouse.
1 / 2 / 3: Switch directly to Calendar / Tasks / Timeline panesTab / Shift+Tab: Cycle through panes?: Toggle help dialogq: Quit applicationj / k (or ↓ / ↑): Navigate weeksh / l (or ← / →): Navigate daysn / p: Next / Previous monthEnter: Select datea: Add new taske: Edit task titled: Delete taskSpace: Toggle completion statuss: Start task (sets start time)D: Mark as delegatedx: Mark as delayed/cancelledTab: Indent task (convert to subtask)Shift+Tab: Unindent taskEnter: Expand/Collapse subtasksj / k: Scroll through activity historyt: Toggle theme (Dark/Light)Your data is stored locally in a human-readable JSON file. This allows for easy backups or manual editing if necessary.
~/Library/Application Support/epoch/data.json~/.local/share/epoch/data.json (or $XDG_DATA_HOME)%APPDATA%\epoch\data.jsonEpoch now supports exporting and importing your data across machines using a temporary cloud-based storage solution. This feature is perfect for syncing your tasks between your work laptop and home desktop, or sharing a snapshot with a colleague.
The sharing functionality uses a dedicated server (see server/ directory) that:
epoch export
This will:
Example output:
Data exported successfully!
---------------------------
Secret Key: aB3dE7fG
Expires: 1/4/2026, 7:45:30 PM
---------------------------
Run 'epoch import' on another machine and enter this key to sync your data.
epoch import
This will:
Example workflow:
$ epoch import
Enter your secret key: aB3dE7fG
Data found! Do you want to (r)eplace existing data or (m)erge with it? [r/m]: m
Data successfully merged.
The export/import server is hosted at https://epoch-server.actuallyakshat.in and provides:
GET /api/healthPOST /api/data/exportPOST /api/data/importFor development or self-hosting, see the server/ directory for complete setup instructions including:
Note: Data is stored temporarily (5 minutes) for security and privacy. This is not a backup solution—it's designed for quick transfers between machines.
pnpm test # Run tests
pnpm test:coverage # Run tests with coverage report
Code is automatically formatted with Prettier on every commit.
pnpm format # Format all files
pnpm format:check # Check formatting without modifying files
This project uses SonarQube for local code quality analysis (runs in pre-commit hook).
To run SonarQube locally:
# Start SonarQube server (Docker)
docker run -d -p 9000:9000 --name sonarqube sonarqube
# Initialize server at http://localhost:9000 (admin/admin)
# Create a new project and generate a token
# Add token to environment
export SONAR_TOKEN=your_token_here
# Run analysis
pnpm sonar
Pre-commit Hook:
lint-staged to format staged files with PrettierConfiguration: See sonar-project.properties
Created by Akshat Dubey.
$ claude mcp add epoch \
-- python -m otcore.mcp_server <graph>