Skip to content

Repository files navigation

Windows Linux macOS iOS WebAssembly Android

Tests

o2

o2 - it's an open-source technology for easy making 2D games and applications for mobile and PC platforms using C++ and JavaScript with visual editor. The main features are performance, usability and effective development. More about motivation and architecture (rus)

Start a new project from o2-Template — a minimal game project with the engine as a submodule; CMake builds the game, the editor and the tests:

git clone --recursive https://github.com/o2-engine/o2-Template.git MyGame
cd MyGame
cmake --preset mac                 # windows / linux; *-release for release builds
cmake --build --preset mac -j 8
Bin/Mac/Editor                     # the editor with the project opened
Bin/Mac/Game                       # the game

Binaries go to Bin/<Platform>/. GenerateProject.command / GenerateProject.bat generate an Xcode / Visual Studio / CLion project from the same presets. iOS, Android, WebAssembly and web editor builds, the project layout and how to rename the game are in the o2-Template README.

Now work in progress.

Discord channel

Telegram channel

Features

  • Platforms — Windows, macOS, Linux, iOS, Android, WebAssembly.
  • Assets — automatic building and converting, atlas packing and texture compression, references by uid, assets embedded into scenes and prototypes. Images, fonts, sounds, video, Spine, 3D and skinned models, shaders, materials, scripts.
  • Scenes — component-based actor hierarchy, nested prototypes (prefabs) with overrides, layers and explicit draw order, tags, cameras, incremental loading.
  • UI — part of the scene: anchored layout, widget layers, animated states, layout containers and a wide set of widgets (buttons, labels, edit boxes, lists, trees, drop-downs, scroll areas, windows, context menus). The whole editor is built on it.
  • Render — OpenGL, WebGL and Metal backends with batching, render targets, stencil masks, shaders and materials. Sprites (9-slice, tiled, fill), bitmap and vector fonts with effects, 2D and 3D meshes, forward and deferred pipelines with lights, hardware-decoded video, multithreaded rendering on Metal.
  • Animations — animate any field through reflection, curves, layers and weights, animation state graph, skinned meshes with bones, Spine, animations built from code; sounds, video and particles as animation sub-tracks.
  • Effects — particle emitters with shapes and effects, sprite or frame-by-frame particles, 3D billboard mode, scrubbing in the editor.
  • Physics — 2D on Box2D and 3D on Box3D: rigid bodies, box, circle and spline colliders (box, sphere and capsule in 3D), joints.
  • Sound — built on miniaudio: wav, ogg, mp3, flac, spatial sound with listeners, sounds as animation tracks.
  • Input — keyboard, mouse and multi-touch on every platform; clicks and hover aware of draw order and clipping; shortcuts.
  • Network — HTTP client over native backends, TCP/UDP sockets and message channels, callback and coroutine APIs, available in scripts.
  • Scripting — JavaScript and TypeScript on QuickJS, JerryScript or the browser's JS engine; C++ types are bound automatically through reflection.
  • Core — reflection and serialization generated by CodeTool, smart pointers with leak analysis, properties, multicast delegates, jobs and coroutines, built-in profiler and Tracy support.
  • Editor — "all-in-one" editor with dockable windows: scene (2D and 3D view), hierarchy, properties, assets, animation and state graph editors, game window with resolution emulation, log, memory analyzer. Transform, mesh, skeleton and spline tools, undo/redo, play mode with pause, frame step and speed control. Runs natively and in the browser.
  • AI — node-based content pipelines in the editor: image generation and editing, background removal, sound effects, speech, music and video (Gemini, ElevenLabs, Veo, Kling). The web editor has a built-in Claude Code agent, and a local Claude Code can drive the editor through an MCP server.
  • Tests — GoogleTest suites for the engine, rendering and editor, headless and rendered; an app test driver with input injection and screenshots.

Releases

Packages

Used by

Contributors

Languages