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

@for-the-people-initiative/deploy

v0.1.0

Published

One-command deployment to any platform. Part of the [For The People](https://github.com/ryuforthepeople) module ecosystem.

Readme

@for-the-people/deploy

One-command deployment to any platform. Part of the For The People module ecosystem.

Packages

  • @for-the-people/deploy-core - Core deployment adapters and types
  • @for-the-people/deploy-cli - CLI tool for deployments

Installation

# Core library
pnpm add @for-the-people/deploy-core

# CLI tool
pnpm add -g @for-the-people/deploy-cli

Quick Start

As a Library

import { 
  createNetlifyAdapter, 
  createDeployService 
} from '@for-the-people/deploy-core';

// Create adapter
const adapter = createNetlifyAdapter({
  token: process.env.NETLIFY_AUTH_TOKEN!,
});

// Create service
const deploy = createDeployService({ adapter });

// Deploy a directory
const result = await deploy.deploy({
  source: 'directory',
  path: './dist',
  name: 'my-app',
});

console.log(`Deployed to: ${result.url}`);

Using the CLI

# Deploy current directory
ftp-deploy deploy

# Deploy with options
ftp-deploy deploy ./dist --name my-app --wait

# Check status
ftp-deploy status abc123

# View logs
ftp-deploy logs abc123 --tail 100

# Rollback
ftp-deploy rollback abc123

# List projects
ftp-deploy projects list

# Set environment variables
ftp-deploy env set PROJECT_ID MY_VAR=value API_KEY=secret

Providers

Netlify ✅

Full support for static sites and serverless functions.

export NETLIFY_AUTH_TOKEN=your_token
ftp-deploy deploy --provider netlify

Capabilities:

  • ✅ Static sites
  • ✅ Serverless functions
  • ✅ Environment variables
  • ✅ Custom domains
  • ✅ SSL
  • ✅ Preview deployments
  • ✅ Rollback
  • ✅ Build logs

Railway 🔜

Coming soon - server deployments with WebSocket support.

Cloudflare Pages 🔜

Coming soon - edge deployments with Workers.

Capabilities Pattern

Query what each provider supports:

const caps = adapter.getCapabilities();

if (caps.targets.server) {
  // Can deploy long-running servers
}

if (caps.features.streaming) {
  // Can stream logs in real-time
}

if (!caps.limits.spinDown) {
  // Won't spin down on idle (good for always-on APIs)
}

API Reference

DeployAdapter Interface

interface DeployAdapter {
  provider: string;
  getCapabilities(): DeployCapabilities;

  // Deployment
  deploy(config: DeployConfig): Promise<DeployResult>;
  getDeployment(id: string): Promise<DeployResult | null>;
  listDeployments(projectId: string, options?): Promise<DeployResult[]>;
  rollback(deploymentId: string): Promise<DeployResult>;

  // Projects
  createProject(name: string): Promise<Project>;
  getProject(id: string): Promise<Project | null>;
  listProjects(): Promise<Project[]>;
  deleteProject(id: string): Promise<void>;

  // Environment
  setEnvVars(projectId: string, vars: Record<string, string>): Promise<void>;
  getEnvVars(projectId: string): Promise<Record<string, string>>;

  // Domains
  addDomain(projectId: string, domain: string): Promise<DomainInfo>;
  removeDomain(projectId: string, domain: string): Promise<void>;

  // Logs
  getLogs(deploymentId: string, options?): Promise<LogEntry[]>;
  streamLogs?(deploymentId: string, callback): () => void;
}

DeployConfig

interface DeployConfig {
  source: 'directory' | 'git' | 'docker';
  path?: string;           // For directory source
  gitUrl?: string;         // For git source
  dockerImage?: string;    // For docker source
  
  name: string;            // Project name
  outputDirectory?: string; // e.g., "dist"
  buildCommand?: string;   // e.g., "pnpm build"
  startCommand?: string;   // For servers
  
  envVars?: Record<string, string>;
  production?: boolean;
}

Development

# Install dependencies
pnpm install

# Build all packages
pnpm build

# Type check
pnpm typecheck

License

MIT © Ryu for the People