Skipper is a touch-friendly web interface for controlling Klipper-based 3D printers through the Moonraker API. It runs entirely in the browser and supports multiple printers, print and file management, temperature controls, movement, extrusion, and the G-code console.
Use the hosted version at timwedde.github.io/skipper.
Skipper connects directly from your browser to Moonraker. Your phone or computer must therefore be able to reach the printer, usually by being on the same local network.
Add the hosted site's origin to the existing [authorization] section in moonraker.conf:
[authorization]
cors_domains:
https://timwedde.github.ioKeep any existing cors_domains entries and add this one alongside them. Save the file and restart Moonraker.
Open Skipper and enter:
- Name: Any name you want to use for the printer.
- Host or IP: The printer's local hostname or IP address, such as
printer.localor192.168.1.50. Do not includehttp://. - Port:
7125for a standard Moonraker installation. - Authentication: Select trusted/none, username and password, or API key to match your Moonraker configuration.
- Use HTTPS / WSS: Enable this only if Moonraker is configured for TLS.
Allow local-network access if your browser asks for permission, then save the printer. Printer details are stored in that browser, so another browser or device must be configured separately.
Skipper is only the frontend: it does not relay traffic through a cloud server. The printer must remain reachable from the device running Skipper, including when using the installed app.
Skipper is a Progressive Web App. Use your browser's Install app or Add to Home Screen action for a full-screen, app-like experience. The interface can reopen from its local cache, but printer controls still require a network connection to Moonraker.
Requirements: Node.js 26 or newer and Bun.
bun install
bun devBefore submitting changes, run:
bun format
bun lint
bun run buildSet VITE_BASE_PATH when building for a subpath such as GitHub Pages:
VITE_BASE_PATH=/skipper/ bun run build