Will it work on my repo?
Answered before you connect anything, including the cases where the answer is no. You should not have to spend a sign-up to find out.
- 13
- languages read today
- 20
- frameworks understood
- No cap
- on repository size
1. The short answer
Yes, if your repository is mostly one of these. Everything else maps to nothing, and says so rather than showing you an empty canvas.
- TypeScript
- JavaScript
- Python
- Go
- Ruby
- PHP
- Swift
- Kotlin
- Java
- Rust
- Vue
- Svelte
- Astro
Vue, Svelte and Astro are listed as languages rather than frameworks here because of their single-file components: a .vue file holds markup, script and style together, and reading it needs the file format itself, not just the framework around it.
If a repository has no files in any of these, the sync finishes and tells you which languages it did find, by name and file count, instead of leaving you looking at an empty map and guessing. That is the honest failure and it costs you two minutes rather than an afternoon.
2. Three levels of detail
Each one needs the one below it, and the first is the one that matters.
1. Every supported repository
needs: A language below- Every file and folder, as a place on the map
- What imports what, within and across folders
- Third-party packages, as the edge of your system
- Plain-English names for things, written for you
2. A framework it knows
needs: One of the frameworks below- Screens, with the URL each one serves
- Endpoints, with the method and the handler behind them
3. A connected database
needs: A read-only connection string you provide- Tables and their relationships, on the same canvas as the code
Screens, by framework. Reading one of these means a page in your code is shown with the address a visitor would actually type.
- Next.js
- Nuxt
- Astro
- SvelteKit
- React Router
- Vue Router
- Angular Router
- TanStack Router
- Expo Router
Endpoints, by framework. Same idea for the other direction: the route, its method, and the function that answers it.
- Express
- Fastify
- Hono
- Koa
- FastAPI
- Flask
- Django
- Go
- Rails
- Laravel
Named, not always addressed. React Navigation's screens are read too, but a screen there has a name, not a URL, unless the app configures deep linking. When it does, that config is read as well and joined to the right screen by name.
- React Navigation
A repository in a supported language that uses none of these still maps in full. You get the files, the folders and the connections, without the URLs and methods laid over them.
3. What it cannot read yet
C#, Dart, C and C++, among others.
Not a slight on any of them, and not a permanent position. Each language needs its own reader, because knowing that one file uses another means understanding how that language says so, and every language says it differently.
A repository written in one of these produces an empty map today. You will be told which languages were found rather than left to work it out, and nothing is charged or kept.
4. Why your file count looks low
Because installed dependencies and build output are not your code.
A map of your product should show what you wrote, not the forty thousand files somebody else wrote that happen to sit in your repository. These directories are skipped wherever they appear in the tree:
- node_modules
- venv
- .venv
- vendor
- site-packages
- dist
- build
- out
- target
- obj
- bin
- .next
- .turbo
- .cache
- .vercel
- .expo
- .gradle
- .dart_tool
- Pods
- coverage
- __pycache__
- .mypy_cache
- .pytest_cache
- .tox
- .git
This is the single most common surprise after a first sync, and it is usually the whole explanation for a number that looks wrong. Your own code inside a folder called build is the one case where this bites unfairly, and it is worth telling us if that is your layout.
5. Monorepos and big repositories
Both work. A monorepo becomes one map rather than several.
The whole tree is read, so every package in a monorepo lands on the same canvas and you can see across the boundaries between them, which is usually the reason a monorepo existed in the first place. Each package reads as its own territory, because that is what the folder structure says.
There is no size limit. A larger repository takes longer on its first sync, since every file is read once, and later syncs only look at what changed.
6. Private repositories
Yes, and you choose which ones on GitHub's own screen.
Access is granted through the GitHub App, for every repository or only the ones you pick, and revoked in the same place without asking us. The token is read-only and short-lived, and nothing is ever written back to your repository. Security and what cleap keeps cover the rest.
7. If yours is not supported
Tell us which language, and it moves up the list.
Language readers are the part of cleap most driven by who is asking. If your repository is mostly a language above, write to hello@cleap.dev and say which one. It is a genuinely useful signal and it is the reason the current list looks the way it does.