Files
fips/docs
Johnathan Corgan ee2b70dcd3 Prepare the v0.4.2 release content
Everything the release needs except the version number, which stays at
0.4.2-dev until the tag.

The changelog entry is built from a walk of all 117 commits since v0.4.1
rather than from the open block, which is how the six gaps were found. Two
of them were whole missing effects: the identity write path discarded six
results, so a node configured for a persistent identity could fall through
to an ephemeral one in silence and change its npub, routing address and
mesh address on every start; and the OpenWrt zig download verification was
described only in part. Chronological fix sequences are collapsed to their
net state, and fixes for bugs introduced and closed inside this cycle are
folded away rather than described, since no user ever saw them. Sixty-one
CI and harness commits are summarized in four entries rather than left out,
because they change what a contributor running the local pipeline sees.

Two entries carry effects no commit message mentioned. Clearing every copy
of private key material added Drop to four public types, so their fields
can no longer be moved out, which is source-breaking for anyone using the
crate as a library and is reachable through node.identity on the public
config. And the responder-side rekey narrowing covers five call sites, not
the four the original entry claimed; the ack initiator arm is the one that
deliberately still abandons the whole rekey.

Release notes ship in both the versioned archive and the root mirror, kept
byte-identical. They carry an upgrade section for the two configurations
that now fail validation at start time, since a node that will not restart
after a package upgrade is the sharpest surprise a release can hold.

Four documentation defects are fixed alongside. The readme contradicted
itself about the required Rust version, so the badge no longer asserts one
and the toolchain file is the single source. The persistent-identity
tutorial still sent macOS readers to the Linux configuration directory. The
testing readme claimed twenty chaos scenarios where ten exist, and the
chaos readme documented three that exist nowhere. The bloom-storm scenario
is now described honestly as retired from both runners with no replacement,
which is a coverage gap rather than a migration.

The changelog entry is restructured by subsystem rather than by change kind.
Keep a Changelog puts Added/Changed/Fixed/Security at the top level, which for
a release this size scattered one subsystem across up to four disconnected
places: NAT traversal appeared four times, Admission three, the data plane
three, docs and tooling three. Subsystem is now the top level and the
Keep-a-Changelog kinds sit underneath it, so everything about one part of the
system is in one place. That takes 29 subsections down to 14 sections.

This is a reorganization and not a rewrite. All 80 entries are moved verbatim:
the bullet multiset is identical before and after, the word count is unchanged
at 14814, and everything from the [0.4.1] heading down is untouched. The
departure from Keep a Changelog is deliberate and is the cost of the change;
the trade is per-subsystem readability against per-kind readability, and with
Security at 60% of this release the per-kind reader is the one who loses.

Note this decides the format for [Unreleased] on master and next as well,
which still accumulate v0.5.0 entries in the old shape.

The release notes gain a section on the security content and drop the
references to individual reviews. Most of this release began with reviews
the project did not commission, and the note says so: they are driven by
current frontier language models, their authors say so, the findings have
been legitimate under adversarial re-reading, and none has been reported
active in a deployment. The reviews are described as a class rather than
enumerated, because naming each report tells a reader nothing they need in
order to decide whether to upgrade.

For the same reason the batch section no longer itemises what it leaves
open. It says that some findings are not addressed here, that a wire-format
fix is not a candidate for the 0.4.x line at all, and points at SECURITY.md
for the trust model, which is where that belongs and where it already is.

The notes describe the release rather than how it was assembled. The
opening said a further nineteen fixes landed after the notes were first
drafted, which is drafting history and tells a reader nothing about
whether to upgrade; it now states what the release closes, the added
items folded in beside the rest. The batch heading becomes "Limits,
provenance checks and fail-closed defaults", a description of the work
rather than of its arrival, and the portability paragraph leads with the
two defects fixed instead of with when CI caught them relative to a gate.

At a glance is grouped rather than listed. It was eleven bullets in no
order, with security split across three of them and configuration across
two. The groups are what a reader needs in the order they need it: what
to check before upgrading, security, connectivity and performance, the
new optional keys, and dependencies. The bullets themselves are
unchanged apart from the two that carried the chronology.

The provisional release date moves to 2026-08-24 in all three files that
carry it. It stays provisional: the playbook confirms the date and clears
that wording at the tag, in Phase 7, and this is still Phase 4 content.
All three are updated together because the v0.4.0 release shipped a wrong
date in two of them by scoping the step to one file.
2026-08-24 19:08:27 +01:00
..

FIPS Documentation

FIPS (Free Internetworking Peering System) is a self-organizing encrypted mesh network built on Nostr identities, capable of operating over arbitrary transports — local networks, the public internet, Tor, Bluetooth, or point-to-point links — without central infrastructure.

With FIPS, your machine becomes a node in the mesh with a self-generated cryptographic identity. There are two ways to deploy it.

As an overlay on top of existing IP networks, FIPS lets your node reach any other FIPS node wherever it sits — behind a NAT, on a different ISP, on a phone over cellular, on a laptop with only Bluetooth in range, or behind a Tor onion. The mesh forwards IPv6 traffic transparently and end-to-end encrypted, with no central VPN concentrator or coordinating server.

From the ground up over raw Ethernet, WiFi, or Bluetooth, FIPS provides a complete permissionless network without any pre-existing IP infrastructure, ISP, or DNS. Any node that joins the link gets routable IPv6 addresses, peer discovery, and a path to every other node automatically.

Either way, existing networking software runs over it unchanged: SSH, HTTP servers, file transfer, anything IPv6-native works the same way it would on a local network.

New to FIPS? Start with the Getting Started guide.

Documentation Sections

Tutorials

If you are starting from scratch and want a guided path to a working mesh, go here.

How-To Guides

If you have a specific task in mind — enabling a feature, deploying a component, diagnosing a problem — go here.

Reference

If you need to look up wire formats, configuration keys, command flags, or counter inventories, go here.

Design

If you want to understand how the mesh self-organizes, why FIPS makes the choices it does, or how the pieces fit together, go here.