The commit graph, for your life
GitHub-style habit tracker
with numbers in the squares
One square per day, shaded by how much you actually did. Ninety days of work in a single glance, whether the number is going up or down.
A tick cannot tell twelve pushups from a hundred
Most habit grids record one bit per day: you did the thing, or you did not. That bit is enough to draw a streak, and streaks are motivating right up until the morning you manage twelve pushups instead of your usual hundred and the app records it exactly the same as the day you did nothing at all.
Committed writes the number into the square and sets the shade from how close it came to your goal. A light square is a day you showed up tired. An empty one is a day you did not show up. Those are different facts about your life and the graph should say so.
Pushups
Ninety days, climbing from ten a day to a hundred. Rest days left in.
| Sun | Jun 70 of 100Click to update progress Tap to update | Jun 140 of 100Click to update progress Tap to update | Jun 210 of 100Click to update progress Tap to update | Jun 280 of 100Click to update progress Tap to update | Jul 50 of 100Click to update progress Tap to update | Jul 120 of 100Click to update progress Tap to update | Jul 190 of 100Click to update progress Tap to update | Jul 260 of 100Click to update progress Tap to update | Aug 20 of 100Click to update progress Tap to update | |
| Mon | 33 Jun 133 of 100Click to update progress Tap to update | 44 Jun 844 of 100Click to update progress Tap to update | 38 Jun 1538 of 100Click to update progress Tap to update | 49 Jun 2249 of 100Click to update progress Tap to update | Jun 290 of 100Click to update progress Tap to update | 70 Jul 670 of 100Click to update progress Tap to update | 81 Jul 1381 of 100Click to update progress Tap to update | 75 Jul 2075 of 100Click to update progress Tap to update | 86 Jul 2786 of 100Click to update progress Tap to update | 97 Aug 397 of 100Click to update progress Tap to update |
| Tue | Jun 20 of 100Click to update progress Tap to update | 35 Jun 935 of 100Click to update progress Tap to update | 46 Jun 1646 of 100Click to update progress Tap to update | 57 Jun 2357 of 100Click to update progress Tap to update | 69 Jun 3069 of 100Click to update progress Tap to update | 63 Jul 763 of 100Click to update progress Tap to update | 74 Jul 1474 of 100Click to update progress Tap to update | Jul 210 of 100Click to update progress Tap to update | 94 Jul 2894 of 100Click to update progress Tap to update | 88 Aug 488 of 100Click to update progress Tap to update |
| Wed | 34 Jun 334 of 100Click to update progress Tap to update | 45 Jun 1045 of 100Click to update progress Tap to update | 39 Jun 1739 of 100Click to update progress Tap to update | Jun 240 of 100Click to update progress Tap to update | 60 Jul 160 of 100Click to update progress Tap to update | 71 Jul 871 of 100Click to update progress Tap to update | 82 Jul 1582 of 100Click to update progress Tap to update | 76 Jul 2276 of 100Click to update progress Tap to update | 87 Jul 2987 of 100Click to update progress Tap to update | 98 Aug 598 of 100Click to update progress Tap to update |
| Thu | 42 Jun 442 of 100Click to update progress Tap to update | 36 Jun 1136 of 100Click to update progress Tap to update | 47 Jun 1847 of 100Click to update progress Tap to update | 59 Jun 2559 of 100Click to update progress Tap to update | 70 Jul 270 of 100Click to update progress Tap to update | 64 Jul 964 of 100Click to update progress Tap to update | Jul 160 of 100Click to update progress Tap to update | 84 Jul 2384 of 100Click to update progress Tap to update | 95 Jul 3095 of 100Click to update progress Tap to update | 100 Aug 6100 of 100Click to update progress Tap to update |
| Fri | 35 Jun 535 of 100Click to update progress Tap to update | 46 Jun 1246 of 100Click to update progress Tap to update | 55 Jun 1955 of 100Click to update progress Tap to update | 50 Jun 2650 of 100Click to update progress Tap to update | 61 Jul 361 of 100Click to update progress Tap to update | 72 Jul 1072 of 100Click to update progress Tap to update | 83 Jul 1783 of 100Click to update progress Tap to update | 77 Jul 2477 of 100Click to update progress Tap to update | 88 Jul 3188 of 100Click to update progress Tap to update | Aug 70 of 100Click to update progress Tap to update |
| Sat | 43 Jun 643 of 100Click to update progress Tap to update | 37 Jun 1337 of 100Click to update progress Tap to update | 48 Jun 2048 of 100Click to update progress Tap to update | 60 Jun 2760 of 100Click to update progress Tap to update | 71 Jul 471 of 100Click to update progress Tap to update | Jul 110 of 100Click to update progress Tap to update | 74 Jul 1874 of 100Click to update progress Tap to update | 85 Jul 2585 of 100Click to update progress Tap to update | 96 Aug 196 of 100Click to update progress Tap to update | 100 Aug 8100 of 100Click to update progress Tap to update |
Real data from a real habit shape. Switch to Year to see the same run as a full contribution graph.
Why the graph works
The honest version is that nobody has proven a contribution graph makes people more consistent. What can be said without overclaiming is narrower, and still useful.
A grid shows a month at once, so one missed day reads as one pale square among thirty rather than as a counter resetting to zero. That proportionality is the real difference from a streak number, which turns a single bad Tuesday into the loss of everything before it. The behaviour a streak counter most reliably produces is quitting after you break one.
The idea is also older than GitHub. Comedians and writers have kept wall calendars with a mark for every day worked for far longer than the contribution graph has existed, and the appeal is the same: a record you can see across the room, where the run itself becomes the thing you do not want to spoil.
What the graph will not do is make a badly chosen goal achievable. If you set sixty minutes and average thirty-eight, a year of pale squares is an accurate picture of a target that was wrong, not of a person who failed.
Streaks versus momentum
One number for how the month actually went
A streak answers one question: how many days in a row. It cannot tell you whether this month beat last month, and it is destroyed by a single missed day no matter how good the fifty before it were.
Momentum is a score out of 100 that survives a bad Tuesday. Here is exactly how it is built, because a score you cannot inspect is a score you have no reason to trust.
- 40%Days you hit the goal in the last weekWhat you did recently counts most.
- 30%Days you hit the goal in the last monthOne good week is not a habit yet.
- 20%Your current streak, full marks at fourteen daysRewards the run without making it everything.
- 10%How far into each goal you got, averagedThirty pushups beats zero, and the score says so.
Two consequences worth stating plainly. A perfect score needs a fortnight of hitting every goal, so 100 is reachable but not casually. And your streak is never broken by today: a run survives until the day is actually over, so an unfinished afternoon does not cost you a month of work.
The other direction
Some habits you are trying to do less of
Every habit grid can count up. Almost none can count down, so the things people most want to change, drinks, cigarettes, hours on a phone, end up tracked as a yes or no about whether you were perfect. Committed treats reducing as its own shape: you set what you are starting from and what you are aiming at, and a day shades darker the closer to the target you land.
Set the direction
Twenty a day down to zero. The goal is the floor, not the ceiling.
Log what happened
Three today. Not a failure, a number, and a shade closer than yesterday.
Scored the right way
Momentum counts a low number as the win it is, rather than as nothing done.
Against the other GitHub-style trackers
HabitHeat and init.Habits both build good versions of this idea, and both already let you put a value in a cell rather than a bare tick. The rows below say so. Where Committed differs is what happens after the graph is drawn.
| Feature | Committed | HabitHeat, init.Habits |
|---|---|---|
| A year of days as one graph | Yes | Yes |
| A number inside the square, not just a tick | Yes | Yes, on both |
| Habits you are trying to do less of | Counted down, and shaded by how close to zero you got | Not offered |
| A single score for how the month went | 0 to 100, with the weights published below | Not offered |
| Tasks in the same app | Projects, due dates, priorities, recurring tasks | Habits only |
| Price to track unlimited habits | Free | Free |
Compiled in August 2026 from what each product publishes on its own GitHub-style tracker page. If any of it has gone out of date, tell us and it gets corrected.
Start your graph today
One habit is enough to begin. Unlimited habits, unlimited history, free forever.
Get started free