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

nginx-gui

v3.3.0

Published

![version](https://img.shields.io/npm/v/nginx-gui.svg)

Readme

version

A cross-platform GUI for managing nginx — server blocks, locations, live traffic topology, and access log streaming — backed by an Express API and a Vue 3 frontend.

Requirements

  • Node 14+ (backend runtime)
  • Windows or Linux
  • nginx — downloaded automatically on Windows; install via package manager on Linux

Usage

Install globally via npm:

npm i -g nginx-gui

Then run:

nginx-gui

Access the UI at http://localhost:9004

Start nginx automatically on launch:

nginx-gui --start-nginx

First run

On first launch, if no nginx binary is found the UI shows a setup panel:

  • Windows — pick a version from the list (fetched live from nginx.org) and click Download & Install. The binary is extracted to ~/.nginx-gui/nginx/.
  • Linux — install nginx via your package manager, then restart nginx-gui:
    sudo apt install nginx   # Debian/Ubuntu
    sudo yum install nginx   # RHEL/CentOS

Features

Nginx control

The left sidebar lets you start and stop nginx, monitor its status with a live indicator, and toggle auto-start on startup (persisted in the database). The --start-nginx CLI flag is the non-interactive equivalent.

Server & location management

The Servers view shows all configured virtual servers in an expandable table:

  • Add, edit, and delete servers with inline popover editing (display name, server names, port)
  • Enable/disable individual servers — only one server per port can be active at a time
  • Expand a server row to manage its locations (path + proxy_pass), reorder them by drag-and-drop, and toggle each independently
  • Per-server and per-location extra config fields accept raw nginx directives appended to the generated block
  • Properties dialog (sliders icon) exposes structured controls for the most common directives — no raw config needed:
    • Server: max upload size (client_max_body_size), gzip compression + MIME types, access log toggle, SSL/TLS (certificate, key, protocols)
    • Location: WebSocket support (auto-injects proxy_http_version + Upgrade headers), proxy timeouts (read/connect/send), proxy buffering, CORS, rate limiting (limit_req), HTTP basic auth
  • Extract to Properties button inside the extra config editor parses raw nginx directives and migrates any recognized ones into the structured Properties fields, removing them from the freeform text
  • Active properties are shown as inline badges on each row (GZIP, SSL, WS, CORS, RL, AUTH, NO LOG)
  • View Conf shows the generated server { } block for any server before committing

HTTP config

The HTTP Config tab provides a freeform editor for custom directives placed in the HTTP block (e.g. map, upstream, geo). Changes take effect the next time nginx is started.

Full config viewer

The View Config tab shows the complete generated nginx.conf with a copy-to-clipboard button.

Access logs

The Access Logs button opens a live log viewer that streams new entries via Server-Sent Events. The table shows: remote_addr · time · server_name · correlation_id · request · status · bytes_sent · proxy_host

Access logs are written in JSON format and rotated automatically — daily or when the file exceeds 10 MB. Seven rotated files are kept.

Topology view

The Topology tab renders a D3.js force-directed graph of your nginx routing:

  • Server nodes — each configured server block
  • Upstream nodes — downstream proxy targets derived from location configs and access logs
  • Dashed gray edges — configured proxy paths
  • Solid blue edges — paths observed in access logs
  • Animated orange dots — live requests traversing paths in real time, driven by the SSE log stream

Click an edge to inspect the paths it carries. Use the toolbar to copy the access log file path or open the log viewer.

Correlation ID tracking

nginx-gui injects an X-Correlation-ID header on every proxied request (generating a UUID if one is not already present) and adds a matching $correlation_id variable to the JSON log format. This enables end-to-end request tracing across all proxy hops visible in the topology view.

Runtime files

All data lives under ~/.nginx-gui/ and is never written to the project directory:

~/.nginx-gui/
  data.json                        # LokiJS database (servers, settings, http config)
  nginx.conf                       # generated config (Linux)
  nginx.pid                        # nginx master PID (Linux)
  nginx/                           # downloaded nginx (Windows)
    nginx.exe
    conf/nginx.conf                # generated config (Windows)
    logs/nginx.pid
  logs/
    access.log                     # nginx access log (JSON lines)
    nginx-error.log                # nginx error log
    access.YYYY-MM-DD.log          # rotated logs (7 days retained)

REST API

| Method | Path | Description | |--------|------|-------------| | GET | /api/nginx/running | Is nginx running? (true/false) | | POST | /api/nginx/run | Start nginx | | POST | /api/nginx/kill | Stop nginx | | GET | /api/nginx/conf | Full generated nginx.conf text | | GET | /api/nginx/servers | All servers | | POST | /api/nginx/servers | Save/replace server list | | GET/POST/DELETE | /api/nginx/servers/:id | Single server CRUD | | GET | /api/nginx/servers/:id/conf | Generated config snippet for one server | | GET/POST | /api/nginx/http | HTTP-block extra config | | GET/POST | /api/nginx/settings | App settings (autoStartOnStartup, nginxBinaryPath) | | GET | /api/nginx/logs/access | Last 1000 access log entries (JSON array, reversed) | | GET | /api/nginx/logs/access/stream | SSE stream of new access log lines | | GET | /api/nginx/logs/access/path | Access log file path | | GET | /api/nginx/setup | Binary discovery info (found, binaryPath, source, version, platform) | | GET | /api/nginx/versions | Available nginx versions from nginx.org (Windows, cached 1 h) | | POST | /api/nginx/download | { version } → download + extract nginx to ~/.nginx-gui/nginx/ |

Development

Install dependencies:

npm install
cd app-vue && npm install

Run backend + frontend dev servers separately:

npm run server:dev        # Express API on :9004 (Node --watch)
cd app-vue && npm run dev # Vite dev server on :8881

The Vite dev server proxies /api/* to :9004, so only one URL is needed during development: http://localhost:8881

Build for production:

npm run build   # compiles frontend to /public, served by Express

Example

capture