This describes the files and directories that blr create emits by default, plus optional files that blr understands later.
blr create currently defaults to a combined behavior-pack and resource-pack project. Pack folders are omitted when the corresponding feature is not selected.
my-project/
behavior_packs/
my-project/
manifest.json
resource_packs/
my-project/
manifest.json
.env.local # optional, user-created, ignored
src/ # only when scripting is enabled
main.ts | main.js
zones.json # optional, user-created zone definitions
.gitignore
AGENTS.md
AGENTS.project.md
blr.config.json
package.json
README.md
tsconfig.json # TypeScript scripting projects only
Holds:
- package identity
- dependency versions
- generated package scripts
- package manager hint
Generated scripts:
devbuildpackageminecraftsystemworldcleanupgrade
Feature note:
- the generated dependency set depends on project features
scriptingadds Bedrock script dependenciesbebeadds@blurengine/bebefor the default scripting scaffold, unless that option is disabled explicitly- data-only pack projects keep
package.jsonleaner
Holds project-level blr state.
Default generated content:
$schemaschemaVersionprojectVersionnamespaceminecraft.channelminecraft.targetVersion
Default version note:
- generated projects default
minecraft.channeltostable minecraft.targetVersionis resolved from the latest stable Bedrock dedicated-server version available duringblr create- if that lookup fails,
blr createfalls back to its built-in default targetVersion instead of aborting scaffold generation
Optional later additions may include:
package.defaultTargetwhen the project wants bareblr packageto resolve to a specific targetworldbackend configuration when the project wants remote world storagebebe.diagnostics.missingReferenceswhen the project wants to choose whether missing soft references are warnings, errors, or ignored per pipelinebebe.zoneEditorwhen the project wants to disable the in-game Bebe zone editor duringblr devor intentionally include it duringblr package
Managed bootstrap file written by blr.
Purpose:
- acts as the root agent entrypoint for generated projects
- contains the managed BlurEngine instructions compiled into one file
- tells agents to read
AGENTS.project.mdafter this file when it exists
blr upgrade refreshes this file.
Committed project-specific agent instructions.
Purpose:
- holds user-owned project rules
- is read after
AGENTS.md - is not overwritten by
blr upgrade
Minimal script entrypoint.
Notes:
- generated when scripting is enabled
- projects without scripting can add
src/main.tsorsrc/main.jslater andblrwill detect it automatically - scripting is only offered when a behavior pack is present
- when
bebeuses its default scripting scaffold, the generated entrypoint imports and initializes@blurengine/bebe - when
bebeis disabled, the generated entrypoint stays minimal and does not depend on@blurengine/bebe
Build note:
blr buildstages canonical output intodist/stage/- when a runtime entry exists, the bundled runtime still writes to
runtime.outFilefirst and is then synced intodist/stage/behavior_packs/<packName>/scripts/ - when
zones.jsonexists,blrasks the project-installed@blurengine/bebe/tooling/nodecompiler to bake it, then injects aZones.load(...)bootstrap ahead of the authored runtime entry blr dev,blr build --local-deploy, andblr packageall consume the staged outputblrdoes not rewritebehavior_packs/<packName>/scripts/main.jsinside the project by default
Optional authored Bebe zone pack.
Purpose:
- stores committed zone definitions that creators and tooling can edit
- keeps zone source separate from runtime code while still loading through
@blurengine/bebe - acts as the source file that future in-game editing tools can update after an explicit save
Shape:
{
"zones": [
{
"id": "spawn",
"dimension": "minecraft:overworld",
"extent": {
"kind": "polygon",
"points": [
[0, 0],
[40, 0],
[40, 40],
[0, 40]
],
"y": { "min": 60, "max": 90 }
}
}
]
}Behaviour:
- omitted by
blr create; projects add it only when they need authored zones - requires scripting and a project-installed
@blurengine/bebeversion that exposes@blurengine/bebe/tooling/node - supports
block,box, simple verticalpolygon, andinfiniteextents - Bebe validates duplicate zone ids per dimension during build
- writes the normalised and compiled pack to
dist/generated/bebe/zones.json - copies the baked pack to staged script output at
scripts/generated/bebe/zones.json - bundles a generated bootstrap so
Zones.load(...)runs before the authored runtime entry blr devwatches this file automatically whenwatch-scriptsis enabled and reloads the local server after rebaking it- during
blr dev --local-server, Bebe's zone draft save event writes this file through the same project-installed tooling surface and skips the write when the source content is unchanged
Behavior pack manifest generated with:
- header UUID
- data module UUID
- default pack version
- default min engine version
- script module UUID when scripting is enabled
- Bedrock script module dependencies when scripting is enabled
Generated only when the project includes the behavior-pack feature.
Resource pack manifest generated with:
- header UUID
- resource module UUID
- default pack version
- default min engine version
Generated only when the project includes the resource-pack feature.
Project-owned raw Bedrock world source.
Usage:
- used as the project-owned source world for BDS bootstrap/reset
- generated projects ignore raw world directories by default while allowing the project pin at
worlds/worlds.jsonto be committed - this nudges teams toward
blr world pull,blr world capture, andblr world pushinstead of treating raw world state as normal source-controlled content - projects that intentionally keep world sources in git can remove or narrow that ignore rule
- if
watch-worldandrestartOnWorldChangeare enabled, changes here trigger a BDS restart/reset - if
watch-worldis enabled,blr devcaptures the runtime BDS world back into this folder on shutdown blr world capturecan seed or refresh this folder from the current runtime BDS worldblr world use <worldName>can switch the active configured world and create the matching local folder when neededblr package mctemplateandblr package mcworlduse this as the source world payloadblr world pullcan materialize this folder from a remote S3-compatible backendblr world pushcan publish this folder back to the configured remote backendblr createdoes not generate this folder by default because an empty folder looks like a valid world when it is not- world-aware commands require a real Bedrock world with a
db/directory
Optional project state file.
If present, blr applies it to BDS allowlist state.
If watch-allowlist is enabled, runtime BDS allowlist changes are copied back into this file during blr dev.
Optional project state file.
If present, blr applies it to BDS permissions state.
If watch-allowlist is enabled, runtime BDS permissions changes are copied back into this file during blr dev.
Optional project state file.
If present, blr overlays its authored properties onto the runtime BDS server.properties file before startup.
blr still forces its managed local-server keys after the overlay:
allow-cheatsallow-listlevel-namedefault-player-permission-levelgamemodecontent-log-file-enabledcontent-log-console-output-enabled
Optional project state file for Windows local-server runs.
If present, blr copies it into the resolved runtime BDS server directory and uses it as the local-server executable override.
Notes:
- this overrides the provisioned
bedrock_server.exein the runtime BDS folder - if the runtime BDS server is already provisioned,
blrreuses that server and applies the override without re-downloading the stock archive blr devprints a notice when the override is active
Generated defaults:
- managed
blrignore block with:node_modules/dist/.blr/worlds/**!worlds/!worlds/worlds.json.env.local.DS_Store
.blr/ is where the CLI keeps project-local runtime workspace such as cached/provisioned BDS state by default.
User note:
blrmanages its own ignore block inside this file- user-owned ignore entries can live outside that block
Optional machine-local environment file.
Purpose:
- stores secrets and machine-local overrides that should not live in
blr.config.json - common examples:
- AWS credentials for
blr world pull/blr world push BLR_MACHINE_LOCALSERVER_BDSVERSIONBLR_MACHINE_LOCALDEPLOY_MINECRAFTPRODUCTBLR_WORLD_ACTOR
- AWS credentials for
Behavior:
blrloads the closest.env.localautomatically for project-aware commands- values from the shell or CI environment still win because
.env.localdoes not override existing variables
Project-local quickstart and usage summary.
Generated README content is intentionally concise:
- actual generated directory structure for the selected project features
- the commands most likely to be used in day-to-day workflow
- a small notes section for config,
.env.local, and optional world state
Generated only for TypeScript scripting projects.
This is not created by create as committed source, but it is the default runtime workspace used by blr.
Typical contents may include:
- BDS zip cache
- provisioned BDS server files
- cached remote world archives and extracted world sources under
.blr/cache/worlds/ - CLI-owned transient state under
.blr/state/, such as prompt-silence state in.blr/state/cli.json - other CLI-owned runtime state
This belongs to the CLI runtime, not to blr.config.json.
During local-server runs, blr may also manage runtime world hook files such as:
world_behavior_packs.jsonworld_resource_packs.json
Those files are only written when the corresponding pack automation is enabled for the current project and current run.
Canonical staged build output.
Typical contents:
behavior_packs/<packName>/bds_behavior_packs/<packName>/resource_packs/<packName>/
The behavior_packs variant is used for offline/local Minecraft deployment. The bds_behavior_packs variant is used for local-server and standalone behavior-pack packaging. Resource packs remain shared.
When zones.json exists, both behavior-pack script variants include
scripts/generated/bebe/zones.json, and both bundled scripts load that baked pack
through Zones before running authored code.
When a project uses Link from @blurengine/bebe, direct Link calls are stripped from the offline behavior-pack script bundle and kept in the BDS script bundle.
blr injects and owns the BDS Link transport in the BDS bundle, so generated projects should use Link without manually installing the transport.
Dynamic Link usage such as assigning or destructuring Link.event or Link.snapshot fails the offline build with a clear error because blr cannot safely erase it.
During blr dev --local-server, the local Link server also exposes the built-in dashboard at its root URL when dev.localServer.link.dashboard.enabled is true.
Link.event(...), Link.snapshot(...), and Link.on(...) own their availability checks, so authored code should call them directly; response flows should be handled as separate inbound events with Link.on(...).
Link.snapshot(...) marks an event as latest-retained state, so the local Link server keeps the newest value separately from the default stream log.
The Link bridge assigns fixed-length base64 UUIDv7 event ids for replay and dedupe and exposes them through event.meta.
When bebe.zoneEditor.dev is true, blr dev injects the internal Bebe zone editor runtime into script bundles when the project-installed Bebe package supports it. This is enabled by default for development. The editor command uses the project namespace, for example /<namespace>:zone. bebe.zoneEditor.package defaults to false, so packaged output excludes the editor unless the project explicitly opts in.
Generated projects own authored Link event names, payloads, and gameplay behavior. For example, a project may choose to emit a project-specific ready event or publish a player list.
Bebe owns the public Link API imported from @blurengine/bebe, including the Link.event(...), Link.snapshot(...), and Link.on(...) contract, the LinkEvent shape, safe unavailable behavior, retained inbound registrations, transport status, capabilities, transport-generated metadata, and BDS-owned smoke behavior such as bebe.link.ready.
blr owns the local Link server, dashboard host, HTTP API, default dashboard send event (project.message), Bebe's zone draft save bridge to zones.json, BDS transport injection, zone editor runtime injection policy, offline Link stripping, and selection of the correct staged behavior-pack variant for local-deploy, local-server, and packaging.
Generated project code should not import Bebe internal transport paths such as @blurengine/bebe/internal/link/bds. Those paths exist for blr bootstrap/runtime wiring, not gameplay code.
Generated project code also should not import @blurengine/bebe/tooling/*. Tooling subpaths are Node-only build surfaces that blr resolves from the project installation when it needs to bake Bebe assets.
Packaged distributable artifacts.
Current package targets:
<packName>.mctemplatefromblr package<packName>.mcworldfromblr package mcworld<packName>.mcaddonfromblr package mcaddon<behaviorPackName>-behavior.mcpackfromblr package behavior-packusing the BDS behavior-pack variant<resourcePackName>-resource.mcpackfromblr package resource-pack<worldName>-world.<format>fromblr package worldassets.zipfromblr package assets