RIPE Atlas from the terminal: a scriptable CLI and a full-screen TUI (ratatui + crossterm, the stack Codex's TUI uses).
- Search probes, anchors and measurements; inspect details.
- Render results for every type: ping, traceroute (hop table, ICMP errors, MPLS), DNS (dig-style, decoded
abuf), HTTP, TLS certificates (subject/issuer/expiry/SHA-256), NTP. - Stream live results, probe connection events, or measurement metadata from the Streaming API.
- Create measurements with probe selectors, local validation and a credit-cost estimate (
--dry-run), then watch results arrive. - Status checks with Nagios exit codes, ping statistics, credits, API keys, built-in/well-known measurement catalogue.
Design notes: docs/DESIGN.md.
cargo install --path .
ratlas completions fish > ~/.config/fish/completions/ratlas.fish
ratlas manpages -d ~/.local/share/man/man1 # ratlas.1 + one page per subcommandArch Linux: cd packaging/arch && makepkg -si builds a package with the fish completions and man pages included.
Public data needs no key. Creating/stopping measurements, --mine, credits and keys need an API key from https://atlas.ripe.net/keys/ with the matching permissions.
Key precedence: --key / RATLAS_KEY → ATLAS_KEY → api_key in the config file.
ratlas config set api_key 01234567-89ab-cdef-0123-456789abcdef
ratlas config path # ~/.config/ratlas/config.toml (written with mode 0600)Other config keys: api_url, stream_url, probes (default probe count for measure and the shortcuts, 50), from (default selector, area:WW), bill_to.
ratlas # or: ratlas tui| Key | Action |
|---|---|
1–5, Tab |
Measurements, Probes, Anchors, Stream, Credits |
j/k, arrows, PgUp/PgDn, g/G |
Move |
/ |
Search |
f / F |
Cycle type / status filter |
m |
Only my measurements |
n |
Load next page |
Enter |
Details: measurement → latest result per probe, fastest first, with probe location/ASN; measurement detail → selected probe |
s |
Live results via WebSocket |
x |
Stop measurement (asks first) |
o |
Open in browser |
: |
Command: msm 1001, probe 6001, anchor 2182, measure ping 1.1.1.1 -n 5 --from country:NL, stream -m 1001 |
? |
Help |
q, Esc |
Back / quit |
ratlas probe search -c NL --status connected -t system-ipv6-works -n 20
ratlas probe search --near 52.37,4.89:10
ratlas probe show 6001
ratlas msm search -t traceroute --status ongoing --target google
ratlas msm show 5001
ratlas msm latest 1001 --summary
ratlas msm results 1001 --start 2h -p 7602 -n 10
ratlas msm stats 1001 -p 7602 # one probe per request; the server currently ignores --resolution/--start (ratlas warns)
ratlas msm check 1040425 --max-packet-loss 50 && echo OK # exit 0 OK, 2 alert, 3 unknown
ratlas ping 1.1.1.1 # 50 random probes, one-off; opens the TUI on the live results
ratlas traceroute example.com -n 10 --from country:NL
ratlas dns ripe.net -q AAAA # shortcuts = `measure <type> … --watch`, shown in the TUI on a terminal
ratlas measure ping 1.1.1.1 --from country:NL -n 5 --dry-run
ratlas measure traceroute example.com --protocol TCP --port 443 --from asn:3333 -n 3 --watch # streams to stdout
ratlas measure dns ripe.net -q AAAA --from region:europe # uses probe resolvers
ratlas measure sslcert atlas.ripe.net --interval 3600 --stop 2d
ratlas stream -m 1001 --summary
ratlas stream --kind probestatus -n 20
ratlas builtin ping k-root
ratlas creditsOutput: -o text (default), -o json, -o jsonl, -o csv; --ids-only on searches; --no-color / NO_COLOR.
Probe selectors (--from, repeatable): area:WW|West|North-Central|South-Central|North-East|South-East, country:NL, countries:NL,DE, region:europe (UN/RIR regions), asn:3333, prefix:193.0.0.0/16, probes:1,2,3, msm:1001.
Times (--start, --stop): RFC3339, YYYY-MM-DD, unix seconds, or relative 30m/6h/2d (past for result queries, future for scheduling).
- Credit estimates follow the documented formulas (ping
packets × (size/1500+1), traceroute ×10, DNS 10/20, TLS 10; one-offs cost double). HTTP/NTP costs are not documented and are reported as unknown. /latest/and status checks are cached server-side for 5 minutes;msm resultsstreams JSONL and never buffers the full history.- All server-provided strings are stripped of control characters before display.