$ show OutlineFoundation/outline-apps
Outline Apps is a production-grade, open-source VPN ecosystem consisting of two primary applications: a cross-platform VPN client and a server manager. The client, built for Windows, macOS, Linux, Android, iOS, and the web, connects users to Shadowsocks-based proxy servers by creating a system TUN/TAP interface and relaying packets through a Go-based tun2socks core. It exposes a unified TypeScript UI across Electron, Cordova, Capacitor, and browser shells, with native VPN lifecycle management implemented in Go, Java/Kotlin, Swift/Objective-C, and C#. The server manager is an Electron/desktop and web application that provisions and administers Outline servers on DigitalOcean, Google Cloud, AWS Lightsail, and arbitrary Linux machines, including access-key management, bandwidth metrics, data limits, and OAuth-based cloud onboarding. The architecture is a monorepo that separates a Go networking core, TypeScript web UI layers, platform-specific native bridges, and an infrastructure library of shared utilities. The codebase demonstrates careful engineering in several areas: a composable YAML configuration registry for transport strategies (Shadowsocks, WebSocket, TCP/UDP, multi-hop), a generic IP routing table for split tunneling, structured cross-language error types, and a consistent method-channel abstraction for JavaScript-to-native IPC. Strong test coverage exists across Go packages, TypeScript modules, and native platform code, supported by an extensive CI matrix. However, the repository carries significant technical debt from an incomplete migration from Polymer to Lit, the coexistence of legacy Cordova and newer Capacitor mobile stacks, and numerous platform-specific build scripts. This is squarely an application repository, not a data or research project. The only data-related aspects are telemetry and anonymized usage metrics sent to Sentry and server-administrator-controlled collectors, which are operational concerns rather than research pipelines. Maintenance activity is current, with frequent commits, active issue triage, and a large contributor base, but the broad platform surface and legacy framework overlap make ongoing modernization costly.
The LLM identified 5 files worth highlighting for reuse:
A generic IP routing table providing longest-prefix-match lookups for both IPv4 and IPv6. It is self-contained, avoids framework coupling, and could be extracted into any Go networking project that needs efficient address-range based routing or splitting decisions.
A structured platform error type designed to cross Go-to-TypeScript boundaries via JSON serialization. It encodes stable error codes, human-readable messages, and platform context, making it a reusable pattern for any multi-language application that needs consistent error propagation.
A pluggable YAML/JSON parser that uses $type-based dispatch to build typed configuration objects. This pattern is cleanly abstracted and can be reused in any project needing composable, extensible config formats without hardcoding every schema variant.
A small reactive value container that exposes change notifications as an async stream. It is framework-agnostic, dependency-light, and directly reusable in any TypeScript application for watching state transitions such as install progress or connection status.
A generic REST API client abstraction that standardizes path-based HTTP operations, error handling, and request lifecycle. Its isolation from VPN-specific logic makes it suitable for extraction into any TypeScript project needing a clean, testable API client layer.