-
v0.5.0
Pre-releaseAll checks were successfulreleased this
2026-09-05 21:02:55 +02:00 | 988 commits to main since this releasev0.5.0 — 2026-09-05
Features
-
One command installs Ludic, and
ludicis the command you use. Getting
started no longer means cloning the repository and learning a task runner called
x.curl -fsSL https://workshopsoft.pages.workshopsoft.io/ludic/install.sh | shinstalls a complete
toolchain — compiler, CLI, engine runtime, bundledludic.*packages,
formatter and language server — into~/.ludicand puts it on yourPATH.
Prebuilt artifacts are verified against a published checksum; where none
exists for the platform, the installer bootstraps from the compiler's own IR
seed with clang. Uninstalling isrm -rf ~/.ludic, andludic upgrade
re-runs the same script.ludicreplacesxand is the only command a user of the language meets:
ludic newscaffolds a project that builds and plays as it stands,ludic run/ludic buildcompile it (--headlessfor a deterministic render),
ludic testruns everytestblock in the project, andludic add/get/
update/verify/vendordrive packages.ludic fmtandludic lspare
the formatter and language server, so an editor needs no path configuration.
ludic doctorreports whether the install is complete and usable.- The toolchain's own tasks moved under
ludic dev—dev build,dev test,dev reseed,dev bootstrap-cfree,dev docs-gen,dev releaseand
the rest are unchanged apart from the namespace.bin/xis gone; the
bootstrap is nowclang selfhost/ludicc.seed.ll -o bin/ludicc && bin/ludicc tools/ludic-cli/main.ludic -o bin/ludic. - An install root is a first-class layout. The compiler derives it from its
own location — the parent of itsbin/directory — so~/.ludicand a repo
checkout are the same shape, and$LUDIC_HOMEis no longer needed to build a
windowed game outside the repo. The bundledludic.*packages resolve from
$LUDIC_HOME/packages, soimport "ludic.core/components.ludic"works with no
ludic_modules/to set up. Release artifacts are complete install roots
(bin/besideruntime/,packages/andVERSION) rather than bare
binaries, and the installer ships with the documentation site it is served
from.
Fixes
- Token cards are back on the docs site. Clicking a keyword, type, builtin or
namespace method in any code sample opens its summary card again. The card's
styling had been left behind indocs.cssduring the site redesign, so on the
landing page — which links onlybase.cssandsite.css— the card rendered
unstyled at the foot of the document instead of beside the token. It now lives
inbase.csswith the rest of the highlighter chrome, and is positioned
fixed, matching the viewport coordinates the script computes, so a card opened
on a scrolled reference page lands on its token rather than off it. - Release checksums are one
.sha256file per artifact instead of a single
SHA256SUMS. A release is assembled from more than one host — a Linux runner
cannot build the macOS toolchain — andludic dev publishnever overwrites an asset that
is already attached, so a sharedSHA256SUMSwas written by whichever host
published first and then never covered anything added afterwards. Per-artifact
names compose across hosts. Verify one with
shasum -a 256 -c ludic-X.Y.Z-src.tar.gz.sha256.
Documentation
- CONTRIBUTING documents what a self-hosted Forgejo runner needs for CI to work at
all: every workflow clones${{ github.server_url }}, which on a self-hosted
instance is an internal address, so job containers must be able to resolve it.
The runner's default is a fresh per-job network the Forgejo container is not on,
which fails the clone — intermittently, because Docker forwards unresolved names
to the host resolver, so CI can look healthy for a while before it stops. - The README is rewritten around what a reader needs first: what the language is,
a code sample, how to build it, and an honest status. Removed the repo-layout
table and the Chrono Rift keybindings (a game manual in a language README), the
nine links to wiki pages that no longer exist, and a "language at a glance"
bullet describing a retired vocabulary — it advertisedsystem,reads,
writes,requiresandensures, none of which are keywords; the declaration
keyword ishandler.
CI
- The commit-lint workflow survives a force-push. It linted
${{ github.event.before }}..${{ github.sha }}without checking thatbefore
still resolves, so rewriting or garbage-collecting that commit failed the job
withfatal: Invalid revision rangeon a push whose messages were all valid. It
now falls back to linting the tip commit whenbeforeis gone. - The docs deploy is serialised. Publishing is a force-push of an orphan
pages
branch, so two runs racing could land out of order and leave the site holding the
older build — with both runs reporting success. Apages-deployconcurrency
group withcancel-in-progressmeans a newer push cancels an older in-flight
build instead of queueing behind it.
Downloads
-
Source code (ZIP)
1 download
-
Source code (TAR.GZ)
1 download
-
ludic-0.5.0-darwin-arm64.tar.gz
3 downloads · 792 KiB
-
ludic-0.5.0-darwin-arm64.tar.gz.sha256
3 downloads · 98 B
-
ludic-0.5.0-linux-x86_64.tar.gz
1 download · 873 KiB
-
ludic-0.5.0-linux-x86_64.tar.gz.sha256
1 download · 98 B
-
ludic-0.5.0-src.tar.gz
1 download · 1.8 MiB
-
ludic-0.5.0-src.tar.gz.sha256
1 download · 89 B
-