Isolated home
Pass a directory your app owns. The sidecar stores thread keys and runtime state there. Never point it at the developer’s~/.ade or at ADE’s default machine socket.
userData:
home fight over the same socket and SQLite root. Open one client per isolated home.
Where ade comes from
Resolution order:
binaryPath— pin a specific build; skips everything below.- An installed
@ade-dev/runtime-<target>platform package. - A previously downloaded binary in the home cache.
adeonPATH(optional; tests can disable this).- Download from the ADE GitHub release, fail-closed against that release’s
SHA256SUMS.
allowDownload: false is what a shipping app wants. A packaging mistake then fails loudly in QA rather than working through a silent download on the developer’s machine and failing on a locked-down user’s.
channel: "latest" downloads the newest runtime, which can be outside the range this SDK supports. See Version compatibility.
Downloads verify checksums before the binary is used. A mismatch is a hard error (checksum_mismatch), not a warning. The pinned and bundled routes skip that check by design: bytes you signed into your own bundle are verified by the OS.
Bundling
Ship the runtime inside a signed app: platform packages,
codesign lines, entitlements, electron-builder.Electron
Run@ade-dev/sdk from the main process, not the renderer. Spawn owns a child process and a Unix socket (or a Windows named pipe), and a sandboxed renderer has neither.
Do not write the bridge yourself. @ade-dev/sdk/electron ships it: one function per process, listener teardown on reload, and the history-and-live ordering rule in code.
Electron bridge
registerAdeIpc, exposeAdeBridge, createAdeIpcClient, and what sandbox: true requires.Windows
The sidecar is a supported host. Named pipes are hashed from home + user identity.taskkill / tar are resolved through the kernel GLOBALROOT System32 alias, never from PATH. .cmd / .bat wrappers spawn through ComSpec.
Next
Quickstart
Open a thread and send the first message.
