selfhost.directory

The index of self-hostable projects — ranked, categorized and served with live updates.
Own your data and stop giving it to big tech.

CortenDesk logo

Self-host CortenDesk

v1.15.0

RustDesk console with bundled server and browser client

ReleaseOpen SourceAGPL-3.0
Updated9 hours ago
LanguagePHP
Setup difficultyModerate
MobileResponsive
ThemeDark mode
Stars
188
Ports
8080 (HTTP console and client API), 21115 (NAT test), 21116 (Signalling (TCP and UDP)), 21117 (Relay), 21118 (WebSocket ID endpoint for web client), 21119 (WebSocket relay endpoint for web client)
Requires
MySQL/MariaDB, Nginx + php-fpm
Docker
ghcr.io/marcpope/cortendesk
Install with Docker
Devices screen listing machines with online status, device group, owner, client version, and last-seen timeUsers screen listing console accounts with user group, assigned role, status, and device countRoles screen showing permission matrix over console areas at View or Manage levelAdd Strategy dialog with name, note, Enabled/Default/Enforce toggles, and Permissions sectionAddress Books screen with a shared book selected, showing coloured tags and peer entriesConnection Log listing remote sessions with controlled device, operator, session type, IP address, and duration

What is CortenDesk?

CortenDesk provides a self-hosted web console for managing RustDesk deployments. It packages the ID server, relay, and a browser-based remote desktop client into one Docker container. The console lets administrators track device fleets with live presence, organize machines into groups, and control which users can access which devices. Policies can be pushed to endpoints over the heartbeat channel. The system records session activity, file movements, and login events, with configurable retention. It supports OpenID Connect identity providers, time-based one-time passwords, and role-based delegation. A REST API enables automation, while email handles invitations and password recovery. Backups run automatically and can be copied to external storage. Standard RustDesk clients work without changes by pointing at the console's API endpoint. The software runs on PHP 8.4 with MySQL or MariaDB, either in Docker or on a traditional server stack. It is released under the AGPL-3.0-only license with no commercial tier.

Should you self-host CortenDesk?

CortenDesk scores 50/100 on selfhost.directory (how scoring works) and ranks #17 of 22 in Remote Desktop. It has 188 GitHub stars.

It shipped 10 stable releases in the past year. The latest, v1.15.0, came out on 21 October 2026. New versions land roughly every 1 days.

Setup is moderate: expect some configuration beyond a single command. An official Docker image is available. It is AGPL-3.0-licensed and written mostly in PHP.

Its closest alternative on selfhost.directory is rustdesk (92/100, 127 313 stars). It scores higher overall, so compare the two before you pick. See CortenDesk vs rustdesk side by side.

Features

  • Address books
  • Audit Logs
  • Automated Backups
  • Automation API
  • Dashboard with live stats
  • Delegated administration
  • Device Fleet Management
  • Device policies (strategies)
  • Email invitations and password reset
  • In-browser remote desktop clientBest experienced in Chrome/Edge; works over plain HTTP with H.264 fallback
  • OIDC Single Sign-On
  • RustDesk client API compatibility
  • Scoped access control
  • Server access control
  • Two-factor authentication (TOTP)

CortenDesk README

How to install CortenDesk

Install CortenDesk with Docker

Docker
Environment variables
APP_URL, CORTENDESK_ADMIN_USER, CORTENDESK_ADMIN_PASSWORD, CORTENDESK_EMBEDDED_SERVER, CORTENDESK_ID_SERVER, CORTENDESK_RELAY_SERVER, CORTENDESK_PUBLIC_KEY, CORTENDESK_SERVER_SECRET, CORTENDESK_CONSOLE_URL, CORTENDESK_DOWNLOADS_MAX_MB, CORTENDESK_BACKUPS_PATH, CORTENDESK_CLIENT_URL_SCHEME, CORTENDESK_RUSTDESK_DIR, CORTENDESK_HTTP_PORT, CORTENDESK_UPDATE_CHECK, CORTENDESK_LOG_LEVEL, CORTENDESK_FPM_MAX_CHILDREN, CORTENDESK_NGINX_WORKER_CONNECTIONS, CORTENDESK_NOTIFY_TIMEOUT

docker run -d --name cortendesk
-e APP_URL=https://rd.example.com
-p 8080:8080 -p 21115-21117:21115-21117 -p 21116:21116/udp
-v cortendesk-data:/data
ghcr.io/marcpope/cortendesk:1.14.0

Single container with embedded hbbs/hbbr. APP_URL must be the address clients and browsers reach.

CortenDesk releases & version history

FAQ

Is the browser client a security hole?

It obeys the same rules as any other client. Access scoping applies, and permissions are enforced by the device — a policy that disables file transfer disables it in the browser too.

What can the browser client do?

View and control a machine, move files both ways, switch monitors, send Ctrl+Alt+Del, and pass the clipboard. It is a real implementation of the RustDesk protocol, not a limited viewer.

When should I use the browser client?

Normally you should not — use the official RustDesk clients. The browser client is for times you cannot install one: a locked-down machine, a borrowed or public computer, or an urgent connection from somewhere unfamiliar.

Will it manage devices I already have?

Yes. Point existing clients at it and they register themselves on the next heartbeat. There is also an importer for migrating from lejianwen/rustdesk-api, keeping users, devices, address books and history.

What do I need to run it?

Docker and a MySQL or MariaDB database — the image includes the RustDesk server. A manual PHP 8.4 install is also possible, and that route does need a RustDesk server you run separately.

Is it affiliated with RustDesk?

No. It is an independent project built against the open-source server and the documented client API.

What does it cost?

Nothing. It is AGPL-3.0, with no paid tier, no licence key and no feature held back. Self-hosted means you run it and you own the data.

Do I need a RustDesk Pro license?

No. CortenDesk ships its own AGPL server (hbbs/hbbr) in the same container and works with the standard RustDesk client. There is no license to buy and nothing to activate.

Do I need a modified client?

No. CortenDesk implements the HTTP API that stock RustDesk clients already speak. You set the API Server field in a normal client.

Does this replace the RustDesk server?

Yes, since version 1.5 the Docker image ships hbbs and hbbr (CortenDesk Server, a fork with fixes) so one container is the whole deployment. You can also use your own servers by setting CORTENDESK_EMBEDDED_SERVER=false.

More in Remote Desktop

Rate this project

Click to rate — no account needed.

0 comments

Posting as guest
Loading comments…