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

simploy

v2.0.0

Published

A simple CI/CD deployment tool for personal and small team use. Effortless SSH deployment with environment and secret management.

Downloads

255

Readme

Simploy

Simploy is a simple CI/CD deployment tool for personal and small team use. Deploy your project to remote servers via SSH with minimal configuration.

Features

  • Easy setup: One command to create config files, edit and deploy
  • Environment & server support: Deploy to multiple environments and servers
  • Secret management: Keep sensitive values in a separate file (auto-added to .gitignore)
  • SSH key authentication: Password or private key based auth
  • Variable substitution: Use ${VAR} in any config value, with recursive resolution
  • Dry-run mode: Preview deployment plan without executing
  • Config validation: Helpful error messages for invalid config files
  • IDE autocomplete: $schema field for JSON validation and autocomplete

Installation

Global (recommended)

pnpm add -g simploy
# or
npm install -g simploy

One-time usage (no install)

npx simploy init
npx simploy deploy --env dev

Getting Started

1. Create config files

simploy init

Creates two files:

  • simploy.json — main config (environments, servers, variables)
  • simploy.secrets.json — secrets (auto-added to .gitignore)

2. Edit config files

simploy.json

{
  "$schema": "https://raw.githubusercontent.com/JunDev76/Simploy/main/dist/schema.json",
  "environments": {
    "dev": {
      "servers": [
        {
          "name": "web",
          "ssh": {
            "host": "${DEV_WEB_HOST}",
            "port": 22,
            "username": "${DEV_WEB_USER}",
            "password": "${DEV_WEB_PASSWORD}"
          },
          "localPath": ".",
          "remotePath": "/home/ubuntu/app",
          "exclude": ["node_modules", ".git", ".env"],
          "preserve": [".env"],
          "preDeploy": ["screen -S app -X quit"],
          "postDeploy": [
            "cd /home/ubuntu/app",
            "screen -dmS app",
            "screen -S app -X stuff \"npm ci; npm start\\n\""
          ]
        }
      ],
      "variables": {
        "APP_NAME": "myapp"
      }
    }
  }
}

simploy.secrets.json

{
  "DEV_WEB_HOST": "your.server.com",
  "DEV_WEB_USER": "ubuntu",
  "DEV_WEB_PASSWORD": "yourpassword"
}

3. Deploy

simploy deploy --env dev

CLI Commands

simploy init

Create simploy.json and simploy.secrets.json in the current directory.

simploy deploy

Deploy your project to remote servers.

| Option | Description | Default | |--------|-------------|---------| | -e, --env <env> | Environment to deploy | dev | | -s, --server <name> | Deploy to a specific server only | all servers | | -c, --config-path <path> | Path to config file | simploy.json | | -p, --secrets-path <path> | Path to secrets config file | simploy.secrets.json | | --dry-run | Preview deployment without executing | off |

$schema — IDE Autocomplete & Validation

simploy init automatically adds $schema to your simploy.json. This enables:

  • VS Code: JSON autocomplete and validation out of the box
  • AI agents: Understands what Simploy is by following the schema URL
  • Other editors: Any editor supporting JSON Schema
{
  "$schema": "https://raw.githubusercontent.com/JunDev76/Simploy/main/dist/schema.json"
}

SSH Configuration

Use either password or private key authentication:

{
  "ssh": {
    "host": "your.server.com",
    "port": 22,
    "username": "ubuntu",
    "password": "yourpassword"
  }
}

Or with SSH key:

{
  "ssh": {
    "host": "your.server.com",
    "port": 22,
    "username": "ubuntu",
    "privateKeyPath": "~/.ssh/id_rsa",
    "passphrase": "optional-passphrase"
  }
}

Variable Substitution

Use ${VAR_NAME} in any config value or shell command:

{
  "variables": {
    "APP_NAME": "myapp",
    "HOST": "${IP}:${PORT}",
    "IP": "1.2.3.4",
    "PORT": "8080"
  }
}
  • Variables are resolved recursively (${HOST}1.2.3.4:8080)
  • simploy.secrets.json values override variables
  • Undefined variables cause a deployment error
  • Circular references are detected and reported

Config Options

| Field | Type | Required | Description | |-------|------|----------|-------------| | $schema | string | no | JSON Schema URI for IDE autocomplete | | name | string | yes | Server name (used in logs and --server filter) | | ssh.host | string | yes | Server hostname or IP | | ssh.port | number | no | SSH port (default: 22) | | ssh.username | string | yes | SSH username | | ssh.password | string | no* | SSH password | | ssh.privateKeyPath | string | no* | Path to SSH private key | | ssh.passphrase | string | no | Passphrase for private key | | localPath | string | yes | Local directory to deploy | | remotePath | string | yes | Remote directory to deploy to | | exclude | string[] | no | Files/dirs to exclude from upload | | preserve | string[] | no | Remote files to preserve during cleanup | | preDeploy | string[] | no | Commands run before file transfer | | postDeploy | string[] | no | Commands run after file transfer |

* Either password or privateKeyPath is required.

Note: node_modules, .git, simploy.json, simploy.secrets.json are always excluded from uploads regardless of exclude setting.

Security

  • simploy.secrets.json is automatically added to .gitignore by simploy init
  • Never commit simploy.secrets.json to version control
  • Use privateKeyPath instead of password for production environments

Requirements

  • Node.js >= 18

License

ISC