Back to tools

N3XRemote – Remote Support

A native Windows and macOS app for remote support and remote desktop. Connect by ID and password over encrypted WebRTC (P2P), or manage your own unattended computers from a self-hosted Control Center. A TeamViewer, AnyDesk and RustDesk alternative. Free download.

N3XRemote — next-generation remote support

A lightweight, native Windows and macOS app for remote support and remote desktop. Share your screen with a 9-digit ID and one-time password, take control, or securely pass a file. Screen, input and accepted files travel over an encrypted WebRTC connection directly between devices (P2P) — no accounts and no cloud file storage.

Windows 11 (.exe) and macOS (.dmg) · encrypted P2P, your own server, no cloud

Versions and releases

The complete N3XRemote stack in one place

The desktop app, self-hosted server and unattended agent follow independent release cycles. Their current published versions are always listed here.

Desktop application

v1.8.5

On-demand support, screen sharing and Windows control.

Self-hosted server

v1.15.6

Control Center, signaling and API in the Docker image.

Unattended agent

v0.17.2

Persistent N3XAgent for managed Windows and Linux computers.

What N3XRemote can do

Connect by ID and password

Every computer has a stable 9-digit ID and a random session password. Share them with your helper — the model you know from TeamViewer and AnyDesk, only faster.

Full control

Remote mouse, keyboard, scrolling and keyboard shortcuts. The controller drives the desktop as if sitting right in front of it.

Encrypted P2P (WebRTC)

Screen and control travel directly between devices, encrypted end-to-end (DTLS/SRTP). The server only helps establish the connection.

Secure file transfer

Send files both ways over a dedicated encrypted WebRTC channel. The host enables the feature first, every file needs separate approval, SHA-256 is verified, and downloads go to Downloads\N3XRemote.

Hardware video encoding

Modern codecs (H.264/VP9/AV1) with hardware acceleration deliver a smooth picture at low latency and light bandwidth.

Your own server, no cloud

You point the app at your own signaling server (and optionally TURN). No session data goes to a third-party cloud — full control and privacy.

Host-side consent

The host sees a clear banner that it is being controlled and can end the session at any time with a single click.

Control Center, unattended and terminal

Enroll Windows and Linux agents on your own server. Start a desktop or a policy-restricted PowerShell, CMD, Bash or SH session with a real PTY, visible service identity and metadata-only audit that never stores command contents.

How to install

  1. 1Choose the Windows installer (.exe) or the macOS disk image (.dmg).
  2. 2Run the .exe installer, or open the .dmg and move N3XRemote to Applications.
  3. 3There is no server to configure — the app automatically uses remote.n3x.pl. Share your screen (give out the ID and password) or connect to another computer.

Your own server and Control Center — ready-made Docker Compose

The app connects to our server by default and works straight after download. Companies can run signaling, TURN, the device database, audit and management console in-house. The stack does not mandate a specific solution — use any reverse proxy capable of forwarding WebSockets. Secrets are generated locally in your browser and the data never leaves your server.

TURN ports must be published separately — an HTTP(S) reverse proxy is not enough

Forward TCP 3478, UDP 3478 and UDP 49160–49200 directly to the Docker host, or carry them through a layer 4 proxy or load balancer with TCP/UDP support. Allow this traffic through the host firewall. Without it, login and screen selection may work while video and control fail with a P2P/TURN error. Do not configure these ports as a regular HTTP(S) host.

A subdomain pointing at your server, e.g. remote.yourcompany.com

Generated in your browser. It stays on the server — you never enter it in the app.

Use 127.0.0.1 for a proxy on the host. For a proxy in another container or on another server, use the host address or 0.0.0.0 and restrict access with a firewall.

Compose maintains this protected owner account. Add more operators and roles later in Control Center.

Save it in a password manager. This account also provides emergency access recovery for Control Center.

Use 16 to 64 letters, numbers, dashes or underscores.

docker-compose.yml
# N3XRemote — complete self-hosted remote support stack
#
#   signaling  WebSocket relay, Control API and browser Control Center
#   postgres   private device inventory, policy and audit database
#   coturn     TURN relay for restrictive/symmetric NATs
#
# Before you start:
#   1. point remote.example.com at this server (DNS A/AAAA record)
#      keep it DNS-only when the same hostname is also used for TURN
#   2. configure any reverse proxy to forward https://remote.example.com to http://127.0.0.1:8788
#      with WebSocket upgrades enabled; TLS/proxy is not part of this stack
#   3. when binding to 0.0.0.0, restrict port 8788 to your proxy/firewall
#   4. REQUIRED: publish TURN on your router/firewall or through a TCP/UDP layer 4 proxy
#      (not as a regular HTTP(S) proxy host):
#      3478/tcp, 3478/udp and 49160-49200/udp -> this Docker host
#      without these rules signaling works, but remote video/control cannot connect
#      for a second stack on the same host, set N3X_TURN_PORT and a separate
#      N3X_TURN_MIN_PORT/N3X_TURN_MAX_PORT range in Portainer or .env
#
# IMPORTANT — keep this file for future stack updates.
# POSTGRES_PASSWORD initializes only an empty postgres_data volume. Replacing
# it later requires changing the n3xremote database role password first, or
# removing postgres_data (which permanently deletes the Control Center data).
#
# Then run: docker compose up -d
# Control Center: https://remote.example.com/control-GENERATING/

services:
  signaling:
    image: ghcr.io/nexitpl/n3xremote-signaling:latest
    restart: unless-stopped
    depends_on:
      postgres:
        condition: service_healthy
    environment:
      PORT: 8787
      TURN_SECRET: GENERATING_TURN_SECRET
      TURN_URL: turn:remote.example.com:${N3X_TURN_PORT:-3478}?transport=udp,turn:remote.example.com:${N3X_TURN_PORT:-3478}?transport=tcp
      DATABASE_URL: postgresql://n3xremote:GENERATING_DATABASE_PASSWORD@postgres:5432/n3xremote
      ADMIN_USERNAME: admin
      ADMIN_PASSWORD: GENERATING_ADMIN_PASSWORD
      ADMIN_PATH: /control-GENERATING
      SESSION_SECRET: GENERATING_SESSION_SECRET
    ports:
      - "127.0.0.1:8788:8787"
    networks:
      frontend:
      backend:

  postgres:
    image: postgres:17-alpine
    restart: unless-stopped
    environment:
      POSTGRES_DB: n3xremote
      POSTGRES_USER: n3xremote
      POSTGRES_PASSWORD: GENERATING_DATABASE_PASSWORD
    volumes:
      - postgres_data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "PGPASSWORD=$$POSTGRES_PASSWORD psql -h 127.0.0.1 -U $$POSTGRES_USER -d $$POSTGRES_DB -c 'SELECT 1' >/dev/null"]
      interval: 5s
      timeout: 5s
      retries: 10
      start_period: 10s
    networks:
      - backend

  coturn:
    image: coturn/coturn:4-alpine
    restart: unless-stopped
    network_mode: host
    environment:
      DETECT_EXTERNAL_IP: "yes"
      DETECT_RELAY_IP: "yes"
    command: >
      -n
      --log-file=stdout
      --realm=remote.example.com
      --use-auth-secret
      --static-auth-secret=GENERATING_TURN_SECRET
      --listening-port=${N3X_TURN_PORT:-3478}
      --min-port=${N3X_TURN_MIN_PORT:-49160}
      --max-port=${N3X_TURN_MAX_PORT:-49200}
      --no-tls
      --no-dtls
      --fingerprint
      --no-multicast-peers
      --no-cli
    tmpfs:
      - /var/lib/coturn

networks:
  frontend:
  backend:
    internal: true

volumes:
  postgres_data:
Running it on the server
mkdir -p n3xremote && cd n3xremote
nano docker-compose.yml   # paste the file above
docker compose up -d

# Verify N3XRemote before configuring the proxy:
curl http://127.0.0.1:8788/healthz

# Configure your own reverse proxy (WebSockets required):
http://127.0.0.1:8788 -> https://remote.example.com

# REQUIRED TURN rules (direct NAT/firewall or a TCP/UDP layer 4 proxy):
# TCP 3478          -> DOCKER_HOST:3478
# UDP 3478          -> DOCKER_HOST:3478
# UDP 49160-49200   -> DOCKER_HOST:49160-49200

# Verify that coturn listens on the Docker host:
sudo ss -lntup | grep ':3478'

# Test TCP 3478 from a DIFFERENT internet connection, not this LAN:
nc -vz remote.example.com 3478

# Verify through the public proxy:
curl https://remote.example.com/healthz

# Open and bookmark the private Control Center address:
https://remote.example.com/control-GENERATING/

What to enter in the app's settings

Backend listener
127.0.0.1:8788
Reverse proxy target
http://127.0.0.1:8788
Signaling server
wss://remote.example.com
Control Center
https://remote.example.com/control-GENERATING/
Recovery owner
admin
Owner password

The downloaded app already uses remote.n3x.pl. Change the address only under Settings → Advanced when using your own instance. Keep the private Control Center address out of public documentation. Enroll unattended agents with the ready-made command generated in the panel; clients never receive TURN or database secrets.

N3XRemote does not install or configure a reverse proxy. Point your chosen domain at the displayed HTTP target, enable WebSockets and request an SSL certificate. The default 127.0.0.1 address works with a proxy running on the host; for a proxy in another container, use the host address or 0.0.0.0 and restrict the port with a firewall. TURN still needs port 3478 (UDP and TCP) and 49160-49200 (UDP) published on the router and firewall or through layer 4 — not as a regular HTTP(S) host. If the same hostname serves TURN, keep it DNS-only in Cloudflare.

Changelog

    • ReleaseThe desktop app is also available as a universal macOS disk image (.dmg), with safe Gatekeeper first-launch guidance on the product page.
    • FixFixed control of computers that start with Windows locked. N3XAgent now detects the LOCK state through the official WTS API and launches the privileged helper on the secure Winlogon desktop instead of a user helper whose input was blocked by UIPI.
    • FixMouse and keyboard now work on the lock screen, and after sign-in the session moves to the regular desktop without requiring a local unlock. Enabled clipboard or file policies no longer reject an entire connection that starts on Winlogon.
    • ImprovementThe active desktop handle now receives the complete explicit access mask needed for reliable Default/Winlogon transitions, matching the mechanism used by mature remote-access agents.
    • ImprovementN3XAgent 0.17.2 adds regression coverage for LOCK, UNLOCK, unknown flags and mismatched session identifiers.
    • FixN3XRemote Server 1.15.6 restores safe restart after the agent is enrolled again. The action is no longer silently greyed out: the panel explains the exact unavailable state and lets the operator explicitly enable the maintenance policy for the host's new identity before requesting a restart.
    • FixFixed an unattended connection regression that left N3XAgent at “Preparing desktop” without joining the browser session.
    • FixThe regular desktop helper now runs in the selected Windows user's context again; privileged LocalSystem remains limited to the secure sign-in desktop.
    • ImprovementThe agent tolerates OpenInputDesktop denial on hardened systems and detects an immediately terminated helper instead of leaving the operator waiting indefinitely.
    • ImprovementAll regular Control Center dropdowns — including statuses, groups, drives, roles, package providers, terminal shells, monitors and update channels — now use the shared N3X picker instead of native browser menus.
    • NewThe new picker provides a consistent desktop and mobile appearance, search for long option lists, a clear active state, and complete keyboard, Escape and focus handling.
    • FixUnattended sessions no longer disconnect while Windows is being unlocked or when it moves between the sign-in screen and the user's desktop.
    • ImprovementN3XAgent now rebinds capture and input to the active Windows desktop inside the same session, and reports short transition gaps as a desktop switch instead of a disconnect.
    • ImprovementClipboard and file transfer are automatically hidden and blocked on the secure sign-in desktop, then restored after returning to the user's desktop.
    • FixN3XRemote Server 1.15.5 forces a fresh signed-agent manifest fetch after a manual refresh and after ‘Check now’. The panel no longer shows the previous version as ‘Latest signed’ for five minutes, and the tile displays the manifest fetch time.
    • FixFixed selection in the browser terminal: dragging across text now highlights the correct cells without a stray box or horizontal line at the bottom of the terminal.
    • NewThe Windows inventory profile now shows the current system uptime in days, hours and minutes alongside the exact last boot timestamp.
    • ImprovementUptime is calculated locally from the already collected boot timestamp, so it does not expand the agent data scope and refreshes with the automatic view updates.
    • ReleaseThe release includes a universal macOS disk image (.dmg), with safe Gatekeeper first-launch guidance on the product page.
    • NewInventory now runs automatically after the policy is enabled: the first collection is queued when the host comes online and subsequent collections run every 24 hours from the server, without an open Control Center.
    • ImprovementOffline hosts are skipped and collected after reconnecting. Manual “Refresh now” remains available, but the operator note is optional.
    • ImprovementHistory and audit distinguish automatic from manual collections and retain every run, including when the hardware profile did not change.
    • NewThe full asset profile expands GLPI-style inventory with the device UUID, system identifier, domain or workgroup, active user, and serial numbers for the BIOS, mainboard, chassis, memory, disks and displays.
    • NewThe network profile shows MAC, IP addresses, gateways, DNS, DHCP and DHCP server, while hardware inventory adds displays, battery charge and health, plus the count and date of the latest Windows hotfix.
    • ImprovementExisting hosts can enable the full profile with one button without leaving Inventory. Newly enabled inventory policies select it by default, while every collection still requires a reason and leaves an audit trail.
    • ImprovementThe scope remains bounded: the agent does not enumerate all accounts and does not collect file contents, activity history, browser data, passwords, secrets or private keys.
    • ImprovementIn Inventory, Files and Software Center, the raw host dropdowns have been replaced with one shared device picker. It shows the computer name, user or hostname, connection health and N3XAgent version.
    • NewThe picker searches larger fleets by name, user, hostname, IP address and agent version, and supports keyboard navigation, Escape and a clear marker for the selected host.
    • FixThe generic “Maintenance pending” badge now shows the exact active task and its state. Clicking it opens the relevant software operation, inventory history, or audit trail.
    • FixSoftware refreshes, package searches, and hardware inventory collection are no longer mistaken for session-blocking maintenance. Desktop and terminal access remain available; restart, agent uninstall, and software-changing operations still block them.
    • ImprovementThe Control Center audit now renders the full software-operation lifecycle with readable labels, package and provider details, while retaining the technical event identifier only as a diagnostic tooltip.
    • ImprovementSoftware Center search results now use their own bounded scrolling area, so a long package list no longer pushes the installed application inventory several screens down the page.
    • NewA result counter and a shortcut to the installed applications are now shown above the list. The layout also keeps a shorter height on phones and smaller displays.
    • FixIn the file explorer, uploading a file whose name already exists now opens a clear replacement confirmation instead of ending with a `path_exists` error.
    • ImprovementN3XAgent uploads new content into a separate temporary file, verifies its size and SHA-256 digest, and replaces the existing file only after the transfer succeeds completely. Directories and symbolic links remain protected.
    • ImprovementThe explicit overwrite decision travels through the validated session protocol and is recorded in the operation audit without storing file contents.
    • FixFixed self-hosted panel delivery: the server `latest` image is now published automatically after every N3XRemote Server change merged to `main`, so updating the stack no longer leaves an older browser terminal behind.
    • ImprovementThe browser terminal now behaves like N3XShell: left-button drag creates a clearly visible selection, the cursor uses the proper text mode, and the toolbar provides copy, paste, select-all, buffer clearing and text sizing.
    • ImprovementControl Center now shows the N3XAgent version installed on the host separately from the latest version in the signed stable manifest. ‘Up to date’ now means a confirmed version comparison, not merely the absence of an updater error.
    • NewEach agent reports the last manifest version it checked and the check time. Fleet updates distinguish up to date, update available, ahead of target, deferred, failed and awaiting-verification states.
    • ImprovementThe ‘Check now’ action requests an immediate manifest check while retaining SHA-256 and Minisign verification, and fleet totals now count only agents proven to be current.
    • NewControl Center now separates access revocation from remote uninstall. The explicit ‘Uninstall agent and remove device’ operation removes the Windows service, program files and local device identity.
    • ImprovementThe signed uninstall request requires a reason, is fully audited and can safely wait up to 7 days for an offline computer. Once started, the agent immediately loses access while the administrative history remains on the server.
    • ImprovementDelivery and acknowledgement of the destructive action tolerate lost network responses, and the panel clearly shows a pending uninstall instead of a generic maintenance state.
    • FixRemoved the modal active-support window that obstructed the desktop and treated every OK click as an emergency stop. It is replaced by a compact, non-modal safety bar that does not steal focus.
    • ImprovementEnding access at the computer now requires a dedicated button and confirmation. The bar shows the operator, granted capabilities and session reason, then disappears automatically when the session ends.
    • FixControl Center now removes the last frame immediately after disconnect and shows an unambiguous end state — including when the local user stopped the session — instead of a seemingly frozen desktop.
    • FixFixed the endless “Loading directory” state in the Windows file explorer. The panel now correctly handles canonical \\?\C:\ paths returned by the operating system.
    • ImprovementWindows paths are displayed in a readable form, and an unresponsive agent now produces a diagnostic message after 15 seconds instead of an endless loading indicator.
    • ImprovementThe browser terminal now has a clearer xterm.js theme with a visible cursor and selection, safe copy and paste, select-all, local buffer clearing and adjustable text size.
    • FixFixed empty Software Center inventory. The agent now collects a baseline list directly from safe Windows registry keys, discovers WinGet outside the LocalSystem service PATH and no longer hides provider errors or timeouts.
    • ImprovementThe panel now shows pending state, failure code and a bounded wait instead of a misleading ‘0 applications’. A lost inventory offer can be safely redelivered, while registry-only entries remain read-only.
    • FixFixed unattended-agent reinstallation on Windows. Updating an existing service now uses the typed Win32_Service.Change method instead of the sc.exe config command affected by quoting differences.
    • ImprovementThe remaining sc.exe commands receive parameters through named arrays compatible with Windows PowerShell 5.1, and a regression test prevents the faulty inline @(...) expression from returning.
    • NewAdded a private Windows hardware and security inventory module with manual collection, change history and a Control Center-native view.
    • ImprovementCollection and the separate identifier policy are disabled by default. When explicitly enabled, the agent can add hostname, serial and asset tags, and MAC/IP; the server still rejects UUID, DNS, domain, users and file data.
    • ImprovementDevice and group policies control inventory, and every collection plus changed section is recorded in the private instance audit log.
    • NewAdded a dedicated managed-computer file explorer that works without opening the desktop: browse folders, download, upload, create folders, rename and delete.
    • ImprovementThe file channel has separate read/write permissions, per-device and per-group policy, a 100 MB limit, SHA-256 verification and operation metadata auditing.
    • ImprovementLarge directories are loaded in pages, and the Files interface also works on mobile screens.
    • FixThe agent installer now works on an existing installation: it updates the binary, repairs the service and no longer requires a manual uninstall.
    • NewA new token can safely re-enrol an agent after its device was removed from Control Center, while preserving the previous identity for recovery.
    • ImprovementDevice groups are now accessible directly from the inventory, and every device has a dedicated group assignment action.
    • ImprovementA computer's menu now opens its Software Center directly, while owner accounts retain access after upgrading an older Control Center session.
    • NewAdded secure software management through WinGet and optional Chocolatey without opening the desktop.
    • NewSecure PowerShell, CMD, Bash and SH sessions without opening the remote desktop.
    • ImprovementThe terminal uses a real PTY with policy enforcement and metadata auditing.
    • NewSecure file transfer during an attended session.
    • FixAligned input and viewport in browser control mode.
    • NewSupport for the Windows sign-in screen.
    • FixFixed Windows agent service installation and PowerShell script encoding.
    • ImprovementClearer diagnostics for unavailable TURN and required network rules.
    • NewAttended sessions require explicit consent from the user of the target computer.
    • NewAccess policies and safe administrative actions for fleet devices.
    • NewAgent update center with rollout control for the whole fleet.
    • ImprovementSafer recovery, restart and updating of unattended agents.
    • NewSession evidence 2.0 with controlled pre- and post-session diagnostics.
    • NewWindows session tools.
    • NewAssisted file downloads.
    • FixRestored virtual-desktop control and fixed Windows clipboard errors.
    • NewOperator roles (RBAC) and two-factor login (TOTP).
    • NewVerifiable device trust and session evidence recording.
    • ImprovementHardened signed updates and recovery for unattended agents.
    • NewSecure unattended access with Windows agents managed from Control Center.
    • NewFirst self-hosted Control Center with device inventory and auditing.
    • ReleaseFirst release: screen sharing and remote control over an encrypted P2P connection, with a self-hosted signaling server (Docker).