Indie and Community Focused
We understand the challenges that indie devs face (the creators of
the engine are indie game devs themselves). We want you to succeed
and ship your game. Our Discord Channel
is very active and there is always someone around to help.
Editor Agnostic
We don't vendor-lock you into an IDE (and by extension we
don't collect usage data about you). You can use whatever editor you
like. All commands to build are accessible via a simple
Command Line Interface.
Lean, Fast, Hotloaded
Optimized for size and speed. This is not the same Ruby you'd use for building web apps with Rails (far from it).
DragonRuby is powered by highly optimized C code written by Ryan C. Gordon. He is one of the core maintainers of libSDL and has worked on many critically acclaimed games (Psychonauts, Braid, Quake, and Unreal Tournament to name a few).
It's been battled tested by indie game creator Amir Rajan who's already released games with it to the Nintendo Switch.
It powers real world games that have amassed millions of downloads (The New Yorker).
Oh, and it's tiny. Like really tiny. The entire toolkit is ~3.5 megabytes.
Cross Platform
Turn key builds for Windows, MacOS, and Linux with seamless publishing to Itch.io.
DragonRuby targets every platform: PC, Mac, Linux, Web Assembly, iOS, Android, Nintendo Switch, XBOX One, and PS4 (console compilation requires a business entity, NDA verification, contact Amir at [email protected] for more info).
Intuitive, Data-Oriented APIs
Dirt simple APIs capable of creating complex 2D games.
Game Toolkit keeps you moving fast with hot-loaded code.
You'll see changes in real time and receive instant feedback without
having to rebuild. The in-game Console let's you make quick state changes
and execute code on the fly. Hello world is just one file and one method.
# Define a tick method in main.rb which will be executed at 60hz.
def tick args
# Render a label at the top left showing the current tick count.
args.outputs.labels << { x: 10, y: 10.from_top, text: "#{args.state.tick_count}." }
# Render a sprite at the bottom left
args.outputs.sprites << { x: 10, y: 10, w: 100, h: 100, path: 'player.png' }
# If the mouse is clicked, play a sound.
args.outputs.sounds << 'fx.wav' if args.inputs.mouse.click
end