Skip to content

Releases: OutlineFoundation/outline-sdk

x/v0.0.8: [BREAKING] Extensible Mobile Proxy

02 Oct 23:15
827bb82

Choose a tag to compare

In this release we made the Mobile Proxy extensible: it's now possible to add new fallback strategies without making changes to the Mobile Proxy itself. This means any 3rd party can directly provide strategies to apps.

Provide Registration Function
To provide a new strategy, you will typically provide a Go function to register your config parser with the strategy finder. See RegisterFallbackParser in the x/mobileproxy/psiphon package as an example.

Add to Compilation
Then, make sure you include the package with the strategy in your Go Mobile compilation. To build the Mobile Proxy library with Psiphon, include github.com/Jigsaw-Code/outline-sdk/x/mobileproxy/psiphon in the gomobile bind call:

PATH="$(pwd)/out:$PATH" gomobile bind -ldflags='-s -w' -target=ios -iosversion=11.0 -tags=psiphon -o "$(pwd)/out/mobileproxy.xcframework" github.com/Jigsaw-Code/outline-sdk/x/mobileproxy github.com/Jigsaw-Code/outline-sdk/x/mobileproxy/psiphon
PATH="$(pwd)/out:$PATH" gomobile bind -ldflags='-s -w' -target=android -androidapi=21 -tags=psiphon -o "$(pwd)/out/mobileproxy.aar" github.com/Jigsaw-Code/outline-sdk/x/mobileproxy github.com/Jigsaw-Code/outline-sdk/x/mobileproxy/psiphon

Call Registration Function
Finally, in your mobile code, call the registration function on the SmartDialer options like so:

val options = Mobileproxy.newSmartDialerOptions(testDomains, config)
Psiphon.registerFallbackParser(options, "psiphon")
let options = MobileproxyNewSmartDialerOptions(testDomains, config)
PsiphonRegisterFallbackParser(options, "psiphon")

Note that the function takes the package name as the prefix (Psiphon, not Mobileproxy).

This change breaks how the Psiphon integration worked. You now have to explicitly register it following the recipe above.

What's Changed

  • docs(x/tools): update fetch command examples in README.md by @fortuna in #524
  • feat(x): make Psiphon Start supersede previous Start by @fortuna in #530
  • chore: point Mobileproxy readme to new repositories by @daniellacosse in #533
  • feat(x/mobileproxy): make Mobileproxy extensible by @fortuna in #528
  • fix(x): fix MobileProxy fallback registration by @fortuna in #535

Full Changelog: x/v0.0.7...x/v0.0.8

x/v0.0.7 - Mobile Proxy fixes, SOAX library and fetch with ECH

02 Sep 20:45
dfee2ea

Choose a tag to compare

The main reason for this release is to fix some critical issues in the Mobile Proxy related to a strategy cache crash and and issue with the storage path for Psiphon.

Fixes

  • fix(x/mobileproxy): prevent panic when StrategyCache is not set by @jyyi1 in #505
  • release(x): retract broken versions that potentially cause panic by @jyyi1 in #506
  • fix: fetching cache dir in android by @ohnorobo in #517
  • fix: fetching cache dir in android by @ohnorobo in #517

Features

  • Added a package (x/soax) to use the SOAX proxy network more easily for multi-hop network measurements.
  • Added a -ech-config flag to x/tools/fetch to specify the ECH config and start exploring the use of ECH.
    • feat(x/tools): Add ech-config flag to fetch by @fortuna in #516
  • Added AGENTS.md and GEMINI.md and updated documents to make it easier to use AI agents.

Other changes

Full Changelog: x/v0.0.6...x/v0.0.7

x/v0.0.6 - Improved Smart Dialer Test

20 Aug 21:39
d619379

Choose a tag to compare

The Smart Dialer's connectivity check is now more robust. Instead of only performing a TLS handshake, it now fetches an HTTPS page to ensure the connection is fully functional. We have seen cases where the TLS handshake would succeed, but not the fetch, causing the Smart Dialer to pick a strategy that doesn't work.

Additionally, this update strengthens the Websocket code to protect against a race condition that was identified in the UDP handling of the Outline Linux Client.

What's Changed

  • feat(x): add page fetch to smart-dialer by @ohnorobo in #496
  • fix(x/websocket): concurrent read/write panics by @jyyi1 in #497

Full Changelog: x/v0.0.5...x/v0.0.6

x/v0.0.5 - Tools Folder

01 Aug 14:11
1a43b91

Choose a tag to compare

In this release we moved the command line tools from x/examples to x/tools, to better clarify they are tools for people to use, not just examples.

Our README has a list of the command line tools and how to use them.

This is a breaking change. Where before you would use:

$ go run github.com/Jigsaw-Code/outline-sdk/x/examples/resolve@latest -type A -transport "tls" -resolver 8.8.8.8:853 -tcp getoutline.org.

You now have to use:

$ go run github.com/Jigsaw-Code/outline-sdk/x/tools/resolve@latest -type A -transport "tls" -resolver 8.8.8.8:853 -tcp getoutline.org.

Note the path difference.

If you are using the tools in scripts, we recommend pinning to a specific version. For example:

$ go run github.com/Jigsaw-Code/outline-sdk/x/tools/[email protected] -type A -transport "tls" -resolver 8.8.8.8:853 -tcp getoutline.org.

x/v0.0.4 - HTTP/2 and HTTP/3 Support for CONNECT Client and more

21 Jul 18:44
2d0cb83

Choose a tag to compare

New Features

  • HTTP/2 and HTTP/3 Support for CONNECT Client: package x/httpconnect now supports HTTP/2 and HTTP/3, enabling more efficient and modern communication protocols for improved performance and reliability. Thanks @nikolaikabanenkov!

  • Strategy Result Caching on Mobile Proxy: To significantly speed up connection times on app lifecycle events, we've introduced caching for strategy results in the StrategyFinder. This means that once a successful connection strategy is found, it can be quickly reused for subsequent connections. This feature has also been integrated into the smart-proxy and app maker.

  • New Measurement Tool: A new measure tool has been added to the x module. This utility allows developers to test and measure the performance of different connection paths as shown on this Measure Website Censorship notebook.

  • Build Task for mobileproxy: A new Taskfile has been added to streamline the build process for mobileproxy, making development and deployment simpler.

Full Changelog: x/v0.0.3...x/v0.0.4

v0.0.20 [BREAKING] Extensible TLS Config

23 Apr 21:31
a1a7bff

Choose a tag to compare

We've revamped our TLS config in this release to offer a more robust and understandable approach to certificate validation.

Recognizing the limitations of numerous, potentially conflicting configuration options with unclear interactions, we introduced a way to inject custom certificate verifiers. This design promotes clarity, avoids conflicting settings, and allows for more flexible and scenario-specific certificate validation logic.

BREAKING CHANGE: If you used tls.Config.CertificateName, you will need to migrate to setting tls.Config.CertVerifier with a tls.StandardCertVerifier with the certificate name you need. That now supports overriding the Root CAs, which was not possible before.

What's Changed

  • feat: enable TLS cert verification extensions by @fortuna in #425

Full Changelog: v0.0.19...v0.0.20

x/v0.0.3 Psiphon fallback proxy support and MobileProxy improvements

24 Apr 09:21
2549281

Choose a tag to compare

We're pleased to announce the release v0.0.3 of the Outline SDK x module.

This release introduces support for using Psiphon as a fallback proxy in Mobile Proxy. You need to acquire a suitable configuration directly with the Psiphon team for it to work. You can find the config details in the Smart Dialer documentation.

This release also introduces major usability improvements to the Web Wrapper, including a doctor script to help users diagnose dependency problems.

Uses Outline SDK main module v0.0.20

What's Changed

Psiphon fallback support:

  • chore(x): updating psiphon dep by @ohnorobo in #391
  • chore(x) switch yaml lib from yaml.v3 to go-yaml by @ohnorobo in #397
  • feat(x): Parse psiphon config format as part of smart-proxy by @ohnorobo in #394
  • feat(x) explicit timeout in psiphon-fetch start by @ohnorobo in #402
  • feat(x) vary getPsiphonDialer implementation depending on build tag by @ohnorobo in #406
  • bug(x) fix psiphon wrapper context by @ohnorobo in #427
  • feat(x) create the psiphon dialer in smart-proxy by @ohnorobo in #404

Web wrapper improvements:

Misc updates:

  • chore(x): update x with main module v0.0.20 by @fortuna in #433
  • update readme instructions by @ohnorobo in #392
  • bug(x) don't attempt to fallback when there are no fallbacks by @ohnorobo in #412

Full Changelog: x/v0.0.2...x/v0.0.3

v0.0.19 Bug fix in the network package

18 Mar 13:53
f0d09d1

Choose a tag to compare

What's Changed

  • Fixed double mutex acquisition deadlock when recreating UDP session by @alamar in #372

New Contributors

Full Changelog: v0.0.18...v0.0.19

x/v0.0.2 Proxy fallback support added to Mobile Proxy

18 Mar 14:21
9c6695d

Choose a tag to compare

We're pleased to announce the release v0.0.2 of the Outline SDK x module. This release introduces a significant enhancement for integrators: built-in proxy fallback support within the Mobile Proxy.

This highly requested feature simplifies integration for partners using the Outline SDK. Previously, implementing proxy fallback required duplicated effort in application code for both Android and iOS. With this release, the SDK now handles this logic directly, streamlining development and improving reliability.

You can find the config details in the Smart Dialer documentation.

Uses Outline SDK main module v0.0.19

What's Changed

Features:

Bug Fixes:

Documentation:

  • doc(x): Improve configurl documentation by @fortuna in #379
  • docs(x): update smartproxy readme to yaml format by @ohnorobo in #381

New Contributors

Full Changelog: x/v0.0.1...x/v0.0.2

x/v0.0.1 Initial x/ release

19 Feb 05:30
ac94820

Choose a tag to compare

This release starts the versioning the x module, providing some key benefits:

  • Makes it clearer what version of the code we are talking about.
  • Helps customers pull the right version
  • Allows us to properly communicate new features and changes to the API
  • Enables a better Go doc experience, since you can navigate the versions.

Note that we are using version 0, which means APIs may change. We will try to minimize breakage and communicate when that happens.