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

@quan-erp/cli

v2.2.9

Published

Quark ERP CLI — scaffold plugins/projects, watch, build:dev:log, build, pack, and log in

Readme

@quan-erp/cli

Command-line tool for Quark ERP — scaffold plugins and projects, develop and package plugins, manage the local stack, sign in to Quark ERP management, check credits, and deploy to the cloud (Myan Myan Tone Cloud or your own provider).

Requires Node.js 18+. Ships platform-native binaries (macOS, Linux, Windows).

Docs: Quark ERP Developer Docs


Install

# one-off
npx @quan-erp/cli help

# global
npm i -g @quan-erp/cli

After a global install, these commands are equivalent:

| Command | | |---------|---| | quan-erp | primary | | quark-erp | alias | | erp | alias | | myan-myan-tone | alias |

quan-erp help
quan-erp plugin help
quan-erp deploy help

Run plugin commands from a Quark ERP project root (a folder that contains plugins/ and base/). For new-project, pass a folder name, use . in an empty directory, or answer the name prompt.

When a newer package is on npm, the CLI prints an update notice. Set QUAN_ERP_NO_UPDATE_CHECK to skip it.


Commands

| Command | Description | |---------|-------------| | version / -v / --version | Print CLI version | | help | Show top-level help | | completion [zsh\|bash\|fish] | Print shell Tab-completion script | | plugin new | Scaffold a plugin from the official template | | new-project [name \| .] | Scaffold a project, then initialize git | | plugin watch <plugin-name> | Watch and rebuild a plugin; notifies DevTools (:8081); --debounce default 500ms | | plugin build:dev:log <plugin-name> | One-shot compile with full error output | | plugin migration dry-run <plugin-name> | Dry-run TypeORM generate; print raw SQL (no files written) | | plugin migration create <plugin-name> | Generate IDatabaseMigration from TypeORM (compose DB; auto-register in getMigrations()) | | plugin migration remove <plugin-name> | Multi-select (Space) and delete migrations; unregister from getMigrations() | | plugin build:prod <plugin-name> | Production build | | plugin pack:prod <plugin-name> | Production build + zip (current version only) | | plugin publish [plugin-name] | Upload a plugin to the plugin market | | plugin unpublish [plugin-name] | Remove a plugin from the marketplace (keep private draft) | | plugin list | List your private and published plugins | | plugin install <plugin-name> | Remove package-lock.json, then install frontend + backend dependencies for a plugin | | plugin clean [plugin-name] [--plugin-only\|--node-only\|--docker-build-only\|--docker-image-only] | Named plugin (no flags): that plugin’s deps only; no name: npm cache + Docker build/image prune; flags select scopes | | plugin seed <plugin-name> | Register a local plugin in the development database; bumps VITE_MODULE_CACHE_ID; prompts Redis FLUSHALL after success | | run dev [--no-open] [--backend] [--frontend] [--redis] [--postgres] [--all] | Open Docker Desktop if needed, start the local base stack (default: stream backend logs only), then open the frontend when ready | | setup [--yes] | Install Node.js LTS + Docker Desktop when missing (Alpine: apk Node + Docker Engine) | | doctor | Check Node.js, Docker Desktop, free disk space, PostgreSQL, Redis, and local HTTP ports (80, 8080, 8081) | | login | Sign in to Quark ERP management | | register | Create an account and save the session | | logout | Sign out and clear the local session | | whoami | Show the current session | | credit | Show credit balance (credit history for ledger) | | deploy | Cloud deploy and manage deployments (same flow as the user portal) |

Optional template version: --version [tag] (default latest) on plugin new / new-plugin / new-project.

Most plugin commands also work as legacy top-level aliases (watch, new, build:prod, pack:prod, clean, …). Prefer quan-erp plugin ….

Enable Tab completion (zsh):

quan-erp completion install-zsh
# or: quan-erp completion zsh >> ~/.zshrc

Plugin workflow

quan-erp plugin new
quan-erp plugin install <plugin-name>
quan-erp plugin seed <plugin-name>
quan-erp plugin watch <plugin-name>
quan-erp plugin watch <plugin-name> --debounce 500
quan-erp plugin build:dev:log <plugin-name>   # full compile errors (not a live TUI)
quan-erp plugin migration create <plugin-name>
quan-erp plugin migration remove <plugin-name>
quan-erp plugin build:prod <plugin-name>
quan-erp plugin pack:prod <plugin-name>
quan-erp plugin publish <plugin-name>
quan-erp plugin unpublish <plugin-name>
quan-erp plugin list
quan-erp plugin clean <plugin-name>

plugin clean <plugin-name> removes every node_modules and package-lock.json under that plugin only. Bare erp clean / plugin clean cleans the npm cache plus Docker build cache and unused images (not plugin trees); use --plugin-only to wipe all plugins’ deps.

plugin install removes package-lock.json in frontend and backend (if present), installs dependencies for both sides, and pins related Quan ERP plugin packages to the versions listed for the plugin.

plugin watch rebuilds into base/available-plugins/<name>/<version>/ (and the installed copy if present). Default --debounce is 500ms (trailing quiet period). Frontend: if npm run dev exits (e.g. tsc -b fails before Vite starts), watch restarts on the next frontend file change. Backend changes during an in-flight build are queued for one follow-up rebuild. Build/reload events are sent to DevTools on :8081 and retry every 1s until DevTools accepts them. Failed builds stay marked failed in the dashboard — never treated as completed.

plugin build:dev:log is a one-shot compile check. Prefer it over watch when you need the full error output (watch uses a live dashboard).

plugin seed inserts/updates the local module row. On every successful run (including when the row already exists and is skipped) it sets VITE_MODULE_CACHE_ID to the same new random hash in both base/data/frontend/web-env.json (docker) and base/frontend/public/web-env.json (Vite) so either serve path reloads plugin modules. Then it prompts for Redis FLUSHALL (or use --flush-redis). plugin watch seeds first (with update), so every watch start also bumps those cache ids.

plugin migration create fills source.ts from docker-compose, runs TypeORM generate, wraps into IDatabaseMigration (migration-<8hex>-<pluginVersion>.ts), registers it in getMigrations(), then clears credentials.

plugin migration remove lists migrations, Space-selects, deletes files, and unregisters them from getMigrations().

plugin pack:prod zips only the plugin’s current version.


Project & local stack

quan-erp new-project              # prompt for name
quan-erp new-project my-app       # create ./my-app
quan-erp new-project .            # use the current empty directory

quan-erp run dev                  # start stack; stream backend logs only; open http://127.0.0.1/app when ready
quan-erp run dev --no-open        # same, but skip opening the browser
quan-erp run dev --all            # stream logs from every compose service
quan-erp run dev --backend --frontend --redis --postgres
quan-erp setup                    # install Node.js / Docker Desktop if missing
quan-erp doctor                   # check Node, Docker, Postgres, Redis, ports 80/8080/8081

run dev starts base/docker-compose.yaml in the foreground (all services). Log attach defaults to backend only (docker compose --attach backend). Use --frontend / --redis / --postgres / --backend to select services, or --all for every service. When both the frontend (:80) and backend (:8080) respond, it opens http://127.0.0.1/app once in the default browser (unless --no-open).


Account & credits

quan-erp login
quan-erp register
quan-erp whoami
quan-erp credit                   # balance
quan-erp credit history           # recent ledger
quan-erp logout

Password is always prompted (never passed as a flag). Session files live in the user config directory (not inside this npm package):

| OS | Directory | |----|-----------| | macOS | ~/Library/Application Support/quan-erp/ | | Linux | ~/.config/quan-erp/ | | Windows | %AppData%\quan-erp\ |


Cloud deploy

quan-erp login
quan-erp deploy                   # create (portal wizard)
quan-erp deploy list              # browse / pick a deployment
quan-erp deploy ops [id]          # manage one deployment
quan-erp deploy delete [id]
quan-erp deploy tokens            # cloud provider access tokens
quan-erp deploy help

Requires a management account. Flow matches the user portal (Myan Myan Tone Cloud Shared/Dedicated, or BYOK providers).

Useful ops (also available from deploy list / deploy ops):

| Command | Description | |---------|-------------| | deploy resume [id] | Resume an incomplete deploy | | deploy convert-demo [id] | Convert a try-demo deployment to paid | | deploy restart\|status\|metrics [id] | Restart app / status / metrics | | deploy power-off\|power-on [id] | Power off / on | | deploy snapshot\|backup\|resize [id] | Snapshots / backups / resize | | deploy schedule [id] | Backup schedule | | deploy billing\|archive [id] | Billing / archive | | deploy archives | Instance archives |

cloud-deploy is an alias for the same portal-backed flow (cloud-deploy list|ops|archives|resume|delete).


Examples

# After: npm i -g @quan-erp/cli
quan-erp plugin watch <plugin-name>
quan-erp plugin install <plugin-name>
quan-erp plugin seed <plugin-name>
quan-erp plugin pack:prod <plugin-name>
quan-erp run dev
quan-erp login
quan-erp credit
quan-erp deploy

# Or without a global install
npx @quan-erp/cli plugin help
npx @quan-erp/cli new-project my-app
npx @quan-erp/cli plugin new
npx @quan-erp/cli plugin install <plugin-name>
npx @quan-erp/cli login
npx @quan-erp/cli credit

Platforms

| OS | Arch | |----|------| | macOS | arm64, amd64 | | Linux | amd64, arm64 | | Windows | amd64 |


Documentation

  • Quark ERP Docs — concepts, getting started, plugins, and CLI
  • Product name: Quark ERP; npm scope: @quan-erp/*; cloud brand: Myan Myan Tone Cloud

License

MIT