P2P messenger for local networks — no cloud, no servers, no internet.
You're on the grid. You're the signal.
| Section | English | Русский |
|---|---|---|
| Language | English | Русский |
| Testing (one PC) | Testing | Тестирование |
| Overview | Overview | Обзор |
| Features | Features | Возможности |
| Architecture | Architecture | Архитектура |
| Stack | Stack | Стек |
| Quick start | Quick start | Быстрый старт |
| npm scripts | npm scripts | Скрипты npm |
| Ports | Ports | Порты |
| Usage | Usage | Использование |
| Shortcuts | Shortcuts | Горячие клавиши |
| Fonts | Fonts | Шрифты |
| Project layout | Project layout | Структура |
| Design tokens | Design | Дизайн |
| License | License | Лицензия |
| Community | Community | Сообщество |
| Landing | krwg.github.io/BLIP | Сайт Pages |
| Approach | Works for chat/calls? |
|---|---|
| Two BLIP windows on the same PC | No — both try to bind UDP 42069 and TCP 42070; the second copy usually fails or cannot discover the first. |
| VM (VirtualBox / Hyper-V) with bridged network | Yes — guest gets its own IP; install or run BLIP in the VM. |
| Second device on the same Wi‑Fi (laptop, old PC) | Yes — recommended. |
| Hamachi / Radmin VPN between two machines | Yes — same as LAN. |
| Phone | No mobile app yet — desktop only. |
Quick VM flow: host runs BLIP (ID 1), VM runs BLIP (ID 2), same subnet via bridged adapter, allow firewall for ports 42069–42070.
| What | Desktop app: text, voice, and video over LAN / Hamachi / Radmin VPN |
| Identity | BLIP ID 1–64 (8×8 grid, Minecraft-style chunk metaphor) |
| Servers | None — UDP broadcast, TCP, and WebRTC peer-to-peer only |
| Sign-up | None |
| UI | Pixel-art × liquid glass × brutalism, 0px border-radius |
| Feature | Description |
|---|---|
| BLIP ID | Pick a number on the 8×8 grid; conflicts resolved via TCP ping |
| Discovery | UDP 42069 + mDNS fallback |
| Chat | TCP messages, receipts (✓/✓✓), reactions, LAN images, linkify, emoji picker, search/export, typing, unread |
| Favorites | Star peers locally; sorted first on Peers and Chat |
| Presence | Online / Away / Busy in Profile (UDP announce) |
| Calls | Separate call window; WebRTC voice/video (LAN, no STUN/TURN) |
| Screen share | 720p+ capture, theater layout, fullscreen (F), no wallpaper over video |
| Mesh Pulse | Live LAN heartbeat — auto ping every minute, latency under each peer |
| Trust & block | First-chat confirm; local block list; Settings → Privacy |
| Avatars | Upload, regenerate, or 8×8 generated from ID |
| Themes | Light/dark palettes + animated backgrounds (EN/RU names) |
| Sound | Chiptune Web Audio — SIGNAL / PULSE FX packs, MESH / GRID call melodies; preview in Settings → Sound; DND mutes all |
| Files | P2P file send in chat (up to 16 MB, chunked); drag & drop; group inline files ≤768 KB |
| Status | Custom status line on LAN (Profile) — “In game”, AFK, etc. |
| Handshake | Ed25519 signed announce + TCP mesh handshake (0.5); block list enforced in main |
| Shortcuts | In-window + system-wide (Alt+1–4, tray-safe) |
| Languages | English / Russian |
| Settings | Profile, privacy/block list, appearance, network, shortcuts, call devices |
| Window | Custom title bar, system tray, close-to-tray (Windows) |
| Updates | Auto-check on startup (packaged builds) |
flowchart LR
subgraph Electron Main
UDP[UDP Discovery :42069]
TCP[TCP Server :42070]
MDNS[mDNS]
IPC[IPC Bridge]
end
subgraph Renderer
UI[Vanilla JS UI]
RTC[WebRTC]
AUDIO[Web Audio]
end
UDP --> IPC
TCP --> IPC
MDNS --> UDP
IPC <--> UI
UI --> RTC
TCP -. signaling .-> RTC
┌─────────────────────────────────────────────────────────┐
│ BLIP ID Grid 8×8 Peers Chat / Call │
│ ┌─┬─┬─┬─┬─┬─┬─┬─┐ #17 Online ┌──────────┐ │
│ │1│2│3│…│ │ │ │64│ ──► #42 Offline ──► │ messages │ │
│ └─┴─┴─┴─┴─┴─┴─┴─┘ └──────────┘ │
└─────────────────────────────────────────────────────────┘
| Layer | Technology |
|---|---|
| Shell | Electron 35 |
| Bundler | Vite 6 |
| UI | Vanilla JS + CSS |
| Discovery | dgram + multicast-dns |
| Media | WebRTC (RTCPeerConnection) |
| Fonts | Minecraft (bundled woff2) |
Requirements
| Node.js | 20+ (see .nvmrc) |
| OS | Windows 10/11 (for .exe builds) |
| Network | Same LAN / VPN (Hamachi, Radmin) |
Install
git clone <repo-url>
cd blip
npm installpostinstall copies the Minecraft font into renderer/assets/fonts/.
Development (hot-reload)
npm run electron:devVite at http://localhost:5173 + Electron.
Run locally
npm run build
npx electron .Or npm start (runs prebuild automatically).
Windows builds
Icons: root icon.svg → npm run build:icons → build/icon.ico.
| Command | Output |
|---|---|
npm run electron:build |
BLIP-Setup-0.4.0.exe — full NSIS installer (version from app-metadata.json) |
npm run electron:build:portable |
BLIP-0.4.0-Portable.exe — single-file portable |
npm run electron:build:all |
Both artifacts |
npm run electron:build:dir |
dist-electron/win-unpacked/BLIP.exe (debug folder) |
- Installer (NSIS): choose install folder, Start Menu shortcut, optional desktop shortcut, icon from
icon.svg. - Portable: one
.exe, copy anywhere; settings live in%APPDATA%.
| Script | Purpose |
|---|---|
npm run dev |
Vite dev server only |
npm run build |
Build renderer → dist/ |
npm start |
prebuild + Electron |
npm run electron:dev |
Vite + Electron |
npm run build:icons |
icon.svg → build/icon.ico + PNG |
npm run electron:build |
NSIS installer |
npm run electron:build:portable |
Portable .exe |
npm run electron:build:all |
Installer + portable |
npm run electron:build:dir |
Unpacked app folder |
npm run copy-fonts |
Copy Minecraft font from npm package |
| Port | Protocol | Purpose |
|---|---|---|
| 42069 | UDP | Announce: blipId, displayName, ip |
| 42070 | TCP | Messages + WebRTC signaling |
UDP announce example
{
"type": "announce",
"blipId": 17,
"displayName": "Cyber",
"ip": "192.168.1.42"
}- Launch BLIP on each machine on the same network (or VPN such as Hamachi / Radmin).
- Pick a free number on the 8×8 grid.
- Open SETTINGS: display name, EN / RU, themes, notifications, audio devices.
- DIAL — enter a BLIP ID (centered); MESSAGE opens chat, CALL starts a voice call.
- PEERS — online list with Mesh Pulse latency (auto refresh every minute); click to chat; right-click for Mesh label, ping, block.
- CHAT — typing indicator when the peer composes; unread badge on the nav until you open the thread.
- Calls — separate window: M mute, D deafen, S screen share, F fullscreen, Esc hang up.
Open firewall ports 42069–42070 only if peers are not discovered.
| Scope | Keys | Action |
|---|---|---|
| Main (in window) | Alt+1–4 | Dial / Peers / Chat / Settings |
| Main | Ctrl+, | Settings |
| Main | Ctrl+F | Focus chat search (open conversation) |
| Main (system, optional) | Same as above + Ctrl+Shift+D (DND), Ctrl+Shift+End (hang up) | Works from tray — toggle in Settings → Shortcuts |
| Call window | M / D / S / F | Mute / deafen / screen share / fullscreen |
| Call window | Enter | Accept incoming call |
| Call window | Esc | End call |
| Font | Used for | Files |
|---|---|---|
| Minecraft | UI, buttons, headings | renderer/assets/fonts/minecraft.woff2 |
| Minecraft | Chat (as typed) | same face |
| Fallback | monospace / DOS VGA | if woff2 is missing |
Source: typeface-minecraft (MIT).
Re-copy manually: npm run copy-fonts.
blip/
├── main/ # Electron: discovery, TCP, tray
├── renderer/ # UI, chat, call, i18n, styles
│ └── assets/fonts/ # Minecraft woff2/ttf
├── build/ # icon.ico, icon.png (generated)
├── preload.cjs # IPC bridge
├── scripts/ # electron-dev, copy-fonts, build-icons
├── icon.svg # source app icon
└── dist/ # Vite output (after npm run build)
| Token | Value |
|---|---|
| Background | #0a0a0a |
| Glass | rgba(20,20,20,0.7) + blur(12px) |
| Accent | #00ffc8 |
| Danger | #ff3366 |
| Muted | #333333 |
| Borders | 2px solid |
| Radius | 0 everywhere |
| Doc | Purpose |
|---|---|
| CONTRIBUTING.md | Setup, dev workflow, PR expectations |
| CODE_OF_CONDUCT.md | Community standards |
| SECURITY.md | Reporting vulnerabilities |
| CHANGELOG.md | Release history |
| docs/ARCHITECTURE.md | Technical map |
| Landing site (Pages) | Static showcase (docs/index.html) |
This project is licensed under GNU GPL v3.
The Minecraft font is licensed separately under MIT (see renderer/assets/fonts/README.md).
Ты в сети. Ты сигнал.
| Способ | Чат / звонки? |
|---|---|
| Два окна BLIP на одном ПК | Нет — порты 42069 (UDP) и 42070 (TCP) заняты; второй экземпляр не поднимется или не увидит первого. |
| Виртуальная машина (VirtualBox / Hyper-V, сеть bridged) | Да — у гостя свой IP; BLIP в VM + на хосте. |
| Второе устройство в той же Wi‑Fi | Да — лучший вариант. |
| Hamachi / Radmin VPN на двух машинах | Да — как LAN. |
| Телефон | Мобильного клиента пока нет. |
Кратко: хост BLIP ID 1, в VM BLIP ID 2, одна подсеть, firewall открыт для 42069–42070.
| Что это | Desktop-приложение: текст, голос и видео по LAN / Hamachi / Radmin VPN |
| Идентификация | BLIP ID 1–64 (сетка 8×8) |
| Серверы | Нет — только UDP broadcast, TCP и WebRTC между пирами |
| Регистрация | Нет |
| Стиль UI | Pixel-art × liquid glass × brutalism, 0px border-radius |
| Функция | Описание |
|---|---|
| BLIP ID | Выбор номера на сетке 8×8, конфликты через TCP ping |
| Discovery | UDP 42069 + mDNS fallback |
| Чат | TCP: доставка/прочтение (✓/✓✓), реакции, фото по LAN, ссылки, эмодзи, поиск/экспорт, «печатает…», непрочитанное |
| Избранное | Звёздочка в меню абонента; сортировка вверху на Peers и в Chat |
| Статус | В сети / Отошёл / Занят в профиле (UDP announce) |
| Звонки | Отдельное окно; WebRTC голос/видео (LAN, без STUN/TURN) |
| Демонстрация экрана | Захват 720p+, режим theater, полный экран (F), без фона поверх видео |
| Mesh Pulse | Живой пульс LAN: автопинг раз в минуту, задержка под каждым абонентом |
| Доверие и блок | Подтверждение первого чата; локальный блок; Настройки → Конфиденциальность |
| Аватары | Загрузка, пересоздание или 8×8 от ID |
| Темы | Светлые/тёмные палитры и анимированные фоны (названия EN/RU) |
| Звук | Chiptune (Web Audio): наборы СИГНАЛ / ПУЛЬС, мелодии MESH / СЕТКА; прослушивание в Настройки → Звук; DND отключает |
| Файлы | P2P в чате (до 16 МБ, чанки); drag & drop; в группе до 768 КБ |
| Статус | Свой текст статуса в LAN (Профиль) — «в игре», AFK и т.д. |
| Handshake | Подписанный announce + TCP mesh-handshake (0.5); блокировка в main |
| Горячие клавиши | В окне + системные (Alt+1–4, из трея) |
| Языки | English / Русский |
| Настройки | Профиль, конфиденциальность/блок, вид, сеть, горячие клавиши, звонок |
| Окно | Свой title bar, трей, сворачивание в трей (Windows) |
| Обновления | Проверка при запуске (собранные сборки) |
См. диаграмму выше — та же схема для обоих языков.
| Слой | Технология |
|---|---|
| Shell | Electron 35 |
| Bundler | Vite 6 |
| UI | Vanilla JS + CSS |
| Discovery | dgram + multicast-dns |
| Media | WebRTC (RTCPeerConnection) |
| Fonts | Minecraft (bundled woff2) |
Требования
| Node.js | 20+ (see .nvmrc) |
| ОС | Windows 10/11 (сборка .exe) |
| Сеть | Одна LAN / VPN (Hamachi, Radmin) |
Установка
git clone <repo-url>
cd blip
npm installpostinstall копирует шрифт Minecraft в renderer/assets/fonts/.
Разработка (hot-reload)
npm run electron:devVite → http://localhost:5173 + Electron.
Локальный запуск
npm run build
npx electron .или npm start (сборка через prebuild).
Сборка Windows
Иконка: корневой icon.svg → npm run build:icons → build/icon.ico.
| Команда | Результат |
|---|---|
npm run electron:build |
BLIP-Setup-0.4.0.exe — установщик NSIS (версия из app-metadata.json) |
npm run electron:build:portable |
BLIP-0.4.0-Portable.exe — portable |
npm run electron:build:all |
Оба файла |
npm run electron:build:dir |
dist-electron/win-unpacked/BLIP.exe |
- Установщик: выбор папки, ярлык в «Пуск», опция ярлыка на рабочем столе.
- Portable: один
.exe, настройки в%APPDATA%.
| Скрипт | Назначение |
|---|---|
npm run dev |
Только Vite dev-server |
npm run build |
Сборка renderer → dist/ |
npm start |
prebuild + Electron |
npm run electron:dev |
Vite + Electron |
npm run build:icons |
icon.svg → build/icon.ico + PNG |
npm run electron:build |
NSIS-установщик |
npm run electron:build:portable |
Portable .exe |
npm run electron:build:all |
Установщик + portable |
npm run electron:build:dir |
Распакованная папка |
npm run copy-fonts |
Скопировать Minecraft из npm-пакета |
| Порт | Протокол | Назначение |
|---|---|---|
| 42069 | UDP | Announce: blipId, displayName, ip |
| 42070 | TCP | Сообщения + WebRTC signaling |
Пример UDP announce
{
"type": "announce",
"blipId": 17,
"displayName": "Cyber",
"ip": "192.168.1.42"
}- Запустите BLIP на каждом ПК в одной сети (или VPN: Hamachi / Radmin).
- Выберите свободный номер на сетке 8×8.
- НАСТРОЙКИ: имя, EN / RU, темы, уведомления, устройства звука.
- НАБОР — введите BLIP ID (по центру); СООБЩЕНИЕ — чат, ЗВОНОК — голосовой звонок.
- АБОНЕНТЫ — список в сети, Пульс · N мс (автораз в минуту); клик — чат; ПКМ — Mesh label, пинг, блок.
- ЧАТ — «печатает…» у собеседника; счётчик непрочитанного на кнопке Чат.
- Звонок — отдельное окно: M микрофон, D звук, S экран, F полный экран, Esc сброс.
Откройте порты 42069–42070 в firewall, только если пиры не видны.
| Область | Клавиши | Действие |
|---|---|---|
| Главное окно | Alt+1–4 | Набор / Абоненты / Чат / Настройки |
| Главное | Ctrl+, | Настройки |
| Главное | Ctrl+F | Поиск в открытом чате |
| Системные (опц.) | То же + Ctrl+Shift+D (не беспокоить), Ctrl+Shift+End (сброс звонка) | Из трея — в Настройки → Горячие клавиши |
| Окно звонка | M / D / S / F | Микрофон / звук / экран / полный экран |
| Окно звонка | Enter | Принять звонок |
| Окно звонка | Esc | Сброс |
| Шрифт | Где | Файлы |
|---|---|---|
| Minecraft | Весь UI | renderer/assets/fonts/minecraft.woff2 |
| Minecraft | Чат | тот же face |
| Fallback | monospace | если woff2 недоступен |
Источник: typeface-minecraft (MIT).
Перекопировать: npm run copy-fonts.
blip/
├── main/ # Electron: discovery, TCP, tray
├── renderer/ # UI, chat, call, i18n, styles
│ └── assets/fonts/ # Minecraft woff2/ttf
├── build/ # icon.ico, icon.png (генерируется)
├── preload.cjs # IPC bridge
├── scripts/ # electron-dev, copy-fonts, build-icons
├── icon.svg # исходная иконка
└── dist/ # Vite build
| Токен | Значение |
|---|---|
| Background | #0a0a0a |
| Glass | rgba(20,20,20,0.7) + blur(12px) |
| Accent | #00ffc8 |
| Danger | #ff3366 |
| Muted | #333333 |
| Borders | 2px solid |
| Radius | 0 (везде) |
| Документ | Зачем |
|---|---|
| CONTRIBUTING.md | Сборка, dev, правила PR |
| CODE_OF_CONDUCT.md | Правила сообщества |
| SECURITY.md | Как сообщить об уязвимости |
| CHANGELOG.md | История версий |
| docs/ARCHITECTURE.md | Архитектура кода |
| Landing (Pages) | Статический сайт-витрина (docs/index.html) |
Проект распространяется под GNU GPL v3.
Шрифт Minecraft — отдельно, MIT (см. renderer/assets/fonts/README.md).