Getting started
Layout
Each package is a sibling repo under one folder:
fusion-config fusion-db fusion-env fusion-auth fusion-storage
fusion-ui fusion-ai fusion-cache fusion-mailer fusion-audit
fusion-settings fusion-search fusion-jobs fusion-metrics fusion-realtime
fusion-collab fusion-gis fusion-ldap fusion-edge-sso fusion-import-export
typescript-rules fusion-meta
That list is illustrative, not exhaustive — see Architecture and
Packages for the full set and what each one does. Auth is a single
package fusion-auth that ships an optional edge-SSO plugin (no separate
fusion-auth-enterprise) — see Enterprise SSO.
fusion-meta (this repo) holds these docs and the example app (PulsN);
typescript-rules is the one sibling not under the fusion- name — the permission
engine (Authorization).
Install
bun installThe shared config and tools come from @tikab-interactive/fusion-config on
GitHub Packages, so you need an .npmrc and a read:packages token:
@tikab-interactive:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${NPM_TOKEN}Linking packages before they're published
Bottom-up publishing means a dependent can't bun install a dep that isn't on
the registry yet. While that's true, an app links the packages directly from
their repos with tsconfig.json paths, and Vite resolves them via
resolve: { tsconfigPaths: true } — no publish, no bun link. The
example app does exactly this.
A package that is published as source and installed from the registry (e.g.
@tikab-interactive/typescript-rules) is instead bundled for SSR with
ssr.noExternal, so Node never receives raw .ts — see Conventions.
Add or extract a package
- Create
tikab-interactive/fusion-<name>and copy the source in. package.json: name@tikab-interactive/fusion-<name>,version 0.1.0, dropprivate, addfiles,repository, andpublishConfig(GitHub Packages).- Add
tsconfig.json(extendsfusion-config),oxlint.config.ts,oxfmt.config.ts, and the thinci.yml. - Define the four scripts:
lint,fmt:check,typecheck,test. bun install→ the gate green → tag a release to publish0.1.0.
See Conventions for the why behind each step.