drive-desktop-app

Solid

Drive and verify an Electron or Tauri desktop app from the inside, including the main-process and Rust IPC calls a browser tool cannot see. Use when a desktop app needs testing, when a feature works in the browser but not in the packaged app, when an IPC or invoke call needs proving, when a desktop screenshot or visual diff is wanted, or when you need a headless run of a desktop UI in CI.

AI & Automation 326 stars 69 forks Updated today NOASSERTION

Install

View on GitHub

Quality Score: 79/100

Stars 20%
84
Recency 20%
100
Frontmatter 20%
70
Documentation 15%
100
Issue Health 10%
50
License 10%
100
Description 5%
100

Skill Content

# Drive a desktop app and prove what happened A desktop app reaches its backend over **IPC, not HTTP**. Patching `fetch`/`XHR` cannot see that, so a browser-shaped tool is blind to every backend call the app makes: the network log reads empty, an action has no in-flight request to settle on, and asserting on the network is vacuously true. That is a false green by construction. **Reticle** observes the renderer _and_ the IPC boundary, so a desktop verdict means what a web one does. Not installed? `RETICLE_INSTALL_SOURCE=npx_skill npx @reticlehq/server@latest init`, then the [`install-and-verify`](https://github.com/reticlehq/reticle/blob/main/skills/install-and-verify/SKILL.md) skill. ## Electron: two lines, none in your app code ```ts // vite.config.ts — desktop:true also runs the plugin for `vite build`, because a packaged // renderer is a production build with no dev server export default defineConfig({ base: './', // file:// needs relative asset paths plugins: [react(), reticle({ desktop: true })], }); ``` ```js // electron/preload.cjs — FIRST line. This is what makes main-process IPC visible. require('@reticlehq/electron/preload'); ``` It **must** be in the preload and it must be first. `contextBridge.exposeInMainWorld` hands the renderer a deeply frozen object, so nothing in the page can instrument it afterwards — the preload is the last point where `ipcRenderer.invoke` is still writable, and the shim has to run before your preload captures its own reference. ...

Details

Author
reticlehq
Repository
reticlehq/reticle
Created
2 months ago
Last Updated
today
Language
TypeScript
License
NOASSERTION

Integrates with

Similar Skills

Semantically similar based on skill content — not just same category