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 |
HTML <input type="file"> support and file-manager drag-and-drop are required on
all three hosts. Finder, Explorer, and Linux file-manager drops must reach the
page as normal web drag events with a usable DataTransfer.files list. The
shared E2E checks the fixture's DOM contract; native picker and file-drop checks
remain manual. These features are separate from the dialog.choose_file RPC.
See docs/protocol.md.
# mix.exs
{:desktop_webview, "~> 0.1"}
# config/config.exs
config :desktop, :backend, DesktopWebview.Backend
config :desktop, :menu_adapter, DesktopWebview.Menu.AdapterBuild 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-rpcMyApp.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.
- 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
MIT