Contribute

Local development

Install the Frigear repository, configure its environment, and run, build and check its apps and packages.

This page gets the Frigear repository running on your machine. Afterwards the Frigear website app and these docs run locally, and you can run the same lint, type checks and tests as CI.

Requirements

You need Node.js and pnpm as listed in Requirements. The repository pins both: Node in .nvmrc and pnpm in packageManager of the root package.json. Run nvm use (or your own version manager) for Node. Corepack then picks the pinned pnpm.

Install dependencies

From the repository root:

corepack enable
pnpm install
The install ends with the root postinstall, which runs every package's dev:stub script: it stubs the module build and runs nuxt prepare. Scaffold a module explains why packages have no postinstall.
Run every pnpm command from the repository root, scoped with --filter. Packages resolve each other's workspace:^ ranges from there. Conventions has the full rule.
pnpm --filter @frigear-nu/website <command>
pnpm --filter ./apps/website <command>

Configure the environment

The Frigear website app reads its settings from apps/website/.env. Copy the example file and edit it:

cp apps/website/.env.example apps/website/.env

No variable is required to start the app in development. NUXT_APP_SECRET seals the session cookie: leave it empty and Nuxt generates one in development; a value you set must be at least 32 characters (openssl rand -base64 32). NUXT_SESSION_PASSWORD is the fallback encryption key for Forms and stored OAuth tokens. The other variables are optional until you use their feature, such as Stripe, OAuth Server signing keys, email delivery or Sign in with frigear.nu. Environment lists each one with the module that reads it. The docs app needs no environment.

Run an app

pnpm --filter @frigear-nu/website dev
pnpm --filter @frigear-nu/docs dev

Each app starts its own Nuxt dev server, and the terminal shows its local URL. Packages resolve to their TypeScript source, so you do not build them first.

Database

In development the Frigear website app uses a local SQLite file, apps/website/.data/db/sqlite.db. NuxtHub applies the committed migrations when the dev server starts. After you change a schema, or a module that extends one:

pnpm --filter @frigear-nu/website db:generate   # write migration files from the schema changes
pnpm --filter @frigear-nu/website db:migrate    # apply them to the development database

Commit the generated SQL, snapshot and journal together. Database explains migrations for a host app. To start over, delete apps/website/.data.

Build and check

pnpm build:packages          # every package under packages/ except the base layer
pnpm build:website           # the Frigear website app, with Node's memory limit raised to 6 GB
pnpm --filter @frigear-nu/docs build

The root scripts run lint, type checks and tests across the repository with Turborepo:

pnpm lint
pnpm lint:fix
pnpm typecheck
pnpm test

Scope any of them to one package with --filter, for example pnpm --filter ./packages/forms test.

Next steps

Copyright © 2026