Hype StackHypeStack

Search

Search the packs, templates, docs, and pages

Manifest reference

manifest.json is the whole interface between a pack and the CLI. Point $schema at the published copy and your editor will check it as you type:

json
{ "$schema": "https://www.hype-stack.dev/schema/pack-manifest-v1.json" }

Identity

FieldRequiredWhat it does
nameyesKebab-case identifier. Match the directory name
versionyesSemver. Recorded in the project so a later install can tell versions apart
displayNameyesWhat people see in the picker
descriptionyesOne line, shown next to the name
categoryyesstarter, layout, or feature. The catalog supplies this for our own packs, so a community pack has to declare it
tierIgnored for community packs: nothing here is licensed, so everything installs as free
dependenciesyesPacks that must be installed first. [] when the pack stands alone
peerPacksPacks that make this one better if present, but are not required
adminCompatibleLayouts only: whether the admin shell can render this layout

Files

files is a list of { source, target, strategy }. source is relative to the pack root, target is a path template. See Build your own pack for the strategies and slots.

dependencies_npm adds npm packages per app:

json
"dependencies_npm": { "frontend": { "recharts": "^2.15.0" }, "backend": { "zod": "^4.0.0" } }

Wiring

Copying files is rarely enough. These fields tell the CLI to patch a known file in the project so your code is actually reached. Each one is idempotent, so reinstalling never duplicates an entry.

Backend

FieldPatchesFor
routesroutes/index.tsRegistering a Hono route under a prefix
socketssockets/index.tsA WebSocket handler
contextcontext.tsA value on the backend request context
envenv.config.ts, .env.example, .env.testEnvironment variables the pack needs
jobssrc/jobs/index.tsA scheduled background job
enumspackages/enums/src/index.tsShared enums both sides import
permissionsthe shared enums packageNew permission subjects and role grants

Frontend

FieldPatchesFor
frontendRoutesfrontend-url/frontend-url.tsTyping a route your pack adds
sdkConfigurationssrc/api/sdk.tsHyperFetch client configuration
navconstants/nav.constants.tsA sidebar entry
navbarActionsconstants/navbar-actions.tsxAn icon in the navbar
userMenuActionsconstants/navbar-actions.tsxAn item in the avatar dropdown
providerscomponents/providers/providers.tsxA React provider mounted at the app root
settingsTabsconstants/settings-tabs.constants.tsxA tab on the settings page
onboardingStepssetup-organization/steps/index.tsA step in organization onboarding

Admin

dashboardRows, orgDetailsRows, and orgDetailsCards inject components into the admin app. They're skipped entirely in projects with no admin app.

Whole-app

postLoginRedirect sets where the app goes after login. shouldInvertLogo flips logo colours in light mode, for marks drawn on dark backgrounds.

Copy

User-visible strings belong in a message catalog fragment, not in your JSX:

json
{
  "source": "files/frontend/messages/en.json",
  "target": "{{frontend.root}}/messages/en.json",
  "strategy": "merge-json",
  "slot": "frontend"
}

Keys are flat snake_case prefixed with your pack's feature (analytics_page_title). Call them as m.analytics_page_title(). Chrome the codemods generate (nav entries, settings tabs) takes a messageKey next to label instead of a hardcoded string, so it translates with everything else.

After the install

postInstall is a list of lines printed once the pack lands. Use it for the things you genuinely cannot do for someone: an API key to create, a webhook to point somewhere, a decision they have to make.

json
"postInstall": [
  "Set ANALYTICS_WRITE_KEY in .env with a key from your provider dashboard",
  "Events are batched every 10s; change it in src/features/analytics/config.ts"
]

Fields you can ignore

family, previewNav, preview, previewAdmin, previewMobile, and previewExtension drive the live previews on the Hype Stack marketplace. They do nothing in a community pack.

Sponsor open source

Every purchase and sponsorship funds my 8+ years of work on open source given freely to the community. It keeps the lights on, funds new packs, and keeps the ecosystem alive. Even a small tier means a lot. Thank you!

Sponsor on GitHub