⚠️ Warning: This code is in early stages and is not guaranteed to be stable. If you are interested in integrating with it, we'd love your feedback.
The Outline SDK allows you to:
- Create tools to protect against network-level interference
- Add network-level interference protection to existing apps, such as content or communication apps
Multi-Platform | Proven Technology | Composable |
---|---|---|
The Outline SDK can be used to build tools that run on Android, iOS, Windows, macOS and Linux. | The Outline Client and Server have been using the code in the SDK for years, helping millions of users access the internet in even the harshest conditions. | The SDK interfaces were carefully designed to allow for composition and reuse, so you can craft your own transport. |
The Outline SDK is written in Go. There are multiple ways to integrate the Outline SDK into your app:
- As a Go library (reference) in a Go application (CLI or graphical app with frameworks like Fyne.io, Wails, Qt for Go, or Go Mobile app).
- As a C library, generated using the appropriate Go build mode.
- As a native mobile library, using
gomobile bind
to generate Java and Objective-C bindings for Android, iOS and macOS. - As a side service, built as a standalone Go binary that your main application talks to. Note that this is not possible on iOS, due to the limitation on starting sub-processes.
The Outline Client uses the mobile library approach on Android, iOS and macOS (based on Cordova) and the side service on Windows and Linux (based on Electron).
The launch will have two milestones: Alpha and Beta. We are currently in Alpha. Most of the code is not new. It's the same code that is currently being used by the production Outline Client and Server. The SDK repackages code from outline-ss-server and outline-go-tun2socks in a way that is easier to reuse and extend.
The goal of the Alpha release is to make it available to potential developers early, so they can provide feedback on the SDK and help shape the interfaces, processes and tools.
Alpha features:
-
Transport-level libraries
- Add generic transport client primitives (
StreamDialer
,PacketListener
and Endpoints) - Add TCP and UDP client implementations
- Add Shadowsocks client implementations
- Use transport libraries in the Outline Client
- Use transport libraries in the Outline Server
- Add generic transport client primitives (
-
Network-level libraries
- Add IP Device abstraction
- Add IP Device implementation based on go-tun2socks (LWIP)
- Add UDP handler to fallback to DNS-over-TCP
- Add DelegatePacketProxy for runtime PacketProxy replacement
The goal of the Beta release is to make the SDK available for broader consumption, once we no longer expect major changes to the APIs and we have all supporting resources in place (website, documentation, examples, and so on).
Beta features:
-
Network libraries
- Use network libraries in the Outline Client
- Add extensive testing
-
Transport client strategies
- Proxyless strategies
- Encrypted DNS
- Packet splitting
- Proxy-based strategies
- HTTP Connect
- SOCKS5 StreamDialer
- SOCKS5 PacketDialer
- Proxyless strategies
-
Integration resources
- For Mobile apps
- Library to run a local SOCKS5 or HTTP-Connect proxy
- Documentation on how to integrate the SDK into mobile apps
- Connectivity Test mobile app using Capacitor
- For Go apps
- Connectivity Test example Wails graphical app
- Connectivity Test example command-line app
- Outline Client example command-line app
- Page fetch example command-line app
- Local proxy example command-line app
- For Mobile apps
-
Server-side libraries
- To be defined
-
Other Resources
- Website
- Bindings