Every platform invents words. These are ours, and what each one actually means — so you can read the rest of this site, and the app, without guessing.
The pieces, and which machine each one runs on.
A platform for building web apps visually and running them on hardware you own. It comes in two halves: Mother, the builder that runs on your machine, and the Host, the runtime that serves your site.
The desktop app you build in — pages, collections, workflows, media, publishing, and the list of your machines. There is no browser builder; the authoring tool lives on your computer.
The runtime that serves your site: one Docker unit carrying a Next.js server, Postgres, a background worker and object storage. It keeps serving whether or not anything of ours is reachable.
The two halves, kept apart on purpose. The control plane holds accounts, projects and metadata. The data plane is your Host, and it holds the actual content — which is why we cannot read it.
The encrypted connection between Mother and a Host. The Host dials out, so nothing has to be exposed to the internet for the builder to reach a machine behind a router.
Attaching a Host to your account. You mint a short code, redeem it on the machine, and the machine's secret is created there — it is never stored on our side.
A computer running a Host: your laptop, a rented VPS, a box in a rack. One machine can carry several projects.
The brood command-line tool. It installs a Host on any server with Docker, pairs it, and operates it afterwards.
Model Context Protocol — the interface an AI agent uses to work on a Brood project. You bring your own agent and your own key; Brood does not resell inference and has no built-in AI builder.
What a page is made of, and how styling is organised.
One address on your site and the tree of blocks that renders there. A page can also be a template that renders once per record in a collection.
The unit a page is built from — a section, a heading, an image, a form field, a collection list. There are 49 types.
A named bundle of styles you attach to blocks. Edit the class and every block wearing it changes. Styling in Brood goes through classes rather than into one-off per-block values.
A base class plus a modifier, worn together. A button that is also ghost gets its own rule without anyone duplicating the button.
A viewport width you lay out for. The cascade runs one way — what you change on a narrow screen never leaks back into the wide one.
Hover, focus, active, visited and four more. A state is styled like any other set of properties, on the class rather than on the block.
A subtree of blocks you saved to reuse — a header, a card, a pricing row. Change the definition and every placement follows.
One placement of a component on a page. It stores only what it overrides, so the shared part stays shared.
A named alternative inside a component — a different look, or different content — chosen per instance.
A deliberate hole in a component that each instance fills with its own blocks.
A React component you wrote yourself, bundled and pushed into the project. It mounts in the browser as an island, and it exports into ordinary .tsx like everything else.
A trigger — click, hover, scroll — wired to something that happens on the page.
How content is modelled, stored and read back.
A content type: posts, products, machines, whatever you are modelling. Underneath it is a real Postgres table with typed columns, not rows in a blob.
How that is possible. Creating or changing a collection issues real schema statements against the database, so indexes, constraints and foreign keys are Postgres's own rather than an imitation of them.
One typed column on a collection. 29 types, from plain text through images and relations to values the server computes for you.
One row of a collection. Records can be soft-deleted and restored, and each carries a published flag of its own.
A link from one collection to another, one-to-many or many-to-many. The junction table is created and maintained for you.
A value the Host keeps up to date: a formula over the record itself, a lookup through a relation, or a rollup over the records that point back at it.
A placeholder like {{title}} written into a text, a link or an image source. It resolves to the current record's value wherever the block renders.
The block that repeats one piece of design once per record. You design a single item; the list renders all of them, sorted, filtered and paged.
Someone with an account on the site you built — a member, a customer, a client. Not the same as a person on your team: site users get roles, groups and per-collection read policies.
Getting a change live, undoing it, and taking the whole thing with you.
Two states every project is in at once. Edits land in draft; visitors see published. Nothing reaches the public by accident.
Promoting the whole draft to live in one move. The previous state is snapshotted first, so the step is reversible.
A restorable copy of the project's state. Publishing takes one automatically; you can also take one by hand before something risky.
A second copy of the site on the same Host, for looking at a change before the public does. The interface always says which one you are publishing to.
Compiling the project into a standalone Next.js and Drizzle repository — pages, styles, schema, migrations and data — with no Brood packages in it and nothing to phone home to. Free on every plan, with no notice period and no export fee.
Running the Host yourself. There is no managed option and there is not going to be one: if we ran it, we would be holding your data, which is the thing this platform exists to avoid.