Shipkit
DocsFeaturesPricing
DocsFeaturesPricing

Shipkit DocumentationBuild memory optimizationDevelopment GuideEnvironment VariablesError HandlingFile StructureMiddlewareRebranding Guide

Vercel Deployment Checks

Development GuideCLIDependency UpdatesDevToolsFeature FlagsAI PromptsSetup RequirementsSupply chaintRPCWeb Workers

FeaturesAIAnalytics IntegrationAuthenticationCMSDatabaseEmailHapticsPaymentsComponent RegistryStorageUIVisual BuilderWaitlist Feature

Quick StartDeploymentEnvironment VariablesFile StructureSetup Wizard

Caching & Rate LimitingContent ManagementError HandlingMarkdown and MDXMiddlewareProxy-Safe Server ActionsRebranding GuideWebhook Security Implementation GuideMulti-Zone ArchitectureVercel Deployment

IntegrationsPayload CMSDataFast Analytics IntegrationGoogle Analytics IntegrationGoogle Tag Manager IntegrationPostHogStatSig IntegrationUmami Analytics IntegrationAuth.js IntegrationBetter AuthClerkStack Auth IntegrationSupabase Authentication IntegrationBuilder.io IntegrationPayload CMS IntegrationAWS S3 IntegrationResend Email IntegrationUpstash Redis IntegrationVercel Blob IntegrationLemon SqueezyPolarStripe

API RoutesComponentsAPI Route SnippetsAuthentication SnippetsComponent SnippetsForm Handling SnippetsSnippets Introduction

    Database

    PostgreSQL with Drizzle ORM. Enabled when DATABASE_URL is set.

    DATABASE_URL=postgresql://user:password@host:port/database
    DB_PREFIX=your_prefix  # optional, prefixes table names
    

    Commands

    bun run db:generate    # generate Drizzle schema from code
    bun run db:migrate     # run migrations
    bun run db:push        # push schema directly (dev shortcut)
    bun run db:studio      # open Drizzle Studio (visual DB browser)
    bun run db:reset       # drop + regenerate + migrate + push
    bun run db:seed        # seed with test data
    

    Schema

    The main schema lives at src/server/db/schema.ts. It defines tables for users, accounts, sessions, posts, payments, teams, projects, API keys, and more.

    Payload CMS has its own schema management — it handles migrations for its collections separately. Both share the same database.

    Usage

    import { db } from "@/server/db";
    import { users } from "@/server/db/schema";
    import { eq } from "drizzle-orm";
    
    const user = await db.query.users.findFirst({
      where: eq(users.email, "user@example.com"),
    });
    

    Hosting

    • Neon — serverless Postgres, good free tier
    • Supabase — Postgres + extras
    • Railway — simple managed Postgres

    Key Files

    FilePurpose
    src/server/db/index.tsDatabase connection
    src/server/db/schema.tsDrizzle schema definitions
    drizzle.config.tsDrizzle Kit config
    src/config/features-config.tsDATABASE_ENABLED flag