How offline earnings work with no server at all
Under the hood · the timestamp trick, and why it needs a ceiling
Close Cozy Fishing, come back the next morning, and the game tells you the crew kept fishing while you were gone and hands you a pile of money. Nothing was running. The tab was closed. There is no server anywhere in this game that could have been counting.
The whole thing is one subtraction.
One number, written down on the way out
Every time Cozy Fishing saves your progress, it also writes down what time it is. Not the time on a clock face, but a timestamp: the number of milliseconds that have passed since the first moment of 1970, which is the reference point computers have agreed to count from. By now that number has climbed past 1.7 trillion, and it goes up by another thousand every second.
The game stores that under the name lastSeen, in your browser's own local storage, alongside your upgrades and your best depth. It is written whenever anything happens that needs saving, and again the moment you switch away from the tab, so the recorded time is genuinely the last time you were looking at it.
The sum on the way back in
When the game loads, it reads lastSeen, asks the browser what time it is now, and subtracts. That difference in milliseconds is the entire input. From it the game works out a payout, shows you a screen, and you tap to collect.
The rate comes from exactly one upgrade: Sonar. Nothing else feeds in. Your Line, your Hooks and your Reel change what happens when you are actually playing, and have no effect at all on time away. The formula is twice your Sonar level, then multiplied by 1.15 raised to the power of that same level, giving money per minute.
That 1.15 raised to your own level is where the growth hides, and it is what makes Sonar worth investing in. At Sonar level 5 it earns 20 a minute. At level 10 it earns 81. At level 20 it earns 655. Each level makes the previous one look small, which is the shape every idle upgrade wants.
Why there has to be a ceiling
Paying people for elapsed time has one obvious hole in it. The clock the game reads is the clock on your device, and you own that clock. You can change it. Wind it forward by a year and the subtraction dutifully reports a year of absence.
With no server there is no second opinion. Nothing else in the world knows what time it really is, so there is nothing to check against. Idle maths has to be written on the assumption that the number it is handed may be nonsense.
Cozy Fishing solves this the blunt way: before doing anything else, it clamps the elapsed time to a maximum of eight hours. Away for nine hours, you are paid for eight. Away for a year, you are paid for eight. At Sonar level 10 that ceiling is 38,880, and no clock on Earth can talk it into 38,881. The prestige bonus is applied afterwards, when you collect, so a player who has reset the ocean a few times takes home a multiple of that figure, but the part driven by elapsed time is already nailed down before the multiplier ever sees it.
The cap is not there to punish anyone for sleeping in. It exists because it turns an unbounded number into a bounded one, and a bounded number cannot break the economy no matter what it is fed.
Backwards clocks and tiny gaps
Two smaller guards sit next to the cap. If the elapsed time comes out negative, which happens when the clock has been moved backwards, the payout is zero. The check is written as "is the gap at least one minute", and a negative number fails that just as cleanly as a five second one, which also means a corrupted timestamp that reads as gibberish falls through to zero rather than producing something wild.
The one minute floor handles the other end. Refreshing the page, or bouncing out to check a message, should not trigger a reward screen. Under a minute away, the game says nothing.
Why this system has to exist at all
There is a detail in the main game loop that makes the whole thing necessary. Cozy Fishing measures how much time passed since the last frame and clamps that measurement to a tenth of a second, no matter how large it really was. Most games do this, because it stops a game that was paused for two minutes from advancing two minutes of physics in one catastrophic step.
The side effect is that a backgrounded tab genuinely earns nothing. Frames stop arriving, and the clamp means the few that do arrive cannot make up the difference. Active play and time away are two separate systems because the game deliberately refuses to let one pretend to be the other.
▶ Play Cozy Fishing