Database Setup
This guide walks you through configuring database connections in StratusTS, from choosing a database to testing your connection.
Overview
Section titled “Overview”StratusTS supports multiple database systems:
- SQLite - File-based, zero-configuration
- PostgreSQL - Robust, production-ready
- MySQL - Popular, widely supported
- MariaDB - MySQL fork with extra features
- MongoDB - NoSQL document database
Choosing a Database
Section titled “Choosing a Database”SQLite - Best for Development
Section titled “SQLite - Best for Development”Perfect for:
- Learning and prototyping
- Development environment
- Small applications
- Single-user apps
Pros:
- No server setup required
- Just a file on your computer
- Instant start
- Great for beginners
Cons:
- Limited concurrent writes
- Not ideal for production at scale
- Fewer features than PostgreSQL
When to use: Getting started, prototypes, development
PostgreSQL - Best for Production
Section titled “PostgreSQL - Best for Production”Perfect for:
- Production applications
- Complex queries
- Large datasets
- Team projects
Pros:
- Extremely reliable
- Feature-rich
- Excellent performance
- Great community
Cons:
- Requires server setup
- More complex than SQLite
When to use: Serious applications, production environments
MySQL/MariaDB - Popular Alternative
Section titled “MySQL/MariaDB - Popular Alternative”Perfect for:
- Web applications
- WordPress-style projects
- Shared hosting
Pros:
- Widely supported
- Familiar to many developers
- Good hosting options
Cons:
- Less feature-rich than PostgreSQL
- Some licensing considerations (MySQL)
When to use: Traditional web hosting, familiar with MySQL
MongoDB - NoSQL Option
Section titled “MongoDB - NoSQL Option”Perfect for:
- Flexible schemas
- Document-based data
- Rapid iteration
Pros:
- Schema flexibility
- JSON-like documents
- Horizontal scaling
Cons:
- Different paradigm (NoSQL)
- Less structured
When to use: Dynamic schemas, document storage
No Database Configuration
Section titled “No Database Configuration”If you don’t need a database:
const DATABASE: DatabaseType = false;Use cases:
- Pure API proxy
- External database via API
- Microservices that don’t store data
Your app starts faster without database overhead.
SQLite Configuration
Section titled “SQLite Configuration”Basic Setup
Section titled “Basic Setup”const DATABASE: DatabaseType = { config:{ engine: 'sqlite', path: './database.sqlite' }, onSuccess:()=>{ console.log('database connected successfully') }}What Happens
Section titled “What Happens”- Creates
database.sqlitefile in your project root - Stores all data in this single file
- No server or credentials needed
File Location Options
Section titled “File Location Options”// Root directory (default)database: 'database.sqlite'
// Specific directorydatabase: './data/app.db'
// Inside srcdatabase: './src/database.sqlite' // Don't do thisIn-Memory Database (Testing)
Section titled “In-Memory Database (Testing)”const DATABASE: DatabaseType = { config:{ engine: 'sqlite', path: ':memory:' }, onSuccess:()=>{ console.log('database connected successfully') }}Use case: Unit tests - database resets after each test run.
Complete SQLite Example
Section titled “Complete SQLite Example”import type { DatabaseType, SettingsType } from 'stratus-ts';
const PORT = 2000;const APPS = ['users', 'blog'];
const DATABASE: DatabaseType = { config:{ engine: 'sqlite', path: ':memory:' }, onSuccess:()=>{ console.log('database connected successfully') }}
const TEMPLATE_DIR = 'templates';
export default { PORT, APPS, DATABASE, TEMPLATE_DIR,} satisfies SettingsType;PostgreSQL Configuration
Section titled “PostgreSQL Configuration”Make Sure you are running postgre
Installation
Section titled “Installation”To Install Postgres Or use Docker to run postgre
Create Database
Section titled “Create Database”# Login as postgres usersudo -u postgres psql
# Inside psql:CREATE DATABASE mydb;
CREATE USER myuser WITH PASSWORD 'secure_password';
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
\qBasic Configuration
Section titled “Basic Configuration”const DATABASE: DatabaseType = { config: { engine: 'postgre', host: 'localhost', port: 5432, user:'myuser', password: 'secure_password', database: 'mydb', }, onSuccess: () => { console.log('database connected successfully') }}Using Environment Variables (Recommended)
Section titled “Using Environment Variables (Recommended)”Create .env file:
DB_HOST=localhostDB_PORT=5432DB_USER=myuserDB_PASSWORD=secure_passwordDB_NAME=mydbUpdate settings:
const DATABASE: DatabaseType = { config: { engine: 'postgre', host: process.env.DB_HOST!, port: parseInt(process.env.DB_PORT!), user: process.env.DB_USER!, password: process.env.DB_PASSWORD!, database: process.env.DB_NAME!, }, onSuccess: () => { console.log('database connected successfully') }}Don’t forget: Add .env to .gitignore!
.env.env.*MySQL Configuration
Section titled “MySQL Configuration”Make Sure you are running MySQL
Installation
Section titled “Installation”To Install MySQL Or use Docker to run MySQL
Create Database
Section titled “Create Database”# Login to MySQLmysql -u root -p
# Inside MySQL:CREATE DATABASE mydb;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;Basic Configuration
Section titled “Basic Configuration”const DATABASE: DatabaseType = { config: { engine: 'mysql', host: 'localhost', port: 5432, user:'myuser', password: 'secure_password', database: 'mydb', }, onSuccess: () => { console.log('database connected successfully') }}Using Environment Variables (Recommended)
Section titled “Using Environment Variables (Recommended)”Create .env file:
DB_HOST=localhostDB_PORT=5432DB_USER=myuserDB_PASSWORD=secure_passwordDB_NAME=mydbUpdate settings:
const DATABASE: DatabaseType = { config: { engine: 'mysql', host: process.env.DB_HOST!, port: parseInt(process.env.DB_PORT!), user: process.env.DB_USER!, password: process.env.DB_PASSWORD!, database: process.env.DB_NAME!, }, onSuccess: () => { console.log('database connected successfully') }}MariaDB Configuration
Section titled “MariaDB Configuration”This is not implement yet
MongoDB Configuration
Section titled “MongoDB Configuration”Make Sure you are running MongoDB
Installation
Section titled “Installation”To Install MongoDB Or use Docker to run MongoDB
Basic Configuration
Section titled “Basic Configuration”const DATABASE: DatabaseType = { config: { engine: 'mongo', uri:'mongodb://localhost:27017', db:'mydb' }, onSuccess: () => { console.log('database connected successfully') }}Using Environment Variables (Recommended)
Section titled “Using Environment Variables (Recommended)”Create .env file:
DB_URI="mongodb://localhost:27017"DB_NAME=mydbUpdate settings:
const DATABASE: DatabaseType = { config: { engine: 'mongo', uri: process.env.DB_URI!, db: process.env.DB_NAME!, }, onSuccess: () => { console.log('database connected successfully') }}MongoDB Atlas (Cloud)
Section titled “MongoDB Atlas (Cloud)”DB_URI="mongodb+srv://user:password@cluster.mongodb.net/"DB_NAME=mydbEnvironment-Specific Configuration
Section titled “Environment-Specific Configuration”Development vs Production
Section titled “Development vs Production”const isProduction = process.env.ENV !== 'prod';
const DATABASE: DatabaseType = !isProduction ? { config:{ engine: 'sqlite', path: './database.sqlite' }, onSuccess:()=>{ console.log('database connected successfully') }} : { config: { engine: 'postgre', host: process.env.DB_HOST!, port: parseInt(process.env.DB_PORT!), user: process.env.DB_USER!, password: process.env.DB_PASSWORD!, database: process.env.DB_NAME!, }, onSuccess: () => { console.log('database connected successfully') }}Multiple Environments
Section titled “Multiple Environments”const environment = process.env.ENV || 'dev';
const databaseConfig = { dev: { engine: 'sqlite' as const, path: './database.sqlite' },
stag: { engine: 'postgre' as const, host: process.env.DB_HOST!, port: parseInt(process.env.DB_PORT!), user: process.env.DB_USER!, password: process.env.DB_PASSWORD!, database: process.env.DB_NAME!, },
prod: { engine: 'postgre' as const, host: process.env.DB_HOST!, port: parseInt(process.env.DB_PORT!), user: process.env.DB_USER!, password: process.env.DB_PASSWORD!, database: process.env.DB_NAME!, },};
const DATABASE: DatabaseType = databaseConfig[environment as keyof typeof databaseConfig];Advanced Options
Section titled “Advanced Options”Logging SQL Queries
Section titled “Logging SQL Queries”Testing Your Connection
Section titled “Testing Your Connection”Start Your Server
Section titled “Start Your Server”pnpm dev # or npm run devCheck Console Output
Section titled “Check Console Output”Success:
database connected successfullyserver running on port : 2000Failure:
Database connection failed: <error message>Troubleshooting
Section titled “Troubleshooting””Connection Refused” Error
Section titled “”Connection Refused” Error”Causes:
- Database server not running
- Wrong host/port
- Firewall blocking connection
Solutions:
# Check if PostgreSQL is runningbrew services list # macOSsudo systemctl status postgresql # Linux
# Start the servicebrew services start postgresql # macOSsudo systemctl start postgresql # Linux
# Check port is listeningsudo lsof -i :5432 # PostgreSQLsudo lsof -i :3306 # MySQL“Authentication Failed” Error
Section titled ““Authentication Failed” Error”Causes:
- Wrong username/password
- User doesn’t have permissions
- Wrong authentication method
Solutions:
# PostgreSQL: Reset passwordsudo -u postgres psqlALTER USER myuser WITH PASSWORD 'new_password';
# MySQL: Reset passwordmysql -u root -pALTER USER 'myuser'@'localhost' IDENTIFIED BY 'new_password';“Database Does Not Exist” Error
Section titled ““Database Does Not Exist” Error”Solution: Create the database manually:
sudo -u postgres psqlCREATE DATABASE mydb;
# MySQLmysql -u root -pCREATE DATABASE mydb;Best Practices
Section titled “Best Practices”1. Never Commit Credentials
Section titled “1. Never Commit Credentials”❌ Don’t:
password: 'my_secret_password', // In version control!✅ Do:
password: process.env.DB_PASSWORD || ''2. Use Different Databases per Environment
Section titled “2. Use Different Databases per Environment”development → SQLite or local PostgreSQLstaging → Staging PostgreSQL serverproduction → Production PostgreSQL server3. Use Migrations, Do Not modify database directly
Section titled “3. Use Migrations, Do Not modify database directly”Let migrations handle schema changes.
Next Steps
Section titled “Next Steps”Now that your database is configured:
- Migrations - Create migrations form your Models