Announcing Limn Engine โ€” Draw Your Game Into Existence

Published: (June 13, 2026 at 06:53 AM EDT)
4 min read
Source: Dev.to

Source: Dev.to

๐ŸŽจ Announcing Limn Engine โ€” Draw Your Game Into Existence

The 2D Game Engine That Puts Creativity First

After years of development, countless late nights, and more cups of coffee than I can count, Iโ€™m thrilled to announce Limn Engine โ€” a zeroโ€‘configuration, browserโ€‘based 2D game engine designed for people who want to make games, not fight with tools.

What is Limn Engine?

Limn (verb) โ€” to draw, paint, or portray.

Itโ€™s the perfect name for an engine that helps you bring your game ideas to life, one line of code at a time.

Limn is a zeroโ€‘configuration, browserโ€‘based 2D game engine that prioritizes creativity over complexity.

No build steps โ€” just HTML and JavaScript

No package managers โ€” one file, thatโ€™s it

No complex tooling โ€” start coding in seconds


const display = new Display();
display.start(800, 600);

const player = new Component(40, 40, "blue", 400, 300);
display.add(player);

function update(dt) {
    if (display.keys[39]) player.speedX = 300 * dt;
    if (display.keys[37]) player.speedX = -300 * dt;
    move.bound(player);
}
Enter fullscreen mode


Exit fullscreen mode

Thatโ€™s it. Your first game, ready in seconds.

Why Another Game Engine?

Most game engines fall into two categories:

Category Problem

Visual/no-code engines Limited control, hard to extend

Professional engines Steep learning curve, complex setup

Limn bridges the gap. Itโ€™s powerful enough for real games, yet simple enough for beginners. Every feature exists because I was tired of writing the same code over and over:

move.bound(player) โ€” no more edge detection boilerplate

fixed() โ€” UI follows the camera automatically

destroy() โ€” memory management without headaches

โ€œCommon outcomes should be functions.โ€ Thatโ€™s the philosophy.

Whatโ€™s Inside

โšก Dual-Renderer Performance

Limn uses a hidden โ€œfake canvasโ€ to cache static content (tilemaps, backgrounds). The result? 60 FPS on a Toshiba with 4GB RAM. Static elements render once, dynamic elements render on top. Simple. Fast. Effective.

๐Ÿ“ท Professional Camera System

display.camera.follow(player, true);   // smooth follow
display.camera.shake(8, 8);            // screen shake
display.camera.setZoom(1.5);           // zoom in
display.camera.shakeRotation(0.07);    // rotational shake
Enter fullscreen mode


Exit fullscreen mode

๐ŸŽฏ Circle Collision

Perfect for coins, balls, and round enemies:

coin.enableCircleCollision(15);
if (player.crashWithCircle(coin)) collect();
Enter fullscreen mode


Exit fullscreen mode

๐Ÿ–ผ๏ธ Dynamic Images

Swap images at runtime โ€” perfect for power-ups or damage states:

player.setImage("hero_powered.png");
player.setColor("red"); // back to rectangle
Enter fullscreen mode


Exit fullscreen mode

๐ŸŽจ Particle System with Presets

move.particles.explosion(ps, x, y, 30);
move.particles.sparkle(ps, x, y);
move.particles.blood(ps, x, y, 15);
move.particles.magic(ps, x, y);
Enter fullscreen mode


Exit fullscreen mode

๐Ÿ”Š Complete Audio System

const soundManager = new SoundManager();
soundManager.load("coin", "coin.wav");
soundManager.play("coin");
soundManager.playMusic("theme.mp3");
Enter fullscreen mode


Exit fullscreen mode

๐Ÿ—บ๏ธ Tilemap System

Levels as native JavaScript arrays โ€” no external editors required:

const level = [
    [1,1,1,1,1],
    [1,0,2,0,1],
    [1,0,0,0,1],
    [1,1,1,1,1]
];
const tilemap = new TileMap(display, level, tiles, 800, 600);
tilemap.show();
Enter fullscreen mode


Exit fullscreen mode

๐ŸŽญ Sprite Animation

One image, many frames. The engine handles the rest:

const hero = new AnimatedSprite("hero.png", 64, 64, 400, 300);
hero.addAnimation("idle", 0, 0, 1);
hero.addAnimation("walk", 1, 4, 8);
hero.playAnimation("walk");
Enter fullscreen mode


Exit fullscreen mode

๐Ÿ“ Rich Text with Tctxt

const score = new Tctxt("24px", "Arial", "white", 20, 40,
    "left", false, "alphabetic", "rgba(0,0,0,0.5)", 10, 5);
score.setText("Score: 0");
Enter fullscreen mode


Exit fullscreen mode

The Numbers

Category Rating

Overall Score 94/100

Ease of Learning 96/100

Performance 95/100

API Design 96/100

AI Readiness 97/100

The Story

Limn Engine started on a Toshiba laptop with 4GB RAM, offline W3Schools, and borrowed siblingsโ€™ laptops. No team. No funding. Just determination.

2023: JGame (unpublished)

2024: TCGame, TCJSGame V3

2025: Dual-renderer breakthrough (4 FPS โ†’ 60 FPS)

2026: Limn Engine V1

From a Toshiba to a professional game engine. Thatโ€™s the journey.

Who Is Limn For?

You areโ€ฆ Limn is for you

A beginner Most approachable code-first engine

A solo developer Get games shipped faster

A game jam participant Zero setup, instant prototyping

A teacher Students learn in hours, not weeks

An AI-assisted coder API designed for predictability

Whatโ€™s Next

Limn Engine is production-ready and free forever under the MIT license.

๐Ÿ“ฅ Download: limn-engine.vercel.app

  • ๐Ÿ“š Documentation: Beginner โ†’ Intermediate โ†’ Advanced โ†’ 10x guides

๐Ÿ’ฌ Discord: Join the community

  • ๐Ÿงช Try it now: Copy the example above and paste it into an HTML file

    The Oneโ€‘Line Summary

โ€œLimn Engine is a 94/100 professional-grade 2D game engine that prioritises simplicity, performance, and developer joy โ€” built by one developer who refused to give up.โ€

Draw Your Game Into Existence

Limn Engine V1 is ready.

No more fighting with tools. No more boilerplate. No more excuses.

Download Limn Engine ยท Read the Docs ยท Join Discord

Owolabi Kehinde

Creator of Limn Engine

Built on a Toshiba with 4GB RAM. Powered by determination. ๐Ÿš€

0 views
Back to Blog

Related posts

Read more ยป

The spec is in the wrong place

My day job is at a large tech company. Hundreds of engineering teams, and every one of them is somewhere different on AI adoption. Some are still treating codin...

The Heuristics Say Don't

A culture that only records its disasters ends up with a biased archive. Wars documented, plagues chronicled, collapses catalogued. The quiet decades go unwritt...