Overview

PrintMux is an open-source middleware layer that lets slicers upload once and dispatch to multiple printers. It presents Moonraker-compatible and minimal OctoPrint-compatible APIs with a unified dispatch UI.

Note: This branch contains only the public website assets.

Repo: https://github.com/SmoothBrainIT/PrintMux

Website: https://printmux.com

Docs: https://printmux.com/docs.html

Quick Start (Docker Compose)

  1. Install Docker Desktop. Official install guide
  2. Install Git (if needed). Git downloads
  3. Clone the PrintMux repo:
git clone https://github.com/SmoothBrainIT/PrintMux.git
cd PrintMux
  1. Update the root .env file (already included):
PRINTMUX_BACKEND_PORT=8000
PRINTMUX_FRONTEND_PORT=5173
VITE_API_BASE=http://localhost:8000
  1. Optional: edit docker/.env to change ports. Defaults are 8000 (backend) and 5173 (frontend).
  2. Build and start the stack:
docker compose up --build
  1. Open the UI in your browser:
http://localhost:5173

Notes

  • If you changed ports, update the URL accordingly.
  • Use CTRL + C to stop the stack.
  • docker/.env.example is kept for reference; the root .env is the source of truth.

Quick Start (Manual)

Install prerequisites:

Backend:

python -m venv .venv
.venv/Scripts/activate
pip install -r backend/requirements.txt
uvicorn backend.app.main:app --reload --port 8000

Frontend:

cd frontend
npm install
npm run dev

Architecture

PrintMux sits between slicers and printers. Jobs are stored on disk, metadata is stored in the database, and dispatch is handled per-printer.

Architecture Diagram Placeholder

API

Key endpoints include:

GET /api/printers
GET /api/printers/status
POST /api/jobs/{job_id}/dispatch
POST /api/octoprint/files/local
POST /server/files/upload

See full details in docs/API.md.

Operations

Configure storage and database paths via environment variables. Status polling includes a per-printer timeout to avoid UI hangs.

See docs/OPERATIONS.md for details.

Cloudflare Pages

  • Root directory: . (repo root)
  • Build command: echo "no build"
  • Output directory: .

If you see a Wrangler “Missing entry-point” error, Pages is trying to deploy a Worker. Set the build command to echo "no build" and re-deploy.

Cloudflare Workers Static Assets

npx wrangler deploy

Security

Slicer access is protected by an API key. Use a strong key and avoid exposing the backend directly to the public internet.

FAQ

Does PrintMux proxy webcam streams? Not yet.

Can I use Postgres? Yes, set PRINTMUX_DATABASE_URL.