InquirerSara Duterte trial: Prosecution forgoes CSC exec as witnessPunchSoludo’s wife donates relief materials to rehabilitated inmatesRTP DesportoJoão Ferreira e Filipe Palmeiro venceram a Baja de ReguengosBollywood HungamaEXCLUSIVE: Nani, Raghav Juyal, Sonali Kulkarni and Kayadu Lohar to attend MEGA The Paradise event in Mumbai ahead of releaseInquirer EntertainmentKim Chiu’s sis Lakam under police custody after arrest for qualified theftUOLVeja a previsão do tempo para Ivaiporã nesta segunda (21)ColliderThe Biggest Sci-Fi Hit of 2026 Is Officially Back in the Streaming SpotlightAntara NewsIndonesia eyes coal liquefaction to boost energy securityDeadlineEagle Eye Drama Acquires ‘The Great Dictator’, Matthew Sweet’s Biography Of Barbara Cartlandالشرقوزير الخارجية السعودي يبحث مستجدات الأوضاع الإقليمية هاتفياً مع نظرائه في الكويت ومصر وتركياCBS NewsIran warns new U.S. assault would see it expand "geography of the war"Egypt IndependentPM, CBE Governor discuss economic reforms, FX reserves
The Daily Newsstand · Free, Always
Monday, September 21, 2026

Написал менеджер буфера обмена на Rust, потому что Win+V меня добил

Translate

Есть встроенный в Windows Win+V. Я честно пользовался им года полтора. А потом однажды скопировал кусок кода, полез искать то, что копировал двадцать минут назад, и понял, что искать там нечем. В Win+V нет поиска. Совсем. Список, по которому ты скроллишь глазами. Двадцать пять элементов, картинки вперемешку с текстом, и ты листаешь колёсиком, как ленту, пытаясь вспомнить, как выглядела нужная строчка.

Ещё он не помнит историю между перезагрузками так, как мне хотелось, теряет то, что я закреплял, и живёт своей жизнью где‑то в облаке аккаунта Microsoft, о чём я стараюсь не думать.

В общем, в какой‑то вечер я решил, что напишу своё. Получилось то, чем я теперь пользуюсь каждый день, и мне кажется, оно вышло достаточно аккуратным, чтобы показать. Называется ClipVault. Дальше расскажу, как оно устроено внутри, что я решил в него не добавлять и почему, и где скачать, если захотите потыкать.

Что это

Фоновая утилита для Windows 10/11. Живёт в трее, окно скрыто. Ловит всё, что вы копируете: текст, картинки, файлы. По Ctrl+Shift+V всплывает окно истории с мгновенным поиском, вкладками и превью. Выбрали элемент, он лёг обратно в буфер, окно спряталось. Всё.

История хранится локально, в %APPDATA%\ClipVault. Никакого сервера, аккаунта и облака.

Почему Rust и Tauri, а не Electron

Изначально в задумке был Python с PySide6. Я от него отказался осознанно. Менеджер буфера это не то приложение, которое ты запускаешь и закрываешь. Оно висит в фоне сутками. Значит, оно не имеет права жрать сотни мегабайт оперативки и греть процессор просто фактом своего существования.

Поэтому Rust плюс Tauri 2 для бэкенда, TypeScript плюс Vite для интерфейса, SQLite для хранилища. Tauri вместо Electron ровно по той же причине: не тащить с собой целый Chromium, а использовать системный WebView2, который в Windows 10/11 и так уже есть. На выходе лёгкий нативный .exe, быстрый старт и расход памяти, за который не стыдно для фоновой утилиты.

Как ловится буфер: без polling

Первое, что хочется сделать наивно, это опрашивать буфер по таймеру: раз в секунду посмотрел, поменялось или нет. Так делать не надо. Это и лишний расход, и гонки, и задержка.

Windows умеет уведомлять об изменении буфера сама. ClipVault поднимает отдельный поток clipboard-master, который подписывается на системные события и реагирует только когда буфер реально изменился. Ноль опроса, ноль холостого хода.

Дальше по цепочке: событие пришло, прочитали содержимое (текст, потом файлы, потом картинка), посчитали SHA-256 с префиксом типа, и вот тут первый приятный момент. Хэш нужен не только для дедупликации, но и для защиты от петли. Когда вы выбираете элемент из истории, приложение само кладёт его в буфер, а значит само же провоцирует событие изменения. Чтобы не создать дубликат собственной записи, перед записью в буфер хэш запоминается, и слушатель, увидев ровно этот хэш, просто пропускает событие.

Дедупликация и поиск

Если вы копируете одно и то же по десять раз в день (а мы все копируем), плодить десять одинаковых записей глупо. В базе на content_hash висит UNIQUE, и повторное копирование не создаёт новую строку, а поднимает существующую: инкрементит счётчик использований и обновляет время. История остаётся чистой, а часто используемое само всплывает наверх.

Поиск сделан на SQLite FTS5. Это полнотекстовый движок прямо внутри SQLite, и он даёт мгновенный поиск по тексту и коду, включая кириллицу и префиксный поиск (набрали три буквы, уже нашлось). Токенайзер настроен на unicode61 со снятием диакритики, синхронизация основной таблицы с индексом висит на триггерах. Для утилиты, где поиск должен срабатывать в тот же момент, когда ты дописал слово, это ровно то, что нужно, и без единой внешней зависимости для поиска.

Картинки хранятся PNG‑файлами в отдельной папке, в базе лежит только путь и превью. В webview картинка отдаётся как data‑URL по запросу, а не тащится вся история разом.

Приватность, но по‑честному

Я не люблю, когда «приватность» это строчка на лендинге. Поэтому скажу конкретно.

Во всём приложении есть ровно один сетевой запрос: проверка обновлений. Уходит только версия и платформа, ничего из вашей истории туда физически не попадает, потому что код этого просто не делает. И этот единственный запрос отключается тумблером в настройках. Выключили, и приложение больше не ходит в сеть вообще никогда. Ноль запросов.

Никакой телеметрии. Никакого аналитического SDK. И, важное решение, которое я хочу проговорить вслух: в установщик не зашит никакой сторонний браузер, тулбар или «партнёрское ПО». Была идея добавить бандл одного известного браузера ради копеечки с установок. Я от неё отказался: это ровно то, что превращает утилиту в PUP в глазах антивирусов и SmartScreen, и это противоречит всему, ради чего я это писал.

Для приватных данных есть два инструмента, и оба бесплатны навсегда: пауза записи (для паролей и всего, что не хочется видеть в истории) и игнор‑список приложений (буфер из вашего банк‑клиента или менеджера паролей просто не попадает в историю). Безопасность я принципиально не прячу за деньги.

Про лицензию без сервера

Тут инженерно любопытная часть. Я не хотел ни аккаунтов, ни сервера лицензий, ни «войдите, чтобы активировать». Поэтому лицензия сделана на офлайн‑подписи.

Ключ это подписанный payload ({tier, email}), подписанный приватным ключом Ed25519, который есть только у меня. Публичный ключ зашит в .exe. Приложение проверяет подпись локально, офлайн, один раз и навсегда. Подделать ключ без приватной пары нельзя. При этом ключ не привязан к железу, то есть вы вставляете одну и ту же строку на всех своих ПК, и на рабочем, и на домашнем. Есть экспорт и импорт лицензии.

Да, такой ключ теоретически можно передать другому человеку. Я сознательно принял этот компромисс: для утилиты за 399 ₽ городить аппаратную привязку и сервер активации это стрелять из пушки по воробьям, а тот, кто пойдёт искать чужой ключ, всё равно бы не купил. Мягкий сдерживатель это привязка к email покупателя, который показывается прямо в интерфейсе.

Что я осознанно не стал делать

Мне кажется, это самая честная часть. Продукт определяется не только тем, что в нём есть, но и тем, что вы отказались в него пихать.

Шаблоны и автозамена (text expansion). Звучит красиво, но под капотом это глобальный клавиатурный хук и инъекция ввода в чужие окна. Это отдельный класс продукта, он палится антивирусами и прямо противоречит privacy‑позиционированию. Мимо.

Авто‑вставка. Соблазн сделать так, чтобы приложение само вставляло текст в активное окно, велик. Но это та же инъекция ввода, она ненадёжна между разными приложениями и ведёт себя непредсказуемо. Я оставил честное правило: приложение готовит буфер, а Ctrl+V вы жмёте сами. Скучно, зато работает всегда и везде.

Сетевое превью ссылок. Красивая карточка с заголовком страницы требует ходить в сеть за каждой ссылкой. Это убивает «полностью офлайн». Ссылки распознаются и чистятся от UTM локально, без единого запроса.

Аккаунт, подписка, облако. См. выше про лицензию. Ничего этого нет и не будет.

Общее правило, которым я мерю любую будущую фичу: «подготовить буфер, а пользователь вставит сам» это дёшево и ложится в текущую пассивную архитектуру; «приложение печатает за пользователя» это дорого, ненадёжно и палится. Всё, что на дорогой стороне, не проходит.

Про версии

Базовая версия бесплатная и это полноценная замена Win+V: текст, картинки и файлы, автозахват, дедуп, превью, мгновенный поиск, смена горячей клавиши, пауза, игнор‑приложения, простой экспорт, автозапуск, авто‑обновления. Лимит истории 200 элементов. Большинству этого хватает с головой, и я не собираюсь ломать бесплатную версию, чтобы вынудить платить.

Есть ещё Pro за разовые 399 ₽ (без подписки и без аккаунта, активируется офлайн‑ключом и работает на всех ваших ПК). Он даёт больше для тех, кому базовой версии мало. Вот граница по возможностям:

Возможность

Free

Pro · 399 ₽ разово

История: текст, картинки, файлы, автозахват, дедуп, превью

до 200 элементов

безлимит (до 10 000) + автоочистка по возрасту и количеству

Поиск

мгновенный полнотекстовый (FTS5) + фильтр по типу

+ фасеты (дата, источник, тег), regex, умные коллекции

Горячая клавиша вызова

смена хоткея

+ свои хоткеи для Pro‑действий

Окно

список, вставка, светлая и тёмная тема, навигация стрелками

+ плавающий и компактный режим, память позиции и размера, размер шрифта

Закрепление

пины

+ категории, цветовые метки, экспорт избранного

Картинки

захват, превью, вставка

+ сохранить на диск, копировать путь, метаданные

Цвета

нет

распознавание HEX/RGB/HSL, превью, конвертация

Ссылки

нет

распознавание URL, чистка UTM, группировка по домену

Вставка без форматирования

нет

Plain Text по хоткею или по умолчанию

Слоты и быстрая вставка

нет

10 слотов + вставка N‑го элемента по хоткею

Безопасность

локально, пауза записи, игнор приложений

+ мастер‑пароль с автоблокировкой

Управление данными

удаление, очистка, экспорт TXT/JSON

+ правила автоочистки, импорт, слияние дублей

Обновления

авто‑обновление

авто‑обновление

Активация

не требуется

офлайн‑ключ, без сервера и аккаунта

И, если честно, Pro это ещё и способ поддержать проект. Я делаю ClipVault сам, и эти 399 ₽ идут не в какую‑то воронку, а на то, чтобы я продолжал его пилить и делать следующие штуки. Так что если вам зашло и хочется, чтобы развивалось дальше, это ровно тот случай. Мне будет и полезно, и, чего скрывать, приятно.

Скачать и покритиковать

Windows 10/11 x64, установщик подписан, обновления прилетают сами (и отключаются, если вы в режиме паранойи). Скачать код и собранный exe‑файл можно с Гитхаба.

Буду рад разносной критике по делу: и по продукту, и по коду, и по архитектурным решениям выше. Особенно интересно услышать, где я, на ваш взгляд, ошибся с границей Free/Pro или с отказом от той или иной фичи. Для того и пишу.

Если проект показался полезным и хочется, чтобы он развивался дальше, поддержать меня можно на Boosty. Спасибо, что дочитали.

View the original on Хабр

KioskNews shows a cleaned-up reading view extracted from the publisher’s page — the original always lives on their site, not ours.