Releases: OutlineFoundation/outline-sdk
x/v0.0.8: [BREAKING] Extensible Mobile Proxy
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/psiphonCall 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
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-configflag tox/tools/fetchto specify the ECH config and start exploring the use of ECH. - Added
AGENTS.mdandGEMINI.mdand updated documents to make it easier to use AI agents.
Other changes
- build: use go tool by @fortuna in #510
- feat(devtools): add instructions for running Android binaries by @fortuna in #511
- build: add Android CI by @fortuna in #512
- docs(x): add psiphon tag in mobileproxy builds by @ohnorobo in #502
Full Changelog: x/v0.0.6...x/v0.0.7
x/v0.0.6 - Improved Smart Dialer Test
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
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
New Features
-
HTTP/2 and HTTP/3 Support for CONNECT Client: package
x/httpconnectnow 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
- feat(smart): add strategy result caching to StrategyFinder by @jyyi1 in #426
- feat(x): x taskfile, with mobileproxy build task by @daniellacosse in #449
- feat(example): add strategy cache to smart-proxy by @jyyi1 in #442
- feat(x): Checking in the measure tool by @ohnorobo in #450
- feat(x): log on dialer test timeout by @ohnorobo in #455
- fix(x) tiny ctx change by @ohnorobo in #461
- feat(x): add HTTP/2 and HTTP/3 support for CONNECT client by @nikolaikabanenkov in #456
- feat(example): introduce
StrategyCacheto website wrapper by @jyyi1 in #460
v0.0.20 [BREAKING] Extensible TLS Config
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
Full Changelog: v0.0.19...v0.0.20
x/v0.0.3 Psiphon fallback proxy support and MobileProxy improvements
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:
- feat: navigator demo and app project builder by @daniellacosse in #360
- improve website wrapper app instructions and add doctor script by @daniellacosse in #407
- feat(ww): harden mobileproxy integration by @daniellacosse in #411
- feat(ww): Support appID, appName, and output folder by @daniellacosse in #408
- docs: add web-wrapper to root README by @daniellacosse in #414
- fix: separate "build" and "start" commands by @daniellacosse in #428
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
x/v0.0.2 Proxy fallback support added to Mobile Proxy
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:
- fix(x): return
ErrClosedfor abnormal closures by @sbruens in #377 - fix(x): fix error in ws2endpoint by @fortuna in #378
- fix: example command in stream dialer by @ohnorobo in #380
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
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.