- TypeScript 97.1%
- JavaScript 1.6%
- Shell 0.7%
- Dockerfile 0.6%
|
|
||
|---|---|---|
| .claude | ||
| .github/workflows | ||
| packages | ||
| .gitignore | ||
| .gitlab-ci.yml | ||
| .lefthook.yml | ||
| .npmrc | ||
| .prettierignore | ||
| .prettierrc | ||
| bun.lock | ||
| CHANGELOG.md | ||
| CLAUDE.md | ||
| CONTRIBUTING.md | ||
| eslint.config.mjs | ||
| LICENSE | ||
| MEMORY.md | ||
| nx.json | ||
| package.json | ||
| PLAN.md | ||
| PRODUCT.md | ||
| README.md | ||
| TODO.md | ||
| tsconfig.base.json | ||
| tsconfig.json | ||
| vitest.workspace.ts | ||
@cibule
General-purpose infrastructure toolkit for TypeScript monorepos. Provides a modular set of npm packages covering dependency injection, database abstraction (D1/SQLite/Mock), storage abstraction (R2/S3/Local), image transformation, rate limiting, seed/migration tooling, and Nx generators for onion architecture scaffolding.
Built for TypeScript developers who use Nx monorepos and deploy to Cloudflare Workers, Node.js, or both.
Packages
Core
| Package | Description | Dependencies |
|---|---|---|
@cibule/di |
Lightweight, zero-dependency DI container | none |
@cibule/wiring |
Server wiring helpers with AsyncLocalStorage | @cibule/di |
Database
| Package | Description | Dependencies |
|---|---|---|
@cibule/db |
Driver-agnostic database abstraction (Kysely) | kysely, @cibule/di |
@cibule/db-sqlite |
SQLite driver (Node.js) | better-sqlite3 |
@cibule/db-d1 |
Cloudflare D1 driver | kysely-d1 |
@cibule/db-migrate |
Migration orchestrator (Prisma + D1 PRAGMA fixes) | prisma, wrangler |
Storage
| Package | Description | Dependencies |
|---|---|---|
@cibule/storage |
File storage abstraction + in-memory and local drivers | @cibule/di |
@cibule/storage-r2 |
Cloudflare R2 driver | @cibule/storage |
@cibule/storage-s3 |
AWS S3 driver | @aws-sdk/client-s3 |
Image
| Package | Description | Dependencies |
|---|---|---|
@cibule/image |
Image transformation core | @cibule/di, @cibule/storage |
@cibule/image-sharp |
Sharp driver (Node.js) | sharp |
@cibule/image-cf |
Cloudflare Image Resizing driver | CF Workers runtime |
Rate Limiting
| Package | Description | Dependencies |
|---|---|---|
@cibule/rate-limit |
Rate limiting abstraction + in-memory and Cloudflare drivers | @cibule/di |
Tooling
| Package | Description | Dependencies |
|---|---|---|
@cibule/seed |
Seed orchestrator for databases and storage | @cibule/db, @cibule/storage |
@cibule/devkit |
Nx generators for onion architecture scaffolding | @nx/devkit |
Installation
Install only the packages you need. Each package is independently publishable.
# bun
bun add @cibule/di @cibule/db @cibule/db-sqlite
# npm
npm install @cibule/di @cibule/db @cibule/db-sqlite
# pnpm
pnpm add @cibule/di @cibule/db @cibule/db-sqlite
Quick Start
import { Injector } from '@cibule/di';
import { DB_ACCESSOR } from '@cibule/db';
import { provideSqliteDb } from '@cibule/db-sqlite';
// Create the injector with SQLite database providers
const injector = Injector.create({
providers: [provideSqliteDb(':memory:')],
});
// Resolve the database accessor and run queries
const getDb = injector.get(DB_ACCESSOR);
const users = await getDb().selectFrom('users').selectAll().execute();
See individual package READMEs for detailed API documentation and examples.
Architecture
@cibule follows a driver separation principle: core packages define interfaces and include lightweight implementations (mock, in-memory, local filesystem), while platform-specific drivers live in separate packages with their heavy dependencies.
@cibule/di (zero deps)
|
+-- @cibule/db (Kysely)
| +-- @cibule/db-sqlite (better-sqlite3)
| +-- @cibule/db-d1 (kysely-d1)
| +-- @cibule/db-migrate (prisma, wrangler)
|
+-- @cibule/storage
| +-- @cibule/storage-r2 (R2 binding)
| +-- @cibule/storage-s3 (@aws-sdk/client-s3)
|
+-- @cibule/image
| +-- @cibule/image-sharp (sharp)
| +-- @cibule/image-cf (CF Image Resizing)
|
+-- @cibule/rate-limit (in-memory + CF binding)
+-- @cibule/seed (db + storage)
+-- @cibule/wiring (di)
+-- @cibule/devkit (@nx/devkit)
This means you only pull in the native addons and platform-specific SDKs you actually use.
Development
Requires Node.js >= 20 and bun >= 1.3.
# Install dependencies
bun install
# Build all packages
nx run-many --target=build --all
# Test all packages
nx run-many --target=test --all
# Lint all packages
nx run-many --target=lint --all
# Test a single package
nx test @cibule/di
# Build a single package
nx build @cibule/di
Pre-commit hooks (via lefthook) enforce Prettier formatting and ESLint rules on staged files.
See CONTRIBUTING.md for the full development guide.