Skip to content

network-output/no

Repository files navigation

no

no (network-output)

A fast, structured networking CLI for HTTP, WebSocket, TCP, UDP, MQTT, SSE, DNS, Ping, and WHOIS.

Docs: network-output.com

Installation

Cargo

cargo install network-output

Homebrew

brew install network-output/tap/network-output

npm

npx @network-output/no

For a permanent install:

npm install -g @network-output/no

Scoop (Windows)

scoop bucket add network-output https://github.com/network-output/scoop-bucket
scoop install no

GitHub Releases

Download prebuilt binaries from GitHub Releases.

Build from source

cargo install --path .

Usage

HTTP

no http GET https://httpbin.org/get
no http POST https://api.example.com/data -b '{"key":"value"}' -H "Content-Type:application/json"
no http GET https://api.example.com --bearer $TOKEN
no http GET https://api.example.com --basic user:pass
no http GET https://example.com/file.tar.gz -o file.tar.gz
no http POST https://api.example.com/upload --stdin

WebSocket

no ws listen ws://localhost:8080
no ws send ws://localhost:8080 -m "hello"

TCP

no tcp connect localhost:9090 -m "hello"
no tcp connect [::1]:9090 -m "hello"     # IPv6
no tcp connect localhost:9090 --stdin
no tcp listen :9090
no tcp listen [::]:9090                   # IPv6 listen

MQTT

no mqtt sub localhost:1883 -t "sensor/temp"
no mqtt sub [::1]:1883 -t "sensor/temp"                        # IPv6
no mqtt pub localhost:1883 -t "sensor/temp" -m '{"value":22.5}'

UDP

no udp send 127.0.0.1:9090 -m "hello"
no udp send [::1]:9090 -m "hello"          # IPv6
no udp send 127.0.0.1:9090 -m "ping" --wait 3s
no udp listen :9090
no udp listen [::]:9090                     # IPv6 listen

SSE

no sse https://example.com/events
no sse https://example.com/events --bearer $TOKEN
no sse https://example.com/events -H "X-Custom:value"

DNS

no dns example.com
no dns example.com AAAA
no dns google.com MX
no dns 8.8.8.8                    # auto-detects reverse (PTR) lookup
no dns example.com --server 1.1.1.1
no dns example.com --server 2001:4860:4860::8888   # IPv6 DNS server

Ping

no ping 127.0.0.1
no ping ::1                                  # IPv6
no ping example.com -n 2
no ping 127.0.0.1 --interval 500ms
no --jq '.data.time_ms' ping 127.0.0.1 -n 3

WHOIS

no whois example.com
no whois 8.8.8.8
no whois example.com --server whois.verisign-grs.com
no --jq '.data.response' whois example.com

jq

Filter JSON from stdin using jq expressions:

echo '{"a":1,"b":2}' | no jq '.a'
no http GET https://httpbin.org/get | no jq '.data.body'

The --jq global flag applies a jq filter to any command's output:

no --jq '.data.status' http GET https://httpbin.org/get
no --jq '.data.payload' mqtt sub localhost:1883 -t "sensor/temp"

Global Flags

Flag Description
--json Force JSON output
--pretty Force pretty output
--timeout <DURATION> Request timeout (e.g. 5s, 300ms, 1m)
--no-color Disable colors
-v, --verbose Verbose output
-n, --count <N> Stop after N data messages (streaming protocols)
--jq <EXPR> Filter output with a jq expression

Output Format

By default, output is pretty-printed when connected to a terminal and newline-delimited JSON when piped. Use --json or --pretty to override.

JSON output follows a consistent envelope:

{"type":"response","protocol":"http","timestamp":"2024-01-01T00:00:00.000Z","data":{"status":200,"headers":{},"body":{}}}
Field Description
type response, message, connection, or error
protocol http, ws, tcp, udp, mqtt, sse, dns, ping, or whois
timestamp ISO 8601 timestamp with millisecond precision (UTC)
data Protocol-specific payload

Exit Codes

Code Meaning
0 Success
1 Connection / IO error
2 Protocol error
3 Timeout
4 Invalid input

Environment Variables

Variable Description
NO_AUTH_TOKEN Fallback bearer token for authenticated requests
NO_BASIC_AUTH Fallback basic auth credentials as user:pass

Documentation

Full documentation is available at network-output.com, covering all protocols, output format, global flags, exit codes, environment variables, and URL normalization rules.

API documentation can be generated with:

cargo doc --no-deps --open

Development

just check    # fmt + clippy + test
just build    # debug build
just release  # release build

See AGENTS.md for development conventions.

AI Skills

AI skills that teach agents how to use no for networking tasks. Compatible with any agent that supports the Agent Skills open standard: Claude Code, Codex CLI, Cursor, Gemini CLI, and others.

Skill Description
http-requests HTTP API testing (GET, POST, PUT, DELETE, auth, headers, body, downloads)
websocket-debugging WebSocket connection debugging (listen, send, lifecycle monitoring)
network-diagnostics DNS lookups, ICMP ping, WHOIS queries
mqtt-messaging MQTT publish/subscribe messaging
tcp-udp-testing Raw TCP connect/listen, UDP send/listen
sse-monitoring Server-Sent Events stream monitoring
output-filtering jq filtering (--jq flag and standalone no jq)

Install the plugin

From GitHub:

claude --plugin network-output/no-skills

Built into no:

no skills install

This writes the plugin to ~/.claude/plugins/no/.

Local (from source):

claude --plugin-dir ./claude-plugin

See claude-plugin/README.md for full details.

About

HTTP, WebSocket, TCP, UDP, DNS, Ping, WHOIS, MQTT, and SSE with consistent JSON output. Built for machines, readable by humans.

Resources

License

Security policy

Stars

Watchers

Forks

Sponsor this project

 

Contributors

Languages