# ProcrastiTracker: a tray application that logs your active window every ten seconds

> ProcrastiTracker is a small Windows time tracking program written in C that sits in the system tray, samples which application or URL is in the foreground every ten seconds, and stores the result in a tree database you can browse as statistics. The author describes the code as old and crufty, and it is honest about why.

**aardappel/procrastitracker** — a Windows time tracking application

- Repository: https://github.com/aardappel/procrastitracker
- Website: http://strlen.com/procrastitracker/
- Stars: 587 · Forks: 69
- Language: C
- License: not declared
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/aardappel-procrastitracker

## The sampling loop is the whole application

ProcrastiTracker is a Windows time tracking application, and the description of how it works is short enough to hold in your head. It is a small application that sits in your tray, checks which application or URL you are on every 10 seconds, and collects that into a custom tree-database that lets you view statistics on your computer use.

The interval is the important design decision. Ten seconds is coarse enough that the polling costs nothing, and fine enough that the resulting picture of a day is not misleading. Anything finer would record the seconds you spent switching between windows, and anything coarser would lose short sessions entirely, including the ones where you actually changed context.

The scope is equally clear from what is absent. The program watches the foreground application and the URL in the foreground application, which means it records what you were looking at rather than what you typed or what appeared on screen. It is a record of application focus, not a keystroke logger, and that narrower definition is what makes a program like this usable on a work machine.

The homepage is strlen.com/procrastitracker, and the more detailed explanation of how it works lives there rather than in the repository.

## A custom tree database, not a log file

The collected data goes into what the readme calls a custom tree-database, and the choice of that structure is what makes the statistics viewable.

A flat list of timestamped samples would be simpler to write and much harder to use. Every sample of a browser would be a separate row, and asking how much time you spent in the browser means scanning rows rather than reading a total. A tree structure keyed on the application and then the URL gives you the aggregation for free, and it is why the program can show statistics rather than a raw feed.

It also means the storage format is the program's own. There is no import path into a general purpose time tracking system described in the documentation, and the data is local to the machine that produced it. For a tool whose entire purpose is to tell you something about your own habits, keeping the data on the machine is the sane default, but it also means there is no built-in way to look at a month of history on a second computer.

The repository layout backs the reading that this is a native Windows program rather than a script. There is a src/ directory holding the C sources, a PT/ directory for build output, a separate procrastitracker/ directory for the Visual Studio project files, a pt.nsi NSIS installer script, a zlib/ directory, and a.clang-format file for formatting the C code.

## The UI is written directly against Win32 controls

The readme has a source code section that is unusually candid, and its central point is about portability. The author notes that while almost all the code they have written is portable, this is an exception, because it makes use of Windows specifics such as hooks and DDE to gather its information.

The second reason is the UI. To keep the app small and fast, the author decided to write the interface directly using Win32 controls, and acknowledges the choice with a wince. The consequence stated in the readme is that the application is very much non-portable, and that changing that would be a fair bit of work, with an invitation to try.

Hooks and DDE are the two mechanisms worth pausing on, because they explain the design rather than just the limitation. A Windows hook is how a program is notified of system events such as a foreground window changing, and DDE is the older inter-process conversation mechanism. Both are native ways of learning what the user is doing without asking each application to cooperate, which is exactly the information the tracker needs.

Writing the interface in raw Win32 controls rather than a toolkit is the price paid for a small and fast binary, and it is a price the author keeps paying knowingly. There is no cross platform story here, and there is not meant to be.

## Building it means Visual Studio 2015 and an NSIS script

The build instructions are old-school, in the sense that they name a specific toolchain version. You use the included project files in the procrastitracker directory for Visual Studio 2015, and the readme notes that the free Community Edition works fine. The text also points out that this is not a portable application, with an apology attached.

To produce an installer you first make sure a Release mode build produced an executable in the PT directory, and you delete any other build cruft Visual Studio may have generated there. Then you create an installer script using pt.nsi, which you compile by right-clicking it and choosing Compile NSIS Script, and that requires NSIS to be installed. The alternative, if you do not want to deal with NSIS, is to zip up the PT directory.

So the whole packaging story is two options, an installer or a zip, and the readme is explicit that the zip is the fallback rather than the recommended path.

The version constraint is the part most likely to cause friction today. A project pinned to Visual Studio 2015 means an old toolchain, and building it on a current machine may mean installing a legacy version of the IDE rather than a modern one. That is a real cost, and it is a cost of the code being what it is rather than a defect in the instructions.

## The author tells you the code is old and has been running for years

The readme does not oversell the state of the code. It says the code is generally old and crufty, that the author did not feel like cleaning it up for its open source release, and apologises for it. Then it makes the case for why that might be acceptable: the code has been running on quite a few people's computers for many years, and it appears to be at least very stable.

That is the honest version of the maintenance story, and it is more useful than a claim about active development. The repository is not archived, the last push was on 2026-08-20, and it publishes no GitHub releases, so there is no version history to track and no changelog. What there is, is a program that its author reports has been in continuous use for a long time without needing attention.

There is one hard technical constraint stated alongside that, and it is worth knowing before you install it anywhere: the code uses features that are available only from Windows Vista onwards. That is a low bar today, but it does mean the program is not going to run on anything older, and it is a reminder that the target is a modern Windows desktop rather than a server or an embedded system.

The licence is Apache v2, stated in the readme, with the code and all associated files released under it. The repository listing does not show a separate licence file, so the readme paragraph is the statement of terms you have to go on.

## What a modern replacement would have to do differently

The alternative to this program is a general purpose activity tracker, and the difference in approach is mostly about scope rather than about accuracy.

A modern tracker usually captures more than the foreground window: which keys were pressed, what appeared on the screen, which sites you visited in a browser rather than just the browser process. That gives you a much finer picture, and it also introduces a much larger privacy and security question, because the data being collected is no longer a list of application names.

ProcrastiTracker takes the narrower position, and the narrowness is what makes it small, fast and easy to trust. It knows which application was in the foreground and, for the browser, which URL. From that it can answer the questions that time tracking is usually for: how much of the day went to the browser, how much to the editor, how much to a video call.

What it cannot do is show you what happened inside a single application, and it has no multi-device view, since the tree database is local to the machine. If you need per-application detail, per-project breakdown across laptops and desktops, or shareable reports, you are outside what this program offers.

For the case it does cover, the appeal is the opposite: a single small native program, no account, no cloud service, no subscription, and a database you can inspect yourself.

## Conclusion

Adopt ProcrastiTracker if you want to see where your own working hours actually go, you are on Windows, and you are willing to accept an application that measures only the foreground window and stores everything locally in its own tree database. Do not adopt it if you need multi-machine aggregation, a Linux build, or an activity tracker that captures keystrokes and screen content, because none of those are in scope here. Before you build it, open the Visual Studio 2015 project files in the procrastitracker directory, expect to install NSIS if you want an installer, and check that the Apache v2 licence in the readme matches what you intend to do with the code.

## FAQ

### How does ProcrastiTracker work?

It is a small Windows application that sits in the system tray and checks which application or URL is in the foreground every 10 seconds, collecting that into a custom tree-database that lets you view statistics on your computer use.

### How do I build ProcrastiTracker from source?

Use the included project files in the procrastitracker directory with Visual Studio 2015, where the free Community Edition is enough. For an installer you compile the pt.nsi script with NSIS after a Release build, or you can simply zip up the PT directory instead.

### Is ProcrastiTracker available for Linux or macOS?

No. The readme says the code makes use of Windows specifics such as hooks and DDE to gather information, and the UI is written directly using Win32 controls to keep the app small and fast, so it is very much non-portable.

### What licence is ProcrastiTracker released under?

The readme states that the code and all associated files are released under the Apache v2 license. The code also uses features available only from Windows Vista onwards.

## Sources

- [aardappel/procrastitracker on GitHub](https://github.com/aardappel/procrastitracker)
- [Issues](https://github.com/aardappel/procrastitracker/issues)
- [Project website](http://strlen.com/procrastitracker/)
- [README](https://github.com/aardappel/procrastitracker/blob/master/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/aardappel-procrastitracker
