Skip to main content
Version: 0.15 (unstable)

Operators

This page covers running a note transport node.

Build from source

From the repository root:

cargo install --path bin/node --locked

This installs the miden-note-transport-node-bin binary.

Run the node

The default configuration binds to localhost and stores notes in an in-memory SQLite database:

miden-note-transport-node-bin

For a reachable node with persistent storage:

miden-note-transport-node-bin \
--host 0.0.0.0 \
--port 57292 \
--database-url /var/lib/miden-note-transport/node.db \
--retention-days 30

CLI flags

FlagDefaultDescription
--host127.0.0.1Address to bind to.
--port57292gRPC port.
--database-url:memory:SQLite database URL or file path. Use a file path for persistence.
--retention-days30How long to retain notes before cleanup.
--max-note-size512000Maximum note details size in bytes.
--max-connections4096Maximum concurrent gRPC connections.
--request-timeout4Per-request timeout in seconds.

The CLI flags above are parsed as command-line arguments. They are not currently read from DATABASE_URL or similarly named environment variables.

Telemetry and logging

Telemetry is configured through environment variables:

VariableDefaultDescription
OTEL_ENABLEDfalseEnables OpenTelemetry export when set to true.
OTEL_TRACES_ENDPOINThttp://localhost:4317OTLP endpoint for trace and metric export.
JSON_LOGGINGfalseEmits JSON logs when set to true.
RUST_LOGINFOStandard Rust tracing filter.

Example:

OTEL_ENABLED=true \
OTEL_TRACES_ENDPOINT=http://otel-collector:4317 \
JSON_LOGGING=true \
RUST_LOG=INFO \
miden-note-transport-node-bin --host 0.0.0.0 --database-url /var/lib/miden-note-transport/node.db

Docker Compose

The repository includes a Docker Compose setup for the node plus telemetry services:

make docker-node-up

This starts:

  • note transport node;
  • OpenTelemetry Collector;
  • Tempo;
  • Prometheus;
  • Grafana.

Use:

make docker-node-down

to stop the stack.

The Compose node service passes --database-url /app/data/node.db and mounts /app/data on the node_data volume, so note storage survives container restarts.

Ports

PortService
57292Note transport gRPC API.
4317OTLP gRPC receiver in the collector.
4318OTLP HTTP receiver in the collector.
3000Grafana.
9090Prometheus.
3200Tempo.

The note transport node exposes gRPC health through the same gRPC server, not a separate HTTP health port.

Database behavior

Use a file-backed SQLite path for production-like deployments. The default :memory: database is useful for local testing but loses all notes on restart.

The node runs embedded migrations at startup. The current schema stores note IDs with a uniqueness constraint and uses a monotonic seq column for pagination.

Operational cautions

  • Treat debug logs as sensitive. Note IDs and tags can be correlated with user activity.
  • Configure a retention period that matches the expected offline window for your users.
  • Monitor request errors. Duplicate note IDs or invalid note headers are rejected.
  • Use FetchNotes for durable catch-up. Streaming is best used as a live update channel after a fetch cycle.