# RPG Forge > Browser-based RPG engine. Games are authored either by prompting an AI or by writing > rules against a sandboxed expression API. These docs cover both paths. ## Docs ### Expressions - [Expressions](https://rpgforge.ai/docs/expressions.md): The $ object — how a rule reads the world before it decides anything. - [Reading values](https://rpgforge.ai/docs/reading-values.md): Paths and readers that give you a number or a name — $.subject, $.stat(), $.field(). - [Asking questions](https://rpgforge.ai/docs/questions.md): The true/false half of the API — $.hasItem, $.alive, $.hasPlugin and friends. - [Missing values](https://rpgforge.ai/docs/missing-values.md): Why a rule silently never fires — null loses every comparison, including <. - [Minutes are not time](https://rpgforge.ai/docs/minutes-are-not-time.md): Why pricing a rule off $.event.minutes can make a wordy turn seven times costlier. ### Writing rules - [Steps](https://rpgforge.ai/docs/steps.md): Reads are expressions; writes are steps. The verbs that change the world. - [Rule bodies](https://rpgforge.ai/docs/rule-bodies.md): A rule body is not free JavaScript — every line is a step call or an if. - [Hooks](https://rpgforge.ai/docs/hooks.md): The fifteen moments a rule can attach to, and what each one carries. - [Conditions](https://rpgforge.ai/docs/conditions.md): The gate shared by items, abilities, hooks, world events and quests. - [Quests](https://rpgforge.ai/docs/quests.md): Multi-stage objectives, mixing hard gates with model judgment. ### Plugins - [Plugins](https://rpgforge.ai/docs/plugins.md): Bundle fields, hooks and dials into a system you can switch off, share and reuse. - [Fields](https://rpgforge.ai/docs/fields.md): Declaring values on entities — ranges, tiers, and the prose the narrator reads. - [Cooperation](https://rpgforge.ai/docs/plugin-cooperation.md): How plugins meet without depending on each other — flat fields, events, and asking first. - [Formulas and dials](https://rpgforge.ai/docs/formulas.md): The engine's own numbers are editable expressions — and why never to freeze one. - [Seams](https://rpgforge.ai/docs/seams.md): The one thing a plugin can replace rather than add to. ### Reference - [Common mistakes](https://rpgforge.ai/docs/common-mistakes.md): The failures that produce no error at all — collected in one place. ## Notes for agents - Append `.md` to any docs URL for the raw markdown, or `.json` for rendered HTML plus nav. - Read `expressions.md` and `rule-bodies.md` before writing any expression or rule body. - A rule body is not free JavaScript: every line is a step call or an `if`. No variables. - A missing field reads `null`, not `0`, and `null` fails every comparison — `missing-values.md`. - Stats are read by ROLE, not name: `$.stat('role_might')`, never `$.stat('might')`.