→ Use your own AI. → Ship without surprise costs.
Worlds that keep living when nobody is watching: ecology, weather, whole ecosystems keep simulating without a single player. Down here the engine is booting for real - seven processes, four tiers, dozens of live modules.
Everything is connected./Everything is Entity./Everything is simulated.
Classic engines load a level, play it and throw it away. ASE manages a persistent planet: the world model is designed for billions of entities and streamed chunk by chunk.








The founding axiom is architecture, not a slogan: everything is connected, everything is Entity, everything is simulated. For a CPU to run that, one hard discipline holds - systems never call each other. They communicate exclusively through Components.
Every component carries a status in its VERSION registry - and it isn't claimed, it's auto-derived from the component's commit count. This is exactly where ASE stands today, not a promise. Architecture and vision stand; the implementation is under way - publicly traceable, commit by commit.
seed → poc → init → core → feat → refine is computed automatically from each component's commit count; alpha · beta · stable are set by hand. Click any status to see exactly which components sit there - straight from the VERSION registries.
Every module lives in one graph. Click a tile below - the live graph re-wires to that module’s real downstream chain, pulled straight from the engine’s causality docs. When atmosphere.temperature drops below genetics.cold_tolerance, an animal freezes - two modules, zero direct coupling, one comparison rule in the hub.
No script wrote this. The chain below is what one module's output does to every module downstream - because they share one graph.
Inspired by Star Citizen’s replication layer - rethought independently for one-person teams: game state lives at the Replica, World instances are interchangeable compute, and the browser talks exclusively to the Replica. Never to the Engine, never to a World.
Because the browser is attached to the Replica and not the World, ASE can move, split and merge the compute behind a region - a topic-subscription handoff - while the player keeps walking. The seamlessness isn’t a trick; it falls out of the topology.
ase-codegen parses the C++ backend and generates the becsy client - components, systems and constants - at 1:1 parity. The same deterministic logic then runs on the server and in your browser, which is exactly what lets the wire ship a seed instead of a picture.
class AtmoSimPrsChgSystem
: public ecs::System {
void tick(Registry& r, float dt) {
auto v = r.view<AtmoStPrsChgComponent,
AtmoStPrsBaseComponent>();
for (auto [e, chg, base] : v.each()) {
chg.timer_s += dt;
if (chg.timer_s >= 60.0f)
chg.delta = std::min(base.p, MAX_P);
}
}
};
@system(s => s.after(AtmoSimPrsAltSystem)
.inAnyOrderWithWritersOf(AtmoStPrsChgComponent))
export class AtmoSimPrsChgSystem extends System {
private readonly query = this.query(q => q.current
.with(AtmoStPrsChgComponent).write
.with(AtmoStPrsBaseComponent).read);
execute(): void {
const dt = this.delta;
for (const e of this.query.current) {
const chg = e.write(AtmoStPrsChgComponent);
const base = e.read(AtmoStPrsBaseComponent);
chg.timer_s += dt;
if (chg.timer_s >= 60.0)
chg.delta = Math.min(base.p, MAX_P);
}
}
}
registry.view<A,B>()→this.query(q => q.with(A).with(B))view.each()→query.currentstd::min / std::sin→Math.min / Math.sinfloat x = 0.0f→let x: number = 0.0float field→@field.float32constexpr PI→const PI · imported (SSOT)Two hand-written engines drift apart the first time someone fixes a bug on one side only. So ASE never writes two: the logic is authored once in C++ and the TypeScript twin is transpiled from it. One logic on both sides is what lets the browser recompute the world from a seed instead of streaming the picture, predict through a latency spike without stuttering, and stay locked to the server. It still drifts - floating-point and prediction always do - but the authoritative server pulls it back with tiny deltas, the way NTP disciplines a quartz clock against an atomic reference. Same logic is what keeps the drift small and the correction tiny.
Components and deterministic systems that exist on server and client with identical fields. State that has to render - position, pressure, health. The transpiled systems live here.
Buffers, requests, broadcast, persistence and Hub access. They stay in C++ and never cross the wire, so the client carries none of the server’s weight.
NetworkInput, RenderSync and EntityExport systems the codegen writes for you - the plumbing that applies network data to the ECS and syncs it into React.
float to @field.float32, uint32_t to @field.uint32. Change a field in C++ and the client type reshapes on regenerate.ASE’s Reasoning-Edge daemon drives the CLI you already pay for - so the heavy iteration cost of building an LLM-driven MMORPG stays a fixed monthly subscription during development, not a metered API bill.
In ASE a skill isn’t a markdown file or a registered microservice. It’s an ECS entity born at runtime from a declarative manifest and picked up by a query - the same Everything-Can-Nothing-Must principle, extended to reasoning.
id: lore-consistency-checker subscriptions: [ DialogueIntent, LoreState ] reads: [ CharacterMemory, WorldFacts ] writes: [ AnomalyIntent ] # nothing outside this is allowed work_type: reasoning_heavy # a need, not a model name cost_layer: game communication_pattern: standard memory: [ episodic, semantic, procedural ] quota: { usd, rate, concurrency, … } # 10 axes, checked before spend
The Reasoning Tier gates every LLM call behind ten orthogonal quota axes. A prompt-injected or runaway skill can’t rack up a bill, because the spend never begins. Indie-friendly caps are a property of the architecture, not a promise.
Anti-cheat is a built-in reasoning use-case with a three-tier authority hierarchy that escalates in irreversibility - and stops short of ever letting an LLM ban a player on its own.
Every MMO dies of the same wounds: bot farming, speed hacks, coordinated griefing, runaway inflation - and at the end stand wipes and player exodus. Three decades of MMO history teach the same lesson, and enforcement bolted on after launch arrives too late: the economy is already poisoned. ASE pulls that lesson into the architecture from hour one: detection, quarantine and human-signed sanctions are engine primitives, not a post-launch patch.
These aren’t features of ASE - they’re worlds built WITH it. Aetheria is the proof taking shape. Mythic on the surface, mechanical underneath.
The engine isn’t a monolith - it’s a star of independent L3 modules that write outputs and read each other through a Communication Hub, with zero direct coupling. Every L3 module in the tree below - each its own marker, with its real maturity.
ASE is built in strict layers, L0 to L5 - and the line between engine and game runs right through them. Engine developers own L0–L3; you build your game in L4 and L5, and see nothing but the ase-sdk header.
ASE is sharply targeted, and it’s worth being honest about who should build on it today - and who shouldn’t. Complementary by design, not competitive.





We onboard solo developers and small studios in waves - leave your address and we'll send one signal when your wave opens. No spam, no card, no commitment.