Skip to content

Releases: labelle-toolkit/labelle-cli

v1.46.2

11 Jun 00:11
430ba46

Choose a tag to compare

android packaging guard for asset-less projects. NOTE: mobile (android/ios/linux/wasm) controller code is compile/cross-compile-verified only — on-device validation tracked in labelle-engine#261.

v1.44.0 — labelle migrate unified + flat-form audit (v2.0 prep)

26 May 20:36

Choose a tag to compare

v2.0 foundation prep (RFC labelle-engine#594). New audit-and-migrate flow lets any project move from root-wrapped to flat-form mechanically.

Highlights

  • #237 — `labelle audit unification` adds `legacy_root_wrapper` as a 5th legacy pattern. On flying-platform-labelle (already on the root-wrapped unified format): 90 wrappers across 90 files. On bouncing-ball: 1.

  • #238 — `labelle migrate unified [dir]` — auto-fixes 4 legacy patterns:

    • Lift `root:` wrapper to top-level (with indentation dedent)
    • `entities` → `children`
    • `components` on prefab refs → `overrides`
    • Delete legacy top-level `assets` array

    All via comment-preserving positional byte-edits (JSONC-aware). Idempotent — running twice is a no-op the second time. End-to-end smoke: FP audit drops from 94 findings to 0.

How to use

```bash
labelle audit unification . # see what's still on the legacy shape
labelle migrate unified . # auto-fix everything
labelle audit unification . # confirm 0 findings
labelle build # confirm it still builds (needs engine ≥ v1.47.0 + assembler ≥ v0.35.0)
```

Compatibility

Both unified-format shapes accepted in v1.x. Migrator is opt-in. v2.0 (engine#592) will remove the legacy paths.

Pairs with

  • labelle-engine v1.47.0 — loader dual-accepts flat-form
  • labelle-assembler v0.35.0 — pre-build scan dual-accepts + scaffolder emits flat

v1.43.0 — --screenshot flag

26 May 14:48

Choose a tag to compare

What changed

  • #233 — `labelle run --screenshot= [--after=]`. The CLI surfaces the destination path + delay to the running game via `LABELLE_SCREENSHOT_PATH` and `LABELLE_SCREENSHOT_AFTER_SEC` env vars. The engine + assembler take care of the actual frame capture (raylib backend fully wired; sokol stub for now).
  • `--after` accepts `500ms`, `30s`, `2m`, or bare seconds.
  • Shares the `buildEnvironWithExtra` helper introduced by v1.42.0's `--scene` runtime override — both flags can be combined in one invocation.

Pairs with

  • labelle-engine v1.46.0 — `engine.ScreenshotRequest` + `engine.nowNs()`
  • labelle-assembler v0.33.0 — backend template wiring

v1.42.0 — labelle audit unification + --scene runtime override

26 May 14:46
351284b

Choose a tag to compare

Highlights

  • #232 — `labelle audit unification` subcommand. Scans `scenes/` + `prefabs/` for unification-format collisions (effective-name clashes) and §B2 violations (prefab references with both `overrides` and `children`). Exit 0 clean, 1 findings, 2 IO error.
  • #234 — `labelle --scene=` now also surfaces the requested scene via the `LABELLE_SCENE` env var, consumed by `engine.requestedScene()`. Loading-controller scripts can read it after `assets.allReady` succeeds, sidestepping the asset-streaming race that bit large scenes (e.g. flying-platform-labelle's `colony`).
  • Legacy `.initial_prefab` rewrite preserved as a deprecation bridge for projects without a loading-scene gate.

Pairs with

  • labelle-engine v1.46.0 — `engine.runtime_env` + `engine.requestedScene()`
  • labelle-assembler v0.33.0 — generates assets/manifests that feed the audit

labelle-cli v1.41.0 — .initial_prefab from --scene plumbing

25 May 23:46

Choose a tag to compare

labelle-cli v1.41.0 — .initial_prefab from --scene plumbing

labelle <cmd> --scene=<name> now writes .initial_prefab (was .initial_scene) into the in-memory project config, matching the assembler-side rename in labelle-assembler v0.32.0.

Changes

  • src/cli/project_config.zig — adds initial_prefab field; keeps initial_scene as a deprecated alias; new helpers resolvedInitialPrefab() and normalizeInitialPrefab() (migrates legacy alias with a stderr deprecation notice; initial_prefab wins when both are set)
  • src/cli.zig — calls normalizeInitialPrefab() after parsing; --scene override writes initial_prefab

Compatibility

Legacy .initial_scene in project.labelle continues to work via the deprecation alias. No project migration required immediately.

Pairs with:

  • labelle-engine v1.44.0 (unification)
  • labelle-assembler v0.32.0 (rename + unified-format scan)

v1.38.1 — init scaffolds scenes/main.jsonc (fixes #204)

19 May 16:36

Choose a tag to compare

Patch release shipping the init-scaffold fix from PR #205 (fixes #204).

Fix

labelle init was scaffolding scenes/main.zon, but labelle-assembler only scans for .jsonc scenes. Fresh projects therefore built with an empty scene (no addEmbeddedSceneSource call in generated main.zig) and rendered nothing.

cmdInit now writes scenes/main.jsonc with a JSONC body. New inline test in src/cli/init.zig asserts the .jsonc is created and .zon is absent.

Known limitation (not blocking this release)

The Docker WASM Build Test CI job is failing for an unrelated, pre-existing reason — the wasm target's scenes/ symlink doesn't resolve inside the docker container's mount. Tracked as a follow-up issue. The init-scaffold fix itself is correct and covered by the inline zig build test regression test (56/56 pass).

v1.32.1

14 Apr 17:33
601f434

Choose a tag to compare

Patch release on top of v1.32.0

Two follow-ups from the v1.32.0 review (#168#169).

  • DEFAULT_ASSEMBLER_VERSION was stale. The constant in src/cli/assembler.zig still said "0.6.0" even though v1.32.0 bumped the bundled labelle_assembler Zig dep to v0.7.0. The CLI's auto-download fallback (used when assembler_version is unset and LABELLE_ASSEMBLER is not exported) would have downloaded the v0.6.0 binary — ABI-mismatched against the v0.7.0 generator the CLI was compiled against. Now "0.7.0".
  • Abbreviated commit SHA in build.zig.zon. The pin used a5486b7 (7 chars) instead of the full 40-char SHA. Abbreviated SHAs in GitHub archive URLs can become ambiguous as upstream gains commits and resolve to 404. Replaced with a5486b767aa51b4de880b8820c395b6e3038fab5, matching the convention of the previous v0.6.0 pin.

If you already pulled v1.32.0, run labelle update to grab v1.32.1 — both fixes only matter for the auto-download fallback path, but it's the recommended baseline.

v1.32.0

14 Apr 17:29
b37246d

Choose a tag to compare

Highlights

What v0.7.0 brings (via the assembler bump)

  • sokol RunDesc compile fix (every sokol project was broken before)
  • sokol drawRectangleLinesEx so outlined rects in declarative gizmos/*.zon actually render as outlines
  • sokol clear color (30, 30, 35) matches raylib so projects ported between backends look identical
  • sokol input lifecycle — game.quit() is now honored on sokol, and isKeyPressed actually fires for events delivered between frame callbacks
  • sokol forwards sapp events to the GUI bridge so ImGui IO works (clicks, slider drags, window dragging)
  • New examples/sokol_imgui/ end-to-end smoke test
  • Android-ready sokol example with WASD and animation (#32)

What 1.32.0 brings on top of v1.31.0

  • #167 — local: assembler_version resolver. The form already worked for core_version / engine_version / gfx_version / labelle_version; this brings assembler_version to parity. A monorepo-style project with assembler_version = "local:../labelle-assembler" now works with plain labelle run — no LABELLE_ASSEMBLER env override needed.

Verified end-to-end

  • examples/sokol_imgui/ builds and runs with click/slider widgets responsive
  • Raylib + imgui still works (regression-tested via a temporary copy of the sokol_imgui example with backend flipped to raylib)

v1.31.0 — assembler v0.6.0 + labelle-cli thinning

14 Apr 13:07
539d72d

Choose a tag to compare

Structural cleanup release. Same CLI binary feature-wise as v1.30.0, but with a much thinner repo underneath and a new default assembler version carrying today's backend fix cluster.

Highlights

  • Default assembler bumped to v0.6.0 (#166). Newly scaffolded projects auto-download v0.6.0 on first generate, picking up the full #8#13 bug fix cluster (SDL portable paths, bgfx native window handle, sokol audio leak, raylib slot recycling, wgpu WAV parser overflow, zig-ecs view perf) plus sokol HiDPI + Android + iOS compat fixes and the dep-pinning that closes the #146 fragility class.
  • Repo is now thin tooling only. All runtime content (backends, ecs adapters, GUI plugins, debug plugin, imgui/nuklear plugins, game-state examples) now lives in labelle-assembler. The generator types module is pulled as a proper Zig package instead of a hand-synced mirror.

Closed issues

  • #151 generator mirror removed
  • #152 / #153 imgui, nuklear, debug plugins extracted
  • #154 examples extracted
  • #155 vestigial Mach-O binary removed

Changes since v1.30.0

  • chore: remove vestigial labelle-docker-build Mach-O binary (#162)
  • feat: eject debug/imgui/nuklear plugins to labelle-assembler (#163)
  • refactor: eject examples to labelle-assembler (#164)
  • refactor: consume generator module from labelle-assembler package (#165)
  • chore: bump assembler to v0.6.0 (#166)

Diff stat since v1.30.0: roughly −9,500 lines of source + 1.2 MB binary.

Upgrade notes

  • The CLI surface is unchanged. labelle init, generate, run, build, clean all take the same flags.
  • Existing projects continue to work — their project.labelle is not touched. Upgrading to the new default assembler is as simple as bumping assembler_version (or running labelle upgrade).

v1.30.0 — Android fixes + assembler v0.5.1

13 Apr 20:28
76d7967

Choose a tag to compare

Android

  • Fix APK packaging: correct abi directory on Apple Silicon emulator (arm64-v8a instead of x86_64), fix aapt duplicate AndroidManifest.xml error, conditional assets dir
  • Fix memory leak in package_name when using default package name
  • Bump default assembler to v0.5.1

Assembler v0.5.1 (bundled)

  • sokol backend: high-DPI rendering with high_dpi=true, design canvas NDC mapping via setDesignSize(), camera zoom init on first frame, real frame dt, sokol_main entry point for Android/iOS
  • Android zig build package step: dynamic ABI dir, correct staging path, lazy ANDROID_HOME lookup
  • setDesignSize no-op added to all backends (raylib, sdl, bgfx, wgpu) to satisfy labelle-gfx v1.6.0 contract

labelle-gfx v1.6.0 compatibility

Projects using labelle-gfx v1.6.0 now compile correctly — all assembler-generated backends implement the new setDesignSize contract.