
В нашу жизнь уже достаточно давно ворвался тренд на дизайн-системы. Пройдя через все стадии принятия, почти все, наверное, уже поняли, что нет того самого идеально-единого-гибкого решения, которое устранит все проблемы, ускорит процесс разработки и исключит изобретение велосипеда (если у кого-то получилось идеально, дайте знать).
Меня зовут Катя Бурлакина, я старший продуктовый дизайнер в VK Tech и занимаюсь развитием дизайн-системы. В этой статье я не буду рассказывать про весь наш путь, а расскажу про его часть — систему дизайн-токенов. Спойлер: при помощи нее у нас получилось устранить некоторые проблемы, ускорить процесс разработки и даже исключить изобретение велосипеда.
Система дизайн-токенов
Продукты VK Tech — это решения для бизнеса. Долгие годы эти решения успешно развивались отдельными продуктовыми командами — это привело к сильным различиям в UI и отсутствию узнаваемого бренда VK Tech для пользователей.
Поэтому когда у нас возникла потребность в дизайн‑токенах, нашей основной задачей стало внедрить единый визуальный стиль и обеспечить его контроль через токены. В подходе мы выделили главные приоритеты — универсальность и гибкость: продукты уже имели собственные компоненты в дизайне и на фронте, при этом у каждого была своя техническая база и свои рабочие инструменты. Нам нужно было сделать систему применимой к любой такой базе, а также не потерять возможность клиентских настроек в формате White Label.
Так нашей задачей стала разработка системы, которая обеспечит единый UI, соответствующий бренду, и при этом подойдет любому продукту по техническим требованиям. А решением этой задачи — трехуровневая система дизайн-токенов:

Первый уровень — базовый. С его помощью решается задача единого UI. По сути, это библиотека возможных значений переменных: палитры цветов, числовые значения и параметры типографики, допустимые в проектах. При помощи них мы задаем общий тон и ритм визуального языка, не ограничивая продукты в конкретных значениях по причине их сложившейся технической уникальности, которая непременно влияет и на UI.
Следующий уровень — семантический — основной уровень для непосредственного применения в проектах. Дизайн-токены данного уровня ссылаются на базовый уровень, но по своей сути обезличены. Они определяют роль в интерфейсе (приоритетность, настроение или относительную величину), но не относятся к конкретному элементу. Это позволяет обеспечить универсальность для использования в любом продукте с любой базой компонентов без риска несогласованности.
Мы также заложили возможность третьего — компонентного — уровня. Это дизайн-токены конкретных элементов интерфейса. Они принимают значения с семантического уровня, тем самым поддерживая всю цепочку зависимостей. При этом, в отличие от двух предыдущих, могут быть совершенно уникальным списком, определяющим UI определенных компонентов.
Автоматизация
Экспорт дизайн-токенов
К переходу продуктов на дизайн-токены мы подготовили плагин, позволяющий нам выгружать переменные из Figma в нужных форматах: json, scss, css и ts. Таким образом, Figma стала источником правды и уже значительно ускорила процесс передачи UI из дизайна в код: нативность Figma и взаимосвязанная структура дизайн-токенов позволяли дизайнеру изменять значения и передавать их на фронт буквально в пару кликов.
Дизайнер и GitLab
В процессе внедрения требовалось много изменений в значениях — тестирования на проде то и дело подсвечивали непредвиденные баги в UI. И мы подумали, что возможность дизайнера самостоятельно вносить изменения в репозиторий должна ускорить процесс внесения правок. Небольшой мастер класс по работе с терминалом, настройка доступов в GitLab — и добро пожаловать в команду фронтенд-разработчиков.
Почему это классно? Процесс обновления токенов очень простой, а дизайнеру не нужно дергать фронта и ждать, пока у него освободится время на обновление. Ведь если у вас жесткая политика планирования, то замена пары значений вообще может затянуться на недели. Теперь обновление UI от начала и до конца проводилось дизайнером. Время обновления токенов на его стороне практически равно времени заведения задачи на фронт — а результат мы получаем быстрее за счет сокращения междкомандного взаимодействия ради минорных изменений.
Тем временем освободившийся от рутинного обновления токенов фронт получил больше времени на фокусировку в продукте. Все, что от него требуется в рамках обновления UI, — это ревью MR и дальнейшее обновление библиотеки токенов в репозитории самого тулкита при очередном релизе.

Компонентный подход
В целом результат уже неплохой. Можно менять значения семантических токенов, экспортировать и выгружать в репозиторий — все изменения быстро оказываются на проде. Но семантика не предоставляет достаточной гибкости — это факт.
Изменив значение какого-нибудь Background-secondary, мы поменяем цвет нескольких элементов. Это решает часть потенциальных задач. Однако зачастую нужна более точечная настройка: изменить фон кнопки, сделать заголовок алерта на пару пунктов больше или изменить отступы у модалки.
Так мы пришли к третьему уровню — компонентному. В компонентном уровне мы заранее заложили возможность любых изменений — так, чтобы при редизайне у нас были ручки управления каждым UI-параметром независимо от того, как компонент выглядит сейчас. Например, заложили толщину и цвет обводки для кнопки, у которой сейчас эти параметры не назначены.

Кроме того, компонентный уровень позволяет поддержать стилизации UI в рамках одного тулкита. Зачем это может понадобиться в рамках одного бренда? Например, для разработки лендингов. Маркетинговые страницы точно такой же продукт, как и личный кабинет. В нем используются такие же компоненты: кнопки, модалки, элементы форм в виде инпутов, селектов, чек-боксов и так далее. Только выглядят эти компоненты более выразительно — а этим управляют как раз дизайн-токены.
Одна структура и названия дизайн-токенов, но разные значения — это две темы в токенах. Так мы получили независимый UI, не затрачивая ресурсы для создания и поддержки очередной базы компонентов.

Минусы решения
Мы не смогли применить систему дизайн-токенов во всех продуктах. Не по той причине, что система не оправдала универсальность, а потому, что некоторые продукты уже были завязаны на других дизайн-системах с собственными токенами. По несложным подсчетам, оказалось просто невыгодно пересаживать их на новое решение: наша цель не была в единой системе любой ценой. Такие продукты применили значения визуальной политики бренда у себя, а для остальных и для новых продуктов стандартом стала трехуровневая система дизайн-токенов.
Система токенов с применением компонентного подхода значительно увеличивает количество токенов. Сейчас токенов у нас около двух тысяч — это много и на первый взгляд тяжело контролируемо. Но системность упрощает любое комплексное решение. Когда у вас есть этапность, связность и четкие правила, количество токенов перестает быть проблемой и как таковым «минусом». В нашей системе дизайн-токенов мы соблюдаем следующие правила:
Четкое разделение на три уровня, каждый из которых выполняет определенную роль, позволяет разбить большой массив на логические части.
Все уровни независимы, но связаны между собой — это обеспечивает управляемый контроль. Изменение на нижнем уровне может организованно прокатиться вверх по системе.
Мы не меняем структуру и названия токенов, которые, в свою очередь, были построены по интуитивно понятному принципу. Этот фундамент обеспечивает быстрый онбординг и предсказуемость системы.
В ответ мы получаем гибкий и удобный инструмент, который:
обеспечивает соответствие бренду в продуктовых интерфейсах;
ускоряет процесс передачи UI из дизайна в код;
позволяет переиспользовать одну базу компонентов для админочных и маркетинговых страниц, сохраняя стилистическую независимость каждого.
Вывод
В нашем случае трехуровневая система решила сразу несколько задач: закрепила единый визуальный стандарт, не ущемляя техническую уникальность продуктов, сократила зависимости между командами и дала дизайнерам реальную автономию в управлении UI. И даже возникшие в результате ~2 000 токенов не стали помехой. Надеюсь, наш опыт поможет вам в развитии дизайн-систем в ваших проектах!
Благодарности
Спасибо Ярославу Петухову, Артему Камышу, Юре Дроздову и Саше Шаталову за реализацию проекта на фронте и истинно командную работу, моему руководителю Павлу Карпову за поддержку в развитии идей, а также Анастасии Кабалкиной, Евгению Теслову и Тамазу Хабулову за совместную работу в формировании системы дизайн-токенов.
Комментарии (12)

AlexanderTok
08.04.2026 14:13Интересная тема, но для больших production-ready проектов самое сложное обычно начинается на уровне архитектуры modes и автоматизации.
Подскажите, пожалуйста, как у вас это устроено:
modes в Figma используете только для тем или еще для брейкпоинтов/размеров. Например, в https://www.figma.com/community/file/1385198638659084461 modes используются для многих вещей и такое автоматизировать очень сложно.
если в разных modes одинаковые имена токенов, как решаете это при генерации JSON и CSS, чтобы не было перезаписи?
Будет очень интересно узнать именно ваш практический подход к архитектуре и автоматизации.

Burlakin-Ka Автор
08.04.2026 14:13Согласна, архитектура – один из самых важных аспектов в дизайн-токенах! Мы около полугода занимались ее разработкой и тестированием, что точно было не зря.
Отвечая на ваши вопросы:Мы используем modes для брейкпоинтов/размеров в отдельной коллекции. У нас коллекция под названием "Modes" для темизации цветов, а "Platforms" – для всех значений, зависимых от разрешения экрана. Проблем с автоматизацией у нас не возникло, но у нас применение modes как функции Figma гораздо уже, чем в Porsche Design System, ссылку на которую вы отправили. Можете подробнее описать, в чем видите сложность автоматизации? Возможно смогу что-то подсказать на основе своего опыта.
-
Первостепенно при экспорте наш плагин разделяет токены на два отдельных файла dark.json и light.json (а также .css /.scss /.ts). Поэтому с темизацией по цветам коллизий не возникает – токены находятся в разных файлах.
Есть еще коллекция Platforms, которая содержит Desktop, Tablet, Mobile и HD в качестве modes. В json каждая платформа – это объект со своими токенами, например:
"platforms": { "desktop": { "layout": { "minWidth": 1280, "maxWidth": 1920 } }, "tablet": { "layout": { "minWidth": 768, "maxWidth": 1280 } } }Адаптивность в css работает через media запросы и переопределение css переменных:
@media (min-width: 1280px) { :root { --platforms-layout-min-width: 1280px; --platforms-layout-max-width: 1920px; } } @media (min-width: 768px) { :root { --platforms-layout-min-width: 768px; --platforms-layout-max-width: 1280px; } }В нашем тулките мы используем ts. Адаптивность решается прокидыванием prop platform (например, platform=“desktop”) и поиска нужного значения в объекте с токенами по ключу "platform".

AlexanderTok
08.04.2026 14:13Спасибо за пояснение.
А какими инструментами вы пользуетесь, чтобы перегнать json -> css? Это больше технический уже вопрос. Мы рассматривали инструменты Style-dictionary, Cobalt CI но там как раз возникли сложности для генерации platform specific токенов для различных media запросов
Burlakin-Ka Автор
08.04.2026 14:13Вам спасибо за хороший вопрос!
Про внутренние инструменты плагина уточню у своего коллеги, Александра Шаталова, который его разрабатывал. Для обычного пользователя плагина сразу экспортируется zip с файлами в 4-х форматах: json, css, scss и ts.

AlexanderTok
08.04.2026 14:13А Ваш плагин публичный? Можно ли его найти в figma community и использовать?

Burlakin-Ka Автор
08.04.2026 14:13Была бы рада поделиться, но плагин только для внутреннего использования. Более того, он заточен исключительно под нашу архитектуру – с другой не сработает.
Но я передам разработчику плагина ваш интерес! Возможно, мы напишем отдельную статью про плагин или даже подумаем над его публикацией в Figma с поддержкой разных архитектур.

Burlakin-Ka Автор
08.04.2026 14:13По инструментам плагина получила ответ: используем style-dictionary, но с кастомными трансформациями и фильтрациями под нашу архитектуру.
Timmek
Видя текущий ВК могу суверенностью сказать:
Ох не на то вы делаете упор, ребята…
Burlakin-Ka Автор
Что имеется в виду под "текущий ВК"? Статья про подход в B2B-продуктах VK Tech. Если есть возможность дать больше конкретики, можем обсудить
Timmek
ооо, это вы кто отвественнен за VK Workspace (Vk teams)?
У меня дофигища вопросов:
1. Почему на клиенте нет retry при неудачной отправке изображения?
2. Почему ваша поддержка не осведомлена о пользовательском пути? тикет 2026022000573
3. Почему вы не обновляете SWAGGER вот уже 5 лет ? https://teams.vk.com/botapi/
Вот номер тикета 2026022000601
4. Почему все декстом клиенты лагают когда видит очень большое сообщение? (больше 5000 символов)
5. ПОЧЕМУ КАЖДЫЙ РАЗ КОГДА ЗАХОЖУ В КЛИЕНТ VK WORKSPACE ОН СЛОВНО ЗАНОВО ВСЁ СКАЧИВАЕТ С СЕРВЕРА. ПРЯМ ВСЁ! Я ВИЖУ КАК ПРОНОСЯТСЯ ДИАЛОГИ С 2023 ГОДА
udinhtml
Зачем у дизайнера спрашивать подобные вопросы, не очень понятно. Это как спрашивать у продавца в магните, почему у вас интернет магазин тормозит и почему колбаса дороже чем в пятёрочке.
Хотя вы такой не один, частенько под постами от крупных сервисов будут комментарии с номерами тикетов, которые вообще никак не касаются темы статьи, и тех, кто их пишет.
Burlakin-Ka Автор
К сожалению, не могу дать ответ на ваши вопросы, так как они вне моей ответственности и никак не связаны с моей ролью в компании – я продуктовый дизайнер и занимаюсь дизайн-системой VK Tech (статья как раз про неё). VK WorkSpace — отдельный продукт с отдельной командой, и я обязательно передам им все ваши боли