Command Line Interface#

Cartography uses Typer for its CLI, providing organized help output, shell autocompletion, and contextual help based on selected modules.

Shell Autocompletion#

Install completion for your shell:

# Detect your shell and install
cartography --install-completion

# Or show the completion script to customize
cartography --show-completion

After installation, restart your shell. You can then use Tab to autocomplete:

cartography --neo4j-<TAB>
# Shows: --neo4j-uri  --neo4j-user  --neo4j-password-env-var  ...

Contextual Help#

The --help output is organized into panels by category (Core, Neo4j, AWS, Azure, etc.).

When you specify --selected-modules, only relevant options are shown:

# Show all options
cartography --help

# Show only Core, Neo4j, AWS, StatsD, and Analysis options
cartography --selected-modules aws --help

# Show options for multiple modules
cartography --selected-modules aws,github --help

This makes it easier to discover relevant options without scrolling through 100+ parameters.

Option Panels#

Options are grouped into panels:

Panel

Description

Core Options

Logging, module selection, update tag

Neo4j Connection

Database URI, credentials, connection settings

AWS Options

AWS sync configuration

Azure Options

Azure subscription and authentication

GCP Options

Google Cloud Platform settings

GitHub Options

GitHub organization sync

StatsD Metrics

Metrics collection

Analysis Options

Post-sync analysis jobs

30+ more module-specific panels

Core, Neo4j, StatsD, and Analysis panels are always shown regardless of selected modules.

Common Options#

Core#

Option

Description

-v, --verbose

Enable debug logging

-q, --quiet

Only show warnings and errors

--selected-modules

Comma-separated list of modules to sync

--update-tag

Custom update tag (default: current timestamp)

Neo4j Connection#

Option

Description

--neo4j-uri

Connection URI (default: bolt://localhost:7687)

--neo4j-user

Username

--neo4j-password-env-var

Env var containing password

--neo4j-password-prompt

Prompt for password interactively

--neo4j-database

Database name

Environment Variables#

Sensitive credentials are passed via environment variables. Options ending in -env-var specify which variable to read:

export NEO4J_PASSWORD="secret"
export GITHUB_CONFIG="base64-config"

cartography \
    --neo4j-uri bolt://localhost:7687 \
    --neo4j-user neo4j \
    --neo4j-password-env-var NEO4J_PASSWORD \
    --github-config-env-var GITHUB_CONFIG

Examples#

Sync specific AWS resources#

cartography \
    --neo4j-uri bolt://localhost:7687 \
    --selected-modules aws \
    --aws-requested-syncs ec2:instance,s3,iam

Sync multiple AWS profiles#

AWS_CONFIG_FILE=/path/to/config cartography \
    --neo4j-uri bolt://localhost:7687 \
    --aws-sync-all-profiles

Enable metrics#

cartography \
    --neo4j-uri bolt://localhost:7687 \
    --statsd-enabled \
    --statsd-host metrics.example.com

Programmatic Usage#

The CLI can be used programmatically for testing:

import cartography.cli
import cartography.sync

# Default sync
cli = cartography.cli.CLI(prog="cartography")
exit_code = cli.main(["--neo4j-uri", "bolt://localhost:7687"])

# Custom sync object
custom_sync = cartography.sync.build_default_sync()
cli = cartography.cli.CLI(sync=custom_sync)
exit_code = cli.main(["--neo4j-uri", "bolt://localhost:7687"])