Branch-based servers
RBS provisions a dedicated build server for every active branch in your project. When you start working on a branch, the platform:- Spins up an RBS server for that branch.
- Clones the repository and checks out the branch.
- Deploys all workers automatically — CI workers, schedulers, job workers, and build workers.
- Connects your editor to the server via the RBS extension.
Collaboration
Multiple developers can connect to the same branch server simultaneously. Everyone sees:- The same build state and outputs.
- The same test results and logs.
- Real-time updates when teammates run builds.
Server lifecycle
| Event | What happens |
|---|---|
| Developer starts working on a branch | Server is provisioned, repo cloned, workers deployed. |
| Teammate joins the same branch | Connects to the existing server. |
| All developers disconnect | Server idles (configurable timeout). |
| Branch is merged or deleted | Server is decommissioned. |
| Push to branch (no active editor) | CI workers run automatically. |
Built-in Git server
RBS includes an integrated Git server. You can host your repositories directly on the platform — no GitHub, GitLab, or Bitbucket required.- Push and pull with standard Git commands.
- Branch management from the dashboard or editor.
- Webhooks and triggers for CI/CD workflows.
- Access control with team-based permissions.
Workspace
Every RBS project starts with a workspace — defined by aWORKSPACE.rbs file at the repository root. This file configures project-wide settings, toolchains, and external dependencies.
WORKSPACE.rbs and sets up the entire build environment — downloading toolchains, resolving dependencies, and preparing workers.
Packages
A package is any directory within a workspace that contains aBUILD.rbs file. Each package defines its own set of build targets.
Targets
A target is a single buildable unit declared in aBUILD.rbs file — a binary, library, test, container image, or any custom rule. Every target has a unique name within its package.
Labels
Labels uniquely identify targets across a workspace. RBS supports two syntax styles:Traditional syntax
| Label | Meaning |
|---|---|
//services/api:server | Target server in services/api |
//:hello | Target hello in root package |
//... | All targets in all packages |
:server | Target server in current package |
Natural syntax
RBS also supports a more intuitive syntax:Dependencies
Targets can depend on other targets. RBS automatically builds dependencies in the correct order using a dependency graph (DAG).Local dependencies
Reference targets in the same package with:name:
Cross-package dependencies
Reference targets in other packages with//package:target:
External dependencies
Reference packages managed by RBS from yourWORKSPACE.rbs:
Output directory
RBS places all build outputs in the.rbs/ directory on the server, organized by platform:
Output path variables
InBUILD.rbs files, use the built-in output_path variable to reference output directories:
| Variable | Path |
|---|---|
output_path.bin | .rbs/bin/{platform} |
output_path.out | .rbs/out/{platform} |
output_path.testlogs | .rbs/testlogs/{platform} |
Platform detection
RBS servers run on Linux by default. You can use theplatform variable in your BUILD.rbs files:
Platform constraints
Restrict targets to specific platforms:Hermetic builds
RBS ensures hermetic builds — every dependency, toolchain, and runtime is managed by the platform. This means:- No local dependencies: You don’t need Python, Node.js, or Java installed on your machine.
- Reproducible: The same build always produces the same output, regardless of who runs it.
- Consistent across branches: Every branch server starts from a clean, identical base.
- Portable: Your project works identically in development and production.