Migrating from EVE-NG
If you have been running EVE-NG for years, most of what you know transfers. Same idea: real virtual machines on a Linux host, wired with kernel networking, driven from a browser.
This page maps the concepts one to one, lists the two or three places the designs actually differ, and links to the importer that turns a .unl file into a Labtris lab.
Keep using these ideas.
- The core idea of running real vendor images under KVM on a Linux host with kernel-native bridges and taps.
- Deterministic, reversible interface naming (vun/vnet + hex-packed IDs) — great debugging story from `ip link` alone.
- Transient systemd units per node — cgroups, restart policy, reaping for free.
- Well-populated appliance catalogue and a large public library of importable labs.
The reasons to look elsewhere.
- SourceGuardian-encoded PHP web tier — no way to read what it is doing when something misbehaves.
- Whole web tier runs as root; one XSS is one root RCE.
- MySQL with a well-known default password.
- Polling API (`GET api/poll`) instead of a push channel — 40+ HTTP requests per second per open browser.
- Impairment is per-tap (fake symmetric); no first-class link objects, so per-direction latency is not really possible.
- PRO tier is behind a paid licence; features gated by tier changes.
What you know, and what it's called here.
Same primitives, mostly. A few things are actually different — those get their own row.
| Concept | In EVE-NG | In Labtris |
|---|---|---|
| Lab file | `.unl` XML | JSON — geometry split from topology so it diffs cleanly in git |
| Node template | YAML under `templates/intel/*.yml` | JSONB row per template; every field editable from the palette |
| Interface names | `vun<lab-hex><node-hex><idx-hex>` — 15-char `IFNAMSIZ` ceiling | Base36 hash + DB registry; no entity ceiling |
| Impairment | `tc` on the tap, symmetric only | First-class link → two directional qdiscs; A→B ≠ B→A |
| Capture | Per-node Docker container + nftables NAT chains + watchdog | Capture sidecar writing to a WebSocket pcap stream — no NAT hop |
| Console | HTML5 with a plugin history | Guacamole (VNC/RDP) + xterm.js (serial), force-shared display, same-tab reconnect works |
| Web tier | PHP as root, MySQL default password | FastAPI as an unprivileged user; every root operation goes through `labtris-netd` over a Unix socket |
| State channel | `GET api/poll` | WebSocket for canvas, console, capture, assistant |
| Multi-host | cluster / satellite protocol | Register a host, VXLAN builds the tunnel; standard tooling on both ends |
| Licence | Community + PRO (paid) | Apache-2.0. All features, forever. Support offered separately if you want it. |
Importing existing topologies.
Topologies. Import → drop your .unl file. Templates map onto the QEMU catalogue; vendor appliances that Labtris does not yet know about become labelled placeholders with warnings — the lab still opens, so you can substitute images yourself. Canvas positions are preserved.
Images. Copy the qcow2 files from /opt/unetlab/addons/qemu/<template>/ and upload them through the palette or with labtris-image add. Companion BIOS or CD-ROM files (NX-OSv OVMF-sata.fd + cdrom.iso, for example) attach per template.
Templates. RAM, CPUs, NIC model, disk bus, iface scheme — every knob the EVE YAML carried is a field on the template row, editable from the palette. Two schemes (paloalto → mgmt, eth1/1, eth1/2, …; nxos → Mgmt0, E1/1, E1/2, …) match the EVE conventions exactly so interface names in the guest do not change.
Try Labtris in five minutes.
Nothing to sign up for, no telemetry, no lock-in — the whole thing is under Apache-2.0 in one GitHub repo.