Penpot
Редактор интерфейсов, который ставится на свой сервер: макеты, компоненты, дизайн-токены и передача в разработку. Развернули 2.18.0 на Fatmetal Cloud Server, замерили потребление и проверили, что реально переезжает из Figma.
Вердикт
- командам, которым Figma больше не продается официально
- тем, кому макеты нужно держать внутри периметра
- под дизайн-систему: токены по стандарту W3C, без плагинов
- для передачи в разработку без платного Dev-места
- дизайнеру-одиночке: хватит бесплатного облака Penpot
- команде со слабыми ноутбуками - рендер идет в браузере
- если нужны прототипы прямо из Figma: они не переносятся
- под иллюстрацию и печать - это инструмент интерфейсов
Что это и какую задачу решает
Penpot - браузерный редактор интерфейсов и прототипов, который разворачивается на своем сервере. По набору задач это Figma: макеты, библиотеки компонентов, автолэйаут, комментарии, совместная работа в реальном времени.
Отличий два, и оба технические. Файлы живут в открытых веб-форматах, а автолэйаут - это буквально flexbox и CSS Grid, а не собственная модель раскладки. Разработчик видит в инспекторе то, что потом пишет в код.
Второе - дизайн-токены по стандарту W3C нативно, без плагинов. Для команды с дизайн-системой это значит, что токены выгружаются в CSS, SCSS или JSON без прослойки.
Интерфейс переведен на русский полностью: в файле локализации 2.18.0 - 1666 строк и ни одного пустого перевода. Все скриншоты в этом разборе сняты с русской версии.
Чем отличается от платных аналогов
Для российской команды разговор идет не про экономию, а про доступность.
Figma в справочном центре пишет прямо: платные услуги новым клиентам в России не предоставляются, включая переход с бесплатного Starter на платный тариф. Платежные схемы для таких клиентов не выстраиваются (проверено 27 сентября 2026).
То есть подписку нельзя не «дорого», а нельзя оформить в принципе. Поэтому таблица ниже - не про то, где дешевле.
| Параметр | Penpot self-host | Figma | Sketch |
|---|---|---|---|
| Цена за место | нет, платите за сервер | Full 16 $, Dev 12 $, Collab 3 $ в мес | 12 $ за редактора в мес |
| Доступность из РФ | полная | платные тарифы не продаются | оплата из РФ недоступна |
| Где данные | ваш сервер | облако вендора | облако вендора |
| Платформа | браузер | браузер и десктоп | только macOS |
| Инспектор для разработчика | входит | отдельное Dev-место | входит |
| Лицензия | MPL-2.0 | проприетарная | проприетарная |
Облако самого Penpot тоже есть и бесплатное на тарифе Professional - оно тут скорее конкурент self-host, чем Figma. Ставить на свой сервер имеет смысл, когда данные должны остаться внутри.
Тех-стек и архитектура
Бэкенд - Clojure на JVM, фронтенд - ClojureScript. Рендер холста в 2.x переписан на Rust со Skia и собирается в WASM, работает через WebGL в браузере пользователя.
Официальный compose 2.18.0 поднимает девять контейнеров: frontend (nginx), backend, exporter, admin-console, mcp, PostgreSQL 15, Valkey 8.1, перехватчик почты и ваш reverse-proxy.
Два контейнера новые и о них стоит знать. penpot-mcp - это MCP-сервер, к которому подключается внешний AI-агент, чтобы читать и править файлы. Ключи моделей в самом Penpot нигде не хранятся: наружу к моделям он не ходит.
Админ-консоль появилась ровно в 2.18.0 - в compose предыдущей версии этого сервиса нет. Она отвечает за организации и подписки и включается флагом enable-admin-console.
Самый тяжелый образ - экспортер, 2.96 ГБ. Внутри полный Chromium: PNG и PDF Penpot рендерит настоящим браузером на сервере.
Минимальная конфигурация
Вендор минимума не называет вовсе - только рекомендацию под тысячи пользователей.
| Официальный минимум | не заявлен |
| Рекомендация вендора | 4 CPU / 16 GB под тысячи пользователей |
| Реально в простое | 2.26 ГБ на машине, 2.02 ГиБ контейнеры |
| Из них бэкенд на JVM | 1.203 GiB |
| Диск после установки | 9.0 ГБ, из них 6.95 ГБ образы |
| Рекомендуем тариф | CPU4-RAM8-DISK100 |
Почему не CPU2-RAM4-DISK50. Простой укладывается и в 4 ГБ, но бэкенд на JVM растет вместе с весом открытых файлов, а каждый параллельный экспорт добавляет около 200 МБ. Мы это замерили - цифры ниже.
В маркетплейсе Fatmetal
Не хотите ставить руками?
Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.
Рекомендуемая конфигурация: CPU4-RAM8-DISK100
Развертывание на Fatmetal
Cloud Server, Ubuntu 24.04, Docker ставится руками - образ идет чистым.
Взять compose нужного тега
Именно тега, а не ветки main: в файле зашиты подстановки версий.
mkdir -p /opt/penpot && cd /opt/penpot curl -fsSL -o docker-compose.yaml \ https://raw.githubusercontent.com/penpot/penpot/2.18.0/docker/images/docker-compose.yamlЗапинить версию и ключ
Без явной переменной поднимется 2.17, а админ-консоль - 2.16.
printf 'PENPOT_VERSION=2.18.0\nPENPOT_SECRET_KEY=%s\n' \ "$(openssl rand -base64 64 | tr -d '\n')" > .env chmod 600 .envЗакрыть порт и снять небезопасные флаги
Порт 9001 вешаем на
127.0.0.1, наружу смотрит только reverse-proxy с TLS. ИзPENPOT_FLAGSубираемdisable-email-verificationиdisable-secure-session-cookies, телеметрию выключаем.Поднять стек
docker compose pull docker compose up -dПроверка готовности:
curl -s -o /dev/null -w "%{http_code}" https://ваш-домен/readyz.Завести первого пользователя
Штатный CLI внутри контейнера бэкенда, профиль сразу активен.
docker exec penpot-penpot-backend-1 python3 /opt/penpot/backend/manage.py \ create-profile -n "Имя" -e you@example.com -p 'пароль'
Что измерили после запуска
Цифры со стенда CPU4-RAM8-DISK100, Ubuntu 24.04.4, Docker 29.8.1.
| Установка Docker | 17 с |
| Скачивание образов | 90 с (9 образов, 6.95 ГБ) |
| Старт контейнеров | 6 с |
| Миграции до готовности | 27 с |
| Итого с чистой машины | 135 с |
| RAM в простое | 2.26 ГБ на машине |
| Отклик главной | 50 мс |
| Вход через API | 190 мс |
| После перезагрузки ВМ | 35 с до ответа, 58 с до всех контейнеров |
Отдельно проверили, что растет и почему. Импортировали встроенную дизайн-систему вендора: база выросла с 12 до 16 МБ, том ассетов - с 8 КБ до 20 МБ, 743 объекта хранилища.
Экспорт борда в PNG занял 3.2 секунды. Экспортер на пике поднялся со 127.7 до 336.6 MiB - столько стоит один параллельный Chromium.
Главное по ресурсам. Сервер держит данные и синхронизацию, а рисует браузер. Открытие одного файла с дизайн-системой - это 39.9 МБ JSON, которые уезжают клиенту за 7 секунд. Слабый ноутбук дизайнера сервером не лечится.
Проверено на версии v2.18.0, сентябрь 2026. На новых версиях результаты могут отличаться.
Что реально переносится из Figma
У Penpot есть официальный плагин экспорта, и у него есть границы.
Плагин ставится в Figma, выгружает файл в архив, архив импортируется в Penpot. Репозиторий живой, правки - от 10 сентября 2026.
По собственному списку плагина переносятся фигуры и тексты, компоненты и наборы компонентов, варианты, автолэйауты, маски и булевы группы, библиотеки цветов и типографики, связи с внешними библиотеками.
Прототипы не переносятся вовсе - это написано в документации плагина прямым текстом. Связи между экранами, оверлеи и триггеры придется собрать заново.
Второе ограничение - производительность на больших файлах: мейнтейнеры называют ее главной проблемой экспорта. Планируйте переезд по файлам, а не одним архивом на всю библиотеку.
Оговорка. Сами мы миграцию не прогоняли: для этого нужен живой аккаунт Figma с реальной библиотекой. Список выше - документация апстрима, а не наш замер.
Где может сломаться
Три грабли, на которые наступили при запуске.
Симптом. Стек работает, но снаружи отдается самоподписанный сертификат TRAEFIK DEFAULT CERT. Выглядит как проблема Let's Encrypt.
Причина. В закомментированном примере официального compose зафиксирован traefik:v3.3. Его docker-провайдер ходит к демону с API 1.24, а Docker Engine 29 принимает минимум 1.40. Провайдер не видит меток контейнеров вовсе, роутер не создается, ACME не запускается.
Решение. Поднять версию прокси: traefik:v3.7.13. Переменная DOCKER_API_VERSION не помогает. После замены сертификат выпустился с первой попытки.
Версия в compose отстает от файла. В compose тега 2.18.0 подстановка по умолчанию дает 2.17, а админ-консоли - 2.16. Без явного PENPOT_VERSION вы поднимете не то, что скачали.
Нерабочий SMTP не виден снаружи. Регистрация отвечает успехом за 0.31 секунды даже при недостижимом почтовом сервере: письмо уходит в очередь. Пользователь видит «проверьте почту», письма нет, а правда лежит в таблице task со статусом retry.
Диагностика последнего случая - один запрос к базе:
docker exec penpot-penpot-postgres-1 psql -U penpot -d penpot \
-c "select name, status, retry_num, left(error,60) from task order by created_at desc limit 5;"
Безопасность и обновления
Перед выходом в интернет меняем то, о чем вендор предупреждает сам: секретный ключ вместо change-this-insecure-key, снимаем флаги отключенной проверки почты и небезопасных cookies, выключаем телеметрию, ставим реальный SMTP вместо перехватчика.
Вход в команду через OIDC и LDAP есть в открытом коде и включается флагами. SAML и журнал аудита - платный уровень: в открытом репозитории их реализации нет.
Обновление - обычное, но у перехода на 2.18 есть ручной шаг: в compose нужно добавить сервис админ-консоли и переменную PENPOT_ADMIN_CONSOLE_URI, иначе стек окажется несогласованным.
docker compose pull && docker compose up -d
Бэкап - база плюс том ассетов, порознь их восстанавливать бессмысленно:
docker exec penpot-penpot-postgres-1 pg_dump -U penpot penpot > penpot.sql
docker run --rm -v penpot_penpot_assets:/d -v "$PWD":/b alpine \
tar czf /b/assets.tgz -C /d .
Связь с другими стеками
- Reverse-proxy - Traefik или Caddy для TLS, порт 9001 наружу не публикуем.
- S3-хранилище - ассеты уносятся одной переменной
PENPOT_OBJECTS_STORAGE_BACKEND=s3. База - нет, ей нужен диск. - SMTP - обязателен для подтверждения адреса и приглашений в команду.
- MCP-клиент - Claude, Cursor и другие агенты подключаются к
/mcp/sseи работают с файлами.
Когда это НЕ ваш выбор
У команды слабые машины
Рендер вынесен в браузер через WASM и WebGL. Сервер можно взять скромный, а ноутбуки дизайнеров - нет. Вендор прямо просит свежий Chrome и мощные клиентские машины.
Нужны прототипы из Figma прямо сейчас
Официальный плагин их не переносит. Если интерактив - основа вашей библиотеки, переезд означает сборку прототипов заново.
Нужны SAML и журнал аудита
В self-host есть OIDC и LDAP, а SAML с audit trail вендор относит к платному уровню. У контейнера админ-консоли публичного исходника нет, хотя в следующем релизе он станет включенным по умолчанию.
Это госзаказ с требованием реестра
Свой сервер снимает вопрос передачи данных за границу, но Penpot не в реестре отечественного ПО, и self-host этого не меняет.
Частые вопросы
Хватит ли 4 ГБ памяти?
Простой укладывается: мы намеряли 2.26 ГБ. Но бэкенд на JVM растет с весом открытых файлов - на одном файле в 40 МБ он поднялся с 1.09 до 1.36 GiB. На 4 ГБ мы стек не проверяли и обещать не будем.
Можно поставить без Docker?
Официальный путь - compose или Helm-чарт. Сборка из исходников возможна, но вендор ее как способ установки не предлагает.
Русский интерфейс полный?
Да. В файле локализации 2.18.0 - 1666 строк, пустых нет, последняя ревизия от 31 июля 2026.
Penpot ходит во внешние ИИ-модели?
Нет. Ни в compose, ни в переменных контейнеров нет ключей OpenAI или Anthropic. MCP-сервер работает в обратную сторону: это к нему подключается ваш агент.
Как отдать разработчику макет?
Режим инспектирования входит в бесплатную установку: размеры, цвета, CSS и экспорт ассетов, без отдельного платного места.
Что бэкапить?
Базу PostgreSQL и том ассетов вместе. В базе геометрия файлов и история версий, в томе - картинки и шрифты.
Какие ограничения лицензии?
MPL-2.0. Это не AGPL: держать инстанс внутри компании и писать рядом свой закрытый код можно без условий.
Итог
Penpot 2.18 ставится за две минуты и держится в 2.26 ГБ памяти в простое - тариф CPU4-RAM8-DISK100 закрывает команду с запасом на экспорт и тяжелые файлы. Русский интерфейс полный, инспектор для разработчика входит в бесплатную установку, лицензия MPL-2.0 не требует ничего взамен. Главное узкое место не на сервере, а в браузере дизайнера, а прототипы из Figma придется собрать заново.
Этот стек у нас запущен на тарифе CPU4-RAM8-DISK100. Нашли баг в гайде - напишите, поправим в течение дня.