outline-internal-sdk

module
v0.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 28, 2023 License: Apache-2.0

README

Outline SDK (Alpha)

Build Status Go Report Card Go Reference

⚠️ 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

Advantages

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.

Integration

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).

Tentative Roadmap

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.

Alpha

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
  • 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
Beta

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
  • Serverless transport libraries

    • Encrypted DNS
    • Packet splitting
  • Proxy transport libraries

    • HTTP Connect
    • SOCKS5
  • Add Resources

    • Website
    • Bindings
    • Integration documentation
    • Example command-line apps
    • Example graphical apps

Directories

Path Synopsis
examples
internal
The network package defines interfaces and provides utilities for network layer (OSI layer 3) functionalities.
The network package defines interfaces and provides utilities for network layer (OSI layer 3) functionalities.
dnstruncate
Package dnstruncate functions as an alternative implementation that handles DNS requests if the remote server doesn't support UDP traffic.
Package dnstruncate functions as an alternative implementation that handles DNS requests if the remote server doesn't support UDP traffic.
lwip2transport
The network/lwip2transport package translates between IP packets and TCP/UDP protocols.
The network/lwip2transport package translates between IP packets and TCP/UDP protocols.
x module

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL