Change language
Get Started

Install

One binary. Every runtime.

CLI, TUI, HTTP server, web dashboard and MCP endpoint ship in a single binary. Install with one command, build from source with Cargo, or run it in Docker — pick your path.

install.sh

One-line installer. Builds the release binary, installs it to /usr/local/bin (or $PREFIX/bin), creates the default config directory — and optionally installs the systemd service unit with INSTALL_SYSTEMD=1.

curl -sSf https://parallel.research/install.sh | sh

# also install + enable the systemd unit
curl -sSf https://parallel.research/install.sh | INSTALL_SYSTEMD=1 sh
Cargo

Build from source with the Rust toolchain. Release builds are compiled with LTO and stripped — a slim, self-contained binary.

cargo install --path .

# or build directly
cargo build --release
./target/release/parallel-research --help
Docker

Multi-stage image: rust:1.82-bookworm builder → debian:bookworm-slim runtime. Runs as a non-root user; output and databases live in /data.

docker build -t parallel-research .

docker run -it --rm \
  -e PARALLEL_LLM_API_KEY="sk-..." \
  -v research-data:/data \
  parallel-research run "your query" --output /data/results/
docker-compose

Publishes port 8080 with restart policy and named volumes: research-data for output, contacts and memory databases, research-config for config.toml.

docker compose up -d

# volumes:
#   research-data    → /data (results, contacts.db, memory.db, jobs)
#   research-config  → config.toml (LLM key, agent settings)

Linux service

Run it under systemd

The unit starts parallel-research serve on port 8080 with Restart=on-failure and a hardening sandbox: NoNewPrivileges, PrivateTmp, ProtectSystem=full, ProtectHome=read-only — writes are restricted to /var/lib/parallel-research.

sudo cp parallel-research.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now parallel-research

# status and live logs
systemctl status parallel-research
journalctl -u parallel-research -f

Optional dependencies

Nothing required, everything upgradeable

The binary works standalone. These tools unlock extra capabilities — each one is detected automatically at runtime, and every absence has a graceful fallback.

ToolWhat it enables
pandocPDF and DOCX report export (HTML / JSON export always works)
ripgrepspeeds up the grep tool; built-in fallback when absent
python3 / nodeREPL and code-execution tools
Chrome + CDP5 browser tools; auto-detected via PARALLEL_CDP_ENDPOINT
# macOS
brew install pandoc ripgrep

# Debian / Ubuntu
sudo apt install pandoc ripgrep

# Chrome with a CDP endpoint for the browser tools
google-chrome --remote-debugging-port=9222 --headless

Requirements

Small footprint, no surprises

Rust 1.82 · edition 2021macOS / Linux · Windows via WSLSQLite bundled (WAL)PostgreSQL optional · tokio-postgressingle static binary

Environment

Env vars reference

Environment variables override config-file values. API keys for external services are only ever read from the environment or your local config.

VariablePurpose
PARALLEL_RESEARCH_API_KEYSComma-separated keys protecting /api/v1/*. Required when serve binds to a non-loopback address.
PARALLEL_RESEARCH_RATE_LIMITPer-client HTTP API requests per minute (default: 120).
PARALLEL_CDP_ENDPOINTChrome DevTools Protocol endpoint for the browser tools (default: localhost:9222).
PARALLEL_VISION_API_KEYAPI key for the vision model used on screenshots and images.
PARALLEL_VISION_MODELVision model identifier.
PARALLEL_2GIS_API_KEY2GIS Catalog API key for business-directory search.
PARALLEL_GOOGLE_PLACES_API_KEYGoogle Places API key for business-directory search.
PARALLEL_YANDEX_MAPS_API_KEYYandex Maps API key for business-directory search.
PARALLEL_TWITTER_BEARER_TOKENX (Twitter) bearer token for the social-search tool.
PR_CONFIGConfig file path override (default: ~/.parallel-research/config.toml).
PR_MEMORY_DBSemantic memory SQLite database path override.
PR_JOBS_DBDurable jobs SQLite database path override.
RUST_LOGLog level filter (default: info).

Verify

Check the installation

bench exercises the tool-execution layer with zero network and zero LLM calls — a safe smoke test on any machine. Then start the server or the TUI.

parallel-research bench     # tool layer — no network, no LLM
parallel-research serve     # HTTP API + dashboard on :8080
parallel-research tui       # interactive terminal UI

curl http://localhost:8080/health

Installed? Run your first research.

Configure the LLM key, pick a search backend and launch a session in under five minutes.