desktop_webview
August 25, 2026 · View on GitHub
Native desktop webview host for elixir-desktop.
The host is a stand-alone native binary per platform. It listens on localhost TCP and
speaks JSON-RPC 2.0 (length-prefixed frames). The Elixir package implements
Desktop.Platform behaviours and connects as the client. In packaged apps the host
spawns the BEAM release; in development an existing BEAM can launch the host with
--edw-no-beam.
| Platform | Engine | Status |
|---|---|---|
| macOS | WKWebView | Primary — see docs/status/macos.md |
| Windows | WebView2 | Done — docs/status/windows.md |
| Linux | WebKitGTK | Usable — docs/status/linux.md |
Quick start (development)
# mix.exs
{:desktop_webview, "~> 0.1"}
# config/config.exs
config :desktop, :backend, DesktopWebview.Backend
config :desktop, :menu_adapter, DesktopWebview.Menu.Adapter
Build the native host for your OS (or use a vendored/CI binary):
./scripts/build_macos.sh # macOS → priv/native/macos/DesktopWebView
./scripts/build_linux.sh # Linux → priv/native/linux/DesktopWebView
mix test # unit
mix test.e2e # needs host binary; starts with --edw-test-rpc
Packaged layout (macOS)
MyApp.app/
Contents/MacOS/DesktopWebView
Contents/Resources/DesktopWebView.ini # optional
Contents/Resources/beam/bin/<app>
Host flags use the --edw-* prefix; all other argv is forwarded to the BEAM app.
See docs/packaging.md.
Documentation
- Protocol — framing, methods, behavioral semantics, test RPC
- Porting — checklist for Windows / Linux hosts
- Packaging — ini, argv, layouts, binaries
- Desktop integration
- AGENTS.md — contributor / agent rules
License
MIT