Macaroni Messenger
Один HTML-файл, браузер и Git-репозиторий с перепиской. Без отдельного сервера приложения.
Демо работает только для чтения. Токен и регистрация для просмотра не нужны.

Зачем я это сделал
Чтобы отправить «Мама, свари макароны», нужны сообщение и способ его доставить. Мне было интересно собрать мессенджер из того, что уже умеет хранить файлы: браузера и Git.
Так появился Macaroni Messenger. Клиент целиком помещается в messenger.html: разметка, стили и JavaScript. Его можно сохранить и открыть двойным кликом в совместимом браузере.
Как это устроено
Каждое сообщение — отдельный JSON-файл в каталоге .macaroni/ внутри репозитория. Там же лежат описания чатов и участников. Git хранит историю, браузер — локальный кеш и индекс для поиска.
Клиент читает и записывает файлы через API Git-хостинга. Встроены подключения к GitHub, GitLab, GitVerse, Gitea и Forgejo. На собственном сервере доступ зависит от настроек API и CORS.
Новые сообщения появляются при периодическом опросе или ручном обновлении. Исходящие проходят через локальную очередь; мгновенная доставка не предусмотрена.
Формат .macaroni/ открыт: сообщения можно читать обычными Git-инструментами, а другие клиенты и агенты могут работать с теми же JSON-файлами.
Как попробовать
Для знакомства достаточно открыть демо. В нём уже есть несколько чатов с примерами сообщений.
- Сохраните файл messenger.html из репозитория и откройте его в Chrome, Chromium или Edge.
- Для своей переписки выберите репозиторий на поддерживаемом Git-хостинге и создайте токен с доступом к его содержимому.
- В настройках мессенджера укажите имя, провайдера, адрес репозитория и токен. Для отправки сообщений нужны права записи.
Ограничения
- Переписка доступна читателям репозитория. В публичном репозитории сообщения видны всем. В приватном — всем, кому выдан доступ. Приватность и сквозное шифрование по умолчанию не обещаются.
- Токен хранится в браузере. Настройки используют
localStorage; это не защищённое хранилище секретов. Выдавайте токену доступ только к нужному репозиторию. - Есть ограничения API и объёма. Частота обновлений зависит от лимитов Git-хостинга. Большая история увеличивает время загрузки и синхронизации.
- Нужен совместимый браузер. Клиенту необходимы постоянное локальное хранилище, IndexedDB и WebCrypto. Рекомендуются Chrome, Chromium и Edge.
Исходный код опубликован под лицензией WTFPL. Документация и изменения — в репозитории проекта.
Все проекты