Running a Node#

A full PQN node requires starting up to four processes. Start them in this order.

1. Start the Router#

Using a config file:

uv run pqn start-router --config configs/config_messaging_example.toml

Or using CLI flags directly:

uv run pqn start-router --name router1 --host localhost --port 5555

The Router is required on the first machine in a node. Additional machines joining the same node do not need their own Router.

2. Start the Hardware Provider#

Using a config file:

uv run pqn start-provider --config configs/config_messaging_example.toml

Or using CLI flags:

uv run pqn start-provider \
  --name provider1 \
  --router-name router1 \
  --instruments '{"dummy1": {"import": "pqnstack.pqn.drivers.dummies.DummyInstrument", "desc": "Test", "hw_address": "1234"}}'

3. Start the Node API#

uv run fastapi run src/pqnstack/app/main.py

The API will be available at http://127.0.0.1:8000. Interactive API documentation is at http://127.0.0.1:8000/docs.

4. Start the Web Frontend (optional)#

See the Running the Frontend page for frontend setup instructions.

Two-Node Setup#

For two-node experiments (CHSH, QKD), each node runs its own full stack. Configure the follower_node_address in config.toml to point to the second node’s API address.

The frontend also needs to be configured with the second node’s address — see Running the Frontend.