Outline Client
Test coverage currently only tracks the Apple Libraries and core web view code:
The Outline Client is a cross-platform VPN or proxy client for Windows, macOS, iOS, Android, and ChromeOS. The Outline Client is designed for use with the Outline Server software, but it is fully compatible with any Shadowsocks server.
The client's user interface is implemented in Polymer 2.0. Platform support is provided by Cordova and Electron, with additional native components in this repository.
To join our Outline Community, sign up for the IFF Mattermost.
Requirements for all builds
All builds require Node 18 (lts/hydrogen), in addition to other per-platform requirements.
π‘ NOTE: if you have
nvm
installed, runnvm use
to switch to the correct node version!
After cloning this repo, install all node dependencies:
npm install
Building the shared web app
Outline clients share the same web app across all platforms. This code is located in the src/www directory. If you are making changes to the shared web app and do not need to test platform-specific functionality, you can test in a desktop browser by running:
npm run action src/www/start
The latter command will open a browser instance running the app. Browser platform development will use fake servers to test successful and unsuccessful connections.
The app logic is located in src/www/app. UI components are located in src/www/ui_components. If you want to work specifically on an individual UI element, try the storybook!:
npm run action src/www/storybook
π‘ NOTE: the
src
part of the path is optional.npm run action www/start
resolves to the same script.
π‘ NOTE: every script in this repository can be run with
npm run action
- for a CLI-like experience, add something likealias outline="npm run action"(you can call it whatever you like)
to your shell, then try
outline www/start
!
Passing configuration flags to actions
Certain actions take configuration flags - but since we're running them through npm
, you'll have to use the --
seperator to funnel them through to the underlying process. For example, to set up a MacOS project in release mode, you'd run:
SENTRY_DSN=<your sentry dsn> npm run action cordova/setup macos -- --buildMode=release --versionName=<your version name>
Life of a Packet
How does the Outline Client work?
Accepting a server invite
Looking for instructions on how to accept a server invite?
Platform-specific development
Each platform is handled differently:
- Developing for Apple (MacOS and iOS)
- Developing for Android
- Developing for Electron (Windows and Linux)
Error reporting
To enable error reporting through Sentry for local builds, run:
export SENTRY_DSN=[Sentry development API key]
[platform-specific build command]
Release builds on CI are configured with a production Sentry API key.
Support
For support and to contact us, see: https://support.getoutline.org.