Every package below ships from this monorepo, lives under the @porulle/* scope on npm, and is versioned in lockstep through Changesets.
bun add @porulle/core @porulle/adapter-postgres @porulle/adapter-stripe
32 packages v0.1.0 alpha
The four packages every Porulle install touches — kernel, CLI, database, SDK.
@porulle/core The kernel — services, adapters, hooks, state machines, auth, runtime. Everything else composes on top of it. @porulle/cli Command-line tool. Scaffolds new stores, runs migrations, mints API keys, doctors broken setups. @porulle/db The database surface plugins use instead of importing Drizzle directly. @porulle/sdk Typed TypeScript client for any Porulle server. Generated from the OpenAPI spec — every endpoint type-checked at compile time.
Pluggable infrastructure — pick a database, payment processor, storage backend, search engine, mailer, or tax calculator. Vendor SDKs never leak into core.
@porulle/adapter-postgres The PostgreSQL DatabaseAdapter for @porulle/core. Drizzle on postgres-js. The only database backend Porulle ships today.
@porulle/adapter-s3 StorageAdapter for AWS S3 (or any S3-compatible bucket — DigitalOcean Spaces, MinIO, Backblaze B2). @porulle/adapter-r2 StorageAdapter for Cloudflare R2 on Cloudflare Workers. Receives the R2 binding directly — no AWS SDK, no credentials in env.
@porulle/adapter-meilisearch SearchAdapter for Meilisearch. Indexes catalog entities and answers /api/search and /api/search/suggest queries.
@porulle/adapter-tax-manual TaxAdapter that applies a single flat rate. For stores that need basic tax math without a third-party service.
Optional commerce capabilities — each one extends the kernel through hooks, routes, schema, and permission scopes. Install only what you need.
@porulle/plugin-pos In-store POS: terminals, shifts with cash events, transactions (sale/return/exchange), payments, barcode lookup, returns, receipts. @porulle/plugin-pos-restaurant Restaurant layer on plugin-pos: tables, floor zones, modifiers, KDS, checklists, alerts, recipes (food BOM), analytics.
@porulle/plugin-giftcards Stored-value gift cards with balance checks, checkout redemption, issuance from qualifying purchases, admin lifecycle. @porulle/plugin-notifications Templates, multi-channel send, customer preferences, notification log, print jobs. Pluggable SMS / push / print adapters.
@porulle/plugin-marketplace Production-grade headless multi-vendor marketplace. Vendors, vendor catalogs, payouts, commission rules, vendor portals.
@porulle/plugin-procurement Suppliers with catalog links, purchase orders through approval, goods-received notes for inbound receiving. @porulle/plugin-warehouse Inter-warehouse stock transfers with approval and dispatch/receive, wastage notes, stock reconciliations. @porulle/plugin-uom Units of measure, conversions between units, per-entity UOM assignments for catalog and operations.
One-shot tools for pulling existing catalogs into Porulle.
@porulle/import-shopify Import a Shopify store's catalog. Maps product / variant / option / image onto sellable_entities, variants, option_types, option_values, entity_media. @porulle/import-woocommerce Import a WooCommerce store's catalog. Maps product / variation / attribute / image onto Porulle's catalog model. @porulle/import-flat Import catalog entities from a flat JSON file. The lowest-friction format — define an array of products, run porulle import, done.
Every package above is published in lockstep — a Patch / Minor / Major bump on one bumps all of them. This is enforced by the Changesets fixed group in .changeset/config.json.
To propose a version bump from a contributor PR:
Pick the affected packages, the bump kind, and write a one-line summary. The release script handles the rest at merge time:
Source is in packages/ on GitHub.