Skip to content

kione

Kione is a general purpose 2D game engine.

A docking editor with scene/entity/component editing, live play mode, and tileset, tilemap, and animation authoring — everything you need to build a game without leaving the app.

The in-editor tilemap authoring workflowThe in-editor tilemap authoring workflow

Drive entities with per-entity Lua — read input, move and animate, spawn and query, and store custom data other entities can read. Here’s the heart of the demo’s player controller:

function on_update(entity, dt)
local transform = entity:transform()
local move = 0.0
if Input.is_key_down(Key.a) or Input.is_key_down(Key.left) then move = move - 1.0 end
if Input.is_key_down(Key.d) or Input.is_key_down(Key.right) then move = move + 1.0 end
vx = move * MOVE_SPEED
local jump = Input.is_key_down(Key.space) or Input.is_key_down(Key.up)
if jump and not jump_held and grounded then
vy = JUMP_SPEED
grounded = false
end
jump_held = jump
vy = math.max(vy - GRAVITY * dt, -MAX_FALL)
transform.translation.x = transform.translation.x + vx * dt
transform.translation.y = transform.translation.y + vy * dt
end

Batched sprites with deferred ambient/point/spot/sprite lights, HDR tone mapping, bloom, SDF text, and tilemaps — so a pixel-art scene lights up without hand-painting shadows.

The platformer demo — lit sprites and tilemapsThe platformer demo — lit sprites and tilemaps

Scenes and projects serialize to plain YAML — easy to diff, hand-edit, and generate (even by an LLM). A whole entity is just a few lines:

- Entity: 0
TagComponent: Player
TransformComponent:
Translation: [0, 0, 0]
SpriteComponent:
Texture: hero
Size: [16, 32]
ScriptComponent:
Script: player

The repository hosts Crystal Keep, a five-level night-time tower defense built entirely as kione content: autotiled maps, enemy waves and economy in Lua, dynamic lighting, a HUD, and audio. No engine-side game code. Play it, then pick it apart.

Crystal Keep: the tower defense game

Kione is a tiny, hobby-scale 2D game engine with a full editor, a Lua scripting layer, and human-readable project files. Build your game in the editor, script it in Lua, and ship it by dropping your project next to the runtime — no build step required. Two finished projects live in demos/ — a platformer and the Crystal Keep tower-defense game.