nftui v1.0.0
The first stable release. Broadens the installation paths (Debian / RPM, Alpine / Arch / OpenWrt packages, a Docker image, plus community Gentoo / AUR references), proves the reproducibility and Nix-flake claims v0.9.0 only asserted with dedicated CI lanes, makes the binary self-identifying (--version), ships a Go-module dependency tarball for offline source builds, and closes the last renderer gap (IPv6 source / destination addresses). Everything in v0.9.0 plus the full post-v0.9.0 candidate pool.
Added
--versionCLI flag (v1.0.0 item V-1):nftui --versionprintsnftui <version>to stdout and exits 0. The release version is injected at build time via Goreleaser-ldflags '-X main.version={{ .Version }}'; a source build falls back to the Go build-info module version (set forgo install <module>@vX.Y.Z), and finally todevfor a plaingo build. Pre-scanned beforeflag.Parse(like--help), so it works regardless of other flags; surfaced in--helpoutput and the man page OPTIONS. PureresolveVersion/writeVersionseams inflags.goare unit-tested.- Debian / RPM packages (v1.0.0 item V-2): every release now attaches
.deband.rpmpackages foramd64andarm64, built from the samenftuibinary as the archives via annfpms:block in.goreleaser.yaml(nfpm, pure-Go — norpmbuild/dpkg-devneeded). They install the binary to/usr/bin, the man page to/usr/share/man/man1, and the docs under/usr/share/doc/nftui, and declare a runtime dependency onnftables(nftui shells out tonft(8)for--configload and table/chain rename). The packages are folded intochecksums.txt, so the existing keyless cosign signature over the checksum file covers them too. New README "Prebuilt packages" install subsection. - Alpine, Arch, and OpenWrt packages (v1.0.0 item V-3): the
nfpms:block now also emits.apk(Alpine),.pkg.tar.zst(Arch — via nfpm'sarchlinuxformat, installable withpacman -U, no AUR account needed), and.ipk(OpenWrt/opkg) — five package formats total, all from the samenftuibinary and folded intochecksums.txt. OpenWrt's migration fromopkgtoapkmeans the.apkshould also serve newer apk-based OpenWrt on matching architectures. nftui deliberately does not auto-publish to the AUR; instead a community-maintainable referencepackaging/aur/PKGBUILD(a-binpackage over the release tarball) is provided, and the release.pkg.tar.zstinstalls natively without the AUR. README "Prebuilt packages" subsection expanded with a per-format install table. Community-maintainable reference packaging for source distros is also provided on a not-published basis:packaging/aur/PKGBUILD(Arch-bin) and a Gentoo packaging set underpackaging/gentoo/—nftui-0.9.0.ebuild(from source viago-module.eclass) andnftui-bin-0.9.0.ebuild(prebuilt binary), which block each other since both install/usr/bin/nftui, a sharedmetadata.xml, and aREADME.mdcovering overlay setup and the source build's dependency-tarball requirement. - Reproducible-build CI check (v1.0.0 item V-4): a new
reproducibilityjob in.github/workflows/ci.ymlbuilds the release binaries twice withgoreleaser build --snapshotand fails if the two differ, verifying that themod_timestamp+-trimpath+CGO_ENABLED=0build is byte-for-byte reproducible (only the compiled binaries are compared; archive / package containers are out of scope). Gated on the unit-test job so it skips a non-compiling commit. Validated locally: two independent builds produced identicalamd64andarm64binaries. - Nix flake CI lane (v1.0.0 item V-5): a new
nixjob in.github/workflows/ci.ymlinstalls Nix (cachix/install-nix-action) and runsnix flake check+nix build .#default, buildingflake.nixend-to-end on every push — closing the gap that the flake was hand-validated against thebuildGoModuleschema in v0.9.0 but never actually built. Gated on the unit-test job. One-time bootstrap:flake.nixshipsvendorHash = lib.fakeHash, so the first CI run fails and prints the realsha256-...to pin intoflake.nix; the lane then guards the hash againstgo.sumdrift. - Go module dependency tarball in the release (v1.0.0 item V-7):
.github/workflows/release.ymlnow generates a reproduciblenftui-<ver>-deps.tar.xz(viascripts/gen-deps-tarball.sh— theGOMODCACHEfromgo mod download -modcacherw, packed with deterministictar+ single-threadedxz, mtime pinned to the tagged commit) andgh release uploads it to each release from v1.0.0 onward. It makes offline source builds work without a maintainer-hosted tarball — chiefly the from-source Gentoo ebuild, whosego-module.eclassforbids network access during the build. Integrity is rooted ingo.sum(every module hash is pinned, andgo.sumships in the repo + source archive) and the tarball is covered by the SLSA build-provenance attestation (gh attestation verify); it is not added tochecksums.txt(cosign has already signed that by then). Verified locally to be byte-reproducible across two builds. - IPv6 source/destination address rendering (v1.0.0 item V-6): the rule renderer's
payloadToHumanReadablepath now recognizes IPv6saddr/daddr(the 16-byte network-header fields at offsets 8 / 24) and renders them with theip6qualifier and a proper v6 address / CIDR — previously these fell through to a rawpayload[network header+8:16] == 0x…hex form. Covers exact addresses, byte-aligned / bitwise CIDRs, and anonymous-set forms (ip6 saddr { … }). Test-first:payloadToHumanReadable+ruleToHumanReadableWithSetsunit cases, new manual-test fixtures inexamples/example-nftables-01.conf(ip6 ip6_hdr_demo), and a root integration test (TestIntegration_IPv6AddressRoundtrip) round-tripping the forms through the live kernel. Resolves the v0.9.0 audit follow-up L-6. - Docker image: a root
Dockerfile(multi-stage —golang:1.25.8-alpinebuild,alpine:3.22runtime) produces a small (~17 MB) image that bundles thenft(8)CLI nftui shells out to at runtime; the version string is injectable via--build-arg VERSION=<tag>into the same-ldflags '-X main.version=…'used by the other release paths (defaults todev). Because nftui manages the host ruleset, the container is run with--network host --cap-add NET_ADMINand an interactive TTY. Adocker-compose.ymlwires the same options up (docker compose run --rm nftui), and a.dockerignorekeeps the build context to the Go sources + man page. Verified locally: image builds,nftui --versionprints the injected string, the bundlednftresolves, anddocker compose configvalidates. New README "Docker" installation subsection. This was previously a declined packaging candidate; reconsidered and added at the user's request.