kero

Crates.iokero
lib.rskero
version0.1.12
created_at2026-01-14 19:31:32.745256+00
updated_at2026-01-22 23:07:55.458877+00
descriptionA simple, approachable framework for creating 2D games in Rust and/or Lua.
homepagehttps://make-kero.games
repositoryhttps://github.com/feyworks/feyworks
max_upload_size
id2043535
size1,197,619
Chevy Ray Johnston (ChevyRay)

documentation

README

Kero

An approachable cross-platform framework for creating 2D games in either Rust, Lua, or both.

โš ๏ธ KERO IS CURRENTLY IN UNSTABLE ALPHA TESTING PHASE AND NOT FOR GENERAL USE

โœ… Features

Kero is a pure-code framework that programmers can use to code their games or even to build their own game engines. It provides:

  • ๐Ÿ–ฅ๏ธ a window, game loop, and rendering context out of the box and ready to go
  • ๐ŸŽฎ mouse, keyboard, and gamepad input as well as virtual input mapping
  • ๐Ÿ–ผ๏ธ shaders, surfaces, textures, and other graphics resources
  • ๐Ÿ–Œ๏ธ a straightforward but powerful canvas-style drawing API
  • ๐Ÿงฎ various math types for vectors, matrices, rotations, etc.
  • ๐Ÿ“ geometry types for various shapes, overlap testing, extraction, raycasting, etc.
  • ๐ŸŽจ tools for working with colors, image encoding, decoding, and manipulation
  • ๐Ÿงณ texture packing and other techniques for rendering optimization
  • ๐Ÿฆ€ full access to Rust's speed, power, ecosystem, and pleasure of use
  • ๐ŸŒ™ full Lua bindings if desired, with LuaLS type annotations

๐Ÿ’ก Getting started

There's no fancy setup required, Kero is just a normal crate. To create a new empty game project, first create it and add kero as a dependency:

cargo new --bin my_game
cd my_game
cargo add kero

Then, replace src/main.rs with the following:

use kero::prelude::*;

fn main() -> Result<(), GameError> {
    // create a game, set some options, and then run it
    kero::new_game()
        .with_default_logger()
        .with_title("My Game")
        .with_size(1280, 720)
        .run::<MyGame>(())
}

// store your game state and graphics resources here
pub struct MyGame {}

impl Game for MyGame {
    type Config = ();

    // initialize your game state here, such as creating graphics resources, etc.
    fn new(ctx: &Context, cfg: Self::Config) -> Result<Self, GameError>
    where
        Self: Sized,
    {
        Ok(Self {})
    }

    // perform your game logic here
    fn update(&mut self, ctx: &Context) -> Result<(), GameError> {
        Ok(())
    }

    // perform your drawing code here
    fn render(&mut self, ctx: &Context, draw: &mut Draw) -> Result<(), GameError> {
        Ok(())
    }
}

The examples folder has a bunch of examples you can check out to see how different things are done.

๐Ÿ”ฌ Alpha Testers

Thank you for helping test Kero! ๐Ÿ’• Please join our Discord where we are currently looking for feedback:

  • from both casual, pro, and brand new Rust users
  • first impressions, if what you expected it to do matched what it does
  • naming conventions, API or organizational feedback
  • features that are missing or you cannot find
  • pics of anything you made! even if itโ€™s basic rendering or movement etc.
  • sharing your code so I can see how youโ€™re using it/Rust

And if you think this is the kind of project you'd like to help out on, we're definitely interested in having more contributors. It would be great if this could be polished up, stabilized, and turned into a reliable game development tool for the Rust ecosystem.

Commit count: 97

cargo fmt