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 with lit sprites and tilemapsThe platformer demo with lit sprites and tilemaps

Scenes and projects serialize to plain YAML, which is 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.