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

iop

v0.2.17

Published

Ship Docker Anywhere

Downloads

65

Readme

iop

⚠️ Warning: This project is in rapid development and should not yet be used in production yet.

Join our Discord server to keep up to date.

Zero-downtime Docker deployments with automatic HTTPS. Build locally, deploy to your servers.

Install and configure:

npm install -g iop
iop init

This creates your iop.yml configuration:

# iop.yml
name: my-app

ssh:
  username: iop

services:
  web:
    build:
      context: .
    server: 157.180.47.213
    proxy:
      app_port: 3000
    environment:
      secret:
        - DATABASE_URL

Deploy everything:

❯ iop
[✓] Loading configuration (6ms)
[✓] Preparing infrastructure (1.1s)
[✓] Building locally
  ├─ [✓] Build web image (1.3s)
  └─ [✓] Package for transfer (2.2s)
[✓] Reconciling state (703ms)
[✓] Deploying services
  └─ web → 157.180.47.213
     ├─ [✓] Transfer image (6.1s)
     ├─ [✓] Zero-downtime deployment (3.0s)
     └─ [✓] Configure proxy (645ms)

Your app is live at:
  └─ web → https://a1b2c3d4-web-iop-157-180-47-213.app.iop.run

That's it! Fresh servers are automatically set up with Docker, SSL certificates, and security hardening.

Features

  • Zero-downtime deployments: Blue-green deployment strategy with automatic health checks and traffic switching
  • Registry-free: Build Docker images locally, compress and transfer via SSH (no Docker registry setup needed)
  • Auto-SSL: Let's Encrypt certificates with automatic renewal and instant domain provisioning
  • Server bootstrap: Fresh Ubuntu/Debian servers configured automatically with security hardening
  • Multi-server support: Deploy across multiple machines with automatic load balancing
  • Git-based releases: Each deployment tagged with Git SHA for easy rollbacks via git checkout + redeploy
  • Secure by default: Fail2Ban, automatic updates, SSH hardening, dedicated users, firewall configuration
  • Proxy management: Built-in reverse proxy with HTTP/HTTPS termination and host-based routing
  • Comprehensive status: Real-time deployment status across all servers and applications
  • Unified Services: Services with proxy config get zero-downtime blue-green deployment, others get stop-start deployment
  • Network aliases: Seamless traffic switching using Docker network aliases for true zero-downtime

Why iop?

Own your infrastructure without the complexity. Deploy any Docker app to your servers with zero configuration.

vs Kamal:

  • TypeScript/Bun instead of Ruby
  • No Docker registry required - build locally, transfer directly
  • Automatic fresh server setup and security hardening
  • Instant domains with no DNS configuration needed

vs Vercel/Netlify:

  • Your own servers - full control, no vendor lock-in
  • Any Docker app - not limited to specific frameworks
  • No cold starts - containers always running
  • Cost-effective - pay only for your servers

vs Docker Compose:

  • Zero-downtime deployments - Compose restarts cause downtime
  • Multi-server support - deploy across multiple machines
  • Automatic SSL certificates and reverse proxy
  • Git-based releases with rollback capabilities

Configuration

name: my-app

ssh:
  username: iop

services:
  web:
    build:
      context: .
      dockerfile: Dockerfile
    server: 157.180.47.213
    proxy:
      hosts:
        - myapp.com #- optional, auto-generated if not provided
      app_port: 3000
    environment:
      secret:
        - DATABASE_URL

services:
  postgres:
    image: postgres:15
    server: 157.180.47.213
    environment:
      secret:
        - POSTGRES_PASSWORD
    volumes:
      - postgres_data:/var/lib/postgresql/data

Secrets in .iop/secrets:

DATABASE_URL=postgres://user:pass@localhost:5432/myapp
POSTGRES_PASSWORD=supersecret

Commands

iop init                    # Create iop.yml and .iop/secrets
iop                         # Deploy all services (auto-setup included)
iop web                     # Deploy specific service by name
iop --verbose               # Deploy with detailed output
iop status                  # Check deployment status across all servers
iop proxy status            # Check proxy status on all servers
iop proxy update            # Update proxy to latest version
iop proxy delete-host --host api.example.com  # Remove host from proxy
iop proxy logs --lines 100  # Show proxy logs (default: 50 lines)

Note: Infrastructure setup is automatic. Fresh servers are detected and configured automatically during deployment - no separate setup command needed.

Examples

With custom domain:

name: my-app

ssh:
  username: iop

services:
  web:
    build:
      context: .
    server: 157.180.47.213
    proxy:
      hosts:
        - myapp.com
      app_port: 3000
    environment:
      secret:
        - DATABASE_URL

With database service:

name: my-app

ssh:
  username: iop

services:
  web:
    build:
      context: .
    server: 157.180.47.213
    proxy:
      app_port: 3000
    environment:
      secret:
        - DATABASE_URL

services:
  postgres:
    image: postgres:15
    server: 157.180.47.213
    ports:
      - "5433:5432"
    environment:
      secret:
        - POSTGRES_PASSWORD
    volumes:
      - postgres_data:/var/lib/postgresql/data

How it works

  • Registry-free deployment: Build Docker images locally, transfer via SSH, deploy with zero downtime
  • Smart server setup: Detects fresh servers and automatically installs Docker, hardens SSH, sets up users
  • Blue-green deployment: New version deployed alongside current, health checked, then traffic switched atomically
  • Automatic HTTPS: Provisions SSL certificates and domains automatically (or use your own)
  • Intelligent infrastructure: Setup happens automatically during deployment - no separate commands needed

Requirements

  • Local: Node.js 18+ or Bun
  • Servers: Ubuntu/Debian with SSH access (root for fresh servers)
  • Ports: 80, 443 open for HTTP/HTTPS traffic
  • Docker: Installed locally for building images

Fresh servers only need root SSH access - iop handles Docker installation and security configuration automatically.

Community

Join our Discord: https://discord.gg/t4KetSPhWu

Development

git clone https://github.com/elitan/iop
cd iop
bun install
bun run build

# Link CLI for local development
cd packages/cli && bun link

# Now you can use iop globally
iop --help

MIT License - Made for developers who want simple, reliable deployments on their own infrastructure.