QUESTPIE
Reference

Config API

runtimeConfig() — all configuration options for your QUESTPIE application.

runtimeConfig(options)

The central configuration for your QUESTPIE application. Defines database connection, infrastructure adapters, plugins, and CLI settings.

questpie.config.ts
import { runtimeConfig } from "questpie";
import { adminPlugin } from "@questpie/admin/plugin";
import { pgBossAdapter } from "questpie/queue-pg-boss";
import { redisStreamsAdapter } from "questpie/realtime-redis";

export default runtimeConfig({
  // Required
  app: { url: process.env.APP_URL ?? "http://localhost:3000" },
  db: { url: process.env.DATABASE_URL! },
  secret: process.env.AUTH_SECRET!,

  // Plugins
  plugins: [adminPlugin()],

  // Infrastructure
  storage: {
    driver: "s3",
    s3: {
      bucket: process.env.S3_BUCKET!,
      region: process.env.S3_REGION!,
      accessKeyId: process.env.S3_ACCESS_KEY!,
      secretAccessKey: process.env.S3_SECRET_KEY!,
    },
  },
  email: {
    adapter: smtpAdapter({
      host: process.env.SMTP_HOST!,
      port: Number(process.env.SMTP_PORT),
      auth: {
        user: process.env.SMTP_USER!,
        pass: process.env.SMTP_PASS!,
      },
    }),
  },
  queue: {
    adapter: pgBossAdapter({ connectionString: process.env.DATABASE_URL! }),
  },
  realtime: {
    adapter: redisStreamsAdapter({ url: process.env.REDIS_URL! }),
  },
  kv: {
    adapter: "redis",
    url: process.env.REDIS_URL!,
  },
  translations: {
    messages: {
      en: { "app.name": "My App" },
      sk: { "app.name": "Moja Aplikacia" },
    },
  },
  cli: {
    migrations: { directory: "./src/migrations" },
    seeds: { directory: "./src/seeds" },
  },
});

Options Reference

Required

OptionTypeDescription
app.urlstringPublic-facing application URL
db.urlstringPostgreSQL connection string
secretstringSecret key for sessions and auth tokens

plugins

Array of codegen plugins. Plugins define file conventions, categories, and extensions.

plugins: [adminPlugin()],

See Plugin API for creating custom plugins.

storage

File storage configuration using FlyDrive.

// Local filesystem (default)
storage: {
  driver: "local",
  basePath: "./uploads",
}

// Amazon S3 / S3-compatible
storage: {
  driver: "s3",
  s3: {
    bucket: "my-bucket",
    region: "us-east-1",
    accessKeyId: "...",
    secretAccessKey: "...",
    endpoint: "https://...",  // Optional, for S3-compatible providers
  },
}

email

Email adapter configuration.

// SMTP
email: {
  adapter: smtpAdapter({
    host: "smtp.example.com",
    port: 587,
    auth: { user: "...", pass: "..." },
  }),
}

// Console (development — logs to stdout)
email: {
  adapter: consoleAdapter(),
}

queue

Job queue adapter. Uses pg-boss (PostgreSQL-backed).

queue: {
  adapter: pgBossAdapter({
    connectionString: process.env.DATABASE_URL!,
  }),
}

realtime

Realtime event broadcasting adapter.

// Redis Streams (recommended for production)
realtime: {
  adapter: redisStreamsAdapter({ url: process.env.REDIS_URL! }),
}

// PostgreSQL NOTIFY (simpler, single-instance)
realtime: {
  adapter: pgNotifyAdapter({ connectionString: process.env.DATABASE_URL! }),
}

kv

Key-value store for caching and session data.

// Redis (recommended for production)
kv: {
  adapter: "redis",
  url: process.env.REDIS_URL!,
}

// In-memory (development only)
kv: {
  adapter: "memory",
}

translations

Backend translation messages keyed by locale.

translations: {
  messages: {
    en: {
      "auth.loginRequired": "Please log in to continue",
      "validation.required": "{field} is required",
    },
    sk: {
      "auth.loginRequired": "Prosim prihlaste sa",
      "validation.required": "{field} je povinne",
    },
  },
}

cli

CLI-related settings for migration and seed directories.

cli: {
  migrations: {
    directory: "./src/migrations",
  },
  seeds: {
    directory: "./src/seeds",
  },
}

Environment Variables

A typical .env file:

APP_URL=http://localhost:3000
DATABASE_URL=postgres://user:pass@localhost:5432/mydb
AUTH_SECRET=your-secret-key-at-least-32-chars

# Storage (S3)
S3_BUCKET=my-bucket
S3_REGION=us-east-1
S3_ACCESS_KEY=...
S3_SECRET_KEY=...

# Redis (queue, KV, realtime)
REDIS_URL=redis://localhost:6379

# Email
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=...
SMTP_PASS=...

Config File Location

The CLI reads questpie.config.ts from the project root, which re-exports your runtime config:

questpie.config.ts
export { default } from "./src/questpie/server/questpie.config";

On this page