Files
OpenFlare/docs/en/design/repository.md
T
2026-06-02 00:13:39 +08:00

4.8 KiB

Repository Structure

You will learn: The responsibilities of Server, Agent, Frontend, scripts, and documentation folders in the OpenFlare repository, and where to place logic when contributing code.

Path Responsibility
openflare_server Gin + GORM + SQLite/PostgreSQL single monolithic control plane
openflare_server/web Next.js 15 App Router Admin Frontend, hosted by Go Server
openflare_agent Go monolithic Agent running on the node side
openflare_relay Tunnel relay daemon running on public edges, managing frps processes
openflared Tunnel client running on intranet servers, managing frpc processes
scripts System helper scripts for installation, self-updating, etc.
docs VitePress documentation website, design baselines, specifications, and configurations
docs/en English version of documentation

Server Layering

Folder Responsibility
controller/ Parameter parsing, service calling, and returning responses
service/ Business logic, validations, transaction orchestration, and configuration rendering
model/ Model definitions, database versioning, and migrations
router/ Route registration
middleware/ Cross-cutting concerns like authentication, authorization, rate limiting, CORS, and Turnstile
common/ Configurations, global states, and initialization entrypoints
utils/ Pure utility functions and general helpers
job/ Periodic cron tasks (such as SSL certificate auto-renewals)
upload/ File upload handlers
docs/ API documentation (Swagger)
data/ Static data (such as GeoIP databases)

Agent Modules

Module Responsibility
config/ Configuration loading and default values
heartbeat/ Heartbeat check-in and configuration version evaluation
sync/ Configuration fetching and application orchestration
nginx/ OpenResty file writing, validation, reloads, startup, and rollbacks
state/ Local states and buffers for metric reporting
httpclient/ Server HTTP API communication
wsclient/ WebSocket client communication
protocol/ Agent API protocol types and structures
updater/ Agent self-updating logic
logging/ Logging processing
observability/ Observability (metrics, tracing, etc.)
geoipdata/ GeoIP database handling
geoipupdate/ GeoIP database updates
agent/ Core Agent bootstrap and lifecycle orchestration

Frontend Layering

Folder Responsibility
app/ Next.js App Router routes, layouts, and page assemblies
features/ Feature modules organized by business domains
components/ Reusable UI components shared across features
lib/ API clients, environment configurations, utility functions, and constants
store/ Lightweight cross-page UI state management
types/ Shared TypeScript type definitions
styles/ Global stylesheets
tests/ Frontend unit and integration tests (Vitest, Playwright)
scripts/ Build and deployment scripts
public/ Static assets

Relay Modules

Module Responsibility
cmd/ CLI startup entrypoint and main bootstrap functions
internal/config/ Local configurations parsing and defaults initialization
internal/frps/ Manages the lifecycle of the frps process, monitoring its status
internal/heartbeat/ Periodic HTTP heartbeat, status reporting, and update retrievals
internal/httpclient/ General API client for calling the Server
internal/observability/ Host and frps metrics collection and pre-aggregation
internal/relay/ Coordinates the core Relay lifecycle, setup, and cleanup
internal/state/ Local runtime states, error logs, and persistent caches
internal/updater/ Relay update check, download installation, and restarts
internal/wsclient/ Bi-directional real-time WebSocket connection to the Server

OpenFlared (Client) Modules

Module Responsibility
cmd/ CLI startup entrypoint and main bootstrap functions
internal/config/ Local client configurations loading and parsing
internal/flared/ Core client scheduling and tunnel lifecycle orchestration
internal/frpc/ Dynamically generates frpc.toml configs for multiple Relays and monitors frpc processes
internal/heartbeat/ Heartbeat communications with control planes, including token checks
internal/httpclient/ General API client for Server communication
internal/sync/ Incrementally pulls latest Tunnel route bindings, generates snapshots, and applies them
internal/updater/ Client self-update, new version check, and upgrade installation
internal/wsclient/ Bi-directional WebSocket client for real-time tunnel configuration pushes