[bldr]docs
Concepts

Members

The buildable things in a workspace, where their content comes from, and how they refer to each other.

A member is one buildable thing. It has a name, a source, and usually a .bldr.ts saying what it produces.

Four kinds of source

Whatever the kind, what a build sees is content addressed by hash.

KindDeclared asContent is
Local pathname: members/thingwhatever that directory holds at build time
Container imagekind: container-registrythe image's root filesystem
Git repositorykind: gitthe tree at a commit
Object storagekind: s3the object

A local path is the common case and the simplest: no pin, no tracking, just the directory. The others pin an exact version and optionally record where a newer one would come from.

Names are the dependency edges

A member's .bldr.ts refers to other members by name, and those imports are the build graph:

import nodeImage from "node";                    // a tracked base image
import { pkg as designSystem } from "bldr/ui";   // another member's output

Nothing declares the edges separately, so they cannot drift from the code. If your member imports node, then node is a dependency of your member, because that is what the import means.

Two things are already in scope in a .bldr.ts and are not imported:

scopewhere this member registers its targets
memberthis member itself, notably member.rootDirectory

Naming

Members owned by the workspace are conventionally named with a prefix, such as bldr/cli and bldr/ui, while tracked upstream content keeps its own name: node, rust, debian. It reads well and it makes clear which things you control.

Rename before a member has been built much. Cache volume names derive from the member name, so a rename starts those caches cold.

On this page