• v0.2.0 237e13c95e

    Ludic v0.2.0 — the types-and-systems release
    All checks were successful
    bootstrap / cfree-fixpoint (push) Successful in 16s
    ci / build-and-test (push) Successful in 1m28s
    commit-lint / conventional-commits (push) Successful in 2s
    Pre-release

    orkun released this 2026-09-01 02:39:56 +02:00 | 1047 commits to main since this release

    Ludic v0.2.0 — the types-and-systems release

    v0.1.0 stood the toolchain up: a self-hosted, C-free compiler, a deterministic
    2D engine, and a namespaced standard library. v0.2.0 makes it a language you
    can build a real game in.
    Ludic gets a type system, an engine that runs
    animation and lighting for you, a complete input stack, and the out-of-band
    libraries — audio, networking, concurrency — a game reaches for once the core
    loop works.

    The through-line is unchanged: every feature is gated and additive. A
    program that never mentions a new namespace or type compiles byte-for-byte
    identically to before, and x bootstrap-cfree still proves the compiler
    rebuilds itself bit-exact from the checked-in seed. You pay for what you use and
    nothing else.

    Highlights

    • A real type system. Tagged-union enums with payloads and exhaustive
      match; option and result with try/else recovery; panic/assert
      with file:line messages instead of segfaults; exact BigInt/Decimal and
      display-scale Huge for game economies; Dict/Set containers; and packed,
      allocation-free IVec2/Rect value types.
    • An engine that does the work. Declare a SpriteAnim, Motion, Light2D,
      Occluder or Ambient component and the engine animates, tweens and lights it
      every frame — no handler wired. Lighting reaches render-quality tiers: spot
      cones, soft shadows, colour gels, normal maps and a day/night ramp.
    • A full input stack. Rebindable action maps, a device layer for held keys,
      analog sticks, mouse, gamepads and touch, native macOS hardware bindings, and
      deterministic record/replay of the whole per-frame device state — the seed of
      lockstep netcode.
    • Out-of-band libraries. Audio.* (AVAudioPlayer), Http.* (non-blocking
      HTTP/HTTPS with system TLS), and a layered Job/Promise/Sync concurrency
      library — all frame-driven and replay-safe, none of them ever feeding the
      deterministic simulation.
    • Testing you can trust. A built-in test { … } framework with
      expect/expect_eq/expect_near, now with --coverage line reporting.

    Determinism, still guaranteed

    Everything gameplay-facing is integer / Q16.16 fixed-point and reproduces
    bit-for-bit across runs and platforms. The genuinely real-time surfaces — audio
    output, HTTP, wall-clock — are explicitly out-of-band and never touch the
    lockstep world, so recorded and replayed runs stay exact. Job results are
    collected on the main thread at a point you choose; a Job never mutates the
    ECS world directly.

    Install / upgrade

    git fetch --tags
    git checkout v0.2.0
    bin/x build-cli     # rebuild ludicc / ludic from the seed (clang only)
    bin/x test          # 86 checks, all green
    

    ludicc --version reads the VERSION file at runtime and now reports 0.2.0.

    Artifacts

    • ludic-0.2.0-src.tar.gz — reproducible source + LLVM-IR seed.
    • ludic-0.2.0-<platform>-<arch>.tar.gz — the prebuilt macOS toolchain (bin/,
      the seed, VERSION).

    Compatibility

    Additive and backward-compatible with v0.1.0 — no removals, no breaking changes
    to existing programs. Native audio, HTTP and gamepad backends are macOS-only for
    now; every one of those APIs is present and dead-stripped to a no-op on headless
    targets, so the same game code compiles and runs under the test harness
    everywhere.

    See CHANGELOG.md for the full, itemized list.

    Downloads