Getting Started

Volley is a small Node server and some plain HTML/JS/CSS — clone it, run one command, and you have a full-featured local HTTP client.

Running it

Volley needs its local server — it's what reads/writes data/ and proxies outbound requests.

node server.js

Then open http://localhost:5874. No npm install, no dependencies — server.js only uses Node's standard library.

Install via npm

Prefer not to clone the repo? It's also published on npm:

npx @michaelyagi/volley
npx runs it from a temporary cache, so pass --data-dir=<path> (see below) to keep your collections in a permanent folder across runs — otherwise a fresh npx invocation may start from an empty data/.

Options

Use a different port — pass --port=<port> or set the PORT env var:

node server.js --port=3000

Sharing data/ (local-network sync)

By default Volley reads/writes data/ next to server.js. Pass --data-dir=<path> (or set VOLLEY_DATA_DIR) to point it at a different folder — e.g. a Dropbox/Google Drive folder, a network share, or a separate git repo — so multiple machines or teammates can work from the same collections, environments, and history:

node server.js --data-dir=/path/to/shared/volley-data

There's no real-time sync or accounts — it's the same wipe-and-rewrite-on-save model described in Data Storage, just pointed at a folder that something else (Dropbox, a sync tool, git) keeps in sync between machines. Avoid running two instances against the same data/ at the same time, since the last save wins.

Project structure

volley/
├── server.js               — stdlib-only Node server: static files + API endpoints
├── cli.js                  — headless Collection Runner (CI/CD)
├── lib/
│   └── headless-runner.js  — shared headless-run core, used by cli.js and Monitors
├── data/                   — gitignored; your collections, environments, history
├── config/                 — gitignored; server-side config (git.json, logs.json)
├── volley-sync/             — gitignored; local git clone managed by Git Sync
├── index.html              — markup only, no inline JS or CSS
├── css/                    — base, themes, sidebar, request, response, modals
└── js/                     — one file per concern; state.js loads first, app.js boots last

All JS files share the global scope and load in order — there are no modules, no bundler. See Testing & Development for the no-build-step philosophy.