Outline Admin is a web interface for the Outline Manager API, providing a simple and user-friendly UI for managing VPN servers.
Note
The previous PHP/Laravel version of this project has been moved to the OutlineAdminLaravel repository.
- Added Features
- Installation
- Nginx Integration
- Updating to Latest Version
- Development
- Admin Password
- Donation
- Screenshots
The following features have been added to extend the functionality of the Outline Manager API:
Dynamic Access Keys (DAKs) provide a flexible way to manage Outline access keys by dynamically creating, deleting, and updating them as needed. This allows the connection configuration to be updated without regenerating or redistributing new keys.
In Outline Admin, DAKs are enhanced beyond the official Outline implementation, adding automated management and server pooling features.
A Self-Managed DAK automatically manages its associated access keys.
When a client requests access and no key exists, the system will create one on demand.
If a key expires or reaches its data limit, the underlying access keys will be removed automatically.
Example of an auto-generated access key name: self-managed-dak-access-key-{dak_id}.
These access keys are hidden in Outline Admin but remain visible in Outline Manager.
Self-Managed DAKs use a server pool to decide where to create new access keys. You can choose how this pool is formed using one of the following modes:
Self-Managed DAKs use a server pool to decide where to create new access keys. You can choose how this pool is formed using one of the following modes:
In this mode, available servers are listed, and you can manually select one or more servers to include in the server pool. When the DAK creates an access key automatically, it will select one of these servers.
Instead of manually selecting servers, you can assign tags to servers (for example, EU, US, High-Speed,
or Irancell).
When creating a Self-Managed DAK, you can choose which tags to include.
The DAK will then automatically use all servers matching those tags to form its pool.
A Manual DAK does not automatically create or remove access keys. Instead, the admin attach/detach access keys manually — similar to the official Outline dynamic access keys.
Outline Admin includes an automated Health Check system to monitor the status and availability of your servers.
When you add a new server to Outline Admin, a health check is automatically created for that server. You can configure the check interval (how often the server is tested) and notification cooldown (how long to wait before sending another alert) in the Health Checks section.
To ensure you’re promptly informed about server issues, Outline Admin lets you define and manage notification channels.
For example, you can set up a Telegram notification channel and link it to your server’s health check. If the server becomes unreachable or fails its check, Outline Admin will automatically send a notification through your chosen channel.
Outline Admin lets you set an expiration date for both standard access keys and dynamic access keys. When an access key reaches its expiration date, it will be automatically disabled, preventing any further connections.
Tags provide a simple and flexible way to organize and group servers in Outline Admin.
You can assign one or more tags to each server — for example, EU, US, Asia, High-Speed or Irancell.
Prefixes allow you to disguise Shadowsocks connections so they appear similar to other allowed network protocols.
This helps bypass firewalls that block or inspect encrypted traffic by making Outline connections look like familiar
protocols such as HTTP, TLS, DNS, or SSH.
A prefix is a short sequence of bytes added at the start of a Shadowsocks connection.
The port number used should typically match the protocol that the prefix is mimicking — for example, port 80 for
HTTP or
443 for HTTPS.
In Outline Admin, prefixes can be configured for both static and dynamic access keys. Admins can define and assign prefixes to help users connect more reliably in restricted networks.
Example use cases:
Simulate HTTP requests ("POST " → port 80)
Simulate TLS traffic ("\u0016\u0003\u0001\u0000\u00a8\u0001\u0001" → port 443)
Simulate SSH handshakes ("SSH-2.0\r\n" → port 22)
Note
Prefixes should be no longer than 16 bytes. Longer prefixes can cause salt collisions, which may reduce encryption safety.
Before installing Outline Admin, ensure that Docker and Docker Compose are installed on your machine. Use the following commands to start the container:
docker run -d -p 3000:3000 --name outline-admin -v ./oa_data:/app/data -v ./logs:/app/logs --restart unless-stopped amro045/outline-admin:latestTo simplify the installation, you can use a Docker Compose file:
wget -O docker-compose.yml https://raw.githubusercontent.com/AmRo045/OutlineAdmin/main/docker-compose.ymldocker compose up -dor
docker-compose up -dTo run this project on your machine, ensure you have Node.js v20 or later and npm v10 or later installed. Follow the steps below to set up Outline Admin using Node.js:
git clone https://github.com/AmRo045/OutlineAdmin.git
cd OutlineAdmin
cp .env.example .envnpm installnpx prisma migrate deploy
npx prisma generatenpm run compile
npm run setup
npm run buildcd .next/standalone
node server.jsIf you want to expose Outline Admin over HTTPS using your own domain, the recommended approach is to run it behind
Nginx
as a reverse proxy.
Below is an example Nginx configuration you can use as a starting point:
server {
listen 443 ssl;
server_name your-outline-admin-domain.com;
ssl_certificate /etc/letsencrypt/live/your-outline-admin-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-outline-admin-domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name your-outline-admin-domain.com;
return 301 https://$host$request_uri;
}
Pull the latest version of the outline-admin image
docker pull amro045/outline-admin:latestStop running container
docker compose downRestart the container
docker compose up -dClean up the old image to free up disk space
docker rmi {old-image-id}Replace {old-image-id} with the ID of the old image you want to remove.
Follow the steps below:
git clone https://github.com/AmRo045/OutlineAdmin.git
cd OutlineAdmin
cp .env.example .envnpm installnpx prisma db push
npx prisma generatenpm run compile
npm run setupnpm run devTo update the admin user password, use one of the following commands.
For Docker containers:
docker exec -it outline-admin npm run password:change "your new password"For non-Docker setup:
npm run password:change "your new password"If you find this project useful and would like to support its development, consider making a donation. Your support is greatly appreciated!
bc1qjmnnw4779ntv08uuqmpqnx7hqmygl08z4z500a
0xCcF2117F837b16fbc0FbDe0178De0a2aCbfadC58
UQByW0gL9r89D4oFagC3ZRCEctIoh6XjHu7zv5xU2wcPVATT
0xCcF2117F837b16fbc0FbDe0178De0a2aCbfadC58











