Import a repo
Point Canopy at a GitHub repo and it builds a first-draft map automatically - no manual diagramming. It reads only your manifest and config files (never your source) and lays out a node for each tool it finds, linked to a central repo node.
Connect GitHub
Install the Canopy GitHub App and grant the repos you want - public or private.
Scan manifests
Canopy reads package.json, requirements.txt, docker-compose, and infra configs - never your source.
Starter map
A node per detected tool, linked to a central repo node - yours to edit.
GitHub only, for now
Direct repo scanning currently supports GitHub only. GitLab, Bitbucket and other remotes are coming. In the meantime, you can map any repo by generating a canopy.json from its docs or file tree (there's a copyable AI prompt for that) and pasting it in.
How to import
GitHub access always goes through the Canopy GitHub App - required for every repo, public or private. There's no anonymous scanning: Canopy reads through a short-lived installation token you grant.
- Connect GitHub. Go to Workspace settings → Integrations → Connect GitHub (or choose Import a repo when creating a map). You'll install the Canopy GitHub App and pick exactly which repos it can access.
- Pick a repo. Choose any repo the App can see.
- Scan. Canopy reads the repo's manifests and builds a starter map - a central repo node with a node for each detected tool, edges drawn between them.
- Edit. Rename nodes, recategorize them, set spend and billing, and add or remove nodes and edges to match reality.
Public repos need the App too
Both public and private repos go through the installed GitHub App - there's no anonymous scan. Canopy only ever reads metadata and manifests, never your source, and you can revoke access anytime from GitHub → Settings → Applications → Installed GitHub Apps.
What Canopy reads
Canopy detects tools from the manifest and config files below (metadata only). Search the full, live list of what's auto-detected:
| Tool | What Canopy reads (file → match) |
|---|---|
| Algolia | package.json→algoliasearch |
| AWS | package.json→@aws-sdk/client-s3, @aws-sdk/client-dynamodb, aws-sdk requirements.txt / pyproject.toml / Pipfile→boto3 |
| Amplitude | package.json→@amplitude/analytics-browser |
| Angular | package.json→@angular/core |
| Ansible | ansible.cfg→present |
| Ant Design | package.json→antd |
| Anthropic | package.json→@anthropic-ai/sdk requirements.txt / pyproject.toml / Pipfile→anthropic |
| Apache | docker-compose.yml→image: httpd |
| Apache Airflow | requirements.txt / pyproject.toml / Pipfile→apache-airflow docker-compose.yml→image: airflow |
| Cassandra | docker-compose.yml→image: cassandra |
| CouchDB | docker-compose.yml→image: couchdb |
| Apache Kafka | package.json→kafkajs |
| Apache Spark | requirements.txt / pyproject.toml / Pipfile→pyspark |
| Apache Superset | docker-compose.yml→image: superset |
| Apollo | package.json→@apollo/client |
| Astro | package.json→astro |
| Auth0 | package.json→next-auth, @auth0/nextjs-auth0 |
| Babel | package.json→@babel/core |
| Bootstrap | package.json→bootstrap |
| Braintree | package.json→braintree |
| Caddy | docker-compose.yml→image: caddy |
| Chakra UI | package.json→@chakra-ui/react |
| CircleCI | .circleci/config.yml→present |
| Clerk | package.json→@clerk/nextjs |
| ClickHouse | package.json→@clickhouse/client requirements.txt / pyproject.toml / Pipfile→clickhouse-connect docker-compose.yml→image: clickhouse, image: clickhouse-server |
Showing 1-25 of 184 detectable tools - Canopy reads only these files, never your source.
When an import detects more tools than your plan's node cap allows, Canopy maps the first (limit − 1) and tells you how many were left out.
What it produces
A starter map, not a finished one:
- A central repo node - your repository.
- One node per detected tool, each with its real brand icon.
- Edges from the repo node out to every detected tool.
Detection is a starting point. After import you can rename and recategorize nodes, set each one's spend and billing model, and add services or edges the scan couldn't infer.
Hitting the node cap on Free?
If the repo has more tools than the Free plan's 15-node limit, Canopy maps the first 14 (leaving one slot for the repo node) and shows a toast with how many were left out. Upgrade to Pro for up to 150 nodes per map.