Changelog

All changes, fixes and updates to Stackbase.

Stackbase v2.2.0: Zero-Config Local Dev Stack & Node 24 Upgrade

Upgrades to Node.js 24 minimum, adds local Docker Compose services for Upstash Redis and MinIO S3 storage, provides zero-key local email fallback, and enables conditional Google OAuth.

Added

  • Local Upstash Redis Proxy: Added hiett/serverless-redis-http paired with redis:7-alpine in docker-compose.yml to emulate the Upstash REST API locally on port 8079. @upstash/ratelimit now works out-of-the-box without cloud credentials.
  • Local MinIO S3 Storage: Added minio/minio to docker-compose.yml with S3 API on port 9000 and Web Console on port 9001, enabling full local file uploads with zero AWS/Cloudflare keys.
  • Email Console Fallback: In development mode, transactional auth emails (verification links, password resets) are captured and printed directly to the terminal when no Resend token is provided, preventing signup crashes.
  • Conditional Google OAuth: Better Auth now registers Google OAuth conditionally when GOOGLE_CLIENT_ID and GOOGLE_CLIENT_SECRET are present. Local development with Email/Password works immediately without Google Cloud Console setup.

Changed

  • Node.js 24 Upgrade: Upgraded minimum Node.js requirement to v24+ across the monorepo, starter templates, Dockerfiles (node:24-alpine), and documentation.
  • Environment Defaults: Updated starter template .env.example files to point directly to local Docker services by default.

Fixed

  • CLI Project Name Replacement: Added packages/rate-limit/.env.example to the project name replacement list so local Redis tokens match between docker-compose.yml and environment configs on newly scaffolded projects.

Stackbase v2.1.0: Build Elevate Migration

Adds a safe migration path from Build Elevate to Stackbase, with legacy manifest conversion, conflict protection, and a complete migration guide.

Added

  • Build Elevate migration: Added stackbase migrate to convert .build-elevate.json into .stackbase.json, update unchanged files, and retain local edits as conflicts
  • Legacy compatibility: Maps the fullstack template to base, detects missing feature flags, and reads legacy template files from their original repository paths
  • Migration guide: Added a step-by-step guide covering dry runs, conflict resolution, verification, backup cleanup, and rollback

Changed

  • Manifest tracking: Keeps the legacy source and commit until migration conflicts are resolved, then continues with the standard Stackbase upgrade flow
  • Manifest backup: Saves the original manifest as .build-elevate.json.bak after a successful migration

Fixed

  • Upgrade safety: Treats new template files that collide with existing local files as conflicts instead of overwriting them

Stackbase v2.0.0 — Standalone Modular Architecture & Multi-PM Automation

Major release introducing standalone templates (base, web, api), complete Bun runtime support alongside pnpm and npm, archive-based degit downloading, and non-interactive CLI flags for automated CI/CD scaffolding.

Added

  • Standalone Architecture Templates: Dedicated, self-contained templates (base, web, api) replacing monolithic repository pruning for cleaner scaffolds, faster dependency resolution, and predictable project boundaries
  • First-Class Bun Support: Full runtime, dependency management, and script execution support for Bun (-p bun) across all templates with 100% test, build, lint, and type check parity
  • Non-Interactive Scaffolding Flags: Full suite of command-line flags for zero-prompt automation:
    • --docker / --no-docker: Control Docker container setup and Compose files
    • --k8s, --kubernetes / --no-k8s, --no-kubernetes: Toggle Kubernetes deployment manifests and Ingress
    • --observability (--obs) / --no-observability (--no-obs): Toggle Prometheus & Grafana monitoring stack
    • --studio / --no-studio: Toggle Prisma Studio database browser
  • High-Speed Template Delivery: Archive-based tarball downloads via degit replacing full Git clones, retaining commit SHA metadata in .stackbase.json for seamless future upgrades
  • Automated Matrix Runner: Permutation and combination verification runner validating 5-stage quality gates (check-types, lint, format:check, test, build) across package managers and templates

Changed

  • Templates: Pinned Prettier configuration across all templates to eliminate cross-package-manager AST differences
  • ESLint Config: Disabled conflicting react-hooks/set-state-in-effect rule from eslint-plugin-react-hooks@7 across Next.js and React internal configs
  • TypeScript: Resolved composite project references across apps/web to ensure clean initial type compilation without prior artifact requirements

Fixed

  • Formatting: Resolved long-line attribute wrapping for external links in page.tsx during project name substitution
  • Upgrade Tracking: Corrected template hash baselines in .stackbase.json to prevent false conflict warnings on clean scaffolds

Organization Migration & Web Catalog Resolution

Updates repository routing to the stackbase-labs/stackbase organization on the legacy branch and resolves pnpm catalog dependencies for web-only projects.

Fixed

  • CLI: Point template cloning, diffs, upgrades, and latest commit lookups to stackbase-labs/stackbase#legacy
  • Catalog: Moved pino, pino-http, and pino-pretty to the core catalog so @workspace/logger resolves dependencies cleanly in web-only templates where the server catalog is removed
  • Format: Added @workspace/prettier-config to api, db, and ui devDependencies to resolve Prettier configuration resolution in isolated workspaces
  • Package: Updated repository, homepage, and bugs metadata in package.json to the new organization

API Observability with Prometheus & Grafana

Adds first-class API observability with Prometheus-compatible metrics, local Prometheus/Grafana infrastructure, and documentation for inspecting request and runtime behavior during development.

Added

  • Prometheus-compatible /metrics endpoint exposing HTTP request counts, request duration histograms, in-flight request gauges, and Node.js runtime metrics
  • RED metrics middleware that records request rate, errors, and duration while excluding scraper and probe traffic from application metrics
  • Local Prometheus and Grafana compose stack with a provisioned Prometheus data source and API overview dashboard
  • Scaffold script updates that keep observability assets, Docker scripts, project-name replacement, and generated README output aligned with selected template options
  • Prometheus scrape annotations on API pods for clusters with Prometheus-compatible service discovery
  • Observability guide covering local startup, Prometheus targets, Grafana dashboard provisioning, metric names, Kubernetes notes, and troubleshooting

Cloud File Storage, Interactive DX & Storage Scaffolding

Adds vendor-agnostic S3-compatible cloud storage (@workspace/storage) with presigned URLs, contracts, API endpoints, and FileUploader UI dropzone, alongside an interactive DX lifecycle and TypeFlow architecture trace in docs, with full CLI scaffolding integration.

Added

  • New @workspace/storage package providing vendor-agnostic S3-compatible cloud storage (AWS S3, Cloudflare R2, MinIO, Supabase Storage) with direct client presigned PUT/GET URLs, object deletion, and collision-safe key generation
  • Storage schemas and MIME/size limits (getPresignedUploadUrlSchema, deleteStorageFileSchema) in @workspace/contracts
  • Authenticated /api/storage/presigned-upload and /api/storage/file endpoints with user-scoped access control
  • Reusable <FileUploader /> dropzone component in @workspace/ui with drag-and-drop, progress bar, and file validation
  • Interactive avatar upload and removal in General Settings (apps/web/components/profile/avatar-uploader.tsx) syncing directly with Better Auth
  • Interactive 4-step DX lifecycle simulation and interactive TypeFlow architecture trace with syntax-highlighted IDE view
  • Complete storage guide at apps/docs/content/docs/packages/storage.mdx covering S3/R2/MinIO setup and CORS configuration
  • Updated CLI scaffolding, Turbo lint envs, and project readme generation to include storage environment variables and packages

Dynamic Kubernetes Configuration & Environment Template Fixes

Enhances the Kubernetes scaffolding option with interactive prompts for Docker Hub username and domain name, and ensures LOG_LEVEL and POD_NAME are preserved in environment templates.

Added

  • Interactive prompts for Docker Hub username and production domain name when scaffolding Kubernetes manifests

Changed

  • Configured dynamic replacements for the domain in Ingress manifests and uncommented TLS cert-manager configurations

Fixed

  • Updated environment templates to properly retain LOG_LEVEL and POD_NAME across scaffolding options

Respect Opted-Out Features on Upgrade

Fixes the `upgrade` command re-adding files for optional features that were declined when the project was created, and stops repo-only contributor guides from leaking into scaffolded projects.

Fixed

  • upgrade no longer re-adds files for optional features (Docker, Kubernetes, Prisma Studio) that were declined at scaffold time — the manifest now records the chosen features (new version and features fields) and upgrade skips files for any opted-out feature; projects scaffolded before this change have their features inferred from disk and the manifest is self-healed on the next upgrade
  • Scaffolding now removes the repo-only CONTRIBUTING.md and SECURITY.md guides instead of shipping them into generated projects, and upgrade sources its skip list from the canonical internal-files list so the two can no longer drift

Force Upgrade Past Conflicts

Adds a `--force` flag to the `upgrade` command so you can advance a project to the latest template commit even when files conflict, without losing your local edits.

Added

  • upgrade --force advances the manifest to the latest commit while keeping your local edits — for each conflicting file it records the template's latest hash as the new base (the template content is never written to disk) so the conflict clears, your file is left untouched, and it only re-flags if the template changes that same file in a future release

Structured Logging, RSC Pages & Changelog Site

Adds a shared structured logging package adopted across the API, converts the authenticated web pages to React Server Components for a faster first paint, and rebuilds the documentation changelog with an RSS feed and refreshed navigation.

Added

  • New @workspace/logger package wrapping pino with env-based log level (LOG_LEVEL), sensitive-key redaction, and pino-pretty for local development — adopted across the API with pino-http per-request logging (health-check routes skipped, child logger on req.log) replacing morgan and ad-hoc console calls
  • Rebuilt changelog page with color-coded entries grouped by change type, a /changelog/rss.xml feed, a reusable CopyButton and NPM brand icon, and Documentation/Changelog/NPM links in the shared nav
  • .markdownlint.yaml config for linting Markdown content

Changed

  • Converted the profile, dashboard, and settings (general/security/activity) pages to React Server Components that fetch the session server-side and pass data into client children — eliminating skeleton flash, useEffect form resets, and the activity data waterfall; added route-level loading/error boundaries and a shared requireUser() server guard
  • Trust the first proxy hop in production so the real client IP is resolved for request logs

Removed

  • Dropped the now-unused /api/sessions route; sessions are fetched server-side via auth.api.listSessions

Kubernetes Deployments & CI Upgrades

Adds first-class Kubernetes support with deployment manifests, deploy/verify scripts, and an opt-in scaffolding flow, plus health probe endpoints. Also upgrades the GitHub Actions workflow and adds Turborepo caching across CI jobs.

Added

  • Kubernetes deployment manifests for the API and web apps — Namespace, ConfigMap, Deployments, ClusterIP Services, nginx Ingress with /api/v1/* rewrite, and HPAs (2–10 replicas)
  • deploy.sh to build/push images and apply all manifests, plus a CI-friendly k8s/verify.sh that health-checks pods, endpoints, in-cluster HTTP, ingress, and HPA metrics — exposed as k8s:deploy and k8s:verify pnpm scripts
  • /readyz and /healthz probe endpoints on the API server for Kubernetes liveness and readiness checks
  • Opt-in Kubernetes prompt during scaffolding (Docker-gated, defaults to No) with per-template manifest pruning and full upgrader integration
  • Kubernetes deployment guide added to the documentation site

Changed

  • Bake API_INTERNAL_URL into the web Docker image at build time so server-side rendering can reach the API in-cluster
  • Upgraded the GitHub Actions workflow — actions/checkout, setup-node, and pnpm/action-setup to v6, Node.js 20 → 24, pnpm 10 → 11.1.1, and switched to the native setup-node pnpm cache

Fixed

  • Stripped unnecessary quotes from DATABASE_URL values in .env.example files

Performance

  • Added Turborepo cache restoration to the lint, type-check, test, and build CI jobs for faster pipeline runs

Vitest Migration Complete & Jest Removal

Completes the monorepo migration to Vitest, removes Jest dependencies and presets, and updates docs and workspace configuration to match the new test stack.

Changed

  • Migrated the API app from Jest to Vitest and aligned test scripts, config, and setup with the shared workspace preset
  • Updated docs, package metadata, and workspace configuration to remove Jest references and reflect the Vitest-based test setup

Removed

  • Removed Jest dependencies, presets, and config files now that the workspace test suite runs on Vitest

Contracts Package Split & Workspace Config Updates

Adds a new shared contracts package for validation schemas and refreshes workspace package configuration to match the updated monorepo layout.

Changed

  • Introduced @workspace/contracts for shared Zod schemas and moved auth validation out of @workspace/utils
  • Updated web auth and security flows to import schemas from @workspace/contracts
  • Refreshed workspace package configs, dependencies, and lockfile entries.
  • Updated docs content for the utils and contracts packages to describe the new split

Web Shell Refresh & API Rewrite Support

Adds reusable empty states, refreshes the web shell, and introduces API rewrite support alongside supporting workspace and tooling fixes.

Added

  • Added reusable empty state components and refreshed the web shell experience
  • Introduced API rewrite support with a shared web API client

Changed

  • Simplified URL schemas across auth, database, and rate limit packages
  • Updated the docs collections alias and related configuration to match the current content layout
  • Added a dev Docker script, updated CI environment wiring, and refreshed package metadata for the workspace

Fixed

  • Added Node types to the rate-limit tsconfig so type checking works consistently

Docker Compose Project Name Replacement Fix

Ensures scaffolded project name replacement also updates the Docker compose file so generated projects stay consistent.

Fixed

  • Included docker-compose.yml in project name replacement files so scaffolded project names update everywhere

Manifest Path Fix for Generated Prisma Client

Fixes manifest generation by correcting the skipped generated Prisma client directory path so internal generated artifacts are excluded consistently during hashing.

Fixed

  • Updated manifest skip directory from generated/prisma to packages/db/generated to correctly exclude generated Prisma client files

CLI Template Transformations Refactoring

Refactors the scaffolding CLI by extracting and composing template transformations into modular, reusable units for improved maintainability and easier future enhancements.

Changed

  • Extracted template transformation logic into separate, composable modules for better code organization
  • Refactored scaffold initialization, readme generation, and upgrade workflows to use composed transformations
  • Added lint:fix script and turbo task for automated code style corrections across the monorepo

Upgrade Command & Template Diffing

Adds an upgrade workflow that keeps scaffolded projects in sync with the latest build-elevate template. Files that haven't been modified locally are updated automatically, while modified files are flagged as conflicts and can be inspected with a built-in diff command.

Added

  • Introduced the upgrade command to automatically update files that remain unchanged since scaffolding, while marking modified files as conflicts for manual review.
  • Added a diff command that shows a colored, line-by-line comparison between your scaffolded version of a file and the latest template version.
  • Created a .build-elevate.json manifest during initialization to store the scaffolded commit SHA, template name, project metadata, and per-file hashes used during upgrades.
  • Template-aware upgrade filtering ensures projects only receive updates for files that were included during scaffolding (e.g., web projects will not receive api-specific files).

Fixed

  • Upgrade now applies initialization-time transformations before comparing template files, preventing false conflicts in files like package.json, turbo.json, and pnpm-workspace.yaml.
  • Normalized line endings (CRLF → LF) before hashing to prevent false conflicts on Windows environments.

Auth Forms, UI Improvements & Fixes

Introduced reusable form field components, improved authentication UI structure, upgraded core dependencies, and fixed CI and documentation issues while strengthening auth configuration security.

Added

  • Reusable, composable form field components added to the shared UI package

Changed

  • Split the unified CredentialsForm into separate SignInForm and SignUpForm components for a cleaner auth UI
  • Updated shadcn/ui components to use unified @radix-ui primitives
  • Upgraded Zod to v4 for improved schema validation performance and API

Fixed

  • Fixed missing environment variables in the CI build job

Security

  • Shared a single auth secret across all environment files to prevent secret drift

Auth Secret Consistency & Security Improvement

Improved authentication security by standardizing the auth secret across all environment files to prevent configuration drift.

Security

  • Shared a single auth secret across all environment files to prevent secret drift

Improved App Name Handling in Scaffolding

Improved project scaffolding to support whitespace in app names, automatically trimming and formatting them for environment variables and display.

Changed

  • Accept whitespace format of app name, and trim it for use in env vars and display (e.g. 'My App' becomes MY_APP in env vars and 'My App' in display)

Monorepo Fixes & Environment Improvements

Improved development environment loading, resolved monorepo dependency resolution issues, fixed lint errors in scaffolded apps, and added metadataBase to eliminate configuration warnings.

Changed

  • Load package env vars in development

Fixed

  • Fixed a lint error present in newly scaffolded apps
  • Resolved package resolution errors for pg and prettier in monorepo installs
  • Added metadataBase to site config to remove the warn log

Scaffolding Enhancements, Documentation Site & Fixes

Enhanced project scaffolding with automatic package manager detection, introduced a Fumadocs-powered documentation site with structured MDX content, added tooling to generate documentation for scaffolded apps, and fixed formatting checks during scaffolding.

Added

  • Fumadocs-powered documentation site with full structured MDX content
  • Package manager detection with adaptive CLI options during project scaffolding

Changed

  • Add a script to create structured documentation content on the scaffolded apps by template

Fixed

  • Fixed formatting check failures during scaffolding

Developer experience improvements

Improved developer experience by enhancing the scaffolding CLI with multi-package-manager support, adding tooling for environment setup and code formatting, refining project initialization, and improving configuration consistency across templates.

Added

  • Added support for multiple package managers (npm, pnpm, bun) in Scaffolding CLI
  • Format check on scaffolding to ensure new projects adhere to code style standards
  • Turbo environment variable setup script
  • generatePageMetadata utility for per-page SEO metadata generation

Changed

  • Improved project initialization flow and CLI prompts for a better developer experience
  • Update script to include environment variables required by each template for turbo tasks
  • Update eslint-config for nextjs web app to extend from the root config for better consistency

Removed

  • Removed auth/client.ts in api only scaffolded projects since it is only needed for the web app

Scaffolding script improvements

Improved project scaffolding scripts, optimized Docker Compose for production, refined GitHub workflow triggers, reorganized monorepo dependencies, and fixed the Prisma Studio script.

Changed

  • Update scripts to update pnpm catalog, docker-compose file on scaffolding new projects
  • Optimized Docker Compose configuration for production environments
  • Ignore .md changes in GitHub workflows to prevent unnecessary CI runs on documentation updates
  • Use explicit paths filter to trigger the github workflows
  • Updated Documentation and Getting Started guide on README.md
  • Moved better-auth from the web app to the core workspace package for better reuse
  • Moved shared dependencies to the core catalog to reduce duplication across packages

Fixed

  • Fixed Prisma Studio app script after a Prisma version bump

Added scaffolding scripts

Initial scaffolding scripts to bootstrap new projects from the monorepo template, along with improvements to environment variable management and documentation updates.

Added

  • Scaffolding scripts to bootstrap new projects from the monorepo template

Changed

  • Make env placeholder values more descriptive
  • Made Environment variable management more consistent across all packages

Foundation Release

The effective initial release. Includes the full monorepo foundation, Better-Auth migration, email system, 2FA, session management, and account security suite.

Added

  • Turborepo monorepo with apps/ and packages/ structure
  • Next.js web app with App Router, Tailwind CSS, and shadcn/ui
  • Express API server with TypeScript, structured routing, and a 404 catch-all
  • Shared packages: ui, utils, auth, db, email, eslint-config, typescript-config
  • Docker Compose setup for local development and production deployments
  • GitHub Actions CI with lint, type-check, and test jobs
  • Jest testing setup with shared workspace presets
  • Better-Auth with email/password sign-in and sign-up flows
  • Dedicated @workspace/auth package with centralized auth logic and TypeScript support
  • Authentication middleware for the Express API with protected route support
  • Rate limiting for API calls and verification email requests with configurable strategies
  • Email verification on sign-up
  • Two-factor authentication (2FA) with TOTP support, including setup flow for OAuth users
  • Forgot/reset password flow with secure token-based email links
  • Email change flow with a verification step
  • Social login connect/disconnect cards in account settings
  • Session activity UI and API — view and manage active sessions across devices
  • Revoke all sessions from the security settings page
  • User profile, account settings, and security settings pages
  • Account deletion with a post-deletion goodbye page
  • Light/dark/system theme switcher
  • React Email + Resend email package with in-app preview
  • Refreshed email templates with a modern design
  • Responsive layout across auth and settings pages
  • Prisma ORM with PostgreSQL support and auto-generated client
  • Prisma Studio as a standalone app in the monorepo
  • Environment validation using @t3-oss/env for fail-fast startup errors
  • Husky git hooks for pre-commit linting and formatting enforcement

Fixed

  • Fixed hydration error on authentication pages

Security

  • Prevented client-side access to server-only environment variables

Unpublished from npm.

Unpublished from npm. No functional changes — version created to reclaim 1.0.0 slot after accidental deletion. Use v1.0.2 instead.

Unpublished from npm.

Unpublished from npm. Original initial release — no longer installable. All changes are included in v1.0.2.