09afbdbd
docs: the release notes tell v0.0.3, and the roadmap looks only forward
a73x 2026-08-06 10:58
Commit message
ROADMAP.md
| Old | New | ||
|---|---|---|---|
| @@ -1,61 +1,21 @@ | |||
| 1 | # Roadmap | 1 | # Roadmap |
| 2 | 2 | ||
| 3 | ## v0.0.1 — installable | 3 | What shipped in each version is in the |
| 4 | 4 | [release notes](https://eitri.sh/docs/releases/); this is what's ahead. | |
| 5 | The goal: someone with a Linux box goes from [eitri.sh](https://eitri.sh) to a | 5 | |
| 6 | booted VM they can `eitri-ssh` into. Prebuilt binaries fetched from stable | 6 | ## v0.0.4 — candidates |
| 7 | URLs — no toolchain, no curl-pipe installer. This is the first tag; history is | 7 | |
| 8 | frozen from here. | 8 | - Bridged guest networking: a Linux host puts its guests on the operator's |
| 9 | 9 | own network — taps on a named bridge, the site's DHCP addresses the guests, | |
| 10 | **Binaries & releases** | 10 | the agent discovers the result |
| 11 | 11 | - Public gateway: route inbound traffic to guest services through eitri, | |
| 12 | - Version-stamped binaries (`--version`), cross-compiled release tarballs + | 12 | building on published ports |
| 13 | SHA256SUMS (linux amd64/arm64; darwin for `eitri-ssh`) | 13 | - A PAT is enough: an opt-in eitri-managed tenant CA signs short-lived SSH |
| 14 | - Artifacts at stable URLs: `eitri.sh/dl/v0.0.1/...` with a `latest` alias, so | 14 | certificates, so a bare token can reach its VMs—BYO CAs stay first-class, |
| 15 | tooling can bootstrap from them, not just humans | 15 | and a tenant that wants eitri holding no signing power keeps that |
| 16 | 16 | - Remote MCP: a hosted endpoint (api.eitri.sh/mcp) any client can connect | |
| 17 | **eitri.sh** | 17 | to—streamable HTTP, per-tenant auth, TLS at the edge; its identity story |
| 18 | 18 | is the managed tenant CA above | |
| 19 | - Landing page, rendered docs, downloads, and a `CLOUDHV.fd` firmware mirror — | ||
| 20 | one static site image, replacing the current site | ||
| 21 | |||
| 22 | **Upgrades** | ||
| 23 | |||
| 24 | - Agent: replace binary + restart in place; running VMs survive and are | ||
| 25 | re-adopted | ||
| 26 | - cloud-hypervisor: swap the binary in place; new/restarted VMs use the new | ||
| 27 | version, running VMs keep their old process | ||
| 28 | - Server: stop → replace → start; downtime acceptable, VMs unaffected; | ||
| 29 | migrations run on boot; version skew with agents stays safe | ||
| 30 | |||
| 31 | **Docs** | ||
| 32 | |||
| 33 | - Quickstart: zero-to-first-VM on one host, then add a second host | ||
| 34 | - Upgrade guide, release notes | ||
| 35 | |||
| 36 | **Multi-tenancy** | ||
| 37 | |||
| 38 | - A second tenant on the fleet. The seam is already live (tenants table, | ||
| 39 | tenant-scoped tokens/VMs, `<tenant>.<name>` connect names); tenant #2 needs | ||
| 40 | the per-tenant user-CA split, SSE/console/event isolation, tenant-scoped | ||
| 41 | audit, and cross-tenant token mint | ||
| 42 | |||
| 43 | **Gate** | ||
| 44 | |||
| 45 | - Clean-slate rehearsal: the quickstart followed verbatim on a fresh host, | ||
| 46 | end-to-end, before the tag exists | ||
| 47 | |||
| 48 | Out of scope: curl installer, OS packages, live cloud-hypervisor handover for | ||
| 49 | running guests, new features. | ||
| 50 | |||
| 51 | ## v0.0.2 — candidates | ||
| 52 | |||
| 53 | - macOS host support: a Mac joins the fleet as a host | ||
| 54 | (Virtualization.framework backend) | ||
| 55 | - Live cloud-hypervisor handover for running guests | 19 | - Live cloud-hypervisor handover for running guests |
| 56 | - Public gateway: route inbound traffic to guest services through eitri | 20 | - Provider integration: provision on existing cloud infrastructure (aws, gcp, |
| 57 | 21 | proxmox, …) | |
| 58 | ## v0.0.3 - candidates | ||
| 59 | |||
| 60 | - provider integration: provision on existing cloud infrastructure | ||
| 61 | - aws, gcp, proxmox, etc | ||
docs/releases.md
| Old | New | ||
|---|---|---|---|
| @@ -5,6 +5,77 @@ Tarballs and checksums for every release live at | |||
| 5 | newest. The [quickstart](quickstart.md) takes a release from download to a | 5 | newest. The [quickstart](quickstart.md) takes a release from download to a |
| 6 | running VM. | 6 | running VM. |
| 7 | 7 | ||
| 8 | ## v0.0.3 | ||
| 9 | |||
| 10 | macOS hosts. An Apple-silicon Mac joins the fleet as a host and runs Linux | ||
| 11 | guests beside your Linux boxes (so the Mac Mini can earn its keep after all). | ||
| 12 | Around it: hosts own their guest networks, you can publish a VM's ports, and | ||
| 13 | the agent reads guest images without a conversion tool. | ||
| 14 | |||
| 15 | **Mac hosts.** An Apple-silicon Mac enrolls like any other host and runs | ||
| 16 | guests through vfkit, the signed helper that drives Apple's | ||
| 17 | Virtualization.framework. `brew install vfkit` is the one thing the agent | ||
| 18 | cannot do for you—vfkit only works carrying Apple's virtualization | ||
| 19 | entitlement, and an entitlement lives in a signature, so it comes from a | ||
| 20 | signed distribution or not at all. Everything else the agent does itself: it | ||
| 21 | installs as a LaunchAgent in the session you're already in, keeps its state in | ||
| 22 | `~/.eitri/agent`, and upgrades from the console like every other host. | ||
| 23 | Releases ship a `darwin_arm64` host bundle beside the Linux ones. | ||
| 24 | |||
| 25 | **Hosts own their guest network.** The subnet a host's guests live on is a | ||
| 26 | fact about that host, and the host is the only thing that can observe it. So | ||
| 27 | the direction reverses: a host tells the fleet which subnet its guests are on, | ||
| 28 | a joining host proposes its own—the fleet's allocation is only a suggestion— | ||
| 29 | and a Mac reports whatever subnet vmnet actually gave it. A host also refuses | ||
| 30 | a guest subnet that contains its own uplink, naming both sides and the flag | ||
| 31 | that fixes it, because that overlap takes out the very connection you'd use to | ||
| 32 | fix it. | ||
| 33 | |||
| 34 | **Published ports.** SSH goes through the gate; anything else a guest serves | ||
| 35 | needs a published port. You publish a VM's port on its host: the fleet | ||
| 36 | binds a port on the host (30000–32767 when you leave the choice to it) and | ||
| 37 | pipes it to the guest. The MCP tools speak it too, so an LLM that just | ||
| 38 | built something in a VM can publish the port and hand back the address to | ||
| 39 | dial. There is no authentication in front of a published | ||
| 40 | port—whoever can reach the host on that port reaches the service—so publish | ||
| 41 | what you're content to serve to everything on that network, and leave the rest | ||
| 42 | to the gate. | ||
| 43 | |||
| 44 | **Images, decoded in-process.** The agent reads guest images itself: qcow2, | ||
| 45 | vmdk, vhdx, vdi, parallels, vpc and asif are parsed in-process, gzip is | ||
| 46 | decompressed sparsely as it lands, and an image that is already raw is renamed | ||
| 47 | into place—there is no format to change. `qemu-img` goes with it. A Linux | ||
| 48 | host needs KVM and nothing else. | ||
| 49 | |||
| 50 | **Fixes.** A VM says which SSH key eitri put in it—the key type, its | ||
| 51 | fingerprint, its comment. A one-click create picks a default image its host's | ||
| 52 | architecture can run, instead of one image for the whole fleet. A guest's | ||
| 53 | address is judged on its own terms—does it name something reachable—rather | ||
| 54 | than against an allocation the fleet made. A lost guest's report quotes the | ||
| 55 | last thing its hypervisor said, instead of "lost" and nothing else. A backend | ||
| 56 | signals only the processes it started, so a pid recycled across a host reboot | ||
| 57 | is never someone else's process getting SIGKILL. And a host is asked whether | ||
| 58 | it can run a guest at all before a create spends anything on a download. | ||
| 59 | |||
| 60 | **Known limits.** | ||
| 61 | |||
| 62 | - Apple silicon only: there is no darwin/amd64 bundle. An Intel Mac is told | ||
| 63 | there is no artifact for it—true, and checkable—rather than offered a | ||
| 64 | binary nobody has booted a guest on. | ||
| 65 | - A Mac joins as a host. The control plane stays Linux; the Mac bundle | ||
| 66 | carries no server. | ||
| 67 | - vfkit is yours to install (`brew install vfkit`); eitri cannot mirror a | ||
| 68 | binary whose entitlement lives in Apple's signature. | ||
| 69 | |||
| 70 | ## v0.0.2 | ||
| 71 | |||
| 72 | One fix, worth its own release. A guest's disk was handed to cloud-hypervisor | ||
| 73 | without a declared format, and an autodetected raw image gets its sector 0 | ||
| 74 | write-protected—so the first boot's partition grow only ever happened in the | ||
| 75 | kernel's memory, and the guest died in initramfs the first time it was | ||
| 76 | power-cycled. Disks are now declared raw and the partition table stays | ||
| 77 | writable. | ||
| 78 | |||
| 8 | ## v0.0.1 | 79 | ## v0.0.1 |
| 9 | 80 | ||
| 10 | The first release. eitri is a small cloud backed by your own hardware: one | 81 | The first release. eitri is a small cloud backed by your own hardware: one |
site/index.md
| Old | New | ||
|---|---|---|---|
| @@ -4,22 +4,13 @@ | |||
| 4 | 4 | ||
| 5 | ## DESCRIPTION | 5 | ## DESCRIPTION |
| 6 | 6 | ||
| 7 | The cost of compute is rising—RAM, storage, GPU—at all-time highs, | 7 | eitri takes the machines you already have and lets you build out your |
| 8 | with RAM prices not expected to come down until 2030. | 8 | own personal cloud: VMs on your own hardware, managed without |
| 9 | 9 | complexity (repurposed e-waste!). | |
| 10 | Companies are fighting over supply chains, cloud providers are raising | 10 | |
| 11 | prices, and we're all lamenting that we should have upgraded RAM in 2024. | 11 | Software has never been easier to produce. eitri gives you a way to |
| 12 | 12 | run it safely: create a VM in seconds, manage your own fleet, and even | |
| 13 | With the rise of LLMs, it's now easier than ever to create software, but | 13 | point your favourite LLM at it. |
| 14 | what hasn't improved is the cost of the hardware. eitri's premise is | ||
| 15 | simple: let's use what we have instead of consuming more. We don't need | ||
| 16 | to all go buy Mac Minis to run an AI agent (seriously, what was this | ||
| 17 | about?!) or spin up a VM in some remote cloud that charges us by the | ||
| 18 | hour. We have the hardware; we just need the ease of use. Repurposing | ||
| 19 | that old laptop and being able to manage it from a single pane of glass. | ||
| 20 | Being able to connect it to your favourite LLM and say, deploy here, | ||
| 21 | please, and run that software you've just developed on a VM, and show it | ||
| 22 | off. | ||
| 23 | 14 | ||
| 24 | Boot a throwaway sandbox for a risky experiment. Keep a dev machine that | 15 | Boot a throwaway sandbox for a risky experiment. Keep a dev machine that |
| 25 | survives host reboots. Give an AI agent a VM where it can run wild. Delete | 16 | survives host reboots. Give an AI agent a VM where it can run wild. Delete |