Skip to main content
This guide provides detailed documentation for all available scripts in the Container Kit project.

Core Development Scripts

DO NOT CHANGE - These are the primary development commands used by the team.

Development Server

pnpm dev
Starts the Vite development server with hot module replacement (HMR).
  • Runs on http://localhost:5173
  • Auto-reloads on file changes
  • TypeScript type checking in watch mode

Tauri Development

pnpm tauri dev
Starts the Tauri application in development mode:
  • Launches desktop app with webview
  • Hot reload for frontend code
  • Rust compilation on backend changes
  • Full access to system APIs

Production Build

pnpm tauri:build
Builds the application for production (Apple Silicon):
  • Generates optimized frontend bundle
  • Compiles Rust backend
  • Creates macOS app bundle (.app)
  • Generates distributable installer (.dmg)
  • Target: aarch64-apple-darwin
This script automatically runs pnpm db:generate before building to ensure migrations are up to date.

Test Build

pnpm build
Builds the frontend for testing:
  • Runs pnpm db:generate first
  • Creates production frontend bundle
  • Output: build/ directory
  • Does not create app bundle

Code Quality Scripts

Type Checking

pnpm check
Runs Svelte type checking:
  • Validates TypeScript types
  • Checks Svelte component types
  • Reports type errors

Watch Mode Type Checking

pnpm check:watch
Runs type checking in watch mode:
  • Continuous type validation
  • Auto-checks on file changes
  • Useful during active development

Code Formatting

pnpm format
Formats all code with Prettier:
  • Formats TypeScript, JavaScript, Svelte files
  • Formats JSON, YAML, Markdown files
  • Auto-fixes formatting issues
  • Writes changes to files

Linting

pnpm lint
Checks code formatting without making changes:
  • Validates Prettier formatting
  • Reports formatting violations
  • Does not auto-fix (use format to fix)
  • Useful in CI/CD pipelines

Database Scripts

Generate Migrations

pnpm db:generate
Generates database migrations and Rust bindings:
  1. Runs drizzle-kit generate to create SQL migrations
  2. Runs pnpm db:migrations:rust to generate Rust bindings
  3. Outputs migrations to src-tauri/migrations/
When to use:
  • After changing src/lib/db/schema.ts
  • Before building for production
  • When database schema is out of sync

Generate Rust Migration Bindings

pnpm db:migrations:rust
Generates only Rust migration bindings:
  • Reads SQL from src-tauri/migrations/
  • Generates Rust code for embedding migrations
  • Used internally by db:generate

Shell Scripts

Download Apple Container CLI

./scripts/download-apple-container-cli.sh
Downloads and extracts Apple Container CLI:
  • Downloads from official Apple source
  • Extracts to src-tauri/binaries/sidecar/
  • Required for container management features
  • macOS only
Or via pnpm:
pnpm script:download-apple-container
./scripts/symlink.sh
Creates symlink for container CLI (if needed). Or via pnpm:
pnpm script:container-symlink

Common Workflows

Initial Setup

1

Install Dependencies

pnpm install
2

Generate Database Migrations

pnpm db:generate
3

Download Apple Container CLI

./scripts/download-apple-container-cli.sh

Daily Development

# Start development server
pnpm tauri dev

Schema Changes

1

Update Schema

Edit src/lib/db/schema.ts with your changes.
2

Generate Migrations

pnpm db:generate
3

Build Application

pnpm tauri:build

Pre-Commit Workflow

1

Format Code

pnpm format
2

Check Formatting

pnpm lint
3

Type Check

pnpm check

Production Build

1

Clean Build

rm -rf node_modules .svelte-kit build
pnpm install
2

Build Application

pnpm tauri:build

Troubleshooting

Build Issues

# Remove build artifacts
rm -rf node_modules .svelte-kit build

# Reinstall dependencies
pnpm install

# Rebuild
pnpm tauri:build

Database Issues

# Regenerate migrations
pnpm db:generate

Type Errors

# Run type checking
pnpm check

# Or in watch mode
pnpm check:watch

Environment Variables

Tauri Build Signing

For signed production builds, create a .env file:
# .env
TAURI_SIGNING_PRIVATE_KEY=your_key_here
TAURI_SIGNING_PRIVATE_KEY_PASSWORD=your_password_here
Signing keys are only required for production builds. Development builds do not require signing.

Script Categories

Core Development

  • dev - Vite development server
  • tauri dev - Tauri development mode
  • tauri:build - Production build

Code Quality

  • check - Type checking
  • check:watch - Type checking in watch mode
  • format - Format code
  • lint - Check formatting

Database

  • db:generate - Generate migrations + Rust bindings
  • db:migrations:rust - Generate Rust bindings only

Shell Scripts

  • script:download-apple-container - Download Apple CLI
  • script:container-symlink - Create container symlink

Tips

Build includes migrations - pnpm tauri:build automatically runs pnpm db:generate before building.
Format before commits - Always run pnpm format before committing to maintain code consistency.
Use watch mode - Run pnpm check:watch for continuous type checking during development.
Apple Silicon only - tauri:build targets aarch64-apple-darwin by default (Apple Silicon Macs).

Additional Resources

Script Reference

ScriptCommandDescription
devvite devStart Vite development server
buildpnpm db:generate && vite buildBuild frontend for testing
previewvite previewPreview production build
tauritauriTauri CLI commands
tauri:build./scripts/tauri-build.shProduction build for Apple Silicon
checksvelte-kit sync && svelte-checkRun type checking
check:watchsvelte-kit sync && svelte-check --watchType checking in watch mode
formatprettier --write .Format code with Prettier
lintprettier --check .Check code formatting
db:generatedrizzle-kit generate && pnpm db:migrations:rustGenerate migrations + Rust bindings
db:migrations:rusttsx scripts/generate-migrations.tsGenerate Rust migration bindings
script:download-apple-container./scripts/download-apple-container-cli.shDownload Apple Container CLI
script:container-symlink./scripts/symlink.shCreate container symlink

Build docs developers (and LLMs) love