Use when working in @omega.js/client or on any frontend behavior it owns: the browser base class, auth and the User, data-omega-bind bindings, the Firestore, storage, notifications and Sentry modules, omega.request(), verts, icons, motion, or anything in packages/client/.
Installs into .claude/skills of the current project.
Are you the author of Client?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/omega-js-stack-client)
---
name: client
description: Use when working in @omega.js/client or on any frontend behavior it owns: the browser base class, auth and the User, data-omega-bind bindings, the Firestore, storage, notifications and Sentry modules, omega.request(), verts, icons, motion, or anything in packages/client/.
user-invocable: true
---
# OMEGA Client (@omega.js/client)
`@omega.js/client` exports the browser base class `Omega` and no instance. Each frontend framework subclasses it and exports the one ready-made `omega`: `@omega.js/web/runtime` for every page, `@omega.js/desktop/renderer` in the renderer, and `@omega.js/extension/{popup,sidepanel,options,page}` in the four page contexts. The instance carries storage, auth, bindings, firestore, notifications, serviceWorker, sentry, dom, utilities, device, request, verts, triggers, icons and motion as plain properties (`omega.auth.user`, `omega.utilities.escapeHTML()`), and `omega.auth.user` is always a `User` from `@omega.js/account`. It is a library, not an app: real behavior is proved from inside a consuming framework.
## 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/client/index.md` is the guide (identity, the module list, file conventions). The meat lives in `docs/client/*.md`: architecture, modules, bindings, code-patterns, common-tasks, build-system, cdp-debugging, testing. Cross-framework contracts live in `docs/shared/`.
- **Working in a consumer project**: read `node_modules/@omega.js/manager/docs/client/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. Consumer-side work is normally routed by the embedding framework's skill (`omega:web`, `omega:desktop`, or `omega:extension`), with this one for the runtime's own behavior.
## Non-negotiables
- **One instance per surface, built by its framework.** A consumer never writes `new`; every client module receives the instance in its constructor (`new Auth(omega)`), and nothing imports a live instance from `@omega.js/client`. Accessors are properties, never zero-arg methods.
- **Keep Firebase imports lazy** — the dynamic imports are what keeps consumer bundles small; do not convert them to static imports.
- **The `User` class is shared with `@omega.js/backend`.** `@omega.js/account` owns it: the same getters (`plan`, `active`, `trialing`, `cancelling`, `everPaid`) answer on both sides, so a change to subscription-state logic is a cross-stack change.
- **The runtime is what makes the page paint contract possible** — bindings fill at auth settle, `bindings.update()` defers by ROOT key, and `FormManager`'s gates hold a submit control until its answers land. Read `docs/web/page-contract.md` before changing any of the three.
- **Prove changes from a consumer.** `npm run prepare` plus the package tests are necessary, not sufficient; verify end to end inside a linked web, desktop, or extension app (`docs/shared/local-dev.md`).