TrueNAS-style storage management for Proxmox VE, inside the Proxmox web UI.
ANAS adds the storage management layer that Proxmox's native UI doesn't cover: ZFS pools, datasets, snapshots and replication, SMB/NFS shares, share security, file backup to PBS, and Hybrid RAID pools that mix drive sizes and grow one disk at a time — presented as native panels injected into the PVE web UI itself (the same model Proxmox uses for Ceph). There is no separate web app to visit and no separate login: you use your existing PVE session.
Think TrueNAS, but purpose-built to complement Proxmox rather than replace it.
Status: pre-1.0. Actively developed and dogfooded on a production PVE cluster, but interfaces and behavior may change without notice. Use at your own risk — and read the guest philosophy below for why the risk is smaller than you'd think.
Live dashboard — pool health, capacity, and real-time per-pool and per-disk I/O + latency, for ZFS and AHR pools alike. Caught here with an AHR array expanding online, one disk at a time.
Hybrid RAID (AHR) — build a redundant pool from mixed-size disks by dragging them in, with a live sliced layout and honest capacity accounting. The advisor won't let you footgun it — here it flags that a single disk has no redundancy, and exactly what's needed to fix it, rather than silently building something unsafe.
SMB & NFS shares — create and secure shares with per-share access control: valid users, browseable, read-only, and allowed/denied hosts.
Scheduled snapshots & scrubs — uniform snapshot schedules across ZFS and AHR, driven by systemd timers with keep-N-per-period retention and sane presets built in.
- Dashboard — pool health, capacity, fleet disk health, shares, running jobs, warnings, and live telemetry (ARC, network throughput, per-pool/disk I/O with latency for both ZFS and AHR pools — the AHR strip breaks down to per-band and per-member throughput/IOPS/latency)
- ZFS pools — create/import/export/destroy, scrub, topology view with per-bay disk health, device errors, properties; a drag-to-build vdev composer with a live capacity/redundancy preview and a rules-based pool advisor
- Hybrid RAID (AHR) — Synology-SHR-style pools from mismatched disk
sizes, using every drive's full height (a 12 TB next to 8 TBs contributes
all 12, not 8): disks are sliced into size-matched bands, each band is its
own md RAID5/6 array, LVM concatenates them under one btrfs filesystem
(checksums + scrub; redundancy always lives in md, never btrfs-RAID).
Grow-as-you-buy online expansion — add or live-replace one disk at a
time while the pool stays mounted; a live layout preview shows exactly what
each disk combination yields (and names any capacity that stays locked
until a matching disk arrives) before you commit. Expansion is a resumable
multi-layer job: power loss mid-reshape is survivable, interrupted runs
resume or abandon cleanly, and md events land in PVE's own notification
system. Hot spares — full-coverage spares sliced into every band so md
owns automatic failover; expansion auto-extends spare coverage to new bands.
btrfs snapshots — new pools get an
@data/@snapshotssubvolume layout; list/create/delete and roll back, with rollback preserving the replaced state (destroying nothing) - Datasets — create/manage, quotas, compression, permissions/ACLs, a layered access editor
- Snapshots — create, rollback (gated), clone, destroy
- Replication —
zfs send/recvtasks on systemd timers: local pool→pool and remote over SSH (PVE cluster peers auto-discovered; external hosts — including TrueNAS — need only sshd + ZFS, nothing installed) - SMB shares — full share lifecycle over a round-trip
smb.confeditor that preserves your comments and formatting; connection details view - NFS exports — same treatment for
/etc/exports - Share users/groups — Samba user management for share access (no role/permission system — PVE owns identity)
- Mounts — client-side NFS/CIFS mounts with surgical fstab persistence (credentials in root-only files, never on a command line), a common option set across both protocols and human-readable file/dir permission modes; local and PVE-owned mounts inventoried read-only
- File backup (PBS) — back up shares, datasets, or any mounted path to a
Proxmox Backup Server with
proxmox-backup-client(dedup, encryption, retention), ZFS-snapshot-consistent where the source supports it - Disk health — SMART + ZFS fused per-disk status
ANAS treats your system as the source of truth and itself as a guest:
- No shadow state. Nothing is stored that the system doesn't already know.
Pools come from
zpool, shares fromsmb.conf/exports, schedules from systemd units. Uninstalling ANAS loses nothing. - Surgical config editing. Config files are edited in place — comments, ordering, and hand-edits preserved byte-for-byte outside the touched lines. Never overwritten, never "owned".
- Leverage, don't rebuild. PVE's certificates, auth tickets, journald, systemd timers, and cluster filesystem are used as-is. ANAS builds no scheduler, no notification system, no user database.
- Two processes, one boundary. An API gateway (
anas, plain HTTP on the loopback interface) fronts a system daemon (anasd, REST over a Unix socket). The gateway is reached through PVE's own:8006front door under/anas(a fail-open reverse-proxy hook in pveproxy) — no separate origin, no extra certificate. All mutations are queued jobs; every operation is audited to journald with the requesting user's identity. - Dangerous operations are gated. Destructive actions require an explicit confirmation code round-trip — no accidental pool destroys.
- Proxmox VE node (single node or cluster)
- Node.js ≥ 20 (installer can provide via
--install-deps— the only thing that flag gates) - ZFS ≥ 2.2 (ANAS uses
zpool's JSON output) mdadm+btrfs-progsfor Hybrid RAID,sambafor SMB shares and share users,nfs-kernel-serverfor NFS exports,aclfor permissions — the installer adds all of them, on fresh installs and upgrades alike (PVE ships none of them, and ANAS never gates a feature on its tools being absent)
Grab a release tarball, untar it on the PVE node, and run the installer as root:
tar xzf anas-<version>.tar.gz
cd anas-<version>
sudo ./install.sh # add --install-deps on a fresh nodeThe installer preflights the node without touching it, then performs a
transactional install (backup → install → health check → PVE UI integration)
that rolls itself back completely on any failure. Re-running it is the upgrade
path. ANAS is served through pveproxy on :8006 under /anas, so there is no
separate origin and no extra certificate to accept — if the Proxmox web UI
loads, ANAS does. See packaging/README.md for flags
and uninstall.
The gateway binds a loopback port (default 3000) that only pveproxy talks to; it is never exposed and needs no certificate. If something else on the node already listens on 3000, pass another port:
sudo ./install.sh --port 3001On a fresh install the installer auto-picks the next free port if 3000 is taken.
The choice is written to /etc/default/anas and preserved across upgrades unless
you pass --port again. It is per-node — nodes in a cluster need not agree,
since cross-node traffic goes through each node's :8006.
npm install
./packaging/make-release.sh # builds, smoke-tests, and tars a releaseProduces dist-release/anas-<version>.tar.gz. Versioning is semver with a
single source of truth — see packaging/README.md.
npm install
npm run dev # anasd in mock mode (no real ZFS needed) + gateway with dev authSee CONTRIBUTING.md for the workflow, tests (unit +
Playwright against a disposable "stunt" PVE node), and project structure, and
docs/ for the architecture (DESIGN.md), the
non-negotiable design principles (PRINCIPLES.md), and
the story backlog (EPICS.md).
ANAS is free software, licensed under the GNU Affero General Public License
v3.0 or later (AGPL-3.0-or-later) — the same license family as Proxmox VE
itself. See LICENSE.
Copyright © 2026 Chris Cebelenski