Skip to content

About

Self-hosted remote desktop for macOS that runs in any browser — no app for the viewer, works on cheap PHP shared hosting. Stream the Mac screen (delta PNG, color JPEG) and control the mouse from a phone, tablet or PC. Open-source TeamViewer / VNC alternative.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

GOBL(in) Remote: self-hosted remote desktop for macOS in any browser

GOBL(in) Remote — self-hosted remote desktop for macOS in your browser

macOS host Python 3 PHP any hosting license MIT GitHub stars

Control your Mac from any browser — iPhone, iPad, Android or another computer — through your own cheap PHP hosting. No app to install on the viewer side, no VPS, no port forwarding and no third-party relay: the Mac sends its screen to your server and the page shows it live. An open-source, self-hosted alternative to TeamViewer, AnyDesk, Chrome Remote Desktop and VNC for quick access to your own Mac.

A small remote desktop for macOS. A utility on your Mac sends its screen to your own web server; a web page shows that screen in real time and lets you control the mouse — from another computer or from a phone. The page is locked with a four-digit access code.

Русская версия: README.ru.md.

How it works

Mac: goblin_remote.py (window) ──starts──> live_broadcast.py (broadcaster)
                                              │  frames, HTTP POST (with a key)
                                              ▼
Web server: web/api.php  ◄── polling ── web/index.html (viewer page)

No sockets and no extra software on the server: plain PHP and files, so any cheap shared hosting works.

What is inside

Path What it is
Goblin Remote.app Shortcut that opens the utility window
goblin_remote.py The utility window: start/stop, status, settings
live_broadcast.py The broadcaster: captures the screen, sends frames, moves the mouse
common.py, lang.py Shared paths and settings; window texts
screenshot2html/ Converter used by the HTML mode (text recognition)
web/ The site: index.html, api.php, assets/
deploy.sh, deploy.conf.example Uploads web/ to your hosting or to a local test server
make_app.sh Builds Goblin Remote.app
help.html User help, opened by the Help button

Install

python3 -m venv .venv
.venv/bin/pip install -r requirements.txt     # Pillow, numpy, pyobjc (Quartz, Vision), opencv

cp deploy.conf.example deploy.conf            # then put your own server into deploy.conf
./deploy.sh          # upload the site to your hosting (FTP)
./deploy.sh local    # or to a local test server, e.g. XAMPP

deploy.conf holds your site address, the FTP folder and the path to a file with FTP credentials (three lines: host:, user:, password:). It stays on your machine and is not part of the repository. You need any hosting with PHP — nothing else.

The first run of deploy.sh creates two secrets next to the utility:

  • key.txt — the key the utility uses to talk to the server;
  • control.txt — the access code: four digits a viewer types on the page to see the screen and control it.

Both go to the server as config.php (generated on the fly; never stored in web/). For a manual install create config.php on the server from web/config.example.php with two values: upload_key and control_code.

To set your own code, write it into control.txt and run ./deploy.sh again.

Run

Double-click Goblin Remote.app, or:

.venv/bin/python goblin_remote.py

Press ▶ Start broadcasting, then Open the screen in browser — the page opens with the access code already applied. On a phone open the same address and type the four digits on the lock screen; the browser remembers them.

The app is built by ./make_app.sh. It gives the app its own name and identifier (red.goblin.remote), so macOS lists it as Goblin Remote in the permission lists instead of a nameless “applet”. After a rebuild macOS asks for the permissions again.

Modes

Mode What is sent When to use
PNG2 (default) Only the changed parts of the screen Everyday work: fastest and lightest
PNG The whole screen in every frame Simple and reliable, heavier
HTML The screen recognized into text and blocks Very light, but slow and approximate

The picture is grayscale by default — small frames, fast updates. The Color setting switches PNG and PNG2 to full color: frames are then sent as JPEG and are several times heavier. The mouse cursor is drawn into the frame in PNG and PNG2 modes.

Settings

Broadcast settings are shared between the utility and the site — they are stored on the server, so changing one side changes the other: Mode, Interval (0.1–60 s), PNG quality (1/2/4/8 bit, gray only), Picture size (50/75/100 %), Screen (main / all screens), Color (gray / full color).

Utility-only settings live in settings.json: start broadcasting when the window opens, stop broadcasting when the window closes, obey the “Stop” button on the site, let the site control the mouse.

Page-only settings are remembered by each browser: fit the screen into the window, highlight changes, the hidden top panel, the access code.

Access code and mouse control

Without the access code the page shows nothing but a lock screen with a field for the code, and the server gives out neither frames nor settings. The code is four digits; it is shown in the utility: Settings → Access code. With the code everything is available: watching, mouse control, broadcast settings and Stop.

Guessing is limited by the server: five wrong codes from one address — that address waits five minutes (during the wait even the right code is refused); thirty wrong codes from all addresses within ten minutes — everybody waits. The page then says Too many wrong codes and tries again by itself.

With Control on, moving the mouse or dragging a finger over the screen moves the cursor on the Mac; a click or a short tap is a left click.

macOS permissions

  • Screen Recording — required for frames. Without it the frames are empty or show only the desktop.
  • Accessibility — required for clicks. Without it the cursor still moves, but clicks are not performed.

Both are granted in System Settings → Privacy & Security to the app that launched the utility: Terminal if you started it from a terminal, Goblin Remote.app if you double-clicked it.

Language

The utility window, the page and the help are in English. All texts live in two files: lang.py (utility) and web/assets/lang.js (page).

Credits

The page uses the Space Mono font (SIL Open Font License 1.1).

FAQ

How do I control my Mac from an iPhone, iPad or Android phone? Start broadcasting in the utility on the Mac, open your site on the phone and type the four-digit access code. Drag a finger to move the cursor, tap to click. Any modern mobile browser works — there is nothing to install.

Do I need a VPS, a static IP or port forwarding? No. The Mac only makes outgoing HTTPS requests to your web server, and the server is plain PHP with files — any shared hosting is enough. Nothing has to be opened on your home router.

How is it different from TeamViewer, AnyDesk, Chrome Remote Desktop or VNC? There is no account, no vendor cloud and no viewer app: everything goes through a server you own, and the viewer is just a web page. The trade-off: it works over ordinary HTTP polling, so it is meant for convenient access to your own Mac rather than for gaming or video.

Is it secure? The page is locked with an access code, wrong guesses are rate-limited by the server, and only the utility holding the secret key can upload frames. Use HTTPS on your site. It is a personal tool — use it at your own risk.

More GOBL(in) apps

Free and open source, from the makers of GOBL(in):

App What it does
GOBL(in) Voice voice control and dictation for Claude Code, Codex and Orca on macOS
GOBL(in) Session Viewer every Claude Code, Codex, Grok and OpenCode session in one window
GOBL(in) Drag & Taskbar move windows with trackpad gestures, a real taskbar and Alt-Tab for macOS
GOBL(in) Convert fast batch JPEG converter and photo resizer for macOS
GOBL(in) Workflow visual flowchart workflows run by AI coding agents

If this project is useful to you, please ⭐ star it — it helps other people find it.

License

MIT — see LICENSE.

About

Self-hosted remote desktop for macOS that runs in any browser — no app for the viewer, works on cheap PHP shared hosting. Stream the Mac screen (delta PNG, color JPEG) and control the mouse from a phone, tablet or PC. Open-source TeamViewer / VNC alternative.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages