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

easy-devops

v1.1.0

Published

A unified DevOps management tool with CLI and web dashboard for managing Nginx, SSL certificates, and Node.js on Linux and Windows servers.

Readme

Easy DevOps

npm version License: MIT Node.js

A unified DevOps management tool with interactive CLI and web dashboard for managing Nginx, SSL certificates, and Node.js on Linux and Windows servers.

No external ACME binaries required — SSL certificates are issued via acme-client (pure Node.js, Let's Encrypt).

Tip: Two CLI commands are available: easy-devops (full name) and ezz (short alias). Both are registered in the npm bin and do exactly the same thing.

Features

  • 🖥️ Interactive CLI — Arrow-key menus with real-time status indicators
  • 📊 Web Dashboard — Modern Vue 3 interface with dark/light themes (#161616 / #d64a29 palette)
  • 🌐 Nginx Management — Start/stop/reload, config editor, error logs, install
  • 🔒 SSL Certificate Management — Let's Encrypt via acme-client (no certbot), HTTP-01 and DNS-01 challenges, wildcard certs, expiry tracking
  • 🔗 Domain Management — Reverse proxy configs with SSL, external URL backends, enable/disable, wildcard domains, WebSocket, gzip, rate limiting
  • 📦 Node.js Manager — Version switching via nvm / nvm-windows, global package management
  • 🔄 Real-time Updates — Socket.io powered status updates in dashboard
  • 💿 SQLite Storage — Persistent configuration via good.db

Requirements

  • Node.js 18+ (with npm)
  • Linux (Debian/Ubuntu/etc.) or Windows
  • ⚠️ Windows users: PowerShell must be run as Administrator (required for managing services and SSL certificates)
  • Optional: Nginx, nvm (installed separately or via the tool)

Installation

Quick Install (One-Line)

If you have Node.js 18+ installed, run:

npm install -g easy-devops && easy-devops
# Short alias also available: ezz

If you don't have Node.js yet, use the bootstrap installer:

Linux / macOS

curl -fsSL https://raw.githubusercontent.com/omar00050/Easy-DevOps/main/install.sh -o install.sh && bash install.sh

Or with wget:

wget -qO install.sh https://raw.githubusercontent.com/omar00050/Easy-DevOps/main/install.sh && bash install.sh

Windows (PowerShell)

⚠️ Important: Run PowerShell as Administrator. Right-click PowerShell → "Run as Administrator".

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/omar00050/Easy-DevOps/main/install.ps1" -OutFile "install.ps1"; ./install.ps1

Or from Command Prompt:

powershell -ExecutionPolicy Bypass -Command "Invoke-WebRequest -Uri 'https://raw.githubusercontent.com/omar00050/Easy-DevOps/main/install.ps1' -OutFile 'install.ps1'; ./install.ps1"

What the installer does:

  1. Checks for Node.js 18+ (installs via nvm if missing)
  2. Installs Easy DevOps globally via npm
  3. Launches the interactive CLI

Via npm (Recommended)

npm install -g easy-devops
easy-devops   # or: ezz

From Source

git clone https://github.com/omar00050/Easy-DevOps.git
cd Easy-DevOps
npm install
npm start          # or: easy-devops / ezz

Quick Start

# Start the interactive CLI
easy-devops

# Short alias — same thing, faster to type
ezz

# Or run without installing
npx easy-devops

Usage

CLI Overview

  ███████╗███████╗     Easy DevOps  v1.0.2
  ██╔════╝╚════██╗     ─────────────────────
  █████╗      ██╔╝     CLI & Web Dashboard
  ██╔══╝     ██╔╝      Nginx · SSL · Domains · Node.js
  ███████╗ ██████╗
  ╚══════╝ ╚═════╝

  nginx: ✅ v1.26.2 | ACME: acme-client | node: v22.21.1

? Select an option:
  📦 Node.js Manager
  🌐 Nginx Manager
  🔒 SSL Manager
  🔗 Domain Manager
  🎛️ Open Dashboard
  ⚙️ Settings
  🔄 Check for Updates
  ✖ Exit

Press Ctrl+C at any prompt to exit cleanly.


Node.js Manager

Manage your Node.js runtime using nvm (Unix) or nvm-windows (Windows).

| Option | Description | |--------|-------------| | Switch Node version | Lists available LTS versions and switches to the selected one | | Manage global packages | Install, uninstall, or list globally installed npm packages | | Update npm | Updates npm to the latest version |


Nginx Manager

Control the Nginx web server from the CLI.

| Option | Description | |--------|-------------| | Reload nginx | Tests the config then sends a graceful reload signal | | Restart nginx | Tests the config then performs a full stop/start | | Test config | Runs nginx -t and displays the result | | View error log | Shows the last 50 lines of the Nginx error log | | Install nginx | Installs Nginx via apt-get (Linux) or winget (Windows) |


Domain Manager

Manage Nginx reverse proxy configurations from CLI or dashboard.

| Option | Description | |--------|-------------| | List Domains | Show all configured domains in a table (with status) | | Add Domain | Interactive prompts for domain configuration | | Edit Domain | Modify existing domain settings | | Enable / Disable Domain | Toggle domain on/off without deleting config | | Delete Domain | Remove domain (with option to also delete SSL files) |

Domain Configuration Options:

  • Backend: local host:port (127.0.0.1:3000) or full external URL (https://app.vercel.app)
  • Wildcard domain (*.example.com) — auto-enforces DNS-01 SSL validation
  • SSL/HTTPS with certificate management
  • WebSocket support (ws upstream type)
  • Gzip compression
  • Rate limiting (requests/second + burst)
  • Security headers (X-Frame-Options, etc.)
  • Custom timeout and body size limits
  • Domain-specific access logs

SSL Manager

Issue and renew Let's Encrypt SSL certificates via acme-client — no certbot or external binaries required.

| Status | Meaning | |--------|---------| | ✅ green | Valid, expires in > 30 days | | ⚠️ yellow | Expiring soon (10–30 days) | | ❌ red | Critical (< 10 days) |

Challenge Methods

| Method | How it works | |--------|-------------| | HTTP-01 | Easy DevOps stops nginx, binds port 80, serves the ACME token, then restarts nginx | | DNS-01 | You add a _acme-challenge TXT record to your DNS; Easy DevOps waits for confirmation |

Wildcard certificates (*.example.com) require DNS-01 — HTTP-01 is automatically disabled for wildcard domains.

Certificate Storage

Certificates are stored under sslDir (configured in Settings):

{sslDir}/{domain}/fullchain.pem
{sslDir}/{domain}/privkey.pem
{sslDir}/.account/account.key     ← ACME account key, reused across all issuances

Default paths:

  • Linux: /etc/easy-devops/ssl/
  • Windows: C:\easy-devops\ssl\

Web Dashboard

Start the web dashboard:

# From CLI menu: Select "🎛️ Open Dashboard" → "Start dashboard"
# Or directly:
npm run dashboard

Access at http://localhost:6443 (or configured port).

First-Time Login

Default credentials:

  • Username: admin
  • Password: Set in Settings menu or check your configuration

Tip: From the Dashboard menu, select "How to use" for a quick guide on getting started.

Dashboard Pages

| Page | Features | |------|----------| | Overview | System status cards for Nginx, SSL, Domains | | Nginx | Start/stop controls, config editor, error logs | | SSL | Certificate list, renewal actions, expiry badges | | Domains | Add/edit form with collapsible sections, table view | | Settings | Port, password, directory configuration, Linux permissions setup |

Linux users: After launching the dashboard for the first time, open Settings → Linux Permissions and click Setup Permissions. This writes /etc/sudoers.d/easy-devops with NOPASSWD rules for systemctl so nginx start/stop/reload/restart work from the dashboard without a terminal. Without this step, nginx service control will return "Linux permissions not configured" errors.


API Endpoints

The dashboard exposes RESTful API endpoints:

| Endpoint | Method | Description | |----------|--------|-------------| | /api/nginx/status | GET | Get nginx running status | | /api/nginx/start | POST | Start nginx | | /api/nginx/stop | POST | Stop nginx | | /api/nginx/reload | POST | Graceful reload | | /api/nginx/configs | GET | List config files | | /api/nginx/config/:file | GET/POST | Read/write config file | | /api/domains | GET/POST | List/create domains | | /api/domains/:name | PUT/DELETE | Update/delete domain | | /api/domains/:name/toggle | PUT | Enable or disable domain | | /api/domains/:name/reload | POST | Reload nginx for domain | | /api/ssl | GET | List certificates | | /api/ssl/create | POST | Issue new certificate | | /api/ssl/create-confirm | POST | Confirm DNS challenge | | /api/ssl/renew/:domain | POST | Renew certificate | | /api/settings | GET/POST | Dashboard settings | | /api/settings/permissions | GET | Linux sudo permissions status | | /api/settings/permissions/setup | POST | Configure NOPASSWD sudoers (Linux) |


Configuration

All configuration is stored in a persistent user directory (never inside the npm package, so it survives updates):

Database location:

  • Linux/macOS: ~/.config/easy-devops/easy-devops.sqlite
  • Windows: %APPDATA%\easy-devops\easy-devops.sqlite

| Key | Contents | |-----|----------| | config | Dashboard port, password, nginxDir, sslDir, acmeEmail | | system-detection | Cached system info (OS, Node, nginx) | | domains | Array of domain configurations |

Config fields:

| Field | Default (Linux) | Default (Windows) | Description | |-------|-----------------|-------------------|-------------| | dashboardPort | 6443 | 6443 | Dashboard HTTP port | | dashboardPassword | admin | admin | Dashboard login password | | nginxDir | /etc/nginx | C:\nginx | Nginx installation directory | | sslDir | /etc/easy-devops/ssl | C:\easy-devops\ssl | SSL certificate storage root | | acmeEmail | (empty) | (empty) | Email for Let's Encrypt account (required for cert issuance) |


Project Structure

easy-devops/
├── src/
│   ├── cli/
│   │   ├── index.js          # CLI entry point
│   │   ├── managers/         # Domain, Nginx, SSL, Node.js logic
│   │   └── menus/            # Thin menu dispatcher wrappers
│   ├── core/
│   │   ├── config.js         # Configuration load/save
│   │   ├── db.js             # SQLite helpers (good.db)
│   │   ├── detector.js       # System environment detection
│   │   ├── nginx-conf-generator.js  # Nginx conf builder (shared)
│   │   ├── platform.js       # isWindows, nginx cmd helpers, combineOutput
│   │   ├── shell.js          # Cross-platform shell executor
│   │   └── validators.js     # Shared input validation helpers
│   ├── dashboard/
│   │   ├── server.js         # Express + Socket.io server
│   │   ├── routes/           # auth, domains, nginx, settings, ssl
│   │   ├── lib/              # cert-reader, domains-db, nginx-service
│   │   ├── views/            # EJS templates + partials
│   │   └── public/           # Static assets (Vue 3 app)
│   └── lib/
│       └── installer/        # Bash helper modules for install.sh
├── data/
│   └── easy-devops.sqlite
├── install.sh            # Linux/macOS bootstrap installer
└── install.ps1           # Windows PowerShell installer

Platform Support

| Feature | Linux | Windows | |---------|-------|---------| | CLI Interface | ✅ | ✅ | | Web Dashboard | ✅ | ✅ | | Nginx Management | ✅ | ✅ | | SSL — HTTP-01 (acme-client) | ✅ | ✅ | | SSL — DNS-01 (acme-client) | ✅ | ✅ | | Wildcard Certificates | ✅ | ✅ | | Node.js (nvm) | ✅ | ✅ (nvm-windows) | | Nginx service control | systemctl | nginx.exe direct |


Development

# Clone and install
git clone https://github.com/omar00050/Easy-DevOps.git
cd Easy-DevOps
npm install

# Run CLI
npm start          # or: easy-devops / ezz

# Run dashboard
npm run dashboard

# System info only
npm run system-info

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Changelog

See CHANGELOG.md for a full history of changes.


License

This project is licensed under the MIT License - see the LICENSE file for details.


Author

Omar Farghaly


Support

If you encounter any issues or have questions, please open an issue on GitHub.