Skip to content

krwg/BLIP

BLIP

P2P messenger for local networks — no cloud, no servers, no internet.

Electron Vite License Platform P2P Lang

You're on the grid. You're the signal.

Navigation

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

English

Testing on one PC

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.

Overview

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

Features

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)

Architecture

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
Loading
┌─────────────────────────────────────────────────────────┐
│  BLIP ID Grid 8×8          Peers          Chat / Call   │
│  ┌─┬─┬─┬─┬─┬─┬─┬─┐         #17 Online      ┌──────────┐ │
│  │1│2│3│…│ │ │ │64│  ──►   #42 Offline ──► │ messages │ │
│  └─┴─┴─┴─┴─┴─┴─┴─┘                         └──────────┘ │
└─────────────────────────────────────────────────────────┘

Stack

Layer Technology
Shell Electron 35
Bundler Vite 6
UI Vanilla JS + CSS
Discovery dgram + multicast-dns
Media WebRTC (RTCPeerConnection)
Fonts Minecraft (bundled woff2)

Quick start

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 install

postinstall copies the Minecraft font into renderer/assets/fonts/.

Development (hot-reload)

npm run electron:dev

Vite at http://localhost:5173 + Electron.

Run locally

npm run build
npx electron .

Or npm start (runs prebuild automatically).

Windows builds

Icons: root icon.svgnpm run build:iconsbuild/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%.

npm scripts

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.svgbuild/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

Ports & protocols

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"
}

Usage

  1. Launch BLIP on each machine on the same network (or VPN such as Hamachi / Radmin).
  2. Pick a free number on the 8×8 grid.
  3. Open SETTINGS: display name, EN / RU, themes, notifications, audio devices.
  4. DIAL — enter a BLIP ID (centered); MESSAGE opens chat, CALL starts a voice call.
  5. PEERS — online list with Mesh Pulse latency (auto refresh every minute); click to chat; right-click for Mesh label, ping, block.
  6. CHAT — typing indicator when the peer composes; unread badge on the nav until you open the thread.
  7. 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.

Keyboard shortcuts

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

Fonts

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.

Project layout

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)

Design tokens

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

Community

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)

License

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 install

postinstall копирует шрифт Minecraft в renderer/assets/fonts/.

Разработка (hot-reload)

npm run electron:dev

Vite → http://localhost:5173 + Electron.

Локальный запуск

npm run build
npx electron .

или npm start (сборка через prebuild).

Сборка Windows

Иконка: корневой icon.svgnpm run build:iconsbuild/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

Скрипт Назначение
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.svgbuild/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"
}

Использование

  1. Запустите BLIP на каждом ПК в одной сети (или VPN: Hamachi / Radmin).
  2. Выберите свободный номер на сетке 8×8.
  3. НАСТРОЙКИ: имя, EN / RU, темы, уведомления, устройства звука.
  4. НАБОР — введите BLIP ID (по центру); СООБЩЕНИЕ — чат, ЗВОНОК — голосовой звонок.
  5. АБОНЕНТЫ — список в сети, Пульс · N мс (автораз в минуту); клик — чат; ПКМ — Mesh label, пинг, блок.
  6. ЧАТ — «печатает…» у собеседника; счётчик непрочитанного на кнопке Чат.
  7. Звонок — отдельное окно: 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).


BLIP · local-only · peer-to-peer · 1–64

English · Русский

About

P2P messenger for LAN, Hamachi & Radmin VPN. Text, voice, video. No cloud, no servers, no internet. Identify by a number from 1 to 64. Pixel brutalism × liquid glass × minecraft monospace.

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors