Crucible

Hex.pmHexdocsCILicense: MITSponsor

Standalone multi-cloud provisioner CLI (same shape as orian), plus a library for Phoenix FLAME. Crucible creates the box. Zeiroh joins (Iroh/Zenoh). Gale is HTTP/3.

gale — Phoenix HTTP/3
orian — parallel S3/S5 transfer CLI
crucible — boot/rm VMs across clouds (this)
ingot — Iroh + Zenoh cluster
dusk — Zenoh-first cluster
zeiroh — Phoenix FLAME overlay
# from this repo (preferred — Burrito binary bundles ERTS)
mix crucible.install
# or build the escript fallback (requires Erlang/OTP on PATH)
mix escript.build
# Linux/macOS: ~/.local/bin Windows: %LOCALAPPDATA%\elixcoder\bin
crucible ls --implemented
crucible boot --driver dummy --name n1
crucible sizes --driver dummy
crucible rm --driver dummy --id dummy-1
crucible http
crucible version

As a library dependency ({:crucible, "~> 0.1"}), the CLI install task is not inherited — clone the repo or use the published escript for the standalone binary.

Credentials from env, .env, or crucible.yaml (flags override):

# crucible.yaml
driver: hetzner
region: nbg1
size: cpx21
# token: "…" or HCLOUD_TOKEN in .env
hetzner:
token: "…"
# .env (does not override vars already in the shell)
HCLOUD_TOKEN=…
AWS_ACCESS_KEY_ID=…

--config path / --env-file path if the files are not in cwd. Also ~/.config/crucible/config.yaml.

Host apps can still mix crucible … or {:crucible, "~> 0.1"}.

{:ok, s} = Crucible.init(driver: :hetzner, token: System.fetch_env!("HCLOUD_TOKEN"),
size: "cpx21", image: "ubuntu-24.04", region: "nbg1")
{:ok, m, s} = Crucible.boot(s, %{env: %{"FLAME_PARENT" => "..."}})
{:ok, m, s} = Crucible.await(s, m)
:ok = Crucible.shutdown(s, m)

FUNDING

If Crucible is useful to your project, consider sponsoring the project to support ongoing development.

SponsorSponsorSponsor

MIT.