Возможности · Запуск · Свой сервер · Windows · Телефон · Документация
Свой Discord на своём железе. Серверы с ролями и правами, текстовые и голосовые каналы, форумы и трибуны, личные сообщения и звонки, видео и демонстрация экрана, сквозное шифрование. Всё, что в Discord продаётся как Nitro, здесь бесплатно для всех. Есть веб-версия, приложение для Windows и версия для телефона (ставится на экран «Домой», как приложение).
English. Berloga is a self-hosted Discord alternative: servers, roles and permissions, text, voice, forum and stage channels, DMs and calls, video and screen sharing with sound, end-to-end encryption, bots and webhooks. Web client, Windows desktop app (Tauri) and an installable mobile web app (PWA). TypeScript monorepo: Node.js + Socket.IO + SQLite on the server, React on the client, LiveKit for media. The interface is in Russian. The project is finished and no longer maintained; it is published as is, under the MIT license — fork it and use it however you like.
![]() |
![]() |
![]() |
|
![]() |
|
Профиль с игрой · Берлога на телефоне · светлая тема · настройки внешнего вида. Данные на снимках — демонстрационные.
Проект завершён и больше не развивается. Код выложен как есть: бери, разворачивай, переделывай под себя. Что и как сделано, по этапам, — в ROADMAP.md.
💬 Общение
- серверы, категории, текстовые каналы, форумы с тегами, ветки, голосовые каналы и трибуны;
- личные сообщения и группы, друзья, заявки, блокировка;
- ответы, упоминания, реакции, закрепы, редактирование, markdown, превью ссылок, вложения до 500 МБ;
- свои эмодзи, стикеры и звуковая панель сервера;
- поиск по сообщениям, входящие с упоминаниями, непрочитанное, уведомления на ПК и push на телефон.
🛡️ Сервер и модерация
- роли с цветами и правами, права на категории и каналы, приглашения со сроком и лимитом;
- баны, кики, таймауты, журнал аудита, профили на сервере (свой ник и аватар).
🎙️ Голос и видео (через медиасервер LiveKit)
- голосовые каналы и звонки в личке, камера, демонстрация экрана до 1080p 60 кадров со звуком;
- ИИ-шумоподавление DeepFilterNet3 прямо в клиенте, громкость каждого участника, рация (push-to-talk);
- в десктопе своё окно выбора демонстрации, как в Discord: показываешь окно — в эфир идёт звук только этой программы.
🔒 Сквозное шифрование
- личные сообщения, группы и звонки шифруются на устройствах, сервер видит только шифротекст;
- несколько устройств, привязка нового устройства с подтверждением, фраза восстановления из 24 слов, код звонка для сверки. Подробно — docs/E2EE.md.
✨ Как Nitro, но бесплатно
- анимированные аватары и баннеры, цвета профиля, темы (тёмная, светлая, пепельная, оникс), цветовые темы и акцентный цвет, большие файлы, видео в высоком качестве.
💻 Платформы
- веб-версия: открывается в любом современном браузере;
- приложение для Windows (Tauri 2): трей, автозапуск, подписанные автообновления, «Играет в …» из игр с Discord Rich Presence и по папке игровой библиотеки;
- телефон: устанавливается из Safari или Chrome на экран «Домой», с push-уведомлениями.
🤖 Для разработчиков
- приложения с ботами, слеш-команды, вебхуки. Как этим пользоваться — docs/BOTS.md, пример бота — examples/bot.mjs.
Монорепозиторий на npm workspaces, всё на TypeScript.
packages/protocol/ общие типы: модели, события сокета, HTTP, лимиты
packages/e2ee/ сквозное шифрование: ключи устройств, шифрование сообщений и звонков
apps/server/ сервер: Node 24 запускает .ts напрямую, без сборки
src/config.ts настройки из переменных окружения
src/db/ SQLite (встроенный node:sqlite), миграции и репозитории по сущностям
src/http/ Express: регистрация и вход, файлы, заголовки безопасности, раздача клиента
src/realtime/ Socket.IO: присутствие, права, обработчики по областям (handlers/)
src/tools/ служебные команды: сброс пароля, значки
apps/client/ клиент: React 19 + Vite, состояние в zustand
src/features/ фичи: чат, серверы, голос, шифрование, настройки, телефон…
src/ui/, src/styles/ базовые компоненты и дизайн («Стеклянный графит», docs/DESIGN-GLASS.md)
public/ service worker, иконки, шрифт Geologica, модель шумоподавления
src-tauri/ десктопное приложение (Rust, Tauri 2)
docker-compose.yml развёртывание: приложение, LiveKit, coturn, Caddy с HTTPS
Клиент и сервер общаются событиями, описанными в packages/protocol/src/events.ts.
Поменяешь там сигнатуру — TypeScript подсветит все места на обеих сторонах.
Нужен Node.js 22.18 или новее (лучше 24).
npm install
npm run devОткроется клиент на http://localhost:5173, сервер поднимется на :3000, медиасервер LiveKit — на :7880. Запросы к API клиент проксирует сам. Первый аккаунт регистрируется прямо на экране входа.
LiveKit для разработки — бинарник в tools/livekit/, в репозиторий он не входит. Скачай архив под свою
систему с https://github.com/livekit/livekit/releases, проверь SHA256 по checksums.txt и распакуй
в tools/livekit/. Без него работает всё, кроме голоса и видео.
Проверки:
npm run typecheck
npm test -w @berloga/server
npm test -w @berloga/e2eeПодойдёт любой VPS с Docker (1–2 ГБ памяти хватит на небольшую компанию).
-
Направь домен (A-запись) на IP сервера.
-
Скопируй проект на сервер, например в
/opt/berloga. Для свежего Ubuntu 24.04 естьscripts/vps/prepare.sh(запускать от root): ставит Docker, оставляет вход по SSH только по ключу, открывает в файрволе только нужные порты и добавляет swap. -
cp .env.example .envи заполни:DOMAINиPUBLIC_IP;TURN_SECRET—openssl rand -hex 32;LIVEKIT_API_KEY—openssl rand -hex 16,LIVEKIT_API_SECRET—openssl rand -hex 32;REGISTRATION_KEY— если задать, зарегистрироваться можно только с этим ключом (чтобы пускать своих).
-
Открой порты:
80/tcp,443/tcp+udp,7881/tcp,7882/udp(LiveKit),3478/tcp+udpи49160-49200/udp(coturn). -
Запусти:
docker compose up -d --build
Caddy сам получит HTTPS-сертификат и проксирует wss://DOMAIN/livekit на медиасервер. Ключи для
push-уведомлений сервер создаёт сам при первом запуске.
Данные лежат в томе Docker appdata (база SQLite и файлы). Резервная копия:
docker compose cp app:/data ./backupСлужебные команды (запускаются в контейнере):
# новый пароль для пользователя, который забыл свой (почты для сброса нет); все его устройства выйдут из аккаунта
docker compose exec app node --disable-warning=ExperimentalWarning src/tools/reset-password.ts <имя>
# значок «Верифицированный разработчик» в профиле (с минусом — забрать)
docker compose exec app node --disable-warning=ExperimentalWarning src/tools/badge.ts <имя> developerОстальные настройки сервера — переменные окружения в apps/server/src/config.ts: лимит и квота загрузок
(UPLOAD_LIMIT_MB, UPLOAD_QUOTA_MB), через сколько дней без использования вход на устройстве истекает
(SESSION_TTL_DAYS, по умолчанию 90), название (APP_NAME), разрешённые источники CORS (ALLOWED_ORIGINS) и другие.
Нужны Rust и Visual Studio Build Tools с компонентом «Разработка классических приложений на C++». WebView2 в Windows 10/11 уже есть.
npm run desktop:dev # запуск с горячей перезагрузкой
npm run desktop:build # установщик в apps/client/src-tauri/target/release/bundle/nsis/При первом запуске приложение спрашивает адрес сервера. Чтобы там сразу стоял твой сервер, впиши его
в apps/client/.env.production (VITE_DEFAULT_SERVER=https://chat.example.com) перед сборкой.
Приложение ставит обновления только с подписью, которую сервер подделать не может: это часть защиты
сквозного шифрования. В apps/client/src-tauri/tauri.conf.json (plugins.updater.pubkey) сейчас вшит
открытый ключ автора проекта — замени его на свой, иначе твои сборки не смогут обновляться.
npx tauri signer generate -w ~/.berloga/updater.keyКоманда создаст закрытый ключ (защищённый паролем) и выведет открытый — его и вставь в pubkey.
Закрытый ключ никогда не клади на сервер и сохрани копию офлайн: потеряешь ключ — каждому
пользователю придётся переустанавливать приложение вручную.
-
Подними версию во всех
package.json, вapps/client/src-tauri/tauri.conf.jsonиCargo.toml. -
Собери, подпиши и залей на сервер одной командой:
npm run desktop:release -- --notes "Что нового" --base-url https://DOMAIN --upload user@server:/opt/berloga/data/updates
Скрипт спросит пароль ключа, соберёт и подпишет установщик и скопирует на сервер установщик, подпись и
latest.json. Приложения проверяют обновления раз в час, тихо скачивают их и предлагают перезапуститься.
Ссылка на установщик для новых людей — https://DOMAIN/updates/<имя установщика>.exe.
Папку data/updates на сервере один раз подготовь, чтобы в неё мог писать твой пользователь SSH:
sudo mkdir -p /opt/berloga/data/updates && sudo chown "$USER" /opt/berloga/data/updatesБез --upload файлы кладутся в apps/server/data/updates/ — так удобно проверять обновления на локальном сервере.
Отдельного приложения из магазина нет: Берлога ставится как веб-приложение. На iPhone — Safari → «Поделиться» → «На экран „Домой“», на Android — кнопка «Установить» в Chrome. Работают push-уведомления, весь экран, жесты и тот же интерфейс, что на ПК, подогнанный под палец. Нужен HTTPS (на своём домене он будет сам).
- ROADMAP.md — всё, что сделано, по этапам;
- docs/E2EE.md — как устроено сквозное шифрование;
- docs/E2EE-REVIEW.md — разбор угроз и проверка схемы шифрования;
- docs/BOTS.md — боты, слеш-команды и вебхуки;
- docs/DESIGN-GLASS.md — правила дизайна.
Автор — VantageEX. Код — MIT: используй, меняй, продавай, ничего не спрашивая.
Чужое, что лежит в репозитории, идёт под своими лицензиями:
- модель и код шумоподавления DeepFilterNet3 — MIT или Apache-2.0 (
apps/client/public/models/dfn3/); - шрифт Geologica — SIL Open Font License 1.1 (
apps/client/public/fonts/LICENSE).
LiveKit, coturn и Caddy в репозиторий не входят: Docker скачивает их сам, у каждого своя лицензия. Берлога не связана с Discord; Discord — товарный знак Discord Inc.




