Skip to content

Welcome to the wick blog

2026-07-14

wick is the lantern engine's own scripting language: about two thousand lines of C++ you can read in an afternoon, zero dependencies, zlib license. This blog is where we write down why the language changes — the same function the Go blog serves for Go: permanent design memory, not launch-week hype.

What wick is for

Games on lantern are folders with main.wick (or main.lua for local dev). The engine calls update(dt) and draw() at 60 fps against a fixed 400×240 software framebuffer. wick is the native tongue of that loop:

  • small enough that a whole game fits in one file and one head
  • strict enough that the bug classes that burned us in Lua don't compile
  • safe enough that a store package has no filesystem or network exits beyond typed lt.* natives

It is not a general-purpose language. It will never chase Python or JavaScript. Feature-parity with other languages is explicitly not a reason to grow.

The constitution

From the ledger:

A feature enters the language only when real game code demonstrably hurt without it.

Optionals entered because an empty save file crashed a shipped frame. Records entered because KORA's kitchen props became five parallel lists. String indexing has not entered: baking maps offline is still clean.

If you want a feature, bring a scar — a path in a real game, a failing pattern, a comparison to the workaround. We will publish the decision here.

Where to go next