Limn Engine Is Getting a Performance Plugin That Might Change How You Think About Browser Games
The engine used to cap at 60. Now the display is the only limit.
If you've ever built a browser game, you know the feeling. It runs at a smooth 60fps on your laptop. You send it to a friend. Their phone chokes. Their older Android tablet chokes harder. The frame counter drops from 60 to 45, then 30, then stutters at 18 while particles flicker and input feels like it's arriving by mail.
This is the universal tax of browser game development. Weak hardware. Inconsistent frame pacing. Frustration that has nothing to do with your code and everything to do with how the browser schedules rendering.
Limn Engine has a fix coming. And it's not a rewrite. It's not a new engine. It's a plugin — one extra <script> tag, no configuration, no code changes.
What Limn Already Gets Right
Limn Engine was built on a simple philosophy: common outcomes should be functions. No build tools. No npm install. No config files. One script tag, one Display instance, and you're making a game.
That philosophy has already produced:
- A dual-canvas architecture that caches static scenes
- A
moveutility that turns boilerplate into one-liners - A built-in audio system with volume buses
- Particles, sprites, tilemaps, and camera shake — all in one file
But even with all of that, Limn is still bound by the same browser limits that every other Canvas 2D engine is bound by. Weak devices drop frames. High-refresh panels don't always get used. Frame pacing wobbles.
The upcoming plugin changes that.
"60fps Is the Ceiling"
That's what we were told. On low-end devices, 60 frames per second is the natural limit of what the browser can deliver. The display refreshes at 60Hz. RAF fires 60 times a second. The math closes. There's nothing above it.
It's a fair objection. On a 60Hz panel, 60 visible frames per second really is the physical limit — no engine can show more than the screen refreshes. But "the display caps at 60" and "the engine caps at 60" are two different claims. One is hardware. The other is a design choice.
For most engines, on most hardware, the ceiling holds — but only because nobody has bothered to push past it.
"Beyond the ceiling there is the sky. Beyond the sky there is infinite space."
We're not claiming we've broken physics. We're claiming that the ceiling people keep pointing to is lower than it needs to be — and that once you stop assuming it's fixed, there's a lot of room above it.
What's Coming
A drop-in performance plugin for Limn Engine that:
- Raises the engine's internal tick rate so the display is no longer waiting on the engine
- Matches GPU engine frame-rate consistency on small to medium 2D scenes
- Works across device classes — desktop, mid-range Android, low-end Android
- Requires zero configuration — one script tag, auto-activates
- Falls back gracefully if the device can't support it
- Doesn't change a single line of your game code
If your Limn game runs today, it'll run with the plugin. Faster. Smoother. On hardware you might have given up on.
Why This Matters
For solo developers
You don't have a QA team. You don't have a device lab. You have your laptop and a vague hope that your game runs on whatever your players own. The plugin closes that gap. What you see on your machine is closer to what your players will see on theirs.
For game jams
Game jams are won and lost on first impressions. A game that stutters on a judge's phone doesn't get a second look. A game that hits a stable frame rate on a budget Android gets remembered. The plugin turns "technically works" into "feels great."
For web games as a medium
Browser games have always lived in the shadow of native. Not because browsers can't do great games — they can — but because the feel has often been second-rate on low-end hardware. If this plugin does what it's designed to do, that gap narrows. Not on flagship phones. On everyone's phones.
For Limn's philosophy
The plugin preserves what makes Limn worth using. It doesn't ask you to restructure your code. It doesn't require a build step. It doesn't add a dependency. It's an enhancement — one script tag that makes existing games smoother without changing how they're written.
What We're Not Claiming
We're not saying this replaces Unity, Godot, or a "real" game engine. Different tools, different problems.
We're not saying it's free performance. The plugin uses real resources. It's engineered, not magic.
What we are saying is this: for the class of 2D games Limn is built for — platformers, puzzle games, RPGs, retro-style action games, game jam entries, learning projects — the plugin brings frame-rate consistency that previously required a much heavier engine.
What This Actually Changes
The frame rate you see is bounded by your display — a 60Hz panel shows 60, a 120Hz panel shows up to 120. That's hardware, not software. No engine can change it.
What the plugin changes is the engine's internal rate. Instead of ticking once per display refresh, the engine produces state at twice that rate and hands the freshest frame to the display at the moment it refreshes. On a 60Hz panel, the frame you see was computed half a frame ago instead of a full frame ago. On a 120Hz panel, the display actually receives 120 distinct frames per second.
The result:
- Lower input latency — your input is sampled at twice the panel rate, even on a 60Hz screen
- Smoother motion — physics and animation update at twice the tick rate, so nothing is skipped
- Higher visible frame rate on capable displays — up to the panel's native maximum
To be clear: the plugin does not produce more frames than your display can present. A 60Hz panel receives 60 refreshes per second, and that's what gets shown. A 120Hz panel receives up to 120. The plugin does not duplicate, interpolate, or fake frames — the number on your frame counter corresponds to real displayed refreshes.
This isn't double rendering. It isn't frame interpolation. It isn't an upscaling illusion. And it doesn't cost more CPU — the plugin is designed to use fewer resources than a naive render loop, which is exactly why it helps on low-end devices. It raises the floor. The display is the ceiling, and only the display.
The Numbers We're Targeting
We'll publish real benchmarks when the plugin ships. For now, here's what we're aiming for across device classes:
| Device | Current typical Canvas 2D | Target with plugin |
|---|---|---|
| Desktop | 60fps stable | 60fps stable (parity) |
| Flagship phone | 60fps, occasional jitter | 60–120fps stable |
| Mid-range Android | 30–45fps with stutter | 60fps stable |
| Low-end Android | 10–20fps unplayable | 60fps stable |
| High-refresh panels | Limited by main loop | Full refresh rate unlocked |
We'll measure 1% lows and 99th-percentile frame times, not just averages — because averages lie, and stutter is what players actually feel.
How to Try It
Soon. The plugin is in development. When it's ready:
- Add one
<script>tag to your page afterepic.js - That's it
- Your existing Limn game gets faster automatically
If it doesn't work on your device, the plugin detects that and quietly steps aside. Your game still runs exactly as it did before. Zero risk.
Follow the Limn project for updates — the release will be announced the day it's ready.
What's Next
We'll publish:
- The benchmark scene — open source, so anyone can reproduce our numbers
- Before/after comparisons — on real devices, not throttled DevTools
- A technical writeup — explaining the approach at a level that's useful without giving away the implementation
- The plugin itself — one file, one script tag, zero config
The web deserves better 2D games. Limn has always believed that. This plugin is the next step in proving it.
So when someone tells you 60fps is the ceiling, nod, and remember: ceilings are just the point where someone stopped looking up. Above them there's still sky. And above that, still space.
Limn Engine is a zero-configuration 2D game engine for the browser. One script tag, one line of code, and you're making a game. Follow the project for release announcements.
The performance plugin is under development. No release date announced yet.
Top comments (0)