LIVEReading: Run Your Own Figma Alternative with PenpotTotal time: 10 minSteps: 6Worked first time: 72% LIVEReading: Run Your Own Figma Alternative with PenpotTotal time: 10 minSteps: 6Worked first time: 72%
CBW
Run Your Own Figma Alternative with Penpot
Mediumgithub.com/penpot/penpot2026-06-17

Run Your Own Figma Alternative with Penpot

Spin up Penpot — a free, open-source design and prototyping tool — on your own machine using Docker. No Figma subscription needed.

// Build stats

  • Total time10 min
  • Number of steps6
  • DifficultyMedium
  • Worked first time72%
// Before you start

What you need

  • Docker Desktop installed and running (docker.com/products/docker-desktop)
  • Docker Compose included (comes with Docker Desktop)
  • 4 GB RAM free for Docker
  • A modern browser (Chrome or Firefox recommended)
  • Basic comfort opening a terminal or command prompt
01
Step 1 of 6

Create a folder for Penpot

1 min

You need one tidy place on your computer to hold Penpot's config file. This keeps things easy to find and easy to delete later if you want.

Terminal · mac
$ mkdir penpot-local && cd penpot-local
What you should see
Your terminal prompt changes to show you are now inside the penpot-local folder. No other output.
02
Step 2 of 6

Download the official Docker Compose file

2 min

Penpot publishes a ready-made Docker Compose file that describes every service the app needs — the frontend, backend, and database. This single command fetches it directly from their servers so you are always using the official version.

Terminal · mac
$ curl -o docker-compose.yaml https://raw.githubusercontent.com/penpot/penpot/main/docker/images/docker-compose.yaml
What you should see
A file called docker-compose.yaml appears in your penpot-local folder. The terminal shows a progress line ending in 100%.
This might happen

curl: command not found on Windows

Open the URL in your browser, save the page as docker-compose.yaml inside your penpot-local folder, then continue.

03
Step 3 of 6

Pull and start all Penpot services

5-10 min

This one command tells Docker to download all the pieces Penpot needs and start them together. The first run downloads several hundred megabytes, so it takes a few minutes depending on your internet speed. After that, future starts are instant.

Terminal · mac
$ docker compose -p penpot -f docker-compose.yaml up -d
What you should see
Docker prints lines like 'Pulling penpot-frontend ... done' for each service, then 'Container penpot-frontend Started'. You should see no red ERROR lines.
This might happen

Port 9001 or 3449 already in use — Docker reports a bind error

Another app is using that port. Open docker-compose.yaml in a text editor, find the conflicting port number, and change the left side of the mapping (e.g. change '9001:9001' to '9002:9001'). Save, then re-run the command.

04
Step 4 of 6

Open Penpot in your browser

1 min

Once the containers are running, Penpot's web interface is available on your own machine. Give it about 30 seconds after the previous step before opening the link — the backend needs a moment to finish starting up.

Terminal · mac
$ open http://localhost:3449
What you should see
The Penpot login page loads in your browser with a 'Create new account' option.
This might happen

'open' command not found on Windows or Linux

Just type http://localhost:3449 directly into your browser's address bar.

05
Step 5 of 6

Create your admin account

2 min

Because this is a fresh self-hosted install, email verification is disabled by default — you can register and log in immediately without needing to confirm an email address. Click 'Create new account', fill in your name, email, and a password, and you are in.

Terminal · mac
$ No command needed — use the browser form at http://localhost:3449
What you should see
After registering you land on the Penpot dashboard showing 'New project' and a welcome screen.
This might happen

Registration page says email confirmation is required and no email arrives

The default compose file disables email. If you edited the file and enabled SMTP, you need a working SMTP server configured. Revert that change or set up SMTP credentials in the environment section of docker-compose.yaml.

06
Step 6 of 6

Stop Penpot when you are done

1 min

Penpot keeps running in the background until you tell it to stop. Use this command when you are finished for the day. Your projects are saved in a Docker volume and will still be there next time you start it up.

Terminal · mac
$ docker compose -p penpot -f docker-compose.yaml down
What you should see
Each container prints 'Stopping ... done' and then 'Removing ... done'. No error lines.
// Status

cooked. baked. worked.

A fully working Penpot design tool running at http://localhost:3449, where you can create projects, design screens, prototype flows, inspect CSS/SVG code, and invite teammates on your local network — all without a Figma subscription.

// the honest bit

The honest part

This setup is for local or internal use only — it is not hardened for public internet exposure without additional security configuration (HTTPS, firewall rules, proper SMTP). Penpot is a large app with many moving parts; on older or low-RAM machines it can feel slow. Real-time collaboration works on a local network but requires extra reverse-proxy setup to work across the internet. Upgrades require pulling a new compose file and restarting, and occasionally involve breaking changes — always read the release notes before upgrading.