Skip to content

Latest commit

 

History

History
84 lines (61 loc) · 4.45 KB

File metadata and controls

84 lines (61 loc) · 4.45 KB

lime - Live Message

Анонимный мессенджер в реальном времени. Без регистрации, без истории переписки, без идентификации личности

License CI


О проекте

lime - это лёгкий веб-мессенджер, ориентированный на приватность:

  • Никаких аккаунтов и паролей - только локальный профиль (имя и кaomoji-аватар), хранящийся в браузере
  • Чаты создаются на лету по ID - достаточно поделиться ссылкой, чтобы пригласить собеседника
  • Сообщения не сохраняются на сервере - история существует только на время сессии
  • Голосовые звонки прямо в чате через WebRTC (PeerJS)
  • PWA - приложение можно установить на телефон или десктоп

Стек технологий

  • Frontend - чистый HTML/CSS/JavaScript (ES-модули), без сборщиков и фреймворков
  • Стили и общие скрипты - вынесены в отдельный репозиторий cdn, подключаемый как git-submodule и раздаваемый через jsDelivr
  • Обмен сообщениями - WebSocket-соединение с сигнальным сервером
  • Звонки - WebRTC поверх PeerJS
  • Локальное хранилище - IndexedDB (профиль пользователя, контакты)
  • Раздача статики - Nginx (в Docker-контейнере)

Быстрый старт

Клонирование с сабмодулями

Проект использует git-submodule для репозитория cdn, поэтому клонировать нужно рекурсивно:

git clone --recurse-submodules https://github.com/live-message/chat.git
cd chat

Если репозиторий уже склонирован без сабмодулей:

git submodule update --init --recursive

Запуск через Docker Compose (рекомендуется)

docker compose up -d

Приложение будет доступно на http://localhost:8080.

Запуск через Docker

docker build -t lime-chat .
docker run -p 8080:80 lime-chat

Запуск без Docker

Каталог web/ - это обычная статика, поэтому её можно раздать любым HTTP-сервером, например:

npx serve web

Как это работает

  1. При первом запуске приложени kaomoji-аватар и имя. Данные сохраняются локально (IndexedDB)
  2. На главной странице можно создать новый чат или ввести ID существующего
  3. Внутри чата (/chat/{chatId}) клиент подключается по WebSocket к сигнальному серверу и обменивается сообщениями в реальном времени
  4. Голосовые звонки устанавливаются напрямую между участниками (peer-to-peer) через WebRTC/PeerJS. Сервер участвует только в сигнализации
  5. При закрытии вкладки история чата не сохраняется

Связанные репозитории

cdn - общие статические ресурсы (CSS, JS), подключаемые через jsDelivr и как git-submodule

Лицензия

Проект распространяется под лицензией GNU GPL v3

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

Информацию о том, как сообщить об уязвимости, смотрите в SECURITY.md