---
title: "Deploy Penpot Libraries"
description: "Shared components, colors and typography for your team"
category: "Other"
url: https://railway.com/deploy/deploy-penpot-shared-libraries
---

# Deploy Penpot Libraries

Shared components, colors and typography for your team

**[Deploy Penpot Libraries on Railway](https://railway.com/template/deploy-penpot-shared-libraries)**

Machine-readable deploy manifest (JSON, validated by TemplateCI): https://railway.com/deploy/deploy-penpot-shared-libraries/manifest.json

- **Creator:** onepush
- **Category:** Other

## Template content

### Postgres https://devicons.railway.app/i/postgresql.svg

- **Image:** ghcr.io/railwayapp-templates/postgres-ssl:18.6@sha256:fcc6686a3f4f1962fe4ed77a15884553b7bd611ae1cea3204687968c5c09d517

### penpot-frontend

- **Image:** penpotapp/frontend:2.18.3@sha256:bb8abe27d53de84c95597f2c02c0e702b2779971fb0703e543f9ecf183e999f6
- **Start command:** `/bin/bash -c 'printf "upstream penpot-backend { zone penpot_backend 64k; server %s:6060 resolve; }\nupstream penpot-exporter { zone penpot_exporter 64k; server %s:6061 resolve; }\nupstream penpot-assets { zone penpot_assets 64k; server %s:6070 resolve; }\n" "$PENPOT_BACKEND_HOST" "$PENPOT_EXPORTER_HOST" "$PENPOT_BACKEND_HOST" > /etc/nginx/overrides/http.d/railway-upstreams.conf && printf "location ~ ^/internal/assets/(.*)\$ { internal; proxy_pass http://penpot-assets/\$1; proxy_hide_header Content-Type; include /etc/nginx/nginx-security-headers.conf; }\n" > /etc/nginx/overrides/server.d/railway-assets.conf && exec /bin/bash /entrypoint.sh nginx -g "daemon off;"'`
- **Health check:** /
- **Public domain:** Yes

### penpot-backend

- **Image:** penpotapp/backend:2.18.3@sha256:2df1b3440d2a82cc3571db211b4ffdfa2b89ccc910759e8d5e9387fb62971b5c
- **Start command:** `/bin/bash -c 'python3 -m http.server 6070 --bind :: --directory /opt/data/assets >/dev/null 2>&1 & exec /bin/bash run.sh'`
- **Health check:** /readyz

### Valkey

- **Image:** valkey/valkey:8.1.10@sha256:640c5e62cea04b6d6f2084232651d0cc70362d31f4f805e7be94dbed6855e8f2

### penpot-exporter

- **Image:** penpotapp/exporter:2.18.3@sha256:418232d6ca3120b1c2bfde298a56a05a1f41f567cd8494deac3fe7fbc186cfbd
- **Health check:** /readyz

## Documentation

# Deploy and Host self hosted Penpot Libraries (Shared Design Libraries and Components) on Railway

Publish a master file once, then connect it to every other file on your team so buttons, colors and type styles stay in sync. Approve changes once and every connected file can pick them up.

## About Hosting Penpot Libraries open-source software on Railway (self hosted Penpot shared libraries for reusable components, colors and typographies template)

Your libraries live in your own Postgres database, not a vendor's cloud. Railway covers containers, TLS, private networking and volumes.

## Why Deploy Penpot Libraries, the Figma alternative on Railway (Railway Free Trial)

Figma keeps shared libraries in its cloud and bills per editor, so every designer who publishes or connects a library adds a seat.

Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.

By deploying Penpot Libraries on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.

### Railway vs Other Hosting Providers and VPS for Penpot Libraries self hosting

Railway runs the Penpot stack as one project with Postgres and Valkey already wired in. Here is how that compares with running it yourself.

| Provider | What You Get with Railway | What You Get with the Other Provider |
|---|---|---|
| DigitalOcean | Five services on private networking, with Postgres and Valkey wired by reference. | A Droplet you size and patch, plus Docker Compose, TLS, and library backups to set up. |
| AWS | Services, volumes, and domains in one dashboard, with no VPC work for the stack. | Flexible but heavy setup across EC2, networking, and storage before Penpot serves a page. |
| Hetzner | Per-service deploys and redeploys, with the backend volume and health checks handled. | Low-cost raw servers where you own the Docker install, TLS, updates, and backups. |

Choose based on how much server work your team wants to own.

## Common Use Cases for hosted Penpot Libraries

- **Publishing a brand design system:** Publish one master file as a shared library and connect it to every product file, so buttons and spacing come from one source.

- **Keeping components consistent:** Connect the same library to several project files, so a fix to an alert or button reaches each file once you accept the update.

- **Syncing colors and typography:** Keep brand colors and text styles in one library and pull them into each file from the assets panel, instead of retyping values.

- **Grouping assets with slashes:** Name components like "Buttons/Primary" so a large library stays navigable, and delete a whole group when a set is retired.

- **Sourcing design tokens:** Click "Set as tokens source" on a library that holds tokens, so a token change reaches every connected file immediately.

## Dependencies for Penpot Libraries Docker hosted on Railway

Five services work together here: the frontend, the backend that stores your shared libraries, a headless exporter, Postgres and Valkey.

### Deployment Dependencies for Managed Penpot Libraries Service (Design Tool)

- **penpot-frontend:** penpotapp/frontend:2.18.3 behind nginx on port 8080, the only public service.
- **penpot-backend:** penpotapp/backend:2.18.3 on port 6060, with a volume at /opt/data/assets.
- **penpot-exporter:** penpotapp/exporter:2.18.3 on port 6061 for PNG, SVG and PDF exports.
- **Postgres 18.6 and Valkey 8.1.10:** Postgres holds libraries and files, Valkey handles notifications.

### Implementation Details for Penpot Libraries (Using Penpot official docker image)

Set PENPOT_PUBLIC_URI on the frontend, since the backend and exporter reference it, and keep PENPOT_SECRET_KEY stable because changing it logs everyone out.

## How does Penpot Libraries compare against other ways to share design libraries across files and teams

### Penpot Libraries vs Figma libraries (Figma Alternative)

- **Where Penpot wins:** Publishing and connecting libraries works from the file main menu or the Libraries panel, and you keep the whole library on infrastructure you run.
- **Where Figma wins:** Its team libraries are mature, and the cloud editor needs no server.
- **Updates:** Penpot's Updates list covers components, colors and typographies, while tokens sync immediately.

### Penpot Libraries vs Sketch libraries (Sketch Alternative)

- **Platform reach:** Penpot runs in a browser, so teammates on Windows, Linux or a Chromebook can connect to a published library. Sketch needs the macOS app.
- **Where Sketch wins:** Its symbol and shared style workflow is well known on macOS.

### Penpot Libraries vs Framer (Framer Alternative)

- **Purpose:** Framer components feed its hosted website builder. Penpot libraries target product design systems and prototypes.
- **Where Framer wins:** If you want to publish a live site straight from components, Framer closes that loop and Penpot does not.

### Penpot Libraries vs Adobe XD (Adobe XD Alternative)

- **Development status:** Adobe stopped active development on Adobe XD and it is in maintenance mode, so Penpot is the more actively developed choice.
- **Where Adobe XD wins:** Its shared asset collections suit teams already inside the Adobe ecosystem.
- **Ownership:** Penpot is MPL-2.0 and self-hostable, so published libraries stay on your infrastructure.

## How to use Penpot Libraries (the OSS design and prototyping tool)?

Once your Penpot instance is live, work through these steps on day one so your team has one source of truth for components, colors and typographies.

1. Open the file you want to share and use the file main menu (or the Libraries panel opened with the Libraries button in the assets tab) to publish it as a shared library.
2. In the file that needs the assets, open the assets tab in the workspace left sidebar and click the Libraries button.
3. Search and select the published library in the libraries panel; if you see "There are no Shared Libraries available", publish a file first.
4. Expand the connected library in the assets panel to browse its components, colors and typographies.
5. To use a library-wide token source, click "Set as tokens source" next to the library in the Libraries panel.
6. Disconnect a library anytime with the disconnect button in the libraries panel.

## How to self host Penpot Libraries on other VPS Services (Penpot self hosting guide)

Here's how to run Penpot on a plain VPS with Docker, the same stack this template uses. Libraries live in Postgres and the image store, so get both right before you publish your first one.

### Clone the Repository

Start from the upstream compose file so you get the official service layout.

```bash
git clone https://github.com/penpot/penpot.git
cd penpot/docker/images
```

### Install Dependencies

You need Docker with the Compose plugin and about 2 GB of RAM or more. Point a DNS record at the server and put HTTPS in front with a reverse proxy.

### Configure Environment Variables

Set the public address and a real secret key before the first start. Changing the key later logs everyone out.

```bash
export PENPOT_PUBLIC_URI=https://your-domain
export PENPOT_SECRET_KEY=$(openssl rand -hex 32)
```

### Start the Penpot Libraries Application

Bring the stack up detached, open your domain, and create the first account. Railway handles the domain, private networking and volumes for you, so you skip most of this.

## Official Pricing of Penpot Libraries (Penpot pricing)

Penpot itself is free and open source under MPL-2.0, so publishing a file as a shared library, connecting it to other files, and syncing components, colors and typographies costs you nothing in licensing.

## Penpot Libraries cloud vs self hosted comparison (Pricing, features, costs, and more)

Self hosting Penpot is free under MPL-2.0, so the real choice is between Penpot's hosted cloud at design.penpot.app and running your own copy. Hosted gets you zero ops work.

### Monthly cost of self hosting Penpot Libraries on Railway

On Railway the whole stack usually lands at about $10-25 per month at light team use, mostly driven by RAM. Plan on at least the Railway Hobby plan, and remember the $5 trial covers a first look.

### System Requirements for Hosting Penpot Libraries on a VPS

Running this on a VPS instead means Docker and about 2 GB of RAM or more.

## Frequently Asked Questions (FAQs)

### Do I need to publish a file before others can connect to it?

Yes. Only a published file appears in the Libraries panel for other files in the team. If you see "There are no Shared Libraries available", publish a file first.

### What happens to assets already used when I unpublish a library?

Unpublishing disconnects the library from every connected file. Assets already used stay in those files, but they are no longer linked, so later source changes will not reach them.

### How do I group components and colors with slashes?

Put a slash in the asset name, such as "Buttons/Alert Button", or right-click the asset and choose "Group". Deleting a group removes every asset inside it after a confirmation prompt.

### Why can't I edit a token in a file that uses a library?

Files that use library tokens cannot create, edit, rename or delete them. Open the library's Tokens tab to change them, and those changes reach connected files immediately.

### Do component updates in linked files show up in the Updates list?

The Updates list covers components, colors and typographies from a connected library. Token changes skip it and reach connected files right away.

### Who can see a published library on a self-hosted instance?

Penpot's upstream library docs do not describe team-level visibility on a self-hosted instance, so I cannot confirm who can see a published library.


## Similar templates

- [Rocky Linux](https://railway.com/deploy/rocky-linux) — Hosted Rocky Linux 9 workspace with SSH and persistent storage. 🚀
- [Foundry Virtual Tabletop](https://railway.com/deploy/X5tR6G) — A Self-Hosted & Modern Roleplaying Platform
- [Letta Code Remote](https://railway.com/deploy/letta-code-remote) — Run a Letta Code agent 24/7. No inbound ports, just deploy.

Open this page in a browser: https://railway.com/deploy/deploy-penpot-shared-libraries
