Skip to content

cdin v0.2.1-beta.4 (pre-release)

Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 13 Oct 12:57
0ff5024

⚠️ Pre-release — this is not a stable cdin

این یک نسخه پیش‌انتشار است، نه نسخه اصلی و نه نسخه پایدار.
A rolling pre-release built from main. It is published as a GitHub
prerelease, it can break at any moment, and none of it is covered by
the stable-release policy. Use it to see what is landing on main.

Version 0.2.1-beta.4
Previous pre-release v0.2.1-beta.3
Commit 0ff5024
Built 2026-10-13 12:57 UTC
Triggered by m-mdy-m
Workflow run https://github.com/cdin-editor/cdin/actions/runs/38400246964

python3 cdin.py update installs the newest stable release and never
this one: GitHub keeps prereleases out of /releases/latest, and this
workflow never publishes one as stable.

📋 Unreleased, from the changelog

Added

  • pre-release.yml — every push gets its own version. A push to main that is not documentation-only now builds Windows and Linux, reads the next version off the tag history and publishes a GitHub prerelease for that exact commit: v0.2.1-alpha → v0.2.1-beta.1 → v0.2.1-beta.2, with the stage promoted (alpha → beta → rc) when it runs out and a new patch cycle opened after that. It reuses release-linux.yml and release-windows.yml rather than duplicating a build, and it publishes neither macOS nor Docker.

    The release body says, in Persian and English, that this is not the official build, carries the [Unreleased] changelog and every commit since the previous pre-release, and lists each asset with its size. release.yml (and the three per-platform workflows) now ignore tags with a hyphen ('!v*-*'), so a pre-release tag cannot trigger a stable release or a Docker Hub push.

  • release-linux.yml / release-windows.yml take a version input. Left empty, both still derive the version from the tag being built, which is what a tag push gets. pre-release.yml passes the version it computed, which is what makes the two build paths the same build.

  • docker.yml runs on pull requests only. It never pushed, but it built an image on every push to main — including every push that produces a pre-release. A published image still comes from release.yml on a stable vX.Y.Z tag.

Fixed

  • A .deb built from a pre-release version was rejected by dpkg-deb. Debian reads the last hyphen as the boundary between the upstream version and the Debian revision, so 0.2.1-beta.1 is 0.2.1 + revision beta.1. The version is now rewritten to 0.2.1~beta.1, which is valid and — because ~ sorts before an absent segment — orders before 0.2.1. Stable versions carry no hyphen and are unchanged.

🔀 Commits since v0.2.1-beta.3

  • 0ff5024 ci: add install libuv (Mahdi)
  • 7779ea0 ci: add docker ci and update other workflows (Mahdi)
  • a95b020 chore: update gitignore (Mahdi)
  • 8f1b1e6 test(fuzz): add the seed corpus the three harnesses run against (Mahdi)
  • 9696161 docs(agents): rewrite the working rules as an owner contract (Mahdi)
  • 135ff1b build: split the verification targets out of mk/build.mk (Mahdi)
  • aa2e8c6 chore(measure): startup, frame and memory harnesses that print numbers (Mahdi)
  • 20fdc94 chore(check): static analysis, luacheck and the recorded warning profile (Mahdi)
  • 7272cab bench: record the font-face sharing baseline and the number to beat (Mahdi)
  • 8af05de test(fuzz): harnesses for the three parsers that read external bytes (Mahdi)
  • 3a56ee8 test(c): unit suites for logger, damage cache, allocator and job loop (Mahdi)
  • 7679287 fix(test): assert the reverse binding, not which stroke survived (Mahdi)
  • 6d2dc44 fix(rootview): find the content leaf, not the title bar (Mahdi)
  • 783e8ff fix(rootview): a locked pane split out of another locked one doubled its size (Mahdi)
  • 38854e9 fix(font): check the font handle instead of trusting the metatable (Mahdi)
  • dc58c16 feat(memory): tag the renderer's bytes and report where they are (Mahdi)
  • 0d5a66e feat(loop): read files off the frame thread with libuv (Mahdi)
  • ca88597 refactor(platform): replace utils.c and boot.c with one platform layer (Mahdi)
  • 0e9bea3 feat(lua): add the handle convention and the uniform error table (Mahdi)
  • 9bd3937 feat(base): add the tagged accounting allocator and the arena (Mahdi)
  • d647c8b feat(base): add CdinErr, one error convention for src/ (Mahdi)

🐧 Linux (x86-64)

File Size Download
cdin-0.2.1-beta.4-linux-x86_64.tar.gz 2.1M ⬇️ download
cdin_0.2.1~beta.4_amd64.deb 3.3M ⬇️ download

🪟 Windows (x86-64)

File Size Download
cdin-0.2.1-beta.4-windows-setup.exe 5.1M ⬇️ download
cdin-0.2.1-beta.4-windows-x86_64.zip 4.2M ⬇️ download

Installing this pre-release

Requires Python 3.8+ — pre-installed on every supported platform.

🐧 Linux (x86-64)

# .deb (Debian / Ubuntu). SDL3 ships inside the package.
sudo apt install ./cdin_*_amd64.deb

# tarball, any distro
tar xzf cdin-0.2.1-beta.4-linux-x86_64.tar.gz
cd cdin-0.2.1-beta.4-linux-x86_64

python3 cdin.py                             # run it
python3 cdin.py install --prefix ~/.local    # or install it

🪟 Windows (x86-64)

# installer
.\cdin-0.2.1-beta.4-windows-setup.exe

# or portable, no install
Expand-Archive .\cdin-0.2.1-beta.4-windows-x86_64.zip
cd cdin-0.2.1-beta.4-windows-x86_64
python cdin.py

No macOS build here: a pre-release publishes Windows and Linux only, and
never touches Docker.


برای نسخه پایدار و اصلی منتظر تگ vX.Y.Z باشید.
For the stable, official build, wait for a vX.Y.Z tag release.