Rewrites all documentation with accurate project details (Fastify, port 1349, single-container Docker, all 33+ tools, full database schema). Adds getting started guide and configuration reference. Updates help and settings dialogs to link to the docs site.
3.0 KiB
Database
Stirling Image uses SQLite with Drizzle ORM for data persistence. The schema is defined in apps/api/src/db/schema.ts.
The database file lives at the path set by DB_PATH (defaults to ./data/stirling.db). In Docker, mount the /data volume to persist it across container restarts.
Tables
users
Stores user accounts. Created automatically on first run from DEFAULT_USERNAME and DEFAULT_PASSWORD.
| Column | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
username |
text | Unique, required |
passwordHash |
text | bcrypt hash |
role |
text | admin or user |
mustChangePassword |
integer | Boolean flag for forced password reset |
createdAt |
text | ISO timestamp |
updatedAt |
text | ISO timestamp |
sessions
Active login sessions. Each row ties a session token to a user.
| Column | Type | Notes |
|---|---|---|
id |
text | Primary key (session token) |
userId |
integer | Foreign key to users.id |
expiresAt |
text | ISO timestamp |
createdAt |
text | ISO timestamp |
api_keys
API keys for programmatic access. The raw key is shown once on creation; only the hash is stored.
| Column | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
userId |
integer | Foreign key to users.id |
keyHash |
text | SHA-256 hash of the key |
name |
text | User-provided label |
createdAt |
text | ISO timestamp |
lastUsedAt |
text | Updated on each authenticated request |
Keys are prefixed with si_ followed by 96 hex characters (48 random bytes).
pipelines
Saved tool chains that users create in the UI.
| Column | Type | Notes |
|---|---|---|
id |
integer | Primary key, auto-increment |
name |
text | Pipeline name |
description |
text | Optional description |
steps |
text | JSON array of { toolId, settings } objects |
createdAt |
text | ISO timestamp |
jobs
Tracks processing jobs for progress reporting and cleanup.
| Column | Type | Notes |
|---|---|---|
id |
text | Primary key (UUID) |
type |
text | Tool or pipeline identifier |
status |
text | queued, processing, completed, or failed |
progress |
integer | 0-100 percentage |
inputFiles |
text | JSON array of input file paths |
outputPath |
text | Path to the result file |
settings |
text | JSON of the tool settings used |
error |
text | Error message if failed |
createdAt |
text | ISO timestamp |
completedAt |
text | ISO timestamp |
settings
Key-value store for server-wide settings that admins can change from the UI.
| Column | Type | Notes |
|---|---|---|
key |
text | Primary key |
value |
text | Setting value |
updatedAt |
text | ISO timestamp |
Migrations
Drizzle handles schema migrations. The config is in apps/api/drizzle.config.ts. During development, run:
pnpm --filter @stirling-image/api drizzle-kit push
In production, the schema is applied automatically on startup.