One resolver chain
Every Pi-hole asks the master's first, so the whole network shares one blocklist and every lookup leaves through the master's exit. Quad9 only answers while the master is unreachable.
DNS & names →Open source · self-hosted · no accounts
Kiwi Network is a set of open-source tools. kiwi-server turns a VPS and the machines you own into a WireGuard mesh with its own DNS, its own certificate authority and your services behind it. kiwi-updater puts privacy apps on your Fedora Atomic desktop and keeps them current, straight from git.
hosts:
gate: # a VPS
role: master
target: debian
master:
vpn-client: { vpn_provider: mullvad, … }
vpn-server: { wg_host: vpn.example.org }
sh3: # a box at home
role: node-cloud
target: ucore
node-cloud:
vpn-client: { wireguard_config: secrets/sh3.home.conf }
$ kiwi-server build fleet.yaml
→ a first-boot script and an unattended install ISO per host
The network
A Kiwi Network is a WireGuard mesh with one hub, the kiwi-master. It is the only machine that has to be reachable from the Internet. Nodes, laptops, phones and routers dial out to it and meet in the mesh.
master · a VPS or any reachable box
10.8.0.0/16 · every device dials out to the masterEvery Pi-hole asks the master's first, so the whole network shares one blocklist and every lookup leaves through the master's exit. Quad9 only answers while the master is unreachable.
DNS & names →Services are cloud.sh3.home, vault.sh3.home. .home is never delegated as a public TLD, so nobody else can register your names or get a certificate for them.
One certificate authority for the fleet, which can be name-constrained to your domain. Every machine kiwi-server builds trusts it; import kiwiCA.pem on your devices and internal HTTPS just works.
Updates install continuously: Zincati on CoreOS, staged rpm-ostree on uCore, unattended-upgrades on Debian. A machine only reboots inside the window you choose.
Updates →kiwi-server
kiwi-server renders each host's role into one bash script, an Ignition or preseed config and an unattended install ISO. All templating happens on your machine; the host only needs docker. A CLI and a GTK4 app, installed in ~/.local.
kiwi-server init
$EDITOR fleet.yaml
kiwi-server validate fleet.yaml
kiwi-server build fleet.yaml
sudo dd if=output/sh3/sh3.iso \
of=/dev/sdX bs=4M oflag=sync
The ISO installs to the disk you named without asking, reboots, and runs the role once. The stack comes up; kiwi-stack runs it from then on.
masterThe WireGuard entry point with the double hop, Pi-hole and Tor.
node-gwA LAN gateway through the VPN, with DNS, DHCP relay and a download station.
node-cloudYour cloud and your passwords, on the LAN and in the mesh.
bareAdmin user, SSH keys, automatic updates. A clean base to build on.
Targets Fedora CoreOSuCoreDebian stable kiwi-server quick start →
The desktop
Built for Fedora Silverblue and Bluefin. kiwi-updater installs apps from git catalogs: an app is a repo with a kiwi.manifest and an install.sh, a release is a git tag. Everything goes in your home; an app that needs root says why before it asks. The immutable /usr is never touched.
curl -fsSL https://raw.githubusercontent.com/derlocke-ng/kiwi-updater/main/get-kiwi.sh | bash -s -- --with-system
kiwi catalog add https://github.com/derlocke-ng/kiwi-catalog.git
A fail-closed VPN kill switch for GNOME. A root nftables daemon, driven from Quick Settings, a GTK4 app or the CLI, never asking for a password. If the tunnel drops, nothing leaves.
Isolated Windows 11 browser identities, each with its own storage, exit, ad-blocking DNS and frozen fingerprint. The kill switch is the absence of a route.
Exits for kiwi-fox: Tor (a circuit per profile), a VPN through gluetun, 9proxy residential, the Mysterium dVPN. Each one speaks SOCKS5 and nothing else.
Turns a fresh Bluefin into your workstation from plain list files: packages, Flatpaks, extensions, Nextcloud sync, dconf, the login screen. --export clones a machine.
pweb serves a folder over HTTPS, select-server picks a host from your SSH config, tethering fixes the TTL for hotspot traffic.
Itself an app in the catalog. One user timer updates everything every six hours, root halves through a fixed-purpose polkit helper. kiwi diff before, kiwi pin to hold.
Also: kiwi-gen, SSH and TLS keys and certificates made offline in your browser, in an encrypted vault (try it).
Status
Young projects, described as they are. "Released" means a version tag, which is what kiwi-updater installs.
| Repository | State | Notes |
|---|---|---|
| kiwi-server | main · 2.2.0 | Generators tested in CI; first boot on real hardware not yet verified from the new pipeline. Not in the catalog: kiwi add it. |
| kiwi-updater | v2.0.0 | Catalog registry and tag signatures planned. |
| kiwi-killswitch | v0.2.2 | Not independently audited. |
| ensconce | v2.1.1 | |
| kiwi-fox | v0.1.3 | The provider subsystem is on main, after v0.1.3. |
| kiwi-plugin-tor · vpn · 9proxy · myst | main · 0.1.0 | Unit-tested; VPN, 9proxy and Mysterium need a real account to validate end to end. |
| kiwi-cli-tools-desktop | v1.0.0 | |
| kiwi-gen | web page | MIT. Runs from disk or GitHub Pages. |
| kiwi-pentesting | scaffold | Core library and catalog only; no CLI, GUI or installer yet. |
| kiwi-cloud, kiwi-vpn-monitor | superseded | By kiwi-server's node-cloud and by kiwi-killswitch. |