Kinemium is being rebuilt in Odin with a new runtime, renderer, editor, and scripting architecture. Follow development on the forums. Read the development status report
Kinemium Engine

Kinemium is an open sandbox game engine built in Luau (ZUNE) with Luau scripting, a native editor, modern rendering, custom engine APIs, and support for building standalone games.

Engine Datatypes
────────────────────────────────
Vector2
Vector3
Vector3int16
CFrame
CFrameint16
Quaternion
Color3
Color4
BrickColor
UDim
UDim2
Rect
Ray
Region3
Region3int16
Axes
Faces
NumberSequence
NumberSequenceKeypoint
ColorSequence
ColorSequenceKeypoint
TweenInfo
Random
OverlapParams
PhysicalProperties
Content
Signal
Promise
Enum
And more as the engine API expands.

Core Engine Services
────────────────────────────────
Workspace
Players
Lighting
RunService
TweenService
HttpService
UserInputService
Selection
GuiSelectionService
SoundService
LogService
Debris
ReplicatedStorage
ServerStorage
ServerScriptService
StarterGui
ScriptRunnerService
PlaytestService
ProjectLoaderService
ProjectSyncService
Kinemium Systems

Engine-specific services
KinemiumFFI
KinemiumFontService
KinemiumShaderService
StudioThemeService
JoltPhysicsService
Box2DService
ReplicatorService
PluginLoader
SQLiteService

Runtime Modes
────────────────────────────────
Kinemium is designed around separate editor, client, server, and headless runtime configurations. kinemium

--editor — start the Kinemium editor and development environment
--client — launch the game runtime as a client
--server — run the authoritative game server
--headless — disable graphical output for dedicated servers and automation
--address <address> — select the network interface used by a server
--port <port> — select the game server port

Built With Luau

Kinemium rendering a procedural Luau scenelocal Workspace = game:GetService("Workspace")
local RunService = game:GetService("RunService")

local center = Vector3.new(0, 10, 0)

local blackHole = Instance.new("Part")
blackHole.Name = "BlackHole"
blackHole.Size = Vector3.new(8, 8, 8)
blackHole.Anchored = true
blackHole.CanCollide = false
blackHole.Shape = Enum.PartType.Ball
blackHole.Material = Enum.Material.Neon
blackHole.Color = Color3.new(0, 0, 0)
blackHole.CFrame = CFrame.new(center)
blackHole.Parent = Workspace

local particles = {}
local particleCount = 1000

for i = 1, particleCount do
local angle = math.random() * math.pi * 2
local radius = math.random(90, 200) / 10
local height = math.random(-20, 20) / 10

local particle = Instance.new("Part")
particle.Size = Vector3.new(0.35, 0.35, 0.35)
particle.Anchored = true
particle.CanCollide = false
particle.Shape = Enum.PartType.Ball
particle.Material = Enum.Material.Neon
particle.Color = Color3.fromHSV(math.random(), 1, 1)
particle.Parent = Workspace

particles[i] = {
part = particle,
angle = angle,
radius = radius,
height = height,
speed = 0.2 + math.random() * 0.8,
}
end

RunService.RenderStepped:Connect(function(dt)
for _, particle in particles do
particle.angle += particle.speed * dt

local x = math.cos(particle.angle) * particle.radius
local z = math.sin(particle.angle) * particle.radius

particle.part.CFrame = CFrame.new(
center + Vector3.new(x, particle.height, z)
)
end
end)
Kinemium GUI rendered from Luaulocal Players = game:GetService("Players")

local screen = Instance.new("ScreenGui")
screen.Name = "ExampleUI"
screen.Parent = Players.LocalPlayer.PlayerGui

local panel = Instance.new("Frame")
panel.Name = "Panel"
panel.AnchorPoint = Vector2.new(0.5, 0.5)
panel.Position = UDim2.fromScale(0.5, 0.5)
panel.Size = UDim2.fromOffset(520, 300)
panel.BackgroundColor3 = Color3.fromRGB(24, 24, 28)
panel.Parent = screen

local corner = Instance.new("UICorner")
corner.CornerRadius = UDim.new(0, 12)
corner.Parent = panel

local title = Instance.new("TextLabel")
title.Position = UDim2.fromOffset(20, 16)
title.Size = UDim2.new(1, -40, 0, 32)
title.BackgroundTransparency = 1
title.Text = "Hello from Kinemium"
title.TextSize = 22
title.TextColor3 = Color3.new(1, 1, 1)
title.Parent = panel

local input = Instance.new("TextBox")
input.Position = UDim2.fromOffset(20, 240)
input.Size = UDim2.new(1, -40, 0, 40)
input.PlaceholderText = "Type something..."
input.TextSize = 16
input.Parent = panel

local inputCorner = Instance.new("UICorner")
inputCorner.CornerRadius = UDim.new(0, 8)
inputCorner.Parent = input
Procedural geometry inside Kinemiumlocal Workspace = game:GetService("Workspace")

local model = Instance.new("Model")
model.Name = "ProceduralExample"
model.Parent = Workspace

local colors = {
Color3.fromRGB(255, 80, 80),
Color3.fromRGB(80, 255, 140),
Color3.fromRGB(80, 140, 255),
}

for i = 1, 3 do
local part = Instance.new("Part")
part.Name = `Part{i}`
part.Size = Vector3.new(3, 3, 3)
part.Anchored = true
part.Material = Enum.Material.SmoothPlastic
part.Color = colors[i]
part.CFrame = CFrame.new((i - 2) * 4, 3, 0)
part.Parent = model
end

local camera = Workspace.CurrentCamera

camera.CFrame = CFrame.lookAt(
Vector3.new(10, 8, 14),
Vector3.new(0, 3, 0)
)