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 🙏

© 2025 – Pkg Stats / Ryan Hefner

lazy-appwrite

v1.1.1

Published

NPM package for lazy setup with node-appwrite

Readme

Lazy Appwrite

npm version Changelog license status

Stop clicking around the Console. Start coding.

A declarative, self-healing SDK for Appwrite that handles database creation, syncing, and typed queries automatically.


  • Core: Database/Collection lazy creation, Primitive Attributes.
  • Advanced: Relationships, Geo-Spatial, and Indexes.
  • Self-Healing: Detects Schema Drift and Ghost Indexes.
  • Robust: Handles Race Conditions (Cold Starts), Rate Limiting, and Data Hygiene.
  • Utilities: Auth Helpers (Login, Register, SSR Cookies) and User Management (Admin).
  • In Progress: Storage Helpers.

Features

  • Lazy Infrastructure: Define schema in code; library creates it on the fly.
  • Race Condition Proof: Built for Serverless. Mutex locking prevents 409 conflicts.
  • Drift Detection: Auto-updates DB when you change code (e.g. expand String size).
  • Data Hygiene: Smart casting (String -> Int) and validation before API calls.
  • Typed Errors: Catch specific errors like LazyErrorType.VALIDATION.

Installation

npm install lazy-appwrite node-appwrite

Quick Start (The Easy Way)

Run the initialization command to scaffold your configuration and example schemas.

npx lazy-appwrite init

This will create:

  • src/lib/appwrite.ts (Client setup)
  • lazy-examples/ (Schema templates)

Manual Setup

If you prefer to set it up manually:

1. Define a Schema

import { TableSchema, ColumnType, IndexType } from "lazy-appwrite";

export const UserSchema: TableSchema = {
  id: "users",
  name: "Users",
  columns: [
    { key: "username", type: ColumnType.String, size: 50, required: true },
    { key: "age", type: ColumnType.Integer, required: false, _default: 18 },
  ],
  indexes: [
    { key: "idx_username", type: IndexType.Unique, columns: ["username"] },
  ],
};

2. Initialize

import { LazyAppwrite } from "lazy-appwrite";
import { UserSchema } from "./schemas";

const app = LazyAppwrite.createAdminClient({
  projectId: "...",
  apiKey: "...",
  endpoint: "...",
});

const db = app.getDatabase("my-db", "Main DB");
export const Users = db.model(UserSchema);

3. Use

await Users.create({
  username: "LazyDev",
  age: "25", // Auto-casted to Int
});

🔐 Auth Utilities

New in v0.5.0: A dedicated subpath for Authentication helpers.

import { LazyUtils } from "lazy-appwrite/utils";

// Initialize with your client
const utils = new LazyUtils(app.client);

// 1. Client-Side (Session)
// Frictionless onboarding: Tries Login -> Fails? -> Register -> Login
await utils.auth.loginOrRegister("[email protected]", "pass123");

// 2. Server-Side (Admin)
// Idempotent creation: Checks if user exists -> Returns it. If not -> Creates it.
await utils.users.getOrCreate("[email protected]", "pass123");

🤝 Contributors

We are actively looking for contributors!

  1. Fork the repo.
  2. Create a feature branch.
  3. Open a Pull Request.

📄 License

Distributed under the MIT License.