Use the command line
Putki Tools answers the same questions as the dashboard, and more, from a terminal. It runs from
the same image as the sync job, forge.putki.io/putki/putki-tools:<version> with the version in
the bundle's VERSION file:
docker run --rm --network putki-impact \
-e PUTKI_GRAPH_BACKEND=age \
-e PUTKI_GRAPH_JDBC_URL=jdbc:postgresql://graph-db:5432/project_graph \
-e PUTKI_GRAPH_USER=graph -e PUTKI_GRAPH_PASSWORD="$GRAPH_DB_PASSWORD" \
forge.putki.io/putki/putki-tools:2026.12.0 \
project-graph impact --name sales --thing 'Sakila DWH/dwh.dim_customer'
| Command | Answers |
|---|---|
project-graph summary | What the project holds |
project-graph what-uses --thing <key> | What reads, writes or calls a table, file, connection or pipeline |
project-graph impact --thing <key> [--column <name>] | What a change can reach, down the chain, with columns and SQL files |
project-graph usage --type <plugin id> | Where a transform or action type is used |
project-graph broken | Calls to missing files, undefined connections, files that cannot be read |
project-graph runs --thing <key> | The last runs of what a change reaches, from Hop's execution information in Neo4j |
runs needs Hop's execution information in Neo4j (see
Execution information): pass its address with
--executions-uri. Give --run-folder with the folder the project runs from, so runs of another
project with a file of the same name are not mixed in.
Every command prints JSON.
Neo4j instead of AGE
The graph can also live in Neo4j or Memgraph (PUTKI_GRAPH_BACKEND=neo4j, PUTKI_GRAPH_URI).
Use an instance of its own, not the one that holds Hop's execution information: Hop's logging
merges its own Pipeline and Workflow nodes by name, and would match the graph's.