Chrono Mock

Questions and answers

Short answers, including the ones about what this tool will not do.

Does it change my computer's clock?

No, and it never will - that is the whole point of the tool. The shifted time is visible to one process and the children it starts. Your domain logon, your certificates, Windows Update and every other application keep seeing the real date the entire time.

Do I need administrator rights?

No. There is no installer, nothing is written to the registry, and it runs from a folder you can put on a USB stick.

Will it work with my application?

The honest answer is that no tool of this kind can promise that in advance - so this one measures it instead. Every session ends with a verdict (works, works partially, does not work), the list of time channels the application actually read with a call count for each, and the list of channels that were not covered.

An application can read the clock through a route nothing intercepted - from a server, from a database, through a runtime layer. When that happens you are told, rather than left assuming the test passed.

Does it work with .NET, Java and Python applications?

Partly, and the differences matter. All three are marked experimental: they work on the test targets, they have not been tested broadly, and the built-in audit is your source of truth rather than this paragraph.

  • .NET - the wall clock and the session time zone are covered. Stopwatch stays on the real high-resolution counter unless you opt in to scaling it.
  • Java - the wall clock and elapsed time are covered. The session time zone is not reached, which is a known gap.
  • Python - time.time and datetime are covered. perf_counter, and monotonic on Python 3.13 and later, sit on the high-resolution counter unless you opt in.

Does it work with Electron and Chromium applications?

Yes, through a different mechanism. Their clock lives in a sandboxed renderer that injection does not reach, so the application is launched with a debug port and a clean throwaway profile, and its own JavaScript time APIs are put on the session clock - including inside the Web Workers, where the timer often actually lives.

One limit worth knowing: in this mode the session follows the host time zone. The instant is faked, the local-time getters are not.

How the Chromium and Electron mode works - what it reaches, what it does not, and why the debug port is the part to be aware of.

Can I make time run faster than real time?

Yes. Pick a whole-number multiplier and the application's clock runs at that speed - x1440 turns a day into a minute, so a 30-day trial expires in about half an hour. You can also freeze the clock, or jump forwards and backwards mid-session.

Countdowns and timers sit on a separate axis, and speeding those up is a separate switch, because scaling them changes behaviour that a lot of applications depend on.

Can I change only the time zone, without changing the date?

Yes. The session carries its own fixed offset, visible to that process while the system zone stays exactly where it was. This is the part most tools skip, and it is how you reproduce the bug that only appears for the customer five time zones away.

What about daylight saving time?

The session zone is a fixed offset with no daylight saving. A session set to Poland stays at the offset you chose whether its clock reads March or July, so a run that crosses a real transition drifts an hour from what that zone would really show.

Forcing an application through a daylight saving transition is therefore not something this tool does yet, and the date calculator says so rather than guessing.

Why does my antivirus flag it?

Because injecting a library into another process is a legitimate documented Windows technique that malware also uses. It is a false positive triggered by the technique, not by anything the tool does to your machine. The injected library is chrono_hook.dll, built from the public source under GPL-3.0, and you can rebuild it yourself. The Chromium and Electron mode does not inject at all.

The download page says what to do about it.

Is this a way to extend a trial or get around a licence?

No, and it is not built for that. Chrono Mock is for testing software you are responsible for - your own licence expiry, your own renewal logic, your own month-end report. No example, preset or page here will ever demonstrate extending somebody else's trial period.

Software with licence protection is in fact the case most likely to defeat this tool: anti-tamper code frequently reads time through routes deliberately chosen to be hard to intercept, and rolling a clock backwards is a condition such software is written to detect. A feature pointed the other way is planned - a mode that runs a series of time manipulations against your own application and reports which ones your protection caught.

Can I use it in continuous integration?

Yes. The command-line build is a separate download of about 1.6 MB with no runtime to install. Every command speaks --json and exits with a code a pipeline can branch on, and a session can write its evidence to a file.

How is this different from RunAsDate?

RunAsDate intercepts five wall-clock functions and does that well. This tool covers 41 time channels, can speed the clock up, gives the process its own time zone, follows child processes, and tells you afterwards which channels were actually covered. It is also open source, where RunAsDate is closed freeware.

The full comparison also says where RunAsDate is the better pick.

Is this libfaketime for Windows?

In spirit, yes - the same idea of moving time for one program rather than for the machine. In practice it is a different implementation, because libfaketime depends on LD_PRELOAD, which does not exist on Windows. There is a page about exactly that.

Is it free, and does it send anything anywhere?

Free and open source under GPL-3.0. No account, no telemetry, and it never talks to the internet at all - the whole tool works with the network cable pulled out.