Skip to content

Installation

Prerequisites

Install packages

Terminal window
# Single package — includes core, both gateways, and Drizzle storage
npm install @murai-wallet/murai drizzle-orm postgres
Terminal window
# Or with pnpm
pnpm add @murai-wallet/murai drizzle-orm postgres

If you only need specific packages:

Terminal window
# Core only (bring your own storage and gateway)
npm install @murai-wallet/core
# Individual adapters
npm install @murai-wallet/gateway-midtrans
npm install @murai-wallet/gateway-xendit
npm install @murai-wallet/gateway-stripe
npm install @murai-wallet/storage-drizzle

Create the database tables

Run this SQL against your PostgreSQL database:

CREATE TABLE wallets (
user_id TEXT PRIMARY KEY,
balance BIGINT NOT NULL DEFAULT 0
);
CREATE TABLE transactions (
id UUID PRIMARY KEY,
user_id TEXT NOT NULL,
amount BIGINT NOT NULL,
idempotency_key TEXT NOT NULL UNIQUE,
created_at TIMESTAMPTZ NOT NULL,
expires_at TIMESTAMPTZ,
remaining BIGINT,
expired_at TIMESTAMPTZ,
metadata TEXT
);
CREATE TABLE checkouts (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL,
amount BIGINT NOT NULL,
redirect_url TEXT NOT NULL,
status TEXT NOT NULL,
created_at TIMESTAMPTZ NOT NULL,
updated_at TIMESTAMPTZ NOT NULL
);

Environment variables

Add these to your .env:

Terminal window
DATABASE_URL=postgres://user:pass@host/dbname
# Midtrans (if using)
MIDTRANS_SERVER_KEY=SB-Mid-server-...
MIDTRANS_CLIENT_KEY=SB-Mid-client-...
# Xendit (if using)
XENDIT_SECRET_KEY=xnd_development_...
XENDIT_CALLBACK_TOKEN=your-callback-token
# Stripe (if using)
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...

Next steps

Continue to the Quick Start to wire up your first wallet.