Get Started

Installation

Create a web app from the workspace starter, run it and sign in as its first admin, or pick another starter.

What you'll have afterwards:

  • A Nuxt 4 app running on http://localhost:3000, with sign-up, sign-in and account pages.
  • You, signed in with the admin role, so the admin area at /admin is open to you.
  • A local database with every table the app needs.

Every new app starts from a starter: a ready-made project you copy instead of wiring the modules yourself. This page uses the workspace starter, a web app with sign-in, account pages and user management. For a mobile app, see Other starters.

Requirements

ToolVersion
Node.js24 (the starter pins 24.22.1 in .nvmrc)
pnpm12.10.0 (pinned in the starter's package.json, use corepack enable)

This is the only requirements table in these docs. Other pages list only the extra tools they need.

1. Create the project

The starters live in .starters/ of the Frigear repository. Copy one with the CLI or with giget. Either way you get a pnpm workspace that uses the published @frigear-nu modules and builds on its own.

While the repository is not public, set GIGET_AUTH to a GitHub token that can read it, for example GIGET_AUTH=$(gh auth token). Both commands below need it.
corepack enable
pnpm create frigear-app my-app --platform web
cd my-app
git init

pnpm create frigear-app runs the CLI's init command. It also names the root package after the folder. It then runs pnpm install and pnpm prepare:env for you.

For a mobile app, use --platform mobile for the mobile starter, or --platform web,mobile for mobile-standalone. Other starters compares them.

2. Run it for the first time

Create apps/web/.env from the example file:

pnpm prepare:env

scripts/prepare-env.mjs copies every apps/*/.env.example to .env. It fills in empty secrets, here NUXT_APP_SECRET, which seals the session cookie. It never overwrites a value, so it is safe to run again.

Then set the one variable that is yours in apps/web/.env:

VariableWhat it is
NUXT_ACL_ADMINSThe access control list (ACL) of admins: comma separated emails that always get the admin role, once the address is verified. Put your own email here.
Set NUXT_ACL_ADMINS before you start the app. The list is read when the server starts, and applies to every request once the address is verified, so an email added later counts after a restart of pnpm dev.

Start the app:

pnpm dev

On the first start, NuxtHub creates a local SQLite database in apps/web/.data/. It applies the committed migrations to it.

3. Sign in

  1. Open http://localhost:3000 and choose Create account. Sign up with the email you put in NUXT_ACL_ADMINS.
  2. Verify the address. The starter has verifyEmail on, so signing up sends a verification email instead of signing you in. The log driver prints it in the terminal that runs pnpm dev: open its link and press Continue. The list only counts for a verified address, so nobody else can claim your admin role by signing up with it first.
  3. You land on /account, with Profile, Security and API tokens pages. An Admin badge shows that the list matched.
  4. Open /admin for the admin dashboard. Users (/admin/users) lists, creates and edits users.
What you should see:/account with the Admin badge, and /admin/users listing your own user.
Emails such as password resets are not sent yet. The log driver of Notify prints them in the terminal that runs pnpm dev. Configure a real driver before you deploy.

Other starters

You wantStarterGuide
A web app with sign-in, account pages and user managementworkspaceWorkspace starter
An iOS and Android app that signs in at an existing issuer (frigear.nu, your own Frigear server, Keycloak, ...)mobileMobile starter
A mobile app with its own users and API, and nothing else to runmobile-standaloneStandalone mobile starter
A mobile app next to a web app you already made from workspacemobile's apps/mobile onlyAdd apps/mobile to an existing workspace
Not sure? Start with workspace for a website, or mobile-standalone for an app. Both run without any outside service, and you can split them up later.

Compare the starters

workspacemobilemobile-standalone
Appsapps/webapps/mobileapps/web + apps/mobile
Users and sign-inIn apps/web (Auth, Users), cookie sessionsAt a remote issuer, as a public OAuth application (Auth in client mode), with guards from AuthorizationIn apps/web. The app signs in there through OAuth Server
DatabaseSQLite through NuxtHub, with committed migrationsNoneSame as workspace, plus the oauth_* tables
APIapps/web/serverThe issuer's or your own, called with bearer tokensapps/web/server, open to the app through cors.paths
Needs before the first runNothing. Set NUXT_ACL_ADMINS to your email to get the admin roleAn issuer with a registered OAuth application, set in apps/mobile/.env (own OAuth server)Nothing. Set NUXT_ACL_ADMINS to your email to get the admin role
Native buildsNoiOS and Android through Capacitor (Mobile)iOS and Android through Capacitor

Each guide has its own create and first-run steps. The rest of Get Started follows the workspace starter.

mobile does not run on its own after those steps. Its .env points at http://localhost:3000. Set NUXT_PUBLIC_AUTHENTICATION_CLIENT_ISSUER and NUXT_PUBLIC_AUTHENTICATION_CLIENT_API_BASE to your issuer first. Or run mobile-standalone, which provides that server at localhost:3000.

Use an existing Nuxt 4 app

To add the modules to a host app you already have, instead of starting from a starter:

  1. Install the modules and their peers:
    pnpm add @frigear-nu/users @frigear-nu/authorization @frigear-nu/account @frigear-nu/menu \
      @nuxthub/core @nuxt/ui @libsql/client drizzle-orm drizzle-kit tailwindcss \
      @simplewebauthn/browser @simplewebauthn/server
    
  2. Add the modules and options from Configuration to your nuxt.config.ts.
  3. Load Nuxt UI's styles in your CSS (@import "tailwindcss"; @import "@nuxt/ui";). Wrap the app in <UApp>.
  4. Set NUXT_APP_SECRET in production (32+ characters; Nuxt generates one in development). For the first admin, copy server/plugins/authorization-roles.ts from the starter and define authorization.roles.
  5. Run nuxt db generate and commit server/db/migrations.

Next steps

Copyright © 2026