Open Source · MIT License · v1.0

Network Observability
Redefined for Modern Teams

Real-time packet capture with deep protocol inspection, GeoIP & threat intelligence, and a SaaS hub for fleet-wide visibility — all in one platform built with Rust, Go, and React.

🦀 Rust 2021 🐹 Go 1.22 ⚛️ React 18 🪟 Tauri 2.x 🗄️ ClickHouse 📡 eBPF
9+
Protocols Decoded
3
Platforms
100k+
Rows Without Jank
p99
Latency Tracking
0
Cloud Dependencies
MIT
License

Three tools. One platform.

NetScope ships as three complementary pieces that work standalone or together as a unified observability stack.

🖥️

Desktop Application

Wireshark-inspired 3-pane UI for macOS, Windows, and Linux. Live capture, GeoIP flags, threat badges, certificate audit, HTTP analytics, and a service dependency map — all without leaving the app.

CLI Agent

Headless netscope-agent for servers, containers, and CI environments. eBPF-powered capture on Linux requires no root at runtime. Streams flows to the hub or saves to JSONL.

🌐

SaaS Hub

Multi-tenant Go API with Kafka ingestion and ClickHouse analytics. Real-time SSE streaming, RBAC, alerting with webhook & SMTP delivery, compliance reports, and a Next.js dashboard.

Everything you need to see your network clearly

From kernel-level capture to fleet-wide dashboards — every layer of the stack is covered.

📋

Virtualised Packet List

Handles 100,000+ rows without jank using TanStack Virtual. Two-line rows show IP plus GeoIP / ASN sub-line. Auto-scrolls during live capture.

🌍

GeoIP Enrichment

MaxMind GeoLite2-City + ASN databases auto-loaded from ~/.netscope/. Country flag emoji and ASN on every row. Offline — no API calls, no rate limits.

⚠️

Threat Intelligence

Offline CIDR blocklist covering Tor exits, C2 infrastructure, and port heuristics. Color-coded HIGH / MED / LOW badges with full reason breakdown in the detail pane.

🗺️

Service Dependency Map

SVG force-directed graph of all IP-to-IP connections. Nodes sized by flow count, edges colored by protocol. Pan, zoom, hover tooltips with geo & ASN data.

📊

HTTP Analytics

Per-endpoint p50 / p95 / p99 latency bars, error rates, and request counts. Updates live during capture. Sort by latency or error rate to pinpoint slow endpoints.

🛡️

TLS Certificate Fleet

Sidebar aggregates every TLS cert seen in the session sorted by severity: expired → critical (<7d) → warning (<30d) → valid. Red badge count on toolbar.

⛓️

Hub Connect Mode

Query historical fleet-wide flows from a running hub directly inside the desktop UI. Hub flows merge with local capture, tagged with a blue badge.

💾

Session Persistence

Save and load .nscope sessions (SQLite). Sessions survive restart and are forward-compatible — new fields default gracefully when loading older files.

🔍

Live Filtering

Protocol shortcuts (http, dns, tls, errors, threats, hub) plus free-text IP/port/keyword search apply instantly. BPF expressions pre-filter at the kernel level.

📡

eBPF Agent (Linux)

Kernel-side eBPF program for high-throughput capture without root at runtime. Complements the libpcap path and scales to cloud-native environments.

🔄

TCP Reassembly

Out-of-order segment buffering, retransmission counting, stream fragmentation handling. SYN/FIN/RST state machine per connection keyed by 4-tuple.

🌐

HTTP/1.1 Decoding

Full request/response pairing via httparse. Extracts method, path, host, status, all headers, body preview (512 bytes), and per-request latency.

HTTP/2 + gRPC

Binary frame walker with HPACK header decompression. Stream ID pairing, per-stream latency measurement. gRPC service/method extraction from :path and grpc-status.

🔒

TLS Handshake Inspection

ClientHello SNI + cipher suites, ServerHello negotiated version, Certificate CN/SANs/expiry, Alert decoding. Detects weak ciphers (RC4, 3DES, NULL, EXPORT).

🔎

DNS Decoding

Query/response pairing from DNS wire format. Supports A, AAAA, CNAME, MX, TXT, PTR record types. Extracts RCODE and TTLs from every answer section.

📶

ICMP & ARP

Echo request/reply with RTT measurement. ARP who-has/is-at with sender and target IP/MAC pairs. Human-readable type/code strings for all ICMP messages.

🎯

BPF Filters

Pre-filter packets at the kernel level using standard BPF expressions: tcp port 443, host 8.8.8.8, not arp — dramatically reduces CPU overhead at high traffic rates.

📥

Flow Ingestion

Agents POST batches via /api/v1/ingest. Kafka path for high-throughput with direct ClickHouse write as fallback. Async batch writer keeps latency low.

📡

Real-time SSE Stream

GET /api/v1/flows/stream fans out to all connected dashboard clients instantly. Rate-limited per-client to prevent runaway subscribers from overwhelming the server.

📈

ClickHouse Analytics

Time-series flow counts, per-endpoint p50/p95/p99 latency, DNS NXDOMAIN rates. Per-minute timeseries with 1h/6h/24h ranges rendered with Recharts in the dashboard.

🔔

Smart Alerting

Configurable threshold rules: flows/min, HTTP error rate, DNS NXDOMAIN rate, anomaly σ. Webhook + SMTP delivery with exponential back-off retry (1s → 5s → 30s).

📋

Compliance Reports

One-click PCI-DSS, HIPAA, and CIS benchmark report generation from ClickHouse data. Schedule and export to share with auditors and security teams.

🔑

RBAC & Scoped Tokens

Admin/viewer roles on API tokens. RequireAdmin middleware gates all write endpoints. Enrolled agents receive a unique viewer-scoped token — never the global admin key.

📓

Audit Log

Every authenticated API call recorded to audit_events: token ID, role, method, path, status, latency, and client IP. Queryable via GET /api/v1/audit with 90-day TTL.

☸️

Kubernetes Ready

Helm chart and manifests for deploying hub + ClickHouse + Kafka in-cluster. OpenTelemetry export to any OTLP-compatible backend. CI/CD matrix builds all platforms.

🔏

API Key Proxy

Server-side Next.js proxy injects HUB_API_KEY from server-only env vars. API keys never reach the browser bundle. SSE stream URL has no api_key= query parameter.

🚫

SSRF Prevention

Webhook URLs are validated against all RFC 1918 private ranges, loopback, link-local, carrier-NAT, and IPv6 private ranges — at create, update, AND fire time (DNS rebinding defence).

🪝

HMAC Webhook Signatures

Every webhook delivery includes X-NetScope-Signature: sha256=<hmac> computed with a per-rule secret. Verify payloads are authentic before processing in your receiver.

🛡️

Security Headers

X-Content-Type-Options, X-Frame-Options: DENY, X-XSS-Protection, Referrer-Policy, and Permissions-Policy on every API response. Tauri CSP restricted to a minimal allowlist.

🗄️

Credential Safety

Startup fails loudly if PRODUCTION=true and default ClickHouse credentials are in use. CORS wildcard is refused in production mode. METRICS_TOKEN protects Prometheus scraping.

🔒

Parameterised Queries

All ClickHouse queries use parameterised placeholders — no string interpolation. Error messages are sanitised before reaching HTTP responses to prevent information leakage.

Up and running in minutes

The CLI agent works out of the box. Point it at an interface and start seeing traffic.

# List available network interfaces
$ netscope-agent list-interfaces
en0 Wi-Fi — 192.168.1.5
lo0 Loopback — 127.0.0.1

# Capture with BPF filter and stream to hub
$ netscope-agent capture \
    --interface en0 \
    --filter "tcp port 443 or udp port 53" \
    --hub-url https://hub.netscope.ie \
    --api-key ns_your_token_here

✓ GeoLite2-City loaded (~720ms)
✓ Connected to hub at hub.netscope.ie
✓ Capture started on en0 [BPF: tcp port 443 or udp port 53]
→ TLS 192.168.1.5:52341 → 142.250.80.46:443 [google.com] cipher=TLS_AES_256_GCM 🇺🇸 AS15169
→ DNS 192.168.1.5:53891 → 8.8.8.8:53 A github.com → 140.82.121.4 ttl=60s
→ TLS 192.168.1.5:52345 → 140.82.121.4:443 [github.com] cipher=TLS_CHACHA20 🇺🇸 AS36459

Deep decode, not just headers

Every protocol is decoded to its semantic layer — not just packets.

HTTP/1.1
Full req/res pairing, headers, body preview, latency
HTTP/2
Binary frames, HPACK, stream pairing, per-stream RTT
gRPC
Service/method extraction, grpc-status from trailers
TLS 1.2/1.3
SNI, cipher suites, certs, SANs, expiry, alerts
DNS
A, AAAA, CNAME, MX, TXT, PTR, RCODE, TTLs
TCP
Reassembly, retransmissions, OOO segments, RTT
ICMP
Echo req/reply, RTT, type/code human strings
ARP
Who-has / is-at, sender + target IP/MAC
eBPF
Kernel-level capture, no root required (Linux)

Every layer designed to scale

From kernel-level eBPF capture to ClickHouse analytics — a coherent data path from bytes to insight.

NetScope Desktop  ·  macOS / Windows / Linux
React Frontend
PacketListPane ServiceMapPane AnalyticsPane CertSidebar HubConnectModal FilterBar HexDumpPane Zustand store
Tauri Backend (Rust)
GeoIP reader Threat scorer Hub client SQLite sessions SharedState IPC commands
spawns OS thread
Rust Agent Crates
Capture
capture tcp_stream ebpf-loader
Parse & Emit
parser (HTTP/1.1) http2 + gRPC dns · tls · icmp · arp proto (shared types)
raw frames
Network Interface  ·  libpcap / Npcap / eBPF kernel program
en0 (Wi-Fi) eth0 (Ethernet) BPF filter promiscuous mode eBPF (Linux, no root)
HTTPS  ·  POST /api/v1/ingest
NetScope Hub  ·  Go API + ClickHouse + Kafka + Next.js 14
Ingestion
Kafka producer ClickHouse writer SSE fan-out GeoIP enrichment
Security & Ops
RBAC tokens Audit log (90d) SSRF protection Rate limiting
Next.js Dashboard
FlowsChart ProtocolChart AlertsPage AuditLog viewer

Built in the open. Growing fast.

10 phases shipped. More depth and integrations on the way.

Shipped

Phase 1 — Rust CLI agent
libpcap capture, HTTP/1.1 + DNS parsers, TCP reassembler
Phase 2 — Tauri desktop GUI
Virtualised packet list, hex dump, detail tree, session persistence, CI
Phase 3 — SaaS Hub
Go/Fiber REST API, Kafka, ClickHouse analytics, Next.js 14 dashboard
Phase 4 — Protocol expansion
TLS handshake parsing, TCP retransmissions, ICMP, ARP
Phase 5 — Analytics & export
Service dependency map, HTTP endpoint analytics, OpenTelemetry export
Phase 6 — Enterprise features
Fleet management, TLS cert viewer, anomaly detection, RBAC
Phase 7 — Alerting & Kubernetes
Webhook alert rules, compliance reports (PCI-DSS, HIPAA, CIS), Helm chart
Phase 8 — eBPF agent + enrichment
Kernel-side eBPF capture, GeoIP + threat intelligence hub and desktop
Phase 9 — Production foundation
HTTP/2 + gRPC decoder, scoped agent tokens, audit log, alert retry, SSE rate limit
Desktop upgrade + security hardening
GeoIP, threat badges, Hub Connect, cert sidebar, analytics map; SSRF, HMAC, proxy, CSP

Coming Soon

Phase 11 — Desktop customer readiness
Polished onboarding, license management, auto-update, crash reporting
K8s metadata enrichment
Pod name, namespace, and labels injected from eBPF via the Kubernetes API
WASM plugin SDK
Write custom protocol parsers in any language that compiles to WebAssembly
OTel trace → packet drill-down
Click a slow span in your trace viewer and jump directly to the raw packets
AI-powered anomaly detection
Baseline your traffic and get alerted on statistical deviations in real time
Cloud provider connectors
VPC Flow Logs from AWS / GCP / Azure ingested directly into the hub
PCAPs export & replay
Export any session or hub query as a standard .pcap for offline analysis in Wireshark
Mobile app (iOS / Android)
Monitor hub dashboards and receive alert push notifications on the go

Up and running
in under 2 minutes

One command to spin up the hub. One command to connect an agent. That's it.

Self-host the Hub

One command pulls pre-built Docker images for ClickHouse, Kafka, the Go API, and the Next.js dashboard — and starts everything. Only Docker required.

Linux / macOS — requires Docker
$ curl -sSL https://netscope.ie/hub-quickstart.sh | sh
1
Generates a random API key — no manual config needed.
2
Pulls images from GHCR — ClickHouse, Kafka, API, and dashboard. No build step.
3
Dashboard is live at http://localhost — connect agents and see flows instantly.
Want a custom domain + HTTPS? Add DOMAIN=hub.example.com before the command — Caddy handles the Let's Encrypt cert automatically.
hub-quickstart — bash
$ curl -sSL https://netscope.ie/hub-quickstart.sh | sh
NetScope Hub Quickstart
Docker 27.3.1
Downloading compose files…
Files downloaded
API key generated
Pulling latest Docker images…
Images ready
Starting NetScope Hub…
Stack started
API is healthy
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
NetScope Hub is running!
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Dashboard http://localhost
API Key a3f9c2e1…
$

Runs everywhere your team does

Pre-built binaries for every major platform. No account. No subscription.

✦ v0.1.0 — Latest Release MIT License · No telemetry · No account required
All releases & changelogs →
🍎
macOS
Apple Silicon · M1 / M2 / M3 / M4
🍎
macOS
Intel · x86_64
🪟
Windows
Windows 10 / 11 · x64 · Requires Npcap
🐧
Linux
x86_64 · Ubuntu / Debian / Fedora / Any distro
Build from source or deploy the CLI agent — the headless netscope-agent binary ships in the same release and is ideal for servers, containers, and CI environments. Run cargo build --release in agent/ or grab the binary from the Releases page.
macOS tip: If Gatekeeper blocks the app, run xattr -cr /Applications/NetScope.app in Terminal. On Windows, install Npcap first and run as Administrator for packet capture.

Best-in-class stack, carefully chosen

No bloat. Every dependency earns its place.

🦀 Rust Agent & Desktop Backend
tokio pcap etherparse httparse hpack maxminddb ipnet reqwest sqlx serde tracing clap
🪟 Desktop App
Tauri 2.x React 18 TypeScript Zustand TanStack Virtual Tailwind CSS Lucide React Vite 6 shadcn/ui
🐹 Hub Backend
Go 1.22 Fiber v2 ClickHouse Apache Kafka franz-go MaxMind GeoIP2 net/smtp Prometheus
🌐 Hub Dashboard
Next.js 14 App Router Recharts TypeScript Tailwind CSS SSE streaming

Start seeing your network clearly.
Today. For free.

Download the desktop app, deploy the CLI agent, or self-host the hub. MIT licensed. No telemetry. No lock-in.