Ship 2D games fast.
An open-source 2D game engine with Lua scripting, a visual editor, and an Entity Component System.
Still in early development. No public download yet.

Features
- ECS & Lua
- Raycasting & physics queries
- 2D physics
- Sprites & tilemaps
- Animation & particles
- Game UI
- Lua debugging
- Built-in profiler
- Game exports
- Audio
- Open source
Lua components
local Health = world:component("Health", {
current = 100,
maximum = 100,
regen = 5,
})
function Health:damage(amount)
self.current = math.max(
0, self.current - amount
)
end
function Health:_update(dt)
if self.current > 0 then
self.current = math.min(
self.maximum,
self.current + self.regen * dt
)
end
end
return Healthlocal Sight = world:component("Sight", {
distance = 600,
})
function Sight:_update(dt)
local transform = self.entity:get("Transform2D")
local origin = transform.position
local target = origin + Vector2(self.distance, 0)
local hit = physics.raycast(origin, target, {
collisionMask = physics.layers(1, 2),
includeSensors = false,
excludeBodies = { self.entity },
})
if hit ~= nil then
log.info("Hit {} at {} px",
hit.collider.name, hit.distance)
end
end
return SightShowcase
A third-person action RPG shooter prototype built with Sowa Engine.
Latest news
Recent development updates and progress.
Follow the development
Sowa Engine is in early development. You can follow the development or join the chat here.


