• v0.21.0 28f661c36f

    v0.21.0
    All checks were successful
    bootstrap / cfree-fixpoint (push) Successful in 36s
    ci / build-and-test (push) Successful in 3m50s
    commit-lint / conventional-commits (push) Successful in 5s
    docs / build-and-deploy (push) Successful in 44s
    release / publish (push) Successful in 3m40s
    Pre-release

    orkun released this 2026-09-17 14:59:35 +02:00 | 842 commits to main since this release

    v0.21.0 — 2026-09-17

    Features

    • A launcher's runtime — start a program, step aside while it runs, and download large
      files with a progress bar.

      • Process.* — Process.spawn(path, args) starts a program directly (no shell) with this
        process's environment and working directory and returns at once; Process.poll(h) is -1
        while it runs, then its exit code (128 + signal for a signal death, 137 after
        Process.kill); Process.free lets a handle go. posix_spawn on macOS
        (runtime/native/process.ll); CreateProcessW on Windows (process_win.ll), with each
        argument quoted by the MSVC rules and no console window. Linked only into a program that
        uses Process.*.
      • Http.save_to(h, path) — before Http.send, streams the response body straight into a
        file (written at path itself, created on send) instead of memory; Http.text of such a
        request is empty and Http.body_len is the bytes written. Http.received(h) and
        Http.expected(h) (the Content-Length, or -1) are live while it is pending. macOS
        streams through an NSURLSession with a delegate built at run time, Windows through the
        WinHTTP read loop. Freeing a pending request now cancels it and parks its slot until the
        worker has let go, rather than freeing what the worker is still writing.
      • App.window_hide() / App.window_show() — take the game's window off the screen and
        bring it back without closing it or its GL / Vulkan surface; the run goes on while it is
        hidden. No-ops headless and before there is a window.

    Fixes

    • A game's window takes the title it asks for. The runtime opens a game's window before main,
      titled with the program name, and Gl.open / render3d's gl_open and gvk_open attached
      to it without passing their title on, so a program Valley that opened "Maroon Lake" showed
      "Valley". win_set_title (cocoa.ll setTitle:, win32.ll SetWindowTextW, UTF-8 to UTF-16)
      now retitles it, and a second win_open on macOS retitles the open window instead of making
      another, as it already did on Windows.
    Downloads