ReleaseKit
Copy MarkdownReleaseKit builds deployment-neutral artifacts from Mix OTP releases.
It produces two files:
- a compressed OTP release tarball;
- an ETF manifest describing the tarball, runtime command, environment hints, and optional health check.
Deployment tools such as HostKit can consume the manifest, but ReleaseKit does not know about systemd, users, Caddy, hosts, or filesystem layouts.
Installation
def deps do
[
{:release_kit, "~> 0.1", only: [:dev], runtime: false}
]
endUsage
Build a production release artifact:
MIX_ENV=prod mix release_kit.artifact --out-dir _build/prod/artifacts
For a web service, include health-check metadata:
MIX_ENV=prod mix release_kit.artifact \
--out-dir _build/prod/artifacts \
--port 4000 \
--health-path /
The output names are stable for deployment tooling:
_build/prod/artifacts/my_app-20260620-abcdef0.tar.gz
_build/prod/artifacts/my_app.etfThe manifest is an ETF-encoded map:
%{
tool: "release_kit",
format: :beam_release_artifact,
format_version: 1,
app: "my_app",
release: "my_app",
version: "20260620-abcdef0",
mix_env: "prod",
tarball: "/absolute/path/to/my_app-20260620-abcdef0.tar.gz",
runtime: %{command: ["bin/my_app", "start"]},
env: %{clear: %{}, secret: []},
health_check: %{path: "/", port: 4000, url: "http://127.0.0.1:4000/"}
}Application aliases
Projects can add their own shorter alias or prebuild steps:
defp aliases do
[
"release.artifact": ["assets.deploy", "release_kit.artifact"]
]
endReleaseKit deliberately does not run asset builders or delete generated files on its own. Keep those choices in the consuming application.