12k
All articles

5 легковесных альтернатив Electron

Сравните пять лёгких альтернатив Electron: tinyjs, Electrobun, Neutralinojs, Perry и Wails. Узнайте, как они отображают интерфейс, какие языки используют и кому подходят.

OpenReplay Team
OpenReplay Team
5 легковесных альтернатив Electron

Стоит присмотреться к пяти легковесным альтернативам Electron. tinyjs, Electrobun, Neutralinojs и Wails отрисовывают фронтенд в системном webview операционной системы. Perry компилирует TypeScript в нативное приложение, которое использует настоящие платформенные виджеты и вовсе обходится без webview.

У вас есть фронтенд на React или Svelte, который отлично работает, но установщик небольшой утилиты на его основе весит больше, чем большинство соседних приложений на диске.

Каждое приложение на Electron включает собственные Chromium и Node.js. Поэтому каждая установка тащит за собой полноценный браузерный движок, а каждое запущенное приложение расплачивается за это местом на диске и памятью. В статье пять альтернатив сравниваются по четырём критериям: как приложение отрисовывает интерфейс, на каком языке написан бэкенд, какие десктопные платформы поддерживаются и кому подходит инструмент.

Ключевые выводы

  • tinyjs, Electrobun, Neutralinojs и Wails отрисовывают интерфейс в системном webview. Perry компилирует TypeScript в нативные виджеты AppKit, Win32 и GTK4.
  • Выбор во многом определяется языком бэкенда: JavaScript (tinyjs), TypeScript или Zig/Rust/Go/Odin (Electrobun), расширения на любом языке (Neutralinojs), компилируемый TypeScript (Perry) или Go (Wails).
  • Системный webview означает, что один и тот же фронтенд придётся тестировать в WebKit, WebView2 и WebKitGTK.
  • Все цифры размеров в статье взяты из заявлений самих проектов, и каждый проект измеряет их по-своему.

Почему разработчики ищут альтернативы Electron?

Большинство альтернатив Electron не включают Chromium в сборку и используют webview, который уже есть в ОС. Благодаря этому приложения получаются намного компактнее. Цена — единообразие отрисовки. Приложение работает на WebKit в macOS, на WebView2 в Windows и на WebKitGTK в Linux, поэтому в пограничных случаях оно ведёт себя так же, как один сайт, открытый в Safari и Chrome.

Два известных варианта в эту пятёрку не вошли. Tauri сочетает системный webview с бэкендом на Rust. Deno Desktop собирает десктопные приложения на основе рантайма Deno.

В таблице ниже пять альтернатив Electron сравниваются по движку отрисовки, языку бэкенда, десктопным платформам и заявленному размеру:

ИнструментОтрисовкаЯзык бэкендаДесктопные платформы (статус)Размер (по данным проекта)
tinyjsСистемный webviewJavaScript на txiki.jsmacOS (основная), Windows, Linux~6 МБ готовое приложение
Electrobun 2.0Системный webview, опционально CEFTypeScript или Zig/Rust/Go/OdinmacOS, Windows, Linux1,28 МиБ с нативным main; ~15 МиБ с Cottontail
NeutralinojsСистемный webviewJS на стороне страницы; расширения на любом языкеLinux, Windows, macOSДанные не приводятся
PerryНативные виджетыTypeScript с AOT-компиляциейmacOS, Windows, Linux~34 КБ hello world; несколько МБ при использовании рантайма
WailsСистемный webviewGoWindows, macOS, Linux (стабильная v3.0)~15 МБ бинарники

tinyjs: бэкенд на JavaScript без открытых портов

tinyjs запускает бэкенд на JavaScript в txiki.js и показывает страницу в собственном webview платформы: WebKit в macOS, WebView2 в Windows и WebKitGTK в Linux. Страница и бэкенд обмениваются данными через Unix-сокет (в Windows — через именованный канал), поэтому приложение никогда не открывает локальный сетевой порт.

  • Бэкенд: txiki.js (QuickJS плюс libuv) с доступом к файлам, процессам, сокетам, FFI и SQLite. Node во время выполнения не нужен.
  • Платформы: репозиторий ориентирован на macOS, Windows и Linux, а на сайте проекта основной платформой названа macOS. Сборку нужно выполнять в той ОС, для которой выпускается приложение. tinyjs build создаёт подписанный бандл, а tinyjs notarize отправляет его на нотаризацию в Apple.
  • Размер: по оценке tinyjs, готовое приложение весит около 6 МБ, из которых 5,6 МБ приходится на рантайм txiki.js.
tinyjs new myapp --template react-ts
cd myapp
tinyjs dev
tinyjs build

Бэкенд экспортирует объект api, а страница вызывает его методы по имени:

// src/backend/main.js
export const api = {
  greet: async ({ user }) => `Welcome, ${user}`,
};

// in the page
const message = await tiny.api.call('greet', { user });

tinyjs предупреждает, что сильнее всего отрисовка отличается в Linux. Поддержка медиакодеков зависит от установленных плагинов GStreamer, а вывод Web Audio в WebKitGTK может сопровождаться треском. Кому подходит: JavaScript-разработчикам, которые хотят писать всё приложение, включая бэкенд, на одном языке.

Electrobun: main-процесс на TypeScript или компилируемом языке

Electrobun по умолчанию отрисовывает интерфейс в системном webview. Его main-процесс выполняет TypeScript в Cottontail (или Bun), но его можно написать и на Zig, Rust, Go или Odin. Поддерживаются macOS, Windows и Linux.

  • Рендерер: по умолчанию системный webview. Если одинаковая отрисовка на всех платформах важнее размера загрузки, можно встроить Chromium через CEF.
  • Бэкенд: Cottontail — JavaScript-рантайм на Zig поверх JavaScriptCore, представленный в релизе 2.0.
  • Размер: по данным Electrobun, сжатый hello world для macOS ARM64 весит 1,28 МиБ с нативным main-процессом и около 15 МиБ с Cottontail.
  • Дистрибуция: подпись кода, дифференциальные обновления и установщики для каждой ОС встроены изначально. Пакет распространяется через npm под лицензией MIT.
npx electrobun init
import { BrowserWindow } from "electrobun/main";

new BrowserWindow({
  title: "Inventory",
  url: "views://mainview/index.html",
  frame: { width: 1024, height: 720 },
});

Схема views:// загружает встроенное представление из вашего проекта. Если вы пользуетесь CLI Hutch от Electrobun, тот же проект можно создать командой hutch electrobun init. Кому подходит: командам, которым нужно привычное для Electron разделение на main и renderer, но в гораздо более компактной упаковке.

Neutralinojs: приложения только на стороне страницы, без универсального бэкенда

Neutralinojs отрисовывает интерфейс в webview ОС и не имеет отдельного универсального бэкенд-процесса на JavaScript. Ваш код выполняется на странице и обращается к встроенному нативному API. Документация подтверждает, что Chromium с приложением не поставляется: вместо него используется webview, предоставляемый ОС, например WebKitGTK в Linux.

  • Бэкенд: страница обращается к нативному слою через клиентскую библиотеку. Согласно репозиторию Neutralinojs на GitHub, нативные вызовы передаются через WebSocket, а файлы фронтенда отдаёт встроенный статический сервер. Для логики, которую API не покрывает, можно писать расширения на любом языке и подключать их через IPC.
  • Платформы: Linux, Windows, macOS и Web. На странице релизов последней указана версия v6.10.0.

Кому подходит: для небольших утилит, потребности которых укладываются во встроенный API (доступ к файлам, запуск команд, диалоговые окна).

Perry: нативные виджеты вместо webview

Perry — не обёртка над webview. Он заранее (AOT) компилирует TypeScript через LLVM в нативный исполняемый файл, который использует настоящие платформенные виджеты: AppKit в macOS, Win32 в Windows и GTK4 в Linux. Perry также поддерживает мобильные устройства, часы и ТВ.

  • Бэкенд: отдельного бэкенда нет. Всё приложение — это TypeScript, скомпилированный в машинный код; рантайм Perry линкуется в бинарник, если он нужен программе.
  • Ограничения: Perry компилирует практически применимое подмножество TypeScript. На странице ограничений указано, что eval() и другой динамический код не поддерживаются, а декораторы поддерживаются лишь частично. Некоторые npm-пакеты не скомпилируются. Для совместимости с JavaScript-пакетами из npm Perry предлагает опциональный рантайм V8, который включается флагом --enable-js-runtime.
  • Размер: в репозитории Perry приводится около 34 КБ для hello world, который только выводит константы. Если программа использует рантайм (циклы, JSON, async), размер составит несколько мегабайт — около 5,5 МБ на macOS arm64.
perry doctor
perry check ./src
perry compile main.ts -o myapp

perry doctor проверяет, установлены ли компилятор, компоновщик и SDK платформы. perry check сообщает о коде, который не удастся скомпилировать в нативный. У Perry нет DOM, поэтому зависящий от DOM фронтенд-код перенести не получится. Кому подходит: TypeScript-разработчикам, готовым переписать UI ради нативных элементов управления.

Wails: бэкенд на Go, системный webview

Wails сочетает бэкенд на Go с webview операционной системы. Go-разработчики сохраняют привычный инструментарий для веб-фронтенда, а отрисовкой занимается собственный WebView каждой платформы, так что браузерный движок в сборку не входит. Wails v3.0.0 вышел 26 октября 2026 года.

  • Рендерер: WebView2 в Windows и WebKit в macOS. Начиная с v3.0.0, в Linux по умолчанию используется GTK4 с WebKitGTK 6.0, а прежний стек GTK3 остаётся доступным через -tags gtk3 до версии v3.1.
  • Статус: v3.0 — текущая стабильная ветка, v2 по-прежнему получает критические обновления. Поддержка iOS и Android в v3 экспериментальная и не входит в гарантии стабильности. Релизы выходят регулярно.
  • Размер: на странице Why Wails указаны бинарники размером около 15 МБ.
go install github.com/wailsapp/wails/v3/cmd/wails3@latest
wails3 setup

Кому подходит: командам, у которых бэкенд-логика уже написана на Go.

Какую альтернативу Electron выбрать?

Выбор альтернативы Electron зависит прежде всего от языка, на котором вы хотите писать бэкенд, а затем от того, насколько вы готовы мириться с различиями в отрисовке. Если нужен JavaScript от начала до конца — выбирайте tinyjs. Main-процесс на TypeScript с возможностью встроить Chromium — Electrobun. Go — Wails, а если приложению достаточно встроенного нативного API — Neutralinojs. Если вместо веб-интерфейса нужны нативные элементы управления, из пяти вариантов подходит только Perry. Прежде чем принимать решение, соберите hello world на двух главных кандидатах и запустите свой реальный фронтенд в webview каждой целевой ОС.

Часто задаваемые вопросы

Нужно ли пользователям Windows устанавливать WebView2, чтобы запускать приложения, созданные с помощью этих инструментов?

Как правило, нет. Evergreen WebView2 Runtime предустановлен на всех устройствах с Windows 11, а на большинство устройств с Windows 10 Microsoft развернула его самостоятельно, в том числе с января 2023 года на управляемые устройства и устройства, входящие в домен. Однако на небольшой части машин с Windows 10 он по-прежнему отсутствует. Поэтому Microsoft рекомендует, чтобы установщик проверял наличие рантайма и устанавливал его при отсутствии, даже если вы используете режим Evergreen.

Можно ли переиспользовать существующий фронтенд на React в Perry?

Лишь частично и только в экспериментальном режиме. У Perry нет DOM, но существует отдельный проект perry-react — React-совместимый рендерер. Блок packageAliases в package.json перенаправляет импорты react и react-dom на perry-react, а JSX-элементы сопоставляются с нативными виджетами: например, div — с VStack, а button — с Button. Сам проект называет себя proof of concept первой фазы для macOS; поддержка iOS, Android, GTK4 и Win32 запланирована. В первой фазе экземпляры одного компонента разделяют состояние хуков, стилизация через className не поддерживается (только инлайн-свойство style), а библиотеки, зависящие от DOM или className, такие как MUI или React Router, не работают.

Какие из этих альтернатив Electron позволяют создавать и мобильные приложения?

Мобильные платформы поддерживает Perry. Он компилирует тот же TypeScript для iOS и Android, а также для watchOS и ТВ. tinyjs заявляет, что не поддерживает iOS и Android, и позиционирует себя как десктопный рантайм. В списке платформ Neutralinojs указаны Linux, Windows, macOS и Web. В Wails v3 есть экспериментальная поддержка iOS и Android, которая пока не входит в гарантии стабильности. Если нужно webview-приложение, которое работает и на телефонах, Tauri 2 поддерживает iOS и Android наряду с десктопом.

Что должно быть установлено у пользователей Linux для запуска приложения на системном webview?

Им нужна библиотека WebKitGTK, поскольку эти инструменты используют системный webview, а не встраивают собственный. В примерах tinyjs в требованиях для Linux указан пакет libwebkit2gtk-4.1-0. Wails v3.0 по умолчанию использует GTK4 с WebKitGTK 6.0. Поддержка аудио и видео зависит от установленных на машине плагинов GStreamer, поэтому проверяйте воспроизведение медиа в каждом дистрибутиве Linux, который планируете поддерживать.

DevTools for the frontend

Gain Debugging Superpowers

Unleash the power of session replay to reproduce bugs, track slowdowns and uncover frustrations in your app. Get complete visibility into your frontend with OpenReplay — the most advanced open-source session replay tool for developers.

Star on GitHub12k

We use cookies to improve your experience. By using our site, you accept cookies.