ratatoskr @ v0.2.0
integrity
- size
- 212.1 KiB
- downloaded
- last checked
- overlays
- go
- detected
- go module github.com/voluminor/ratatoskr
release notes
New modules
mod/probe (formerly mod/traceroute) — #6, #8
Network topology explorer and path tracer for Yggdrasil. BFS-based peer topology scan via debug_remoteGetPeers, spanning tree path lookup, pathfinder hop resolution, and combined Trace() with automatic polling. Includes worker pool, TTL cache with self-terminating cleanup goroutine, and 13 sentinel errors. Renamed from mod/traceroute in #8 to better reflect the module's scope; CLI flags moved from -go.traceroute.* to -go.probe.*.
mod/ninfo — #8
Remote NodeInfo querying. Query any Yggdrasil node's NodeInfo by public key or address. Supports multiple address formats: 64-char hex, <hex>.pk.ygg, [ipv6]:port, bare IPv6. Automatically parses sigils from ratatoskr nodes. Includes a retry loop to handle Yggdrasil's internal 6-second nodeinfo timeout on fresh nodes that haven't converged routing yet.
mod/sigils — #8
Typed NodeInfo block system. Each sigil owns a set of keys and handles serialization/deserialization. Built-in sigils: info (name, description, software metadata), public (public key + derived addresses), inet (external IP/port), services (named endpoints). Assembled by sigil_core and integrated into both NodeInfo publishing and ninfo response parsing. Code generation (_generate/sigils) produces accessor boilerplate from sigil definitions.
mod/settings — #7
Three-layer config resolution (defaults < config file < CLI flags), config chain resolution with cycle detection (up to 32 redirects), pretty-save with schema-defined field order and comments, Yggdrasil NodeConfig ↔ settings conversion. Comprehensive test coverage including cross-platform path handling.
New: CLI executable — #7
cmd/ratatoskr — full CLI with subcommands: key generation/mining/conversion, config generate/import/export with presets, peer probing, TCP/UDP port forwarding through Yggdrasil, and network topology traceroute.
New: CLI ask command — #8
-go.ask.addr queries a remote node's NodeInfo via the CLI. Text and JSON output. Accepts all address formats supported by mod/ninfo.
Changes
mod/peermgr: MinPeers watch (#8) — background monitoring of active peer count. When Up peers stay at or below the threshold forMinPeersConfirmations(default 3) consecutive ticks, an unscheduled optimization is triggered. New errors:ErrMinPeersTooHigh,ErrMinPeersTooMany.- Sentinel errors extraction (#6) — extracted inline
fmt.Errorferrors into exportedvarsentinels across all modules, enablingerrors.Is()checks from consumer code. - Settings code generator (#7) —
_generate/settings/readssettings.ymland produces typed Go structs, enums, defaults, CLI flag registration, config file parsers (JSON/YAML/HJSON), save logic, help text, and field ordering intotarget/settings/. Duration fields are transparently normalized across all three formats. - Dependency license generator (#7) —
_generate/dependencies/scansgo.modfiles across the workspace, fetches license info, and generates a dependency map for--infooutput. - HTTP example overhaul (#6) — traceroute UI (trace by public key, BFS tree viewer via WebSocket), real-time bandwidth chart (1s resolution), per-peer rate display, QR code sharing. Fixed broken rate display and partial trace result handling.
settings.ymlcleanup (#8) — renamedgo.peer_info.url→go.peer_info.peer; changedgo.probe.peerfromstringto[]string; added YAML anchors for reuse across commands.- Root package (#8) —
ratatoskr.New()acceptsConfigObj.Sigils; newAsk()/AskAddr()methods onObj.
Fixes
- Broken bandwidth rate display in HTTP example (#6)
- Non-functional chunk trailer headers removed (#6)
- General fixes and corrections (#5)
Docs & CI
- README badges: Go Report Card, directory file count, code size, repo size
- Comprehensive documentation for
traceroute/probeandsettingsmodules in bothREADME.mdandREADME.RU.md - Added Contributor Covenant Code of Conduct
- Disabled
cross-buildCI job (#6)
Full Changelog: https://github.com/voluminor/ratatoskr/commits/v0.2.0
download
curl -fL -o v0.2.0.zip https://ratatoskr.space/pkg/ratatoskr/v0.2.0.zip
printf '%s %s\n' '8ac351689c4d4ed8bc6b39d102e8f068f4950f21add21f175bd9567c60de3a1c' 'v0.2.0.zip' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ratatoskr/v0.2.0.zip"
$out = "v0.2.0.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "8ac351689c4d4ed8bc6b39d102e8f068f4950f21add21f175bd9567c60de3a1c") { throw "sha256 mismatch" }
curl -fL -o v0.2.0.tar.gz https://ratatoskr.space/pkg/ratatoskr/v0.2.0.tar.gz
printf '%s %s\n' '064b3dbdd16f3d30e32737ba4f137cf253e22cb9cf88b31db3e98da2889e5544' 'v0.2.0.tar.gz' | sha256sum -c -
$url = "https://ratatoskr.space/pkg/ratatoskr/v0.2.0.tar.gz"
$out = "v0.2.0.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "064b3dbdd16f3d30e32737ba4f137cf253e22cb9cf88b31db3e98da2889e5544") { throw "sha256 mismatch" }
download via yggdrasil mesh
curl -fL -o v0.2.0.zip http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ratatoskr/v0.2.0.zip
printf '%s %s\n' '8ac351689c4d4ed8bc6b39d102e8f068f4950f21add21f175bd9567c60de3a1c' 'v0.2.0.zip' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ratatoskr/v0.2.0.zip"
$out = "v0.2.0.zip"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "8ac351689c4d4ed8bc6b39d102e8f068f4950f21add21f175bd9567c60de3a1c") { throw "sha256 mismatch" }
curl -fL -o v0.2.0.tar.gz http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ratatoskr/v0.2.0.tar.gz
printf '%s %s\n' '064b3dbdd16f3d30e32737ba4f137cf253e22cb9cf88b31db3e98da2889e5544' 'v0.2.0.tar.gz' | sha256sum -c -
$url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ratatoskr/v0.2.0.tar.gz"
$out = "v0.2.0.tar.gz"
Invoke-WebRequest -Uri $url -OutFile $out
if ((Get-FileHash $out -Algorithm SHA256).Hash.ToLowerInvariant() -ne "064b3dbdd16f3d30e32737ba4f137cf253e22cb9cf88b31db3e98da2889e5544") { throw "sha256 mismatch" }
| artifact | format | size | hashes |
|---|---|---|---|
| v0.2.0.zip | zip | 214.5 KiB |
blake3-24 9ba36ee77994ef82e74178cadbf34536fa6340ef2c5b386a
sha256 8ac351689c4d4ed8bc6b39d102e8f068f4950f21add21f175bd9567c60de3a1c
sha1 15fc67fde8688ff6fea041ab1b02b517d70dc2ce
|
| v0.2.0.tar.gz | tar.gz | 153.6 KiB |
blake3-24 3b3b14383ccabf79ec14224780a309645a2cb71d165202ad
sha256 064b3dbdd16f3d30e32737ba4f137cf253e22cb9cf88b31db3e98da2889e5544
sha1 adec641a4bfb6fce6761bf32629967cecb4c41fb
|
go module archive
module zip with the module path rewritten to this mirror; fetched by go get through the
GOPROXY route
| artifact | format | size | hashes |
|---|---|---|---|
| v0.2.0.zip | zip | 217.2 KiB |
blake3-24 cf8d118eedd0894f973fa069cd8aae9e6a8f386c1981a261
sha256 d473d95eceae68aff301e582bdedab1d26ad6882df4e759d45f6496bf3c5a4ae
sha1 ad0ae9f95f864884c6234dd258dd33d335fb1004
|
install
http_archive(
name = "ratatoskr",
urls = ["https://ratatoskr.space/pkg/ratatoskr/v0.2.0.tar.gz"],
integrity = "sha256-Bks9vdFvPTDjJze6TxN88lPiLLnPiLMds+mNooieVUQ=",
strip_prefix = "ratatoskr-v0.2.0",
)
.url = "https://ratatoskr.space/pkg/ratatoskr/v0.2.0.tar.gz",
GOPROXY=https://ratatoskr.space GOSUMDB=off go get ratatoskr.space/pkg/ratatoskr@v0.2.0
install via yggdrasil mesh
http_archive(
name = "ratatoskr",
urls = ["http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ratatoskr/v0.2.0.tar.gz"],
integrity = "sha256-Bks9vdFvPTDjJze6TxN88lPiLLnPiLMds+mNooieVUQ=",
strip_prefix = "ratatoskr-v0.2.0",
)
.url = "http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ratatoskr/v0.2.0.tar.gz",
GOPROXY=http://14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg GOSUMDB=off GOINSECURE=14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/* go get 14cc7d57b5e70f679b851fe5b272ce17c70632ff4beb5b35ab64bc706b2485af.pk.ygg/pkg/ratatoskr@v0.2.0