Your first blueprint
A blueprint is a scene authored as JSON. You push it, the scene appears in your workspace. You edit the JSON, push again, and the change shows up — same scene, updated in place. This page walks the loop.
Prerequisites: the daslab CLI, signed in to your workspace.
1. Write a tiny blueprint
Save this as ./my-first.blueprint.json, and replace the email with your account's:
{
"version": 1,
"id": "scn_my_first",
"slug": "my-first",
"name": "My First Blueprint",
"icon": "sparkles",
"tint": "#4C8BF5",
"settings": { "description": "Authored from a JSON file." },
"assets": [
{
"id": "intro",
"type": "daslab/note",
"name": "Hello",
"fields": { "content": "# Hello\n\nThis scene was authored as a blueprint." },
"layout": { "sortOrder": 0, "size": "large" }
}
],
"members": [
{ "email": "you@example.com", "role": "owner" }
]
}
2. Push it
daslab blueprint push ./my-first.blueprint.json
The server applies the blueprint and adds you as owner of the scene. Open the app, refresh — My First Blueprint is in your workspace, with a note that says Hello. Add --dry-run to print the request without sending anything.
3. Edit and push again
Change the note's content, rename it, add a second note — anything in the JSON — then push again. Apply is idempotent: ids resolve deterministically, so the same rows update in place instead of duplicating. The JSON is the source of truth; the scene follows.
4. Credentials, without OAuth
A blueprint can carry connected accounts as sealed references in a secrets block, or you can supply a credential inline at push time:
daslab blueprint push scene.blueprint.json \
--secret "brave/account:b1:api_key=sk-…"
The credential rides the request over TLS and never touches git. Blueprints covers the full model — including export, the edit-in-place loop, and three-way merge against a live scene.
What to do next
- Concepts: Blueprints — the bigger picture, the mental model.
- Concepts: Provider Scenes — providers authored as blueprints.
- Browse blueprints — real ones we ship.
- Full reference — every field, every semantic.
Updated 2026-07-18