Write your game passes, products, and experience config as code. Make changes with confidence from a single source of truth. A spiritual successor to Mantle.
import { defineConfig } from "@bedrock-rbx/core/config";
export default defineConfig({
environments: {
production: {
places: { start: { placeId: "1234567890" } },
universe: { universeId: "6803861769" },
},
},
passes: {
"vip-pass": {
name: "VIP Pass",
description: "Grants VIP perks.",
icon: { "en-us": "assets/vip.png" },
price: 500,
},
},
state: { backend: "gist", gistId: "abc123def456" },
universe: { voiceChatEnabled: true },
});
Run bedrock deploy against your config and you're done. Need to customise a step? Drop a TypeScript file in .bedrock/ - the CLI calls it instead of the built-in.
# pick your config format $ bedrock init --format yaml $ bedrock diff # preview changes $ bedrock deploy # reconcile # migrating from Mantle? $ bedrock migrate ./mantle.yaml
Import any step from @bedrock-rbx/core and call it directly. Trigger deploys from a web backend, a chat bot, or any service in your stack.
import { deploy } from "@bedrock-rbx/core";
/**
* Triggered from a webhook handler whenever a release tag is pushed.
* Wraps `deploy` with custom orchestration: structured logging on
* failure, success reporting back to the caller.
*
* @param environment - Target environment from the webhook payload.
* @returns Whether the deploy completed successfully.
*/
export async function deployFromWebhook(environment: string): Promise<boolean> {
const result = await deploy({ environment });
if (!result.success) {
console.error("bedrock deploy failed", { environment, err: result.err });
return false;
}
console.log("bedrock deploy succeeded", { environment });
return true;
}
Bedrock only manages what you list. Resources outside the config stay exactly where they are.
Luau, TypeScript, JavaScript, YAML, or JSON. Same typed schema underneath. Invalid configs fail before bedrock reaches the API.
Result, not throws Every public function returns Result<T, E>. Failures show up as values to branch on, not exceptions to catch.
Store state in a GitHub Gist with just a BEDROCK_GITHUB_TOKEN. S3 is on the way.
mantle.yaml Run bedrock migrate ./mantle.yaml. You get a Bedrock config back, with unsupported features flagged. Diff before you deploy.
Three things to get you to a live deploy: the package, an Open Cloud API key, and a config file. The steps below walk through each, end-to-end in about five minutes.
pnpm add @bedrock-rbx/core (or npm / bun / yarn) BEDROCK_API_KEY from an Open Cloud key with write scopes. bedrock init, pick TS, YAML, or JSON. bedrock diff shows what'll change before anything moves. bedrock deploy reconciles. Rerun any time; nothing unchanged is touched. Bedrock sits on @bedrock-rbx/ocale, a typed Open Cloud SDK that stands on its own. Use Bedrock for declarative deploys, or call Ocale directly when you want imperative control. Same types. Same error model.
Result<T, OpenCloudError>. Use it directly when you want imperative control. Install the package, set an API key, run bedrock deploy.