VKify собирает в одном расширении всё, чего обычно не хватает во ВКонтакте: оформление под себя, чистую ленту без рекламы, приватность переписки, скачивание медиа и инструменты для сообщений. Настройки открываются в попапе (10 вкладок) или прямо на странице — vk.com/vkify_settings. По Ctrl/Cmd + K работает поиск по всем функциям.
- 72 встроенные темы в 11 категориях (Classic, Soft, AMOLED, Colored, Neon, Nature, Minimal, Retro, Warm, Cool) и автоматическое переключение свет/тьма
- Свой акцентный цвет для всей палитры интерфейса
- Более 60 шрифтов через Google Fonts с настройкой размера, межстрочного интервала, насыщенности и стиля
- Обои страницы: статичные картинки, видео и HTML-анимации, с размытием, затемнением и прозрачностью
- Визуальные фильтры для изображений: чёрно-белый, сепия, инверсия, контраст, размытие, затемнение
- Настраиваемый радиус скругления и форма аватарок (капля, лист, лепесток, клякса)
- Широкий режим с адаптивным двухколоночным профилем
- Настраиваемая ширина контента
- Компактный режим — убирает лишние отступы между блоками (классический VK и VKUI)
- Смещение страницы до ±600 px для широких мониторов
- Минималистичное левое меню с подсказками и фиксацией при прокрутке
- Скрытие отдельных пунктов и счётчиков левого меню ВКонтакте
- Перестановка панелей мессенджера: список бесед справа, открытый диалог слева
- Сворачивающийся поиск, кнопка «Наверх», скелетон-режим при загрузке
- Блокировка левого рекламного блока
- Блокировка рекламы в ленте на уровне API и отдельно через DOM-фильтр со своим списком ключевых слов
- Блокировка трекеров и аналитики: Яндекс.Метрика, Google Analytics, Facebook Pixel и другие
- Журнал блокировок с фильтрами, пагинацией и JSON-снимком для API-блокировок
- Истории в ленте и истории возможных друзей на профиле
- Блок написания поста и комментарии под постами
- Рекомендации, карусель «возможные друзья», эмодзи-статус у имени
- Промо-блок на профиле и реклама в музыке
- Мини-чат, кнопка «Наверх», попап входа о новом сеансе
- Пункты меню, счётчики, «Настройки» в меню
- Недавние сообщества и рекомендуемые каналы в мессенджере
- Шифрование сообщений двумя протоколами: COFFEE (совместим с Kate Mobile, Laney, Vika) и VKify E2E v2 на AES-256-GCM с PBKDF2; входящие расшифровываются автоматически
- Режим невидимки: вас не видно в сети, и при этом вы не видите чужой онлайн
- Не показывать собеседнику «печатает» и не отмечать сообщения прочитанными
- Скрытие переписок по горячей клавише и список спрятанных чатов
- Размытие страницы при потере фокуса окна
Хаб с инструментами для переписки, ленты и медиа — устроен как разделы VK, с левым рейлом и подстраницами.
- Сообщения — быстрое копирование последнего сообщения, экспорт диалога в JSON, TXT, HTML или ZIP с вложениями, шаблоны и заметки
- Шаблоны — редактор с переменными (
%first_name%,%title%,%date%и др.), вызов по «/» или горячей клавише, режим «отправить сразу» - Заметки — привязка к диалогам, поиск по содержимому, закрепление, группировка по дням с аватарами авторов
- Лента — раскрытие текста длинных постов, скачивание историй
- Видео — скачивание с выбором качества от 1080p до 240p
- Клипы — скачивание VK Clips с выбором качества
- Фото — скачивание отдельных фото и целых альбомов в ZIP (до 1000 за запрос)
- Музыка — скачивание треков и альбомов в MP3 с выбором битрейта (128/192/320), ID3-тегами и обложкой, подбором текста песни и форматом имени файла; пакетная загрузка со страницы аудио и мульти-загрузка своих файлов
- Плеер — горячие клавиши аудиоплеера (play/pause, перемотка, скорость), локальные и глобальные через
chrome.commands, автозапуск музыки после перезагрузки страницы - Центр загрузок на странице: прогресс, отмена в один клик с сохранением уже скачанного, фоновая работа
- Активность в сообщениях через перехват LongPoll: печать, голосовые, медиа, прочтение, редактирование, удаление (с текстом удалённого), входящие, звонки, смена невидимки
- Онлайн-мониторинг: заходы и выходы, история и недельные графики, настраиваемый интервал опроса
- Отслеживание профилей: смена аватара, статуса и числа друзей
- Браузерные уведомления для всех подсистем, добавление пользователя из друзей, диалогов или по ID
- Авто-добавление друзей с лимитами и задержками
- Переключатель раскладки клавиатуры (ru↔en) по горячей клавише
- Обход away.php — внешние ссылки открываются напрямую, минуя редирект VK
- Встроенный CSS-редактор с подсветкой, форматтером, живым превью и готовыми сниппетами
- Экспорт и импорт настроек (статистика при импорте сохраняется)
- Расшаренные темы по ссылке — параметр
vkify_themeв URL применяет тему одним кликом - Встроенная страница настроек на vk.com и пункт «Настройки VKify» в меню профиля
- Панель диагностики с кнопкой «Копировать отчёт» для багрепортов
- Онбординг-тур при первом запуске
- Поддержка vk.com, vk.ru и vkvideo.ru
- Кросс-браузерность: Chrome, Firefox и Opera из единой кодовой базы
Готовое расширение — поставьте из магазина:
- Chrome Web Store — Chrome, Opera и другие браузеры на Chromium
- Firefox Add-ons — Firefox
Из исходников (для разработки или ручной установки):
git clone https://github.com/VKify/vkify-extension.git
cd vkify-extension
npm install
npm run build # соберёт все три версии: dist/chrome, dist/firefox, dist/operaМожно собрать и по отдельности: npm run build:chrome / build:firefox / build:opera.
Установка распакованной версии:
- Chrome —
chrome://extensions→ «Режим разработчика» → «Загрузить распакованное» → папкаdist/chrome. - Opera —
opera://extensions→ «Режим разработчика» → «Загрузить распакованное» → папкаdist/opera. - Firefox —
about:debugging#/runtime/this-firefox→ «Load Temporary Add-on» →dist/firefox/manifest.json(илиnpm run run:firefox). Постоянная установка требует подписи AMO.
После загрузки обновите открытые вкладки vk.com. Подробности по кросс-браузерности — в CROSS_BROWSER.md.
Как пользоваться:
- Нажмите иконку VKify на панели браузера — откроется попап с настройками (10 вкладок).
- Или откройте
vk.com/vkify_settings(либо пункт «Настройки VKify» в меню профиля) — те же настройки прямо на странице VK. Ctrl/Cmd + Kв попапе — поиск по всем функциям расширения.- Настройки применяются мгновенно и синхронизируются между попапом и страницей.
Расширение разбито на несколько слоёв, которые общаются через Chrome Storage и Message API:
┌─────────────────┐ chrome.runtime ┌──────────────────┐
│ popup (React) │ ◄────────────────────── │ background SW │
│ UI настроек │ ───────────────────────► │ VK API, алармы │
└─────────────────┘ └──────────────────┘
│
chrome.tabs.sendMessage
│
┌──────────▼──────────┐
│ content script │
│ фичи на странице │
└─────────────────────┘
│
┌──────────▼──────────┐
│ injected scripts │
│ page context (spy, │
│ ad blocker, bridge)│
└─────────────────────┘
- background — сервис-воркер: запросы к VK API, управление алармами и уведомлениями
- content — контент-скрипты: применяют CSS/JS прямо в интерфейсе VK, управляют фичами через
FeatureManager - injected — скрипты в page context (обход sandbox): перехват WebSocket событий (spy), блокировка рекламы на уровне API, антитрекинг
- popup — React-приложение в попапе: интерфейс настроек (10 вкладок)
- embed — контент-скрипт, который встраивает тот же интерфейс настроек прямо в страницу VK (
vk.com/vkify_settingsи пункт меню профиля) - site-bridge — контент-скрипт для vkify.ru: передаёт настройки с сайта в расширение (на
http://localhost/*— только в dev-сборке)
- Все настройки описаны в одном реестре
shared/constants/settings-schema.ts. Из него собираются whitelist'ы и общий валидатор для shared-тем, импорта файла и site-bridge. - Канал
postMessageмежду content и injected закрыт nonce'ом на сессию; токен VK не достаётся из чужих запросов. - CSP
script-src 'self', исходящиеpostMessageадресованы конкретному origin, без'*'. http://localhost/*для site-bridge есть только в dev-манифесте.- Ссылки на сайт (
shared/constants/site.ts) подставляются на сборке: в prodhttps://vkify.ru, в devhttp://localhost:5173. Домен нигде не захардкожен.
Ниже только каталоги. Имена файлов внутри опущены, чтобы дерево оставалось актуальным при перестановке модулей.
vkify/
├── .github/ # Workflows, шаблоны issue/PR, медиа для README
│ ├── assets/
│ ├── ISSUE_TEMPLATE/
│ └── workflows/
├── e2e/ # Playwright-тесты попапа
├── manifest/ # base.json + оверрайды chrome / firefox / opera
├── public/
│ ├── icons/ # Иконки расширения (16–300 px)
│ ├── styles/ # Статичный CSS контент-скрипта
│ └── wallpapers/ # Каталог обоев
├── scripts/ # Сборка, проверка размера и упаковка
└── src/
├── __tests__/ # Юнит-тесты (Vitest)
├── background/ # Сервис-воркер: VK API, алармы, уведомления
│ ├── handlers/
│ ├── services/
│ └── utils/
├── content/ # Контент-скрипты
│ ├── api/
│ ├── core/ # FeatureManager, CSS/скрипт-инъекторы, кэш
│ ├── embed/ # Настройки прямо на странице VK (vk.com/vkify_settings)
│ ├── features/
│ │ ├── ads-blocking/
│ │ ├── appearance/
│ │ │ ├── background/ # Обои: картинки, видео, веб
│ │ │ ├── filters/ # Визуальные фильтры
│ │ │ ├── font/
│ │ │ ├── header/
│ │ │ ├── layout/ # Ширина контента, смещение, скругления
│ │ │ ├── sidebar/
│ │ │ └── theme/
│ │ ├── automation/ # away.php, автодрузья, раскладка
│ │ ├── center/ # Хаб «Центр» — страницы со скачиванием медиа
│ │ │ ├── _shared/ # Общие утилиты download-фич + barrel _shared.ts
│ │ │ ├── feed/ # «Лента»: раскрытие текста постов
│ │ │ ├── messages/ # «Мессенджер»
│ │ │ │ ├── _shared/
│ │ │ │ ├── dialog-export/
│ │ │ │ ├── pin-note/
│ │ │ │ ├── quick-copy/
│ │ │ │ └── templates/
│ │ │ ├── player/ # «Плеер»: хоткеи аудиоплеера + автозапуск
│ │ │ ├── story/ # «Лента»: скачивание историй
│ │ │ ├── video/ # «Видео»: скачивание видео
│ │ │ ├── clip/ # «Клипы»: скачивание VK Clips
│ │ │ ├── photo/ # «Фото»: скачивание фото и альбомов
│ │ │ └── music/ # «Музыка»: MP3-скачивание + мульти-загрузка
│ │ ├── custom-css/
│ │ ├── elements/ # Скрытие блоков интерфейса
│ │ │ ├── communities/
│ │ │ ├── feed/
│ │ │ ├── friends/
│ │ │ ├── global/
│ │ │ ├── menu/
│ │ │ ├── messenger/
│ │ │ ├── music/
│ │ │ └── profile/
│ │ ├── privacy/
│ │ │ ├── crypto/ # Шифрование сообщений (VKify E2E / COFFEE)
│ │ │ └── dialogs/ # Скрытие диалогов, хоткеи
│ │ ├── spy/ # Слежка за онлайн-статусом
│ │ └── utils/
│ ├── injected/ # Скрипты в page context (spy, блокировка рекламы, мост)
│ ├── services/ # Связь с background, SPA-навигация, токен
│ ├── ui/
│ │ └── download-center/ # Центр загрузок на странице
│ └── utils/
├── popup/ # React UI расширения
│ ├── components/
│ │ ├── charts/
│ │ ├── icons/
│ │ ├── layout/
│ │ ├── modals/
│ │ ├── onboarding/
│ │ ├── tabs/ # 10 вкладок попапа
│ │ │ ├── appearanceSections/
│ │ │ ├── center/
│ │ │ │ ├── feed/
│ │ │ │ ├── messages/
│ │ │ │ ├── player/
│ │ │ │ ├── video/
│ │ │ │ ├── clip/
│ │ │ │ ├── photo/
│ │ │ │ └── music/
│ │ │ ├── elements/
│ │ │ │ ├── communities/
│ │ │ │ ├── feed/
│ │ │ │ ├── friends/
│ │ │ │ ├── global/
│ │ │ │ ├── menu/
│ │ │ │ ├── messenger/
│ │ │ │ ├── music/
│ │ │ │ └── profile/
│ │ │ └── spySections/
│ │ └── ui/ # Общие UI-примитивы
│ ├── constants/
│ ├── context/
│ ├── hooks/
│ │ ├── core/
│ │ └── features/
│ └── utils/
│ └── css/
├── shared/ # Общий код для всех слоёв
│ ├── constants/ # settings-schema, defaults, site, ключи storage
│ └── utils/ # vk-fetch, zip, ttl-cache, page-channel и др.
└── types/ # TypeScript-типы проекта
npm install
npm run build # typecheck + сборка всех трёх → dist/{chrome,firefox,opera}
npm run build:chrome # только Chrome → dist/chrome
npm run build:firefox # только Firefox → dist/firefox
npm run build:opera # только Opera → dist/opera
npm run build:fast # быстрая сборка Chrome без typecheck
npm run build:dev # dev-сборка Chrome: localhost-мост + console.* сохранены
npm run dev # dev-сервер popup с hot reload
npm run typecheck # проверка TypeScript-типов
npm run test # запуск тестов (Vitest)
npm run run:firefox # запустить Firefox с расширением (web-ext)
npm run lint:firefox # проверка пакета правилами AMO (web-ext lint)
npm run package:chrome # собрать + упаковать .zip (аналогично firefox/opera)
npm run clean # удалить папку dist/Сборка раздельная (scripts/build.mjs): popup и background собираются как
ES-модули, а content.js, embed.js, site-bridge.js и injected/*.js —
отдельными IIFE-бандлами. Классический скрипт не умеет в ES-import, и такой
бандл всё равно переиспользует код из shared/.
Одна кодовая база, три пакета. Браузеро-специфичны только манифесты и крошечный слой нормализации API:
- Манифесты — общий
manifest/base.json+ оверрайдыmanifest/{chrome,firefox,opera}.json, которые мёржатся на сборке вdist/<browser>/manifest.json. Firefox получаетbackground.scripts(event-page) вместо service worker,browser_specific_settings.geckoи CSP безbase-uri; Opera = Chromium-база. - API — код вызывает
chrome.*в promise-стиле; на Firefoxsrc/shared/ext-api.tsпереводит глобалchromeна нативныйbrowser(промисы + рабочийreturn true/sendResponse). На Chromium — no-op. webextension-polyfill НЕ используется намеренно (его обёртка надonMessageломает паттернreturn true). - Точечные отличия движков — через build-константу
IS_FIREFOX(src/shared/constants/browser.ts): напр. Chrome-only полеpriorityвnotifications.createиcloneIntoдля content→injected событий (Firefox изолирует миры).
Полное руководство, нюансы Firefox (host_permissions, подпись AMO) и упаковка — в CROSS_BROWSER.md.
- prod (
build/build:fast) —console.*вырезаны,http://localhost/*в манифесте отсутствует,SITE_URL = https://vkify.ru. - dev (
build:dev) —console.*сохранены, в site-bridge добавленhttp://localhost/*,manifest.homepage_urlпереписан на dev-URL,SITE_URL = http://localhost:5173. Все исходящие ссылки расширения автоматически указывают на локальный лендинг. - Кастомный URL —
VKIFY_SITE_URL=http://localhost:3000 npm run build:dev(если фронтенд крутится не на дефолтном 5173).
После сборки загрузите папку dist/chrome (или dist/opera / dist/firefox)
через страницу расширений соответствующего браузера → «Загрузить распакованное».
После обновления расширения перезагрузите открытые вкладки vk.com (контент-скрипты
MV3 не переинъектятся сами).
Тесты на Vitest (среда node), лежат в src/__tests__/.
npm test # одноразовый прогон
npm run test:watch # watch-режим
npx vitest run --coverage # с покрытием (нужен @vitest/coverage-v8, уже в devDeps)Тесты покрывают чистую бизнес-логику и места, где легко что-то сломать. DOM и
сеть не трогаем: chrome.* мокается, где надо — фейковые таймеры.
- Крипто-ядро (
message-crypto) — AES-128/256, PBKDF2, COFFEE/VKify, KAT-векторы - Парсер событий слежки (
spy-events) — все типы LongPoll-событий, матч URL лонгполла, атрибуция ЛС/беседы, текст удалённого сообщения - Реестр настроек (
settings-schema) — валидация типов/enum/scope, защита от prototype-загрязнения, санитизация недоверенного ввода - VK API (
vk-api,message-handler) — токен-флоу, ретраи, роутинг сообщений - Онлайн-трекер (
spy-tracker) — опрос статусов, алармы, журнал - Утилиты — ZIP-writer (
zip), TTL-кэш (ttl-cache), nonce-канал (page-channel), включение фич (should-enable), подсветка CSS (highlighter)
| Слой | Технологии |
|---|---|
| UI расширения | React 18, TypeScript 5, Tailwind CSS 3 |
| Сборка | Vite 5, Rollup: раздельно modules (ESM) + classic (IIFE) |
| Тесты | Vitest |
| Контент | Vanilla TypeScript |
| Фоновый воркер | TypeScript, Chrome Alarms API |
Если расширение вам нравится — можно поддержать разработку:
| Способ | Ссылка |
|---|---|
| 🇷🇺 Visa, MasterCard, МИР | Cloudtips |
| 🌍 Зарубежные карты и крипта | Tribute |

