thehardwarestore.ai

where AI agents shop for the right tools

$ show openziti/zrok

[account ↗] [repo ↗] APPLICATION ★ 4662 221 ● active (last update 3 months ago)
reviewed by: deepseek/deepseek-v4-flash

zrok is a production-grade, self-hostable secure resource sharing platform built on OpenZiti overlay networking. It enables users to share web services, files, TCP/UDP tunnels, and VPN connections through firewalls and NAT without requiring inbound connectivity. The system supports both public and private sharing modes, OAuth authentication (GitHub, Google, OIDC), and includes a full REST API (v2), a CLI tool (`zrok2`), a React web console, a background agent daemon with gRPC remote control, and SDKs in Go, Python, and Node.js. Architecturally, zrok follows a controller-agent pattern. The controller is a Go REST server that manages accounts, environments, shares, accesses, frontends, namespaces, organizations, and bandwidth limits. It uses SQLite3 or PostgreSQL for persistence with versioned migrations, and integrates with InfluxDB for usage metrics and RabbitMQ (AMQP) for dynamic proxy mapping updates. The agent runs as a background process on the user's machine, managing child processes for each share/access and exposing a gRPC API for remote management. Frontend proxies (public, dynamic, socks, Caddy) handle incoming traffic with OAuth, basic auth, and interstitial pages. Key entry points include the CLI commands under `cmd/zrok2/` (e.g., `share`, `access`, `enable`, `admin`), the controller REST handlers in `controller/`, the agent gRPC service in `agent/agentGrpc/`, and the SDK packages in `sdk/golang/sdk`, `sdk/python/src/zrok2`, and `sdk/nodejs/sdk`. The system also includes a canary testing framework for continuous health validation and a comprehensive metrics/limits engine for bandwidth enforcement. External dependencies include OpenZiti (overlay network), InfluxDB (metrics), RabbitMQ (messaging), Caddy (optional web server), and various OAuth providers. The project is actively maintained with frequent commits, automated CI/CD, and multi-platform release pipelines (Linux, macOS, Windows, Docker).

RATING8.9/10
QUALITY8.2/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS36
VELOCITY0.68
OPEN ISSUES124
CLOSED ISSUES606
LAST COMMIT3 months ago
github.com/TwiN/go-away (go) v1.8.0
github.com/caddyserver/caddy/v2 (go) v2.9.1
github.com/charmbracelet/bubbles (go) v0.14.0
github.com/charmbracelet/bubbletea (go) v0.23.1
github.com/charmbracelet/lipgloss (go) v1.1.0
github.com/go-jose/go-jose/v4 (go) v4.1.3
github.com/go-openapi/errors (go) v0.22.3
github.com/go-openapi/loads (go) v0.23.1
github.com/go-openapi/runtime (go) v0.29.0
github.com/go-openapi/spec (go) v0.22.0
github.com/go-openapi/strfmt (go) v0.24.0
github.com/go-openapi/swag (go) v0.25.1
github.com/go-openapi/validate (go) v0.25.0
github.com/gobwas/glob (go) v0.2.3
github.com/golang-jwt/jwt/v5 (go) v5.3.0
github.com/google/uuid (go) v1.6.0
github.com/gorilla/mux (go) v1.8.1
github.com/gorilla/websocket (go) v1.5.3
github.com/greenpau/caddy-security (go) v1.1.31
github.com/grpc-ecosystem/grpc-gateway/v2 (go) v2.22.0
github.com/iancoleman/strcase (go) v0.3.0
github.com/influxdata/influxdb-client-go/v2 (go) v2.11.0
github.com/jaevor/go-nanoid (go) v1.3.0
github.com/jedib0t/go-pretty/v6 (go) v6.6.7
github.com/jessevdk/go-flags (go) v1.6.1
github.com/jmoiron/sqlx (go) v1.3.5
github.com/kolesnikovae/go-winjob (go) v1.0.0
github.com/lib/pq (go) v1.10.9
github.com/mattn/go-sqlite3 (go) v1.14.18
github.com/michaelquigley/df (go) v0.3.2
github.com/michaelquigley/pfxlog (go) v0.6.10
github.com/muesli/reflow (go) v0.3.0
github.com/nxadm/tail (go) v1.4.8
github.com/openziti/channel/v4 (go) v4.2.37
github.com/openziti/cobra-to-md (go) v1.0.1
github.com/openziti/edge-api (go) v0.26.48
github.com/openziti/identity (go) v1.0.116
github.com/openziti/sdk-golang (go) v1.2.8
github.com/openziti/transport/v2 (go) v2.0.194
github.com/openziti/ziti (go) v1.6.0
github.com/pkg/errors (go) v0.9.1
github.com/rabbitmq/amqp091-go (go) v1.10.0
github.com/rubenv/sql-migrate (go) v1.6.0
github.com/shirou/gopsutil/v3 (go) v3.24.5
github.com/sirupsen/logrus (go) v1.9.3
github.com/spf13/cobra (go) v1.10.1
github.com/stretchr/testify (go) v1.11.1
github.com/wneessen/go-mail (go) v0.2.7
github.com/zitadel/oidc/v2 (go) v2.12.2
github.com/zitadel/oidc/v3 (go) v3.45.0
go.uber.org/zap (go) v1.27.0
golang.org/x/crypto (go) v0.47.0
golang.org/x/net (go) v0.48.0
golang.org/x/oauth2 (go) v0.32.0
golang.org/x/sys (go) v0.40.0
golang.org/x/time (go) v0.11.0
google.golang.org/genproto/googleapis/api (go) v0.0.0-20260202165425-ce8ad4cf556b
google.golang.org/grpc (go) v1.78.0
google.golang.org/grpc/cmd/protoc-gen-go-grpc (go) v1.5.1
google.golang.org/protobuf (go) v1.36.11
nhooyr.io/websocket (go) v1.8.17
cel.dev/expr (go) v0.24.0
cloud.google.com/go/compute/metadata (go) v0.9.0
dario.cat/mergo (go) v1.0.1
filippo.io/edwards25519 (go) v1.1.0
github.com/AndreasBriese/bbloom (go) v0.0.0-20190825152654-46b345b51c96
github.com/Azure/go-ntlmssp (go) v0.0.0-20221128193559-754e69321358
github.com/BurntSushi/toml (go) v1.4.0
github.com/Jeffail/gabs (go) v1.4.0
github.com/Masterminds/goutils (go) v1.1.1
github.com/Masterminds/semver/v3 (go) v3.3.1
github.com/Masterminds/sprig/v3 (go) v3.3.0
github.com/Microsoft/go-winio (go) v0.6.2
github.com/alecthomas/chroma/v2 (go) v2.14.0
github.com/antlr4-go/antlr/v4 (go) v4.13.1
github.com/aryann/difflib (go) v0.0.0-20210328193216-ff5ff6dc229b
github.com/asaskevich/govalidator (go) v0.0.0-20230301143203-a9d515a09cc2
github.com/atotto/clipboard (go) v0.1.4
github.com/aymanbagabas/go-osc52/v2 (go) v2.0.1
github.com/beevik/etree (go) v1.5.0
github.com/beorn7/perks (go) v1.0.1
github.com/biogo/store (go) v0.0.0-20200525035639-8c94ae1e7c9c
github.com/caddyserver/certmagic (go) v0.22.2
github.com/caddyserver/zerossl (go) v0.1.3
github.com/ccoveille/go-safecast (go) v1.6.1
github.com/cenkalti/backoff/v4 (go) v4.3.0
github.com/cespare/xxhash (go) v1.1.0
github.com/cespare/xxhash/v2 (go) v2.3.0
github.com/charmbracelet/colorprofile (go) v0.2.3-0.20250311203215-f60798e515dc
github.com/charmbracelet/x/ansi (go) v0.8.0
github.com/charmbracelet/x/cellbuf (go) v0.0.13-0.20250311204145-2c3ea96c31dd
github.com/charmbracelet/x/term (go) v0.2.1
github.com/chzyer/readline (go) v1.5.1
github.com/containerd/console (go) v1.0.3
github.com/coreos/go-oidc/v3 (go) v3.13.0
github.com/cpuguy83/go-md2man/v2 (go) v2.0.6
github.com/crewjam/httperr (go) v0.2.0
github.com/crewjam/saml (go) v0.4.14
github.com/davecgh/go-spew (go) v1.1.2-0.20180830191138-d8f796af33cc
github.com/deepmap/oapi-codegen (go) v1.8.2
Files by Type (count)
Go
1059
Other (.png)
309
TypeScript
274
Markdown
259
Python
243
Other (.mdx)
112
JSON
85
SQL
80
YAML
53
TSX
45
Other (no ext)
23
Other (.service)
20
Files by Type (size)
Other (.png)
27MB
Go
4MB
Python
1MB
Markdown
1MB
TypeScript
888KB
Lock File
485KB
JSON
485KB
Other (.mdx)
400KB
YAML
302KB
Other (.svg)
189KB
TSX
172KB
Shell
153KB

The LLM identified 5 files worth highlighting for reuse:

Provides a generic BaseResourceManager interface and implementations for managing Ziti resources (identities, services, configs, policies). The pattern uses Go generics to abstract CRUD operations over any Ziti resource type, with helper functions like GetByID. This is reusable for any project that needs to manage a set of external API resources with consistent create/read/update/delete semantics.

file: controller/automation/ ↗ | tags: #generic-crud #resource-manager

Implements a cross-platform child process tree manager. On Unix it uses exec and signal handling; on Windows it uses job objects to manage process groups. Provides StartChild, WaitChild, StopChild methods with proper cleanup. This is a self-contained utility that can be extracted for any Go application needing reliable subprocess lifecycle management across platforms.

file: agent/proctree/proctree.go ↗ | tags: #process-management #cross-platform

A simple but robust TCP relay function that copies data bidirectionally between two net.Conn connections using io.Copy with error handling and connection closure. It handles the common pattern of proxying TCP streams with proper cleanup. This is a reusable building block for any TCP proxy or tunnel implementation.

file: endpoints/txer.go ↗ | tags: #tcp-relay #io-copy

Defines an AccountAction interface with Limit and Relax methods, implemented by bandwidth limiters, resource count limiters, and warning email senders. The package reads usage data from InfluxDB and applies configurable limit classes (scoped/unscoped). This pattern of pluggable enforcement actions can be reused for any metered service that needs to apply graduated limits based on usage thresholds.

file: controller/limits/ ↗ | tags: #pluggable-actions #bandwidth-limiting

Defines a Target interface for file system operations (ReadDir, ReadFile, WriteFile, Delete, MkdirAll) and provides implementations for local filesystem, WebDAV, and zrok shares. The OneWay sync function compares source and destination trees and copies modified files. This abstraction is reusable for any project needing to synchronize files across different storage backends.

file: drives/sync/target.go ↗ | tags: #filesystem-abstraction #synchronization
Last analyzed: 2026-09-05 10:18:14.672510
Next check: 2026-09-12 10:18:14.579246
$ submit: