This project implements the RustDesk API using Go, and includes both a web UI and web client. RustDesk is a remote desktop software that provides self-hosted solutions.
GitHub, Google and OIDC login,web admin authorized login,Basic implementation of the PC client's primary interfaces.Supports the Personal version api, which can be enabled by configuring the rustdesk.personal file or the RUSTDESK_API_RUSTDESK_PERSONAL environment variable.
| Login | |
![]() |
|
| Address Book | Groups |
![]() |
![]() |
The frontend and backend are separated to provide a user-friendly management interface, primarily for managing and displaying data.Frontend code is available at rustdesk-api-web
Admin panel URL: http://<your server[:port]>/_admin/
For the initial installation, the admin username is admin, and the password will be printed in the console. You can change the password via the command line.

Each user can have multiple address books, which can also be shared with other users.
Groups can be customized for easy management. Currently, two types are supported: shared group and regular group.
You can directly launch the client or open the web client for convenience; you can also share it with guests, who can remotely access the device via the web client.
OAuth support: Currently, GitHub, Google and OIDC are supported. You need to create an OAuth App and configure it in
the admin panel.
Google and Github, you don't need to fill the Issuer and ScpoesOIDC, you must set the Issuer. And Scopes is optional which default is openid,email,profile, please make sure this Oauth App can access sub, email and preferred_usernameGitHub OAuth App
at Settings -> Developer settings -> OAuth Apps -> New OAuth App here.Authorization callback URL to http://<your server[:port]>/api/oauth/callback,
e.g., http://127.0.0.1:21114/api/oauth/callback.
Login logs
Connection logs
File transfer logs
Server control
LDAP Support, When you setup the LDAP(test for OpenLDAP and AD), you can login with the LDAP's user. https://github.com/lejianwen/rustdesk-api/issues/114 , if LDAP fail fallback local user
v2 Preview, accessible at /webclient2

v2 preview deployment, WIKI<your server[:port]>/admin/swagger/index.html<your server[:port]>/swagger/index.html

# help
./apimain -h
./apimain reset-admin-pwd <pwd>
conf/config.yaml.gorm.type is set to sqlite, MySQL-related configurations are not required.en and zh-CN are supported. The default is zh-CN.The environment variables correspond one-to-one with the configurations in the conf/config.yaml file. The prefix for variable names is RUSTDESK_API.
The table below does not list all configurations. Please refer to the configurations in conf/config.yaml.
| Variable Name | Description | Example |
|---|---|---|
| TZ | timezone | Asia/Shanghai |
| RUSTDESK_API_LANG | Language | en,zh-CN |
| RUSTDESK_API_APP_WEB_CLIENT | web client on/off; 1: on, 0 off, default: 1 | 1 |
| RUSTDESK_API_APP_REGISTER | register enable; true, false; default:false |
false |
| RUSTDESK_API_APP_SHOW_SWAGGER | swagger visible; 1: yes, 0: no; default: 0 | 0 |
| RUSTDESK_API_APP_TOKEN_EXPIRE | token expire duration | 168h |
| RUSTDESK_API_APP_DISABLE_PWD_LOGIN | disable password login | false |
| RUSTDESK_API_APP_REGISTER_STATUS | register user default status ; 1 enabled , 2 disabled ; default 1 | 1 |
| RUSTDESK_API_APP_CAPTCHA_THRESHOLD | captcha threshold; -1 disabled, 0 always enable, >0 threshold ;default 3 |
3 |
| RUSTDESK_API_APP_BAN_THRESHOLD | ban ip threshold; 0 disabled, >0 threshold ; default 0 |
0 |
| ----- ADMIN Configuration----- | ---------- | ---------- |
| RUSTDESK_API_ADMIN_TITLE | Admin Title | RustDesk Api Admin |
| RUSTDESK_API_ADMIN_HELLO | Admin welcome message, you can use html |
|
| RUSTDESK_API_ADMIN_HELLO_FILE | Admin welcome message file, will override RUSTDESK_API_ADMIN_HELLO |
./conf/admin/hello.html |
| ----- GIN Configuration ----- | --------------------------------------- | ----------------------------- |
| RUSTDESK_API_GIN_TRUST_PROXY | Trusted proxy IPs, separated by commas. | 192.168.1.2,192.168.1.3 |
| ----- GORM Configuration ----- | --------------------------------------- | ----------------------------- |
| RUSTDESK_API_GORM_TYPE | Database type (sqlite or mysql). Default is sqlite. |
sqlite |
| RUSTDESK_API_GORM_MAX_IDLE_CONNS | Maximum idle connections | 10 |
| RUSTDESK_API_GORM_MAX_OPEN_CONNS | Maximum open connections | 100 |
| RUSTDESK_API_RUSTDESK_PERSONAL | Open Personal Api 1:Enable,0:Disable | 1 |
| ----- MYSQL Configuration ----- | --------------------------------------- | ----------------------------- |
| RUSTDESK_API_MYSQL_USERNAME | MySQL username | root |
| RUSTDESK_API_MYSQL_PASSWORD | MySQL password | 111111 |
| RUSTDESK_API_MYSQL_ADDR | MySQL address | 192.168.1.66:3306 |
| RUSTDESK_API_MYSQL_DBNAME | MySQL database name | rustdesk |
| ----- RUSTDESK Configuration ----- | --------------------------------------- | ----------------------------- |
| RUSTDESK_API_RUSTDESK_ID_SERVER | Rustdesk ID server address | 192.168.1.66:21116 |
| RUSTDESK_API_RUSTDESK_RELAY_SERVER | Rustdesk relay server address | 192.168.1.66:21117 |
| RUSTDESK_API_RUSTDESK_API_SERVER | Rustdesk API server address | http://192.168.1.66:21114 |
| RUSTDESK_API_RUSTDESK_KEY | Rustdesk key | 123456789 |
| RUSTDESK_API_RUSTDESK_KEY_FILE | Rustdesk key file | ./conf/data/id_ed25519.pub |
| RUSTDESK_API_RUSTDESK _WEBCLIENT_MAGIC_QUERYONLINE |
New online query method is enabled in the web client v2; '1': Enabled, '0': Disabled, not enabled by default | 0 |
| RUSTDESK_API_RUSTDESK_WS_HOST | Custom Websocket Host | wss://192.168.1.123:1234 |
| ---- PROXY ----- | --------------- | ---------- |
| RUSTDESK_API_PROXY_ENABLE | proxy_enable :false, true |
false |
| RUSTDESK_API_PROXY_HOST | proxy_host | http://127.0.0.1:1080 |
| ----JWT---- | -------- | -------- |
| RUSTDESK_API_JWT_KEY | Custom JWT KEY, if empty JWT is not enabled. If MUST_LOGIN from lejianwen/rustdesk-server is not used, it is recommended to leave it empty. |
|
| RUSTDESK_API_JWT_EXPIRE_DURATION | JWT expire duration | 168h |
Run directly with Docker. Configuration can be modified by mounting the config file /app/conf/config.yaml, or by
using environment variables to override settings.
docker run -d --name rustdesk-api -p 21114:21114 \
-v /data/rustdesk/api:/app/data \
-e RUSTDESK_API_LANG=en \
-e RUSTDESK_API_RUSTDESK_ID_SERVER=192.168.1.66:21116 \
-e RUSTDESK_API_RUSTDESK_RELAY_SERVER=192.168.1.66:21117 \
-e RUSTDESK_API_RUSTDESK_API_SERVER=http://192.168.1.66:21114 \
-e RUSTDESK_API_RUSTDESK_KEY=abc123456 \
lejianwen/rustdesk-api
Using docker-compose,look WIKI
Download the release from release.
Clone the repository:
git clone https://github.com/lejianwen/rustdesk-api.git
cd rustdesk-api
Install dependencies:
go mod tidy
# Install Swag if you need to generate documentation; otherwise, you can skip this step
go install github.com/swaggo/swag/cmd/swag@latest
Build the admin front-end (the front-end code is in rustdesk-api-web):
cd resources
mkdir -p admin
git clone https://github.com/lejianwen/rustdesk-api-web
cd rustdesk-api-web
npm install
npm run build
cp -ar dist/* ../admin/
Run:
# Run directly
go run cmd/apimain.go
# Or generate and run the API using generate_api.go
go generate generate_api.go
To compile, change to the project root directory. For Windows, run build.bat, and for Linux, run build.sh. After
compiling, the corresponding executables will be generated in the release directory. Run the compiled executables
directly.
Open your browser and visit http://<your server[:port]>/_admin/, with default credentials admin admin. Please
change the password promptly.
networks:
rustdesk-net:
external: false
services:
rustdesk:
ports:
- 21114:21114
- 21115:21115
- 21116:21116
- 21116:21116/udp
- 21117:21117
- 21118:21118
- 21119:21119
image: lejianwen/rustdesk-server-s6:latest
environment:
- RELAY=<relay_server[:port]>
- ENCRYPTED_ONLY=1
- MUST_LOGIN=N
- TZ=Asia/Shanghai
- RUSTDESK_API_RUSTDESK_ID_SERVER=<id_server[:21116]>
- RUSTDESK_API_RUSTDESK_RELAY_SERVER=<relay_server[:21117]>
- RUSTDESK_API_RUSTDESK_API_SERVER=http://<api_server[:21114]>
- RUSTDESK_API_KEY_FILE=/data/id_ed25519.pub
- RUSTDESK_API_JWT_KEY=xxxxxx # jwt key
volumes:
- /data/rustdesk/server:/data
- /data/rustdesk/api:/app/data #将数据库挂载
networks:
- rustdesk-net
restart: unless-stopped
Thanks to everyone who contributed!