Use when working on a brand's desktop app or on @omega.js/desktop itself — Electron main, renderer or preload, windows, tray, menus, ipc, deep links, the auto-updater, or the sign/notarize/release pipeline, in targets/desktop or packages/desktop/.
Installs into .claude/skills of the current project.
Are you the author of Desktop?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/omega-js-stack-desktop)
---
name: desktop
description: Use when working on a brand's desktop app or on @omega.js/desktop itself — Electron main, renderer or preload, windows, tray, menus, ipc, deep links, the auto-updater, or the sign/notarize/release pipeline, in targets/desktop or packages/desktop/.
user-invocable: true
---
# OMEGA Desktop (@omega.js/desktop)
`@omega.js/desktop` builds Electron desktop apps: one ready-made `omega` instance per Electron process (`const omega = require('@omega.js/desktop/main'); omega.initialize()`), a modular lib layer on that instance (windows, tray, menu, context-menu, ipc, storage, theme, fontawesome, deep-link, protocol, app-state, auto-updater, auth, auth-flow, auth-persistence, analytics, usage, remote-config, remote-scripts, restart-manager) extended by file-based definitions, a multi-platform build/sign/notarize/release pipeline, and a built-in test framework. It is the EM successor.
## Where the knowledge lives
This skill routes; the docs are the source of truth. Read the guide BEFORE touching files.
- **Working in this monorepo**: `docs/desktop/index.md` is the guide (the consumer entry and the per-process instance, the lib-module table, windows, icons, build system, config flow, CDP debugging, the CLI table). The per-subsystem meat lives in `docs/desktop/*.md`. Cross-framework contracts live in `docs/shared/` (config, theming, icons, deploys, updates, testing, local-dev).
- **Working in a consumer project**: read `node_modules/@omega.js/manager/docs/desktop/index.md`: the installed manager ships the monorepo's whole `docs/` tree, and a locally linked brand's copy is synced from the monorepo before every omega verb but a read-only one.
- **`@omega.js/client` comes with it.** The renderer's instance extends the client's base class, so any task touching auth, Firestore, subscriptions, notifications, or `data-omega-bind` is client work too: `docs/client/index.md` and the `omega:client` skill.
## Non-negotiables
- **Read the guide before editing.** Which process owns a concern (main is the auth source of truth; renderers reflect via IPC) is the first thing to get right.
- **🚫 Never start the user's long-running processes** (`npm start`, a packaged app's dev loop) — assume they are running.
- **Grep the logs FIRST.** The app's `logs/` holds `dev.log` (the gulp run + the Electron child), `build.log`, `test.log`, and `runtime.log`: the running app's own main/preload/renderer lines. All truncated per launch, except `runtime.log`: with the lock on, the launch that holds the lock empties it of earlier launches' lines and a duplicate launch leaves it alone; with `protocol.singleInstance: false` every launch appends to it with its lines tagged `[pid <n>]`. Read them instead of relaunching the app to see what it already printed (`docs/shared/logging.md`).
- **Secrets never enter `config/omega.json5`** — `.env` and the OS keychain only.
- **Deploys are deliberate** — only `omega deploy` / `omega publish` ship a release; a commit never does (`docs/shared/deploys.md`).