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

@packkit/provider-netlify

v0.2.1

Published

Netlify deployment provider for Packkit-generated projects — consumes a project's deployment contract to plan and apply a Netlify site.

Readme

@packkit/provider-netlify

Netlify deployment provider for Packkit-generated projects.

npm CI License: MIT

Packkit generates a project and describes how to deploy it in a provider-neutral deployment contract. This package turns that contract into a Netlify site — it plans the deploy deterministically and applies it through a client you inject.

It depends only on Packkit's public embedded API and deployment contract. It never imports Packkit internals, and Packkit never depends on it.

create-packkit  ──►  GeneratedProject.deploymentContract  ──►  @packkit/provider-netlify

Requirements

Node.js >= 20 — matching create-packkit's own floor, so any host that can run the generator can install this provider. (The repo's .nvmrc pins a current release for local development.)

Install

npm install @packkit/provider-netlify

create-packkit is a peer dependency (^3.3.0) — the host app already has it.

Usage

import { createProject } from 'create-packkit/embedded';
import { createNetlifyProvider } from '@packkit/provider-netlify';

const project = createProject({ preset: 'react-app', name: 'my-app' });

const provider = createNetlifyProvider({ client: myNetlifyClient });

// 1. Check support (pure) — reads only the deployment contract.
const support = provider.supports(project.deploymentContract);
if (!support.supported) throw new Error(support.reasons[0].message);

// 2. Prepare provider files (pure) — netlify.toml, for the host to commit.
const { files } = provider.prepare({ project });

// 3. Plan the deploy (pure, deterministic) — no network.
const plan = provider.plan({
	project,
	repository: { provider: 'github', owner: 'DanMat', name: 'my-app', branch: 'main' },
});

// 4. Apply (the only method that touches the network) — via your client.
const result = await provider.apply(plan);

Design

  • supports / prepare / plan are pure. No filesystem, no network, no client — same inputs produce the same output, so they're trivially testable and safe to run anywhere. plan() returns netlify.toml as data; the host writes it (ideally through create-packkit/writer).
  • apply is the only method that performs I/O. It executes the plan's operations through the client you inject. The provider never constructs a client and never reads credentials from the environment — auth and the decision to deploy stay entirely on the host side.
  • Contract-driven. Support and planning read the deployment contract, never raw config or framework names, so the provider is decoupled from how Packkit decided a project is static.

The client interface

You supply an object the provider calls:

interface NetlifyClient {
	createSite(input: {
		name: string;
		repository: { provider: string; owner: string; name: string; branch: string };
		build: { command: string; publishDirectory: string };
	}): Promise<{ id?: string; name?: string; url?: string }>;
}

Scope

0.1.0 — static sites only: support detection, contract validation, deterministic netlify.toml, a create-site plan, and apply against a client (exercised with a mock). No DNS, functions, custom domains, monorepo, or fullstack support; unsupported project types are reported, not guessed.

Planned:

  • 0.2.0 — real Netlify site creation, repository linking, first deploy status.
  • 0.3.0 — inspect and resume, idempotency, structured partial failures.

License

MIT © DanMat