Stream your reMarkable screen to any browser - no hacks, no dependencies, just install and go
Stream your reMarkable screen to any browser - no hacks, no dependencies, just install and go
Screen recording 2026-02-04 11.24.44.webm
goMarkableStream is a lightweight and user-friendly application designed specifically for the reMarkable tablet.
Its primary goal is to enable users to stream their reMarkable tablet screen to a web browser without the need for any hacks or modifications that could void the warranty.
Actively supported and tested:
Experimental (not actively tested):
The latest version of goMarkableStream is actively developed and tested on reMarkable 2 with firmware 3.24+.
For older firmware versions:
L key).R for rotation, L for laser pointer, ? for help overlay.? to view all available gestures and shortcuts.Each release provides four binary variants:
| Binary | Device | Tailscale Support |
|---|---|---|
gomarkablestream-RMPRO |
reMarkable Paper Pro (arm64) | Yes |
gomarkablestream-RM2 |
reMarkable 2 (arm) | Yes |
gomarkablestream-RMPRO-lite |
reMarkable Paper Pro (arm64) | No |
gomarkablestream-RM2-lite |
reMarkable 2 (arm) | No |
Which binary should I use?
RMPRO variants for reMarkable Paper ProRM2 variants for reMarkable 2-lite variants if you don't need Tailscale remote access (smaller binary size)# Set your device: RM2 for reMarkable 2, RMPRO for Paper Pro
DEVICE=RM2
# Download latest version
VERSION=$(wget -q -O - https://api.github.com/repos/owulveryck/goMarkableStream/releases/latest | grep tag_name | awk -F\" '{print $4}')
wget -O goMarkableStream https://github.com/owulveryck/goMarkableStream/releases/download/$VERSION/gomarkablestream-$DEVICE
chmod +x goMarkableStream
./goMarkableStreamadmin / passwordNote: You can also connect via Wi-Fi using your tablet's IP address or remarkable.local. (with trailing dot) on Apple devices.
For lite versions (without Tailscale), append -lite to the device name: gomarkablestream-RM2-lite
To update to a new version, use the built-in download command: ./goMarkableStream download (see Subcommands).
If you get errors such as wget: note: TLS certificate validation not implemented, download goMarkableStream on your local computer and copy it over:
# On your local computer (set DEVICE to RM2 or RMPRO)
DEVICE=RM2
VERSION=$(wget -q -O - https://api.github.com/repos/owulveryck/goMarkableStream/releases/latest | grep tag_name | awk -F\" '{print $4}')
wget -O goMarkableStream https://github.com/owulveryck/goMarkableStream/releases/download/$VERSION/gomarkablestream-$DEVICE
chmod +x goMarkableStream
# Copy to reMarkable (via USB-C)
scp ./goMarkableStream [email protected]:/home/root/goMarkableStream
# SSH and run
ssh [email protected] ./goMarkableStreamThe easiest way to install goMarkableStream as a systemd service is using the built-in install subcommand:
./goMarkableStream installThis will create the service file and enable it to start automatically on boot. You can change the settings by editing /home/root/.config/goMarkableStream/env
Alternatively, you can manually create the service file after connecting via USB-C (ssh [email protected]):
cat /etc/systemd/system/goMarkableStream.service
[Unit]
Description=goMarkableStream Server
[Service]
ExecStart=/home/root/goMarkableStream
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now goMarkableStream.serviceTo check status: systemctl status goMarkableStream.service
To view logs: journalctl -u goMarkableStream.service
To stop: systemctl stop goMarkableStream.service
Note: After a reMarkable system update, you may need to re-download the binary and restart the service.
goMarkableStream provides built-in subcommands to simplify installation and updates:
Installs goMarkableStream as a systemd service for automatic startup:
./goMarkableStream installThis command:
/etc/systemd/system/goMarkableStream.serviceDownloads the latest version from GitHub releases:
./goMarkableStream downloadThis command:
This is the recommended way to update goMarkableStream on your device.
Configure the application via environment variables:
RK_SERVER_BIND_ADDR: (String, default: :2001) Server bind address.RK_SERVER_USERNAME: (String, default: admin) Username for server access.RK_SERVER_PASSWORD: (String, default: password) Password for server access.RK_HTTPS: (True/False, default: true) Enable or disable HTTPS.RK_DEV_MODE: (True/False, default: false) Enable or disable developer mode.RK_DELTA_THRESHOLD: (Float, default: 0.30) Change ratio threshold (0.0-1.0) above which a full frame is sent instead of delta.Tailscale allows secure remote access to your reMarkable tablet from anywhere on your tailnet, without exposing the device to the public internet. When enabled, goMarkableStream creates both a local listener (on RK_SERVER_BIND_ADDR) and a Tailscale listener.
Requirements:
tailscale tag: go build -tags tailscaleEnvironment variables:
RK_TAILSCALE_ENABLED: (True/False, default: false) Enable Tailscale listener.RK_TAILSCALE_PORT: (String, default: :8443) Tailscale listener port.RK_TAILSCALE_HOSTNAME: (String, default: gomarkablestream) Device name in your tailnet.RK_TAILSCALE_STATE_DIR: (String, default: /home/root/.tailscale/gomarkablestream) State directory for Tailscale.RK_TAILSCALE_AUTHKEY: (String, default: empty) Auth key for headless setup. If unset, Tailscale will display a login URL in the console for interactive authentication.RK_TAILSCALE_EPHEMERAL: (True/False, default: false) Register as ephemeral node (removed when disconnected). Recommended for most users. When enabled, a random suffix is appended to the hostname (e.g., gomarkablestream-a1b2c3) to avoid naming conflicts if multiple instances are started.RK_TAILSCALE_FUNNEL: (True/False, default: false) Enable public internet access via Tailscale Funnel.RK_TAILSCALE_USE_TLS: (True/False, default: false) Use Tailscale's automatic TLS certificates.RK_TAILSCALE_VERBOSE: (True/False, default: false) Verbose Tailscale logging.Example usage:
# Enable Tailscale with interactive login (displays login URL in console)
RK_TAILSCALE_ENABLED=true ./goMarkableStream
# Enable Tailscale with auth key (headless setup)
RK_TAILSCALE_ENABLED=true RK_TAILSCALE_AUTHKEY=tskey-auth-xxx ./goMarkableStream
# Recommended: ephemeral mode with auth key (node removed on disconnect, random hostname suffix)
RK_TAILSCALE_ENABLED=true RK_TAILSCALE_EPHEMERAL=true RK_TAILSCALE_AUTHKEY=tskey-auth-xxx ./goMarkableStream
# Access via Tailscale: https://gomarkablestream.your-tailnet.ts.net:8443
# Access locally: https://remarkable.local.:2001Systemd service with Tailscale:
Add the environment variables to your systemd service file:
[Service]
Environment="RK_TAILSCALE_ENABLED=true"
Environment="RK_TAILSCALE_AUTHKEY=tskey-auth-xxx"
ExecStart=/home/root/goMarkableStreamAdd query parameters to the URL (?parameter=value&otherparameter=value):
color: (true/false) Enable or disable color.portrait: (true/false) Enable or disable portrait mode.rate: (integer, 100-...) Set the frame rate.flip: (true/false) Enable or disable flipping 180 degrees./: Main web interface/stream: The image data stream/events: WebSocket endpoint for pen input events/gestures: Endpoint for touch events/version: Returns the current version of goMarkableStreamgoMarkableStream introduces an innovative experimental feature that allows users to set a presentation or video in the background, enabling live annotations using a reMarkable tablet.
This feature is ideal for enhancing presentations or educational content by allowing dynamic, real-time interaction.
?present=https://url-of-the-embedded-file to your streaming URL.No open issues yet, or sync has not completed.