Skip to content

Repository files navigation

underline-chat

Desktop-клиент протокола Underline. По DEC-0005 приложение строится на Tauri: нативная часть на Rust, интерфейс на TypeScript и React.

Это каркас, а не работающий мессенджер. Окно открывается, интерфейс обращается к нативной части настоящим IPC-вызовом — и показывает то, что она честно отвечает: протокольного слоя ещё нет. Списка чатов, заглушек сообщений и демонстрационных контактов здесь нет намеренно: пустой список чатов читался бы как «вам никто не написал», хотя правда в другом.

Запуск

npm install
npm run tauri dev     # окно приложения
npm run dev           # только интерфейс в браузере

В браузере нативная часть недоступна, и приложение показывает именно это — с причиной, а не пустой экран.

Раскладка

Путь Роль
src/ интерфейс: React + TypeScript
src/protocol.ts единственная точка обращения к нативной части; никогда не выбрасывает — недоступность является состоянием интерфейса
src-tauri/src/lib.rs нативная часть и команда protocol_status
src-tauri/tauri.conf.json конфигурация приложения, окна и CSP
src-tauri/capabilities/default.json разрешения главного окна — только ядро Tauri

Проверки

npx tsc                                  # типы
npm test                                 # vitest, 6 тестов
npx vite build                           # сборка интерфейса
cd src-tauri && cargo fmt --all -- --check
cd src-tauri && cargo clippy --all-targets -- -D warnings
cd src-tauri && cargo test                # 4 теста

cargo в src-tauri требует собранного интерфейса: tauri::generate_context! встраивает содержимое dist/, и без него компиляция падает. Поэтому CI собирает интерфейс до запуска Rust-проверок — .github/workflows/ci.yml.

Контракт между процессами

Команда protocol_status возвращает структуру, поля которой сериализуются в camelCase. Имена полей — контракт с TypeScript, а не деталь реализации, и его сторожит тест fields_cross_the_process_boundary_in_camel_case: снимите #[serde(rename_all = "camelCase")], и тест падает вместо того, чтобы интерфейс молча показал undefined.

Иконки

Набор в src-tauri/icons/ собран из src-tauri/app-icon.png. Пересобрать:

npx tauri icon src-tauri/app-icon.png

Наборы для Android и iOS удалены намеренно — мобильных целей у проекта пока нет, а команда выше восстанавливает их за один запуск.

Документация протокола

Архитектура, решения, открытые вопросы.

Лицензия

MIT © ssheleg

About

Desktop-клиент протокола Underline на Tauri, React и TypeScript — каркас приложения

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages