@tspvivek/baasix
v0.0.12
Published
A flexible headless CMS with dynamic schema management and CRUD API creation
Downloads
769
Readme
Baasix
A flexible headless CMS with dynamic schema management and CRUD API creation.
Features
- 🔄 Dynamic Schema Management
- 🔐 Built-in Authentication & Authorization
- 📁 File Handling & Storage (Local/S3)
- 🔍 Full-text Search
- 🗺️ PostGIS Support
- 💾 Redis Caching
- 📧 Email Service
- 🎣 Extensible Hook System
- 🔌 REST API
- 📚 Comprehensive Documentation
Installation
npm install baasix
Quick Start
import Baasix from 'baasix';
const config = {
port: 3000,
adminPath: '/admin',
cacheTTL: 30000,
redisUrl: 'redis://localhost:6379'
};
const cms = new Baasix(config);
cms.start()
.then(() => console.log('Baasix CMS is running'))
.catch(console.error);
Environment Variables
Create a .env
file in your project root:
# Database
DATABASE_URL=postgresql://user:password@localhost:5432/baasix
DATABASE_POSTGIS=true
# Auth
SECRET_KEY=your-secret-key
ACCESS_TOKEN_EXPIRES_IN=3600
AUTH_APP_URL=http://localhost:3000
# Cache
CACHE_ENABLED=true
CACHE_TTL=30000
CACHE_REDIS_URL=redis://localhost:6379
CACHE_SIZE_GB=1
# Storage
STORAGE_SERVICES_ENABLED=local,s3
STORAGE_DEFAULT_SERVICE=local
LOCAL_STORAGE_PATH=./uploads
LOCAL_STORAGE_DRIVER=LOCAL
# S3 Configuration (if using)
S3_STORAGE_ACCESS_KEY_ID=your-access-key
S3_STORAGE_SECRET_ACCESS_KEY=your-secret-key
S3_STORAGE_REGION=your-region
S3_STORAGE_BUCKET=your-bucket
S3_STORAGE_ENDPOINT=your-endpoint
# Mail
MAIL_SENDERS_ENABLED=smtp
MAIL_DEFAULT_SENDER=smtp
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=your-email
SMTP_PASS=your-password
[email protected]
Documentation
Schema Management
Create a new schema:
const schema = {
name: "Product",
fields: {
id: { type: "UUID", primaryKey: true, defaultValue: { type: "UUIDV4" } },
name: { type: "String", allowNull: false },
price: { type: "Double", allowNull: false },
description: { type: "Text" },
category: {
type: "String",
allowNull: false,
relType: "BelongsTo",
target: "categories"
}
}
};
await Baasix.Services.SchemaManager.updateModel('products', schema);
File Handling
const { StorageService } = Baasix.Services;
// Upload file
const fileData = {
file: req.files.file,
metadata: {
title: 'My File',
description: 'File description'
}
};
const fileId = await StorageService.createOne(fileData);
Custom Hooks
const { HooksService } = Baasix.Services;
// Register a hook
HooksService.registerHook('products', 'items.create', async (data) => {
// Modify data before creation
data.createdAt = new Date();
return data;
});
Contributing
Please read CONTRIBUTING.md for details on our code of conduct and the process for submitting pull requests.
License
This project is licensed under the MIT License - see the LICENSE file for details.