
Как я сделал desktop-версию мессенджера на vanilla Electron, не на React Native for Desktop. И не пожалел
niktomimo 25 минут назад Как я сделал desktop-версию мессенджера на vanilla Electron, не на React Native for Desktop. И не пожалел Средний 11 мин 1.1K JavaScript * Windows * macOS * Linux * Анализ и проектирование...
Anthropic — What company has the best second artificial intelligence model at the end of June?
В сфере искусственного интеллекта произошло заметное событие. niktomimo 25 минут назад Как я сделал desktop-версию мессенджера на vanilla Electron, не на React Native for Desktop. И не пожалел Средний 11 мин 1. 1K JavaScript * Windows * macOS * Linux * Анализ и проектирование систем * Кейс Уровень: middle/senior, кросс-платформенная разработка Стек: Electron 28, electron-builder, electron-updater, vanilla HTML/JS Что внутри: архитектурные решения, IPC между окнами, deep links на трёх ОС, tray-first паттерн, auto-updater grace, custom протоколыКонтекстЭто четвёртая статья из серии про инженерные решения в ONEMIX — моём мессенджере на React Native.
В предыдущих разбирал трёхуровневый кэш сообщений, Double Ratchet E2E и WebRTC звонки с trickle ICE. Последняя про звонки набрала больше всего просмотров, и в комментариях несколько раз спрашивали про десктоп: "а как у тебя там устроено? Сегодня — отдельная статья про desktop-версию.
Технические детали
Сразу скажу: я не использовал React Native for Desktop, не Tauri, не React, не TypeScript. Чистый Electron + vanilla HTML/JS. Это нестандартное решение, и я объясню почему пошёл этим путём, что от этого выиграл, и где это бьёт по голове.
Почему vanilla Electron, а не RN-DesktopКогда я начинал делать десктоп, рассматривал четыре варианта:React Native for Windows + macOS. Это официальный Microsoft форк RN для Windows и старый Facebook-форк для macOS. Идея заманчивая — переиспользовать весь мобильный код.
На практике у меня было два блокера. Первое: оба порта ужасно отстают от mainline RN, многие зависимости (react-native-reanimated, react-native-svg, expo-secure-store) либо не поддерживаются, либо требуют отдельных нативных модулей которые писать самому. Второе: Linux-поддержки нет в принципе.
Отраслевые последствия
Современный, лёгкий, на Rust. Я серьёзно его рассматривал и даже пробовал. Минус один, но критичный: WebView на каждой ОС разный (Edge WebView2 на Windows, WebKit на macOS, WebKitGTK на Linux).
Это значит что условный CSS Grid у тебя работает на Windows, ломается на Linux, и подвисает на macOS. Отлаживать межплатформенные баги в Tauri — это отдельный жанр страданий. У Electron под капотом Chromium, везде одинаковый, рендеринг предсказуемый.
Electron + React (как делает Discord, Slack, WhatsApp Desktop). Я отказался по одной причине — переусложнение для моих задач. У меня нет реактивных списков сложнее списка чатов и списка сообщений.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





