Skip to main content

cairn

Frappe + ERPNext + your custom apps, on one VPS, running the commit you last pushed.

cairn builds a Docker image from your app repositories, publishes it to a container registry, and lets your server notice the new image and switch to it on its own.

There is no CI service to configure, no webhook to receive, and no build minutes to pay for. Two small systemd timers do the polling, one on the machine that builds and one on the machine that serves. Both dial outward: your VPS never opens a port, never holds a webhook listener, and never hands a deploy key to GitHub.

A cairn is a trail marker of stacked stones. Every deploy leaves one behind: the git ref, the commits it resolved to, the image tag, the digest. You can always walk back.

How it works

You push a commit. The builder's timer resolves your app refs to commits, notices the combination is new, builds an image, pushes it, and moves the environment's tag. The target's timer notices the tag moved, pulls the image, restarts the stack, runs bench migrate, and checks that the site came back. Neither machine accepts a connection to do any of it.

Every image records the commits it was built from, the build arguments used, and the version of the build recipe that produced it. The tag is derived from those resolved inputs rather than typed by hand, so the same inputs produce the same tag and different inputs cannot collide. Rolling back is moving the tag to an earlier image and letting the server converge.

cairn's build recipe and compose configuration were bootstrapped from frappe/frappe_docker and stay close to it. frappe_docker gives you the parts to build a custom image; cairn adds the lifecycle around them. If cairn went away, you would be left holding a normal compose deployment and a registry full of normal images.

What it does not touch

cairn moves code, not data. The only database write it ever makes is the bench migrate that follows a deploy. It does not create sites, it is not a backup tool, and it is not multi-server orchestration. One VPS, one site.

Three roles, one package

Command Does
Builder cairn-build Builds the image, pushes it, moves the environment tag
Target cairn-adopt Polls for the tag, pulls, converges the running stack
Registry cairn-registry Hosts images, if you self-host. Optional: bring your own registry instead
pipx install datahenge-cairn

installs all three. Each machine uses whichever role applies to it.

Documentation

datahenge.github.io/cairn

Start with Why cairn to decide whether you want it, then Get Started to install.

Metadata

Release files for datahenge-cairn 0.4.13

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for datahenge-cairn 0.4.13
File Size Uploaded
datahenge_cairn-0.4.13.tar.gz 701.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for datahenge-cairn 0.4.13
File Interpreter ABI Platform
datahenge_cairn-0.4.13-py3-none-any.whl Python 3 none any Details

Total release size: 879.0 kB

Release files / datahenge_cairn-0.4.13.tar.gz

Download URL datahenge_cairn-0.4.13.tar.gz
Size 701.2 kB
Tags Source
SHA-256 checksum
How to use checksums
0a53b29a24508b0e5743c336618f6fe140803cfcc6aafdfc6c14bef64caec43e
BLAKE2b-256 checksum
How to use checksums
7330d640e8c418ffb50c50b1a141f6066221d36cafa2e901b4f3a3e8819d8e64
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release files / datahenge_cairn-0.4.13-py3-none-any.whl

Download URL datahenge_cairn-0.4.13-py3-none-any.whl
Size 177.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
761ec0dd3ae659d0f4f779f2e36aa55963a1e8038e228ffebd70727f211ec230
BLAKE2b-256 checksum
How to use checksums
574b3babf67e9ba124f23f7303e6dc381cc86d48a67d594aee0168a6d181e0b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.5

Release history Release notifications | RSS feed

0.4.15

2 release files

0.4.14

2 release files

This release

0.4.13 This release

2 release files

0.4.12

2 release files

0.4.11

2 release files

0.4.9

2 release files

0.4.8

2 release files

0.4.7

2 release files

0.4.6

2 release files

0.4.3

2 release files

0.4.2

2 release files

0.4.1

2 release files

0.4.0

2 release files

0.3.8

2 release files

0.3.7

2 release files

0.3.6

2 release files

0.3.5

2 release files

0.3.4

2 release files

0.3.3

2 release files

0.3.1

2 release files

0.2.1

2 release files

0.2.0

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page