npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

parad

v2.2.4

Published

Paradox-DB local client engine — TypeScript SDK

Downloads

1,609

Readme

parad

Paradox-DB TypeScript SDK. A zero-config encrypted SQLite database with cloud sync — the client half of the Paradox-DB platform.

  • Encrypted at rest — every database file on disk is a single AES-256-CBC ciphertext blob. The SQLite database only ever exists decrypted in process memory (an in-memory sql.js database).
  • Byte-compatible with Python — the parad SDK on PyPI uses the same KDF, salt, and padding, so databases move freely between languages.
  • Sync by default — connect once and local writes are pushed to the gateway and remote changes pulled back automatically, with conflict resolution you don't have to think about.
  • Offline-first — when the gateway is unreachable, changes are marked dirty and flushed automatically when connectivity returns.
  • Manual control when you want itpush(), pull(), pullVersion() and a full CLI are available for explicit workflows.
npm install parad
import { connect } from 'parad';

// Create/open an encrypted database and start syncing (default gateway).
const db = await connect({ name: 'app' });

db.execute('CREATE TABLE IF NOT EXISTS todos (id INTEGER PRIMARY KEY, task TEXT)');
db.insert('todos', { task: 'ship parad' });

// The daemon pushes changes automatically. Local writes win on conflict.
await db.close();

Connect to a specific database on the cloud instead:

// Connection string: project-scoped, auto-login, auto-provisioned.
const db = await connect('parad://[email protected]:secret@local/acme/todos?passphrase=hunter2');

Documentation

| Guide | Contents | | --- | --- | | Sync workflows | Default auto-sync, offline handling, conflict rules, optional manual push/pull | | Connection strings | URL format, tokens, email/password, provisioning | | API reference | connect, ParadConnection, SyncDaemon, ClientEngine, GatewayClient, config & state | | Encryption | AES-256-CBC, PBKDF2 parameters, file format | | CLI | parad command-line reference | | Configuration | config.json, env vars, sync state files | | Errors | Every error class and when it is thrown | | Troubleshooting | Common problems and fixes |

Requirements

  • Node.js >= 18 (SQLite runs on sql.js — WASM, so no native dependencies; installs cleanly on any platform)

Quickstart

import { connect } from 'parad';

const db = await connect({ name: 'notes' });

// Schema + data
db.execute(`CREATE TABLE IF NOT EXISTS notes (
  id INTEGER PRIMARY KEY AUTOINCREMENT,
  body TEXT NOT NULL,
  created_at TEXT DEFAULT CURRENT_TIMESTAMP
)`);
const id = db.insert('notes', { body: 'Hello, world' });

// Query
const rows = db.select('notes', { id }, { orderBy: 'created_at DESC' });
console.log(rows);

// Custom SQL
const result = db.execute('SELECT COUNT(*) AS n FROM notes');
console.log(result.rows[0].n);

// Manual sync (optional — the daemon does this automatically)
const version = await db.push();      // push local → gateway
const pulled = await db.pull();       // pull gateway → local
await db.close();

Note on commit() / rollback(): each statement auto-commits, so these methods exist only for API parity with the Python SDK and are no-ops. Use SQLite transactions via execute('BEGIN') / execute('COMMIT') if you need atomicity.

License

MIT