Track the time. Keep your clients happy.
A self-hosted workspace for agencies and small teams that bill by the hour.
Install · How it works · What you get · Screenshots · Updates
You keep your clients, projects, and tasks in one place, track the time spent on them, and send clients a clear report when it's time to invoice. No spreadsheets, no juggling three different tools.
- 🏠 It's yours. Chrono runs on your own server, so your data stays with you.
- 🆓 It's free to host yourself. No per-seat pricing.
- ⚡ It's quick. Made to be used from the keyboard, with a compact layout and a light and dark theme.
- 📱 It works on your phone, too.
Everything starts with a client. A client has projects, and it can also hold tasks that don't belong to any project, like a monthly retainer or support. Whichever way you organize it, time is tracked on a task, and it adds up to the right project and client for you.
| 🧩 Clients, projects, and tasks Assign people, add labels, comments, and file attachments, and group work by status. |
⏱️ Time tracking Start a timer or add time by hand. Mark it billable or not, and sort it with your own entry types. |
| 📊 Reports you can send Every client and project has a Time tab: total hours, billable share, a day-by-day chart, and breakdowns by type, project, and person. |
📄 A polished PDF Export the report for your client, in English or Romanian. |
| 👥 Your team and your clients Invite teammates as owners, admins, or members. Give clients limited guest access to only what they should see. |
📥 An inbox See assignments, status changes, and comments addressed to you. |
| 🧹 Fix mistakes Tracked time by accident? Owners and admins can delete an entry, and it drops out of every report. |
🔒 Private by design Your data lives in a database and file store on your own machine. |
| Issues for a client, grouped by status | One issue, with its activity and a timer |
|---|---|
![]() |
![]() |
The PDF report you can send to a client (the first page, shown here in Romanian):
You need a computer or server that can run Docker (Docker Desktop works too). Nothing else needs to be installed.
1. Run the installer
curl -fsSL https://raw.githubusercontent.com/bitwave-md/chrono/main/scripts/install.sh | shIt sets everything up in a chrono folder in your home directory, generates
the passwords it needs, and starts Chrono at http://localhost:3000.
2. Create your account
Open http://localhost:3000/auth/setup and enter the setup code the installer
printed. (It's also saved in ~/chrono/.env if you need it again.) Choose the
email and password you'll use to sign in. You become the first owner.
3. Invite your team
Add teammates from the workspace settings. Chrono doesn't send emails, so invitation links are copied and shared by you directly.
To make Chrono available at an address like https://chrono.example.com, point
that domain at your server and run the installer with your address. Chrono sets
up and renews the HTTPS certificate automatically (ports 80 and 443 need to be
open).
curl -fsSL https://raw.githubusercontent.com/bitwave-md/chrono/main/scripts/install.sh |
NEXTAUTH_URL=https://chrono.example.com shAlready have a reverse proxy such as Nginx, Traefik, or Caddy? Skip the
built-in HTTPS, set NEXTAUTH_URL to your address, and proxy to Chrono's local
port.
Updating. When a new version is available, Chrono tells whoever administers the installation. Open Settings → Updates and click one button: Chrono makes a backup, installs the new version, and checks that everything works. If something goes wrong, it rolls back to the version you had.
Backing up. Run this on your server whenever you like:
cd ~/chrono
./backup.shA backup includes your database and all uploaded files. Keep copies somewhere other than the server itself, and try a restore now and then so you know it works. Restoring is covered in the operations guide.
- Chrono doesn't send email. You sign in with an email address and password, and invitation and password-reset links are copied and shared by an admin.
- Settings → Storage and Updates (for the installation's administrator) show the health of your installation.
For developers and advanced setups
-
Under the hood: one Next.js application and a PostgreSQL database, with uploaded files in a private object store (the built-in one, or your own S3-compatible storage).
-
Manual Docker Compose setup, external S3 storage, and recovery steps: docs/OPERATIONS.md
-
Run it from source:
cp .env.example .env # then replace the placeholder secrets npm run stack:upChrono opens at
http://localhost:3000. See docs/OPERATIONS.md for details.
More documentation:
- Architecture: how Chrono is put together
- Operations: installing, updating, backing up, and recovering
- Releases: how versions are published
- Security: authentication and deployment notes
- API: HTTP endpoints
- Performance: measured performance notes
- UX and UI standards: interface conventions
- Roadmap: what has been built so far
Chrono is made by Bitwave Software and is free to use, read, and modify for non-commercial purposes, as long as you credit Bitwave Software. Commercial use, redistribution, and selling it need written permission. See LICENSE for the full terms, or contact daniil@btw.md for commercial licensing.




