{"id":44064969,"url":"https://github.com/singchia/frontier","last_synced_at":"2026-04-24T19:01:39.027Z","repository":{"id":241925413,"uuid":"729802181","full_name":"singchia/frontier","owner":"singchia","description":"Bidirectional service-to-edge cloud-native gateway for long-lived connection.","archived":false,"fork":false,"pushed_at":"2026-04-24T14:01:41.000Z","size":14919,"stargazers_count":288,"open_issues_count":6,"forks_count":39,"subscribers_count":2,"default_branch":"main","last_synced_at":"2026-04-24T15:41:22.120Z","etag":null,"topics":["bidirectional-rpc","cloud-native","edge","edge-proxy","frontier","game-server","gateway","high-availability","im","k8s","messaging","multiplexer","operator","reverse-proxy","rpc","scale","stream","streaming","tcp","tcp-gateway"],"latest_commit_sha":null,"homepage":"https://frontier-io.net","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/singchia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2023-12-10T12:07:34.000Z","updated_at":"2026-04-20T00:56:00.000Z","dependencies_parsed_at":"2025-09-25T02:44:52.449Z","dependency_job_id":null,"html_url":"https://github.com/singchia/frontier","commit_stats":null,"previous_names":["singchia/frontier"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/singchia/frontier","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singchia%2Ffrontier","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singchia%2Ffrontier/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singchia%2Ffrontier/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singchia%2Ffrontier/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/singchia","download_url":"https://codeload.github.com/singchia/frontier/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/singchia%2Ffrontier/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32236744,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T13:21:15.438Z","status":"ssl_error","status_checked_at":"2026-04-24T13:21:15.005Z","response_time":64,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bidirectional-rpc","cloud-native","edge","edge-proxy","frontier","game-server","gateway","high-availability","im","k8s","messaging","multiplexer","operator","reverse-proxy","rpc","scale","stream","streaming","tcp","tcp-gateway"],"created_at":"2026-02-08T03:17:01.279Z","updated_at":"2026-04-24T19:01:39.009Z","avatar_url":"https://github.com/singchia.png","language":"Go","readme":"\u003cp align=center\u003e\n\u003cimg src=\"./docs/diagram/frontier-logo.png\" width=\"30%\"\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\n[![Go](https://github.com/singchia/frontier/actions/workflows/go.yml/badge.svg)](https://github.com/singchia/frontier/actions/workflows/go.yml)\n[![Go Report Card](https://goreportcard.com/badge/github.com/singchia/frontier)](https://goreportcard.com/report/github.com/singchia/frontier)\n[![Go Reference](https://pkg.go.dev/badge/badge/github.com/singchia/frontier.svg)](https://pkg.go.dev/github.com/singchia/frontier/api/dataplane/v1/service)\n[![License](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\nEnglish | [简体中文](./README_zh.md) | [日本語](./README_ja.md) | [한국어](./README_ko.md) | [Español](./README_es.md) | [Français](./README_fr.md) | [Deutsch](./README_de.md)\n\n\u003c/div\u003e\n\n\u003e Bidirectional service-to-edge gateway for long-lived connections\n\nFrontier is an open-source gateway written in Go for **service \u003c-\u003e edge communication**. It lets backend services and edge nodes talk to each other over long-lived connections, with built-in **bidirectional RPC**, **messaging**, and **point-to-point streams**.\n\nIt is built for systems where both sides stay online and need to actively call, notify, or open streams to each other. Frontier is **not a reverse proxy** and **not just a message broker**. It is infrastructure for addressing and operating large fleets of connected edge nodes from backend services.\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./docs/diagram/frontier.png\" width=\"100%\" alt=\"Frontier architecture overview\"\u003e\n\u003c/p\u003e\n\n## What Makes Frontier Different\n\n- **Different from API gateways**: Frontier is designed for backend-to-edge communication, not just north-south HTTP traffic.\n- **Different from MQ**: It gives you bidirectional RPC, messaging, and streams in one connectivity model.\n- **Different from tunnels**: Services can address a specific online edge node instead of only exposing a port.\n- **Made for real fleets**: Works for devices, agents, clients, and remote connectors that stay online for a long time.\n\n## What You Can Build\n\n\u003ctable\u003e\n  \u003ctr\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003cimg src=\"./docs/diagram/rtmp.png\" alt=\"Frontier stream relay example\"\u003e\n      \u003cp\u003e\u003cstrong\u003eTraffic relay and media streaming\u003c/strong\u003e\u003cbr\u003eOpen point-to-point streams for RTMP relay, file transfer, proxy traffic, or other custom protocols.\u003c/p\u003e\n    \u003c/td\u003e\n    \u003ctd width=\"50%\"\u003e\n      \u003cimg src=\"./docs/diagram/stream.png\" alt=\"Frontier stream architecture\"\u003e\n      \u003cp\u003e\u003cstrong\u003eRemote agents and device fleets\u003c/strong\u003e\u003cbr\u003eKeep edge nodes online, route service calls to a specific edge, and let the edge call backend services back.\u003c/p\u003e\n    \u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n## At A Glance\n\n| You need to... | Frontier gives you... |\n| --- | --- |\n| Call a specific online device or agent from your backend | Service -\u003e Edge RPC and messaging over long-lived connections |\n| Let edge nodes initiate calls without opening inbound ports | Edge -\u003e Service RPC on the same connection model |\n| Move bytes, not just request/response payloads | Point-to-point streams between service and edge |\n| Run one control plane for a large connected fleet | Presence, lifecycle hooks, control APIs, clustering |\n\n## Table of Contents\n\n- [Why Frontier](#why-frontier)\n- [What Makes Frontier Different](#what-makes-frontier-different)\n- [What You Can Build](#what-you-can-build)\n- [At A Glance](#at-a-glance)\n- [When to Use Frontier](#when-to-use-frontier)\n- [Real-World Use Cases](#real-world-use-cases)\n- [Comparison](#comparison)\n- [Quick Start](#quick-start)\n- [Docs](#docs)\n- [Community](#community)\n- [License](#license)\n\n## Why Frontier\n\nMost infrastructure is optimized for one of these models:\n\n- **service -\u003e service** via HTTP or gRPC\n- **client -\u003e service** via API gateways and reverse proxies\n- **event fan-out** via message brokers\n\nFrontier is optimized for a different model:\n\n- **service \u003c-\u003e edge** over long-lived, stateful connections\n- backend services calling a specific online edge node\n- edge nodes calling backend services without exposing inbound ports\n- opening direct streams between services and edge nodes when RPC is not enough\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./docs/diagram/frontlas.png\" width=\"88%\" alt=\"Frontier clustering with Frontlas\"\u003e\n\u003c/p\u003e\n\n## When to Use Frontier\n\nUse Frontier if you need:\n\n- Backend services to call specific online devices, agents, clients, or connectors\n- Edge nodes to call backend services over the same connectivity model\n- Long-lived connections at large scale\n- One data plane for RPC, messaging, and streams\n- Cluster deployment and high availability for service-to-edge connectivity\n\nDo not use Frontier if:\n\n- You only need service-to-service RPC; gRPC is a simpler fit\n- You only need HTTP ingress, routing, or proxying; use an API gateway or Envoy\n- You only need pub/sub or event streaming; use NATS or Kafka\n- You only need a generic tunnel; use frp or another tunneling tool\n\n## Real-World Use Cases\n\n- IoT and device fleets\n- Remote agents and connectors\n- IM and other real-time systems\n- Game backends talking to online clients or edge nodes\n- Zero-trust internal access based on connector-style agents\n- File transfer, media relay, or traffic proxy over point-to-point streams\n\n## Use Cases In One Screen\n\n| Scenario | Why Frontier fits |\n| --- | --- |\n| Device control plane | Address a specific online edge node, push commands, receive state, and keep the link alive |\n| Remote connector platform | Let connectors dial out, avoid inbound exposure, and keep service-side routing simple |\n| Real-time apps | Maintain long-lived sessions and combine notifications, RPC, and streams in one path |\n| Internal zero-trust access | Use agent-style edges as the last-mile bridge between backend systems and private resources |\n\n## Comparison\n\n| Capability | Frontier | gRPC | NATS | frp | Envoy |\n| --- | --- | --- | --- | --- | --- |\n| Built for service \u003c-\u003e edge communication | Yes | No | Partial | No | No |\n| Backend can address a specific online edge node | Yes | No | Partial | Partial | No |\n| Edge can call backend services | Yes | Partial | Yes | No | No |\n| Point-to-point streams between service and edge | Yes | Partial | No | Tunnel only | No |\n| Unified RPC + messaging + streams model | Yes | No | No | No | No |\n| Long-lived connection fleet as a primary model | Yes | No | Partial | Partial | No |\n\n`Partial` here means the capability can be assembled with extra patterns, but it is not the system's primary communication model.\n\n## Quick Start\n\n1. Start a single Frontier instance:\n\n```bash\ndocker run -d --name frontier -p 30011:30011 -p 30012:30012 singchia/frontier:1.2.2\n```\n\n2. Build the examples:\n\n```bash\nmake examples\n```\n\n3. Run the chatroom demo:\n\n```bash\n# Terminal 1\n./bin/chatroom_service\n\n# Terminal 2\n./bin/chatroom_agent\n```\n\nThe chatroom example shows the basic Frontier interaction model: long-lived connectivity, edge online/offline events, and service \u003c-\u003e edge messaging.\n\nYou can also run the RTMP example if you want to see Frontier's stream model used for traffic relay:\n\n```bash\n# Terminal 1\n./bin/rtmp_service\n\n# Terminal 2\n./bin/rtmp_edge\n```\n\nDemo video:\n\nhttps://github.com/singchia/frontier/assets/15531166/18b01d96-e30b-450f-9610-917d65259c30\n\n## Docs\n\nREADME is intentionally optimized for fast understanding and fast conversion. The implementation details, configuration surface, deployment playbooks, and cluster operations live in the docs.\n\nStart here:\n\n- [Usage Guide](./docs/USAGE.md)\n- [Configuration Guide](./docs/CONFIGURATION.md)\n- [Technical Docs Index](./docs/README.md)\n- [Systemd Deployment](./dist/systemd/README.md)\n- [Docker Compose Deployment](./dist/compose/README.md)\n- [Helm and Operator Deployment](./dist/helm/README.md)\n- [Roadmap](./ROADMAP.md)\n\nIf you are evaluating Frontier for production, the docs cover:\n\n- architecture and communication model\n- RPC, messaging, and point-to-point stream semantics\n- deployment on Docker, Compose, Helm, and Operator\n- cluster mode with Frontlas and Redis\n- development workflow and contribution guidelines\n\n## Community\n\n\u003cp align=center\u003e\n\u003cimg src=\"./docs/diagram/wechat.JPG\" width=\"30%\"\u003e\n\u003c/p\u003e\n\nJoin our WeChat group for discussions and support.\n\n## License\n\n Released under the [Apache License 2.0](https://github.com/singchia/geminio/blob/main/LICENSE)\n\n---\nA Star ⭐️ would be greatly appreciated ♥️\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsingchia%2Ffrontier","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsingchia%2Ffrontier","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsingchia%2Ffrontier/lists"}