What is e# (esharp)?
e# is a Rust-inspired programming language built on top of API Board. It lets you combine your installed Steam games, Roblox, Minecraft, and Epic Games titles into a single playable experience — two scenes + the + operator = one composed game.
The 30-second pitch
Modern games are not built from scratch — they are compositions of pre-existing systems (physics, rendering, audio, networking, AI). e# treats composition as the language's primary feature. Every game! block is a list of Scene values drawn from any source, including API Board responses and your locally-installed games.
A first program
Every e# program has a main() function that returns a Game. The game! macro builds the Game struct from a list of scenes.
use api_board::{Movie, Weather};
game! MovieNight {
title: "Movie night in Berlin",
scenes: [
Scene::from(Movie::search("inception")),
Scene::from(Weather::current("Berlin")),
],
}
fn main() -> Game {
let mut game = MovieNight::new();
game.play()
}
Combining Steam games together
The Steam::library() adapter wraps your installed Steam library as a stream of renderable scenes. Pick a game with .pick(title) and compose multiple games into one playable experience — overlays, side-by-side, or stitched maps.
use api_board::Steam;
game! SteamMashup {
title: "Open-world crossover",
scenes: [
Scene::from(Steam::library().pick("Portal 2")),
Scene::from(Steam::library().pick("Stardew Valley")),
Scene::from(Steam::library().pick("Hollow Knight"))
.overlay(position: TopRight, alpha: 0.6),
],
on_exit: |state| {
state.save();
}
}
fn main() -> Game {
let mut game = SteamMashup::new();
game.play()
}
How to run an e# program
Once you have installed the e# toolchain (run install-esharp.bat as administrator), open a command prompt and:
# Build the .esharp file into a .game bundle
esharp build hello.esharp
# Run the bundle
esharp run hello.game
# Or build + run in one step
esharp run hello.esharp
The runtime packs scenes into a single .game bundle that runs on Windows, macOS, Linux, and the browser via WebAssembly. Ship the same binary everywhere.
Detecting your installed games
Run game-launcher-detector.bat on Windows. It detects Steam games, Roblox, Minecraft, and Epic Games titles, prints a list to the terminal, and writes a games.json file you can pass to Steam::library().
Language features
- Ownership & borrowing — inherits Rust's model. Data races are impossible at compile time.
- Zero-cost abstractions —
game!expands to plain structs. No virtual calls on the hot path. - Scene composition —
+operator stacks scenes; overlays, side-by-side, and stitched maps supported. - Cross-platform — single
.gamebundle runs on Windows, macOS, Linux, and the browser. - Visual Studio support — IntelliSense, syntax highlighting, the e# Game project template, built-in playground.
- API Board bindings — Movie, Weather, Tracking, Steam, Roblox, Minecraft, Epic all return renderable scenes.