Skip to content

v1.10.0

Choose a tag to compare

@MorganKryze MorganKryze released this 28 Jul 08:46
61b6266

Your monitor can now tell the difference between "cairn is up" and "cairn is serving your site".

✨ Features

  • A readiness probe that tells the truth. /readyz answers 503 while no valid configuration has ever loaded, and 200 once your site is being served. Until now a container that booted on a broken or empty config served the getting-started page and still answered 200 ok on /healthz: the uptime monitor sat green while visitors read "Almost there".

    /healthz deliberately keeps its old meaning. It is the liveness signal, 200 whenever the process is up whatever the config says, because cairn serves a getting-started page rather than dying and a probe that killed it for that would undo the point. So point a Kubernetes livenessProbe and the container healthcheck at /healthz, and your uptime monitor at /readyz. A reload that fails after a good boot keeps the last working pages and stays ready, which is the honest answer: serving, just not the newest edit. See Docker Compose.

📚 Documentation

Added after this release was cut, and live on main now. None of it changes the binary.

  • A Kubernetes page, which was missing. cairn is one stateless container with no database and no volume, so it fits well: a ConfigMap, a Deployment, a Service. The page explains why liveness uses /healthz while readiness uses /readyz, and what does not fit in a ConfigMap. Editing the ConfigMap reloads the site without a rollout, because cairn polls its config directory instead of using inotify, which is exactly what survives kubelet atomically repointing the ..data symlink.
  • The comparison was rewritten to answer the question a reader actually arrives with. Every project in that space draws a grid of links in cards, so it now concedes the resemblance and puts the difference where it belongs: who the grid is drawn for. It also states plainly that FROM scratch is stricter than distroless, since distroless removes the distribution but keeps a userland, while cairn's image holds two files, the binary and a CA bundle.
  • The image was advertised heavier than it is. ~14 MB was quoted in the README, the FAQ and the comparison. Measured on the published image: 9.6 MB on amd64, 9.0 MB on arm64. Corrected everywhere to under 10 MB.

🧹 Internal

  • The README now says you can try cairn with nothing at all. docker run --rm -p 8080:8080 ghcr.io/morgankryze/cairn:stable has always given a running page that explains the next step, but the Quickstart opened with a compose file and a volume, so readers assumed setup was required.
  • Two claims pulled back to what has been verified. The accessibility line now states what was measured and says plainly that no real screen reader has been used yet, with an invitation to report what breaks. The languages page says that English and French are written by someone who speaks them and the other five are careful but unreviewed, which makes a correction a one-line pull request.

📦 Image

docker pull ghcr.io/morgankryze/cairn:1.10.0

This release also moves 1.10, 1, stable and latest.