Outline Client and Manager, developed by Jigsaw. Outline Manager makes it easy to create your own VPN server. Outline Client lets you share access to your VPN with anyone in your network, giving them access to the free and open internet.
# Welcome to the Outline Monorepo!
This document provides a guide for AI and human agents working with the Outline codebase.
## Repository Structure
The Outline monorepo is organized into three main components:
* `/client`: The Outline Client application, available on all major platforms. See [`client/AGENTS.md`](client/AGENTS.md).
* `/server_manager`: A graphical application to create and manage Outline Servers. See [`server_manager/AGENTS.md`](server_manager/AGENTS.md).
* `/infrastructure`: The build system and shared TypeScript utilities. See [`infrastructure/AGENTS.md`](infrastructure/AGENTS.md).
## The `npm run action` Command
The primary entry point for all development tasks is `npm run action <path>`, which resolves to `.action.sh` or `.action.mjs` files in the repo. Run `npm run action list` to see all available actions. Pass flags after `--`:
```sh
npm run action client/src/cordova/setup macos -- --buildMode=release
```
### Common Actions
* `npm run action list`: Lists all available actions.
* `npm run action client/web/start`: Starts a dev server for the shared web UI.
* `npm run action server_manager/www/start`: Starts a dev server for the Manager UI.
* `npm run action <component>/test`: Runs tests (e.g. `npm run action client/web/test`).
* `npm run action <component>/build`: Builds a component (e.g. `npm run action client/electron/build linux -- --arch=x64`).
### Other useful commands
* `npm run reset`: Clean and reinstall all dependencies (fixes most build issues).
* `npm run storybook`: Launch the Storybook UI component explorer.
* `npm run lint:gts`: Lint TypeScript (pass filepaths on macOS; works on all files on Linux).
## Code Style
* **TypeScript**: Follows [Google's TypeScript style](https://google.github.io/styleguide/tsguide.html), enforced by [`gts`](https://github.com/google/gts). Run `npm run lint:gts` to check and `npm run format:all` to auto-fix (Linux only for whole codebase; pass specific filepaths on macOS).
* **Go**: Follows standard Go style. Use `gofmt` and `go vet`.
## Requirements
| Component | Version |
|-----------|---------|
| Node.js | 22 — run `nvm use` if you have nvm |
| Go | 1.22+ |
Platform-specific requirements (Android SDK, Xcode, zig for cross-compilation) are documented in the relevant subdirectory AGENTS.md files.
## Common Concepts
* **Access Keys**: Credentials used by Outline clients to connect to an Outline server. Generated by the Outline Manager.
* **Shadowbox**: The core proxy component of Outline, responsible for handling network traffic.
* **Outline Client**: The end-user application for connecting to the internet through an Outline server.
* **Server Manager**: The application used to create and manage Outline servers on cloud providers.
* **Electron**: Framework used to build the desktop versions of the Outline Client and Server Manager.
* **Cordova**: Framework used to build the mobile (iOS/Android) and macOS versions of the Outline Client.
* **Lit**: The UI framework for web components. All new components use Lit. The client has fully migrated; the server_manager still has legacy Polymer components in its app shell being migrated.
* **OutlineAction**: A custom build script (`.action.sh` or `.action.mjs`) that defines a task runnable via `npm run action`.