v0.7.0
Prebuilt binaries for x86_64-linux, aarch64-linux, and aarch64-macos are attached below, each with a .sha256 checksum. Grab the one for your platform, chmod +x it, and run swoosh id to mint your node key.
Grant one service to a device, a whole person, or anyone; a clearer serve banner.
New
swoosh grant issue <svc> --for <who>bind a slip to a device or a whole fleet, with the kind in a
typed prefix:--for <person>/<device>or a raw key binds ONE device (standing access, locked to one
machine's key, inert if stolen, non-delegable);--for fleet:<person>or--for fleet:<signet-key>
binds a whole fleet (every device that person's signet vouches for, now or later, revocable at once). A
bare--for <person>is refused: you typefleet:to widen, so a device bind never silently becomes a
fleet bind.fleet:<person>binds that person's signet recorded withswoosh contact signet.swoosh contact signet <petname> <key>record a person's signet root under their petname, so
grant issue --for fleet:<petname>binds their fleet by name instead of a pasted key.swoosh grant lslist the grants you have issued, grouped by service, each with its holder and
remaining lifetime.swoosh grant revoke <peer>refuse every grant you issued to a device or person at once; the
existingrevoke <link>still refuses a single link. Both write a node-local denylist the gate loads
whenservestarts, so a revoke takes effect on the node's nextserve, not on a running one (live
revocation lands with the daemon).swoosh serve --public <svc>open named services to anyone, unauthenticated, per service: the
deliberate opt-out from the signet gate. A service with no safe public form, such as a keyless shell,
is refused by name.swoosh service --at <peer>read the services a peer serves and the gate on each, aSERVICE GATE
table; you see only what that peer's gate admits you for. Reading your OWN node's services is coming with
the daemon.swoosh serve <name>=fetch:<origin>pin a fetch service to one origin: the node fetches only that
origin and refuses any other before it connects. A barefetch:is unconstrained, but opening one to the
public (--public) now requires a scope, so an open fetch service can never be an anonymous any-origin
relay. Origin URLs carrying userinfo are rejected.swoosh ida short alias forswoosh identity: print this node's key, minting one if there is none.
Changed
signetis now a reserved device label. A contact device literally labelledsignet(added as
alice/signetbefore this release) is now read as that person's signet root, not a device. Pre-release
this is near-zero incidence; if you have one, re-add it under a different label.swoosh serve --for <duration>is now--expires <duration>.--foris reserved for naming WHO a
grant binds (grant issue --for), so serve's bounded-time timer moved to--expires, matching
grant issue --expires. Same local timer;--forno longer sets a duration.- Reformatted
swoosh servebanner. The node id stands alone, copy-clean; ahow peers reach you
section names each channel (internet, LAN, direct); services are grouped by who can reach them, safest
first, with one escalating danger marker so an open service always reads louder than a gated one. swoosh adoptno longer takes the authkey on argv. The authkey is a device secret, and the command
line is visible to other processes (ps,/proc). Pass it as-(stdin),@<path>(a file), or set
SWOOSH_AUTHKEY; a literal still works but is discouraged.- Clearer
--presenthelp. Thesheer:link flag on the reach verbs (ping,speed,status,
beam,forward,service,stop) now reads plainly: your own devices need no link, the dial
presents your membership badge; pass asheer:slip only to reach as a delegate. control.*readsnever publicin the serve banner. The always-gated node-control line is glossed
never public(it can never be opened with--public, unlike the other gated services), instead of
always family-gated.- A refused fan-out no longer reads as unreachable. When
pingorstatusreaches a peer but the gate
refuses the probe, the error saysreached, but refusedand stops there. Over quirk it no longer also
prints thepass --peeraddressing hint, which applies only when the peer was never reached at all. - Reach verbs take petnames uniformly.
stopand the other reach verbs now resolve a petname
(alice,me/laptop) the same waypingdid, instead of taking only a raw key. swoosh serveexits 0 on a gracefulcontrol.stop. A requested stop is a success, so a stopped node
no longer exits non-zero.