Installation
There are a few ways to get Praxis running. The one-liner scripts are the easiest for getting started; building from source gives you more control.
Quick Install (One-Liner)
These scripts automatically fetch the latest release and set everything up.
Docker (Recommended)
# Linux/macOS
curl -fsSL https://praxis.originhq.com/docker.sh | bash
# Windows
irm https://praxis.originhq.com/docker.ps1 | iex
This clones the latest release, builds with Docker Compose, and starts everything.
Prerequisites
RabbitMQ must be running before starting Praxis. If you're not using Docker (which includes RabbitMQ), install and start it separately:
# Linux
sudo systemctl start rabbitmq-server
# macOS (Homebrew)
brew services start rabbitmq
Arch Linux (AUR)
yay -S praxis
Or with makepkg:
git clone https://aur.archlinux.org/praxis.git
cd praxis
makepkg -si
This installs:
/usr/bin/praxis_service,/usr/bin/praxis_web,/usr/bin/praxis_cli- binaries/usr/share/praxis/nodes/praxis_node_linux- node agent for deployment to targets- Systemd system services (runs as dedicated
praxisuser) /etc/praxis/env- configuration
After installing:
sudo systemctl enable --now rabbitmq
sudo systemctl enable --now praxis
Native Install (Linux/macOS)
curl -fsSL https://praxis.originhq.com/install.sh | bash
This installs Rust if needed, builds from source, and sets up:
~/.praxis/bin/praxis_service- backend service~/.praxis/bin/praxis_web- web server + frontend~/.praxis/bin/praxis_cli- command-line interface~/.praxis/bin/nodes/<platform>/praxis_node- node agent- Systemd user services (Linux) for automatic startup
- PATH is configured automatically
Native Install (Windows)
irm https://praxis.originhq.com/install.ps1 | iex
Removing
To uninstall Praxis (stops services, removes binaries, config, and PATH entries):
# Linux/macOS
curl -fsSL https://praxis.originhq.com/install.sh | bash -s -- --remove
# Windows
irm https://praxis.originhq.com/install.ps1 | iex -- --remove
Pinning a Specific Version
To install a specific version instead of latest:
# Docker (Linux/macOS)
PRAXIS_VERSION=v0.1.0 curl -fsSL https://praxis.originhq.com/docker.sh | bash
# Native (Linux/macOS)
PRAXIS_VERSION=v0.1.0 curl -fsSL https://praxis.originhq.com/install.sh | bash
# Docker (Windows)
$env:PRAXIS_VERSION = "v0.1.0"; irm https://praxis.originhq.com/docker.ps1 | iex
# Native (Windows)
$env:PRAXIS_VERSION = "v0.1.0"; irm https://praxis.originhq.com/install.ps1 | iex
Manual Docker Setup
If you prefer to clone and run Docker manually:
git clone https://github.com/originsec/praxis.git
cd praxis
docker compose up --build
This starts:
- Praxis (service + web) on port 8080
- RabbitMQ on ports 5672 (AMQP) and 15672 (management UI)
- MCP server on port 8585 (when enabled in Settings > MCP Server)
- Claude Bridge CCRv1 on port 8586 (when enabled in Settings > Claude Bridge)
- Claude Bridge CCRv2 on port 8587 (when enabled in Settings > Claude Bridge)
Open http://localhost:8080 and you're in.
To run without the web UI (headless mode for CLI-only usage):
PRAXIS_HEADLESS=1 docker compose up --build
Getting the CLI from Docker
The CLI binary is built into the Docker image and copied to the data volume on startup. Extract it with:
docker cp $(docker compose ps -q praxis):/app/praxis_cli ./praxis_cli
chmod +x ./praxis_cli
./praxis_cli
Note: Run this from the directory containing your
docker-compose.yml. The container name varies by project directory.
To add a macOS node binary to Docker downloads, provide it explicitly (optional):
# Build macOS node binary on macOS
cargo build --release -p praxis_node
# Put it in a local directory
mkdir -p ~/.praxis/bin/nodes/macos-arm64
cp target/release/praxis_node ~/.praxis/bin/nodes/macos-arm64/praxis_node
Then mount it and enable multi-directory lookup:
# docker-compose.override.yml
services:
praxis:
environment:
PRAXIS_NODES_DIRS: /app/nodes,/app/nodes-host
volumes:
- ~/.praxis/bin/nodes:/app/nodes-host:ro
praxis-postgres:
environment:
PRAXIS_NODES_DIRS: /app/nodes,/app/nodes-host
volumes:
- ~/.praxis/bin/nodes:/app/nodes-host:ro
This keeps Linux/Windows defaults unchanged while adding macOS as an opt-in download.
The RabbitMQ management UI at http://localhost:15672 uses credentials praxis/praxis.
Useful Docker Commands
# Run in background
docker compose up -d
# View logs
docker compose logs -f
# Stop everything
docker compose down
# Rebuild after code changes
docker compose up --build
Building from Source
If you want to build natively or contribute to development:
Prerequisites
- Rust 1.75+ (install via rustup)
- Node.js 18+ (for the web frontend)
- Docker (for RabbitMQ, or install it separately)
Build Steps
# Clone the repo
git clone https://github.com/originsec/praxis.git
cd praxis
# Build everything
cargo build --release
This produces four binaries in target/release/:
praxis_service- the backend servicepraxis_web- the HTTP/WebSocket server + frontendpraxis_node- the node agentpraxis_cli- the command-line interface
Running
You'll need RabbitMQ running first:
docker run -d --name rabbitmq \
-p 5672:5672 -p 15672:15672 \
-e RABBITMQ_DEFAULT_USER=praxis \
-e RABBITMQ_DEFAULT_PASS=praxis \
rabbitmq:3-management
Then start the service and web components:
./target/release/praxis_service &
./target/release/praxis_web &
If you used the install script on Linux, the service and web components are managed via systemd user services:
# Start/stop
systemctl --user start praxis
systemctl --user stop praxis
# Check status
systemctl --user status praxis
# View logs
journalctl --user -u praxis-service
journalctl --user -u praxis-web
Praxis starts automatically on login. Edit ~/.config/praxis/env to configure the RabbitMQ URL and other environment variables.
Getting Node Binaries
Nodes need to run on target systems. You have a few options:
From the Web UI
If you're using Docker, precompiled node binaries are bundled with the image. Go to Settings → Service and download the Linux or Windows binary.
From GitHub Releases
Each tagged release publishes node binaries for Linux and Windows:
- Latest Release
praxis_node-linux-x86_64- Linux binarypraxis_node-windows-x86_64.exe- Windows binarypraxis_node-macos-arm64- macOS (Apple Silicon) binary
Building Yourself
# Linux (native)
cargo build --release -p praxis_node
# macOS (Apple Silicon, native)
cargo build --release -p praxis_node
# Windows (cross-compile from Linux)
# Requires: rustup target add x86_64-pc-windows-gnu
# Requires: mingw-w64 toolchain
cargo build --release -p praxis_node --target x86_64-pc-windows-gnu
Running Nodes
Once you have a node binary, run it on the target system:
# Linux
chmod +x praxis_node
./praxis_node
# Windows
praxis_node.exe
By default, nodes connect to RabbitMQ at localhost:5672. To connect to a remote service:
# Linux
PRAXIS_RABBITMQ_URL=amqp://praxis:praxis@your-server:5672 ./praxis_node
# Windows (PowerShell)
$env:PRAXIS_RABBITMQ_URL = "amqp://praxis:praxis@your-server:5672"
.\praxis_node.exe
Version Compatibility
Nodes must match the service version. The RabbitMQ message format can change between versions, so a v0.2 node talking to a v0.1 service might not work correctly.
If you're getting strange errors or nodes aren't showing up, check that versions match.
Next Steps
Once you have the service running and at least one node connected:
- Configure LLM providers - needed for semantic features
- Walk through the Quick Start - see the basic workflow