Introduction
ChloeKernel is a Roblox game framework with an OS-style kernel and privileged server drivers, shipped as a workspace that people and coding agents build games in.
ChloeKernel is two things in one repository. The first is a Roblox game framework: a genre-agnostic kernel (scheduler,
processes, services, IPC, hooks) plus server-side drivers for networking, persistence, replication, anti-exploit and
commerce, with genre kits built on top. The second is a workspace for building one game on that framework. Game code
lives in the Game folders under src/, the Bootstraps load it between kernel boot and start, AGENTS.md holds the
rules, and python tools/check.py runs every gate CI runs. The kernel itself contains no game rules. Game code
registers services and talks to the rest of the system through kernel primitives.
These docs describe v0.9.1 plus the fixes on main (commit 7afccc1, 2026-09-30) listed as Unreleased in the
changelog. Start with Getting started to boot it,
then Core concepts for the model everything else assumes.
The OS vocabulary maps onto real modules:
| OS concept | ChloeKernel equivalent |
|---|---|
| Kernel | One Kernel per machine. The server and each client boot their own. |
| Processes | Coroutines with PIDs, lifecycle states and exit signals, stepped by the scheduler |
| Scheduler | Five priority queues drained under a per-frame budget, plus a deadline heap for timers |
| System calls | Network intents, admitted only through fail-closed validation chains |
| IPC | Topic pub/sub (the Bus) and typed signals |
| Drivers | NetDriver, DataDriver, ReplicaService, AntiExploit, Commerce: server-side and privileged |
| Userspace | The game’s services, controllers, components and screens in src/*/Game |
What you get
Section titled “What you get”- Work that runs under a frame budget and sleeps when there is nothing to do. The Scheduler drains priority queues under a budget, keeps timers in a deadline heap, and disconnects from the frame when idle. Framework systems start their jobs on the first piece of work and stop on the last, as described in Event-driven execution.
- Server-authoritative networking. Clients send intents, never state. Every game channel is declared once in
Game.Channelsthrough the Registry, and every client-to-server payload passes a rate limit and a fail-closed hook chain. A validator that throws rejects the payload, and a channel with no validator and noOpen = truerejects everything. - Player data that fails closed. DataDriver holds a session lock per profile, hands it between servers when a player rejoins quickly (lock handoff), restores corrupt records from Roblox’s version history, and refuses a save it could not read back. A failed load kicks the player instead of substituting defaults, because defaults overwriting a real record is how data wipes happen.
- Purchases and compliance. Receipts saves a developer product grant before it acknowledges the purchase and keeps a ledger that stops a second grant. Passes tracks game pass ownership, Transactions runs two-profile trades through a durable journal, and Policy, TextFilter and Consequences cover PolicyService rules, text filtering and bans.
- Genre kits for weapons, melee, spells, movement abilities, inventory, loot, crafting, shops, quests, rounds, teams, parties, NPCs and dialogue. Each one validates on the server and is configured through its config table, hooks and Bus topics.
- A client and media stack: input, animation and IK, audio, bone physics, automatic hair rigging, voxel dissolve and VFX timelines, scaled per device by DeviceBench.
- A workspace built for coding agents.
AGENTS.mdis the rulebook,tools/scaffold.pygenerates services, controllers, screens and components in one shape, the directive linter rejects polling loops, raw remotes and deprecated engine APIs, and a pinned Engine API reference answers API questions offline. See the Workspace overview. - Tests on every Play. Pressing Play in Studio runs the framework’s spec gate before the kernel boots: 1,244 specs at v0.9.1 with the Unreleased fixes. CI runs isolated regression runners on top. Features Studio cannot fully exercise (DataStores across servers, teleports, real purchases) carry a status note that says what the specs prove and what still needs a published place.
The security posture, in one paragraph
Section titled “The security posture, in one paragraph”The client is a renderer with opinions. Everything privileged lives in ServerScriptService, which never replicates,
so no client can read it. Nothing the client sends is trusted: intents are rate limited per player and per channel,
decoded against a fixed schema, and validated by fail-closed hook chains against server state, and hits are checked
server-side against rewound positions. Client code is always readable by exploiters, so the defense is never trusting
it. Hiding it would add nothing. The full model is in Architecture and security.
How to read these docs
Section titled “How to read these docs”- Getting started installs the toolchain, syncs the project into Studio and boots both kernels.
- Core concepts is the short model: kernel, services, sessions, hooks, the Bus, scopes and the close phase. Read it before anything else.
- Workspace explains the
Gamelayer: channels, services and controllers, components, screens, scaffolding and the agent workflow. - Foundations covers the design decisions that cut across modules: security, project layout, event-driven execution, StreamingEnabled, performance and benchmarks.
- The Cookbook is task-first (“save player data”, “validate hits”) with complete examples that link into the module pages.
- Kernel, Networking, Data, Commerce, Security and compliance, Gameplay systems, Kits, and Client and media go module by module: internals, API tables, hooks and Bus topics, and sharp edges.
- Tooling covers
tools/check.py, the directive linter, TestKit, the regression runners, debug panels and releases. - The System map shows how the modules connect. Ctrl+K (or /) opens search over every page, section and API member.