Chrono Mock

Make one app's clock run faster

A 30-day trial takes 30 days to expire, unless you can move time. The usual advice is to push the system clock forward, which needs administrator rights and drags every other program on the machine along with it. This moves one process instead.

How fast

Pick a whole-number multiplier. The application's clock advances that many times faster than the real one, from whatever moment the session starts at.

MultiplierOne real minute becomesUseful for
x60an hourhourly jobs, session timeouts, token lifetimes
x1440a daydaily rollovers, a 30-day trial in half an hour
x43200a 30-day trialwatching the whole trial end while you read this
x525600a yearannual renewals, certificate expiry
x1000000about 1.9 yearsthe ceiling
# Start at the real time now, and run a day per minute
chrono run "C:\apps\test.exe" --mode x1440

# Start on a chosen date and accelerate from there
chrono run "C:\apps\test.exe" --at 2027-12-01T09:00:00 --mode x1440

# Hold the clock completely still instead
chrono run "C:\apps\test.exe" --mode frozen
A recording of a session driving another Windows application. The left window is Chrono Mock with the application's clock on 2028-06-03 and the real clock on 2026-09-04, the speed changing from frozen to x10 mid-session. The right window is the application under test, whose own log records the session as having started on 2028-06-03.
A real session, driving a real application. Note the right-hand window: the program under test wrote 2028-06-03 into its own session log. The speed is changed while it runs, without restarting anything.

The part that catches people out: there are two clocks

Speeding up the wall clock - what DateTime.Now and its equivalents return - does not by itself speed up a countdown. Those are two different questions an application can ask the operating system, and plenty of software measures "thirty days" with the second one rather than the first.

So the duration axis - tick counts, sleeps, waits and timers - is a separate switch:

  • --scale-duration puts sleeps, waits and timers on the session clock too. Without it, x1440 races the calendar forward while a five-second timer still takes five real seconds.
  • --scale-qpc additionally scales the high-resolution counter. That is where Python 3.13+ monotonic, .NET Stopwatch and Java nanoTime read elapsed time, and it is off by default because scaling it destabilised rendering in testing.

If the multiplier appears to do nothing to a countdown, this is almost always why.

# A timer app: speed the calendar AND the countdowns
chrono run "C:\apps\Timer.exe" --mode x60 --scale-duration

# A Python or .NET app measuring elapsed time on the high-resolution counter
chrono run "C:\apps\Job.exe" --mode x60 --scale-duration --scale-qpc

Changing speed without restarting

The multiplier can change mid-session, and the clock is re-anchored rather than jumped, so it never goes backwards when the speed drops. You can also jump the clock outright - forwards, or backwards the way a laptop does after it resyncs with a time server, which is the case that breaks anything measuring elapsed time without a guard.

# Run at x60, then switch to x1440 two seconds in
chrono run "C:\apps\test.exe" --mode x60 --set-after 2:1440

# Run, then jump the clock to a chosen moment five seconds in
chrono run "C:\apps\test.exe" --jump-after 5:2028-01-01T00:00:00

What it will not do

  • It does not touch the system clock. That is the point, not a limitation - but it means anything reading the time from a server, a database or another machine is unaffected, and the audit will tell you when that happens.
  • A jump changes what the application sees, not when it wakes up. Timers already handed to the kernel run on real time. Most applications poll the clock, so jumps work in practice - not all of them do.
  • It does not slow time down. Multipliers are whole numbers of one and above, plus a frozen clock at zero.

Whether any of it reached your application is not something to assume. The session says so →

Try it