A GPLv3-only CLI that profiles codebases and generates a deterministic DNA signature.
Project description
RepoDNA
Created by Magnexis.
RepoDNA is GPLv3-only software.
RepoDNA is a terminal-first Python CLI that scans a codebase and turns it into a deterministic "DNA profile" you can read at a glance.
It is designed to answer questions like:
- What languages dominate this repo?
- Is this a frontend app, API, package, or monorepo?
- How complex is the structure really?
- What is the short fingerprint for this project?
- How similar are two codebases?
What It Does
RepoDNA scans a project directory and extracts:
- language mix
- file types
- folder patterns
- package manifests
- config files
- framework and stack signals
- route-like files
- monorepo hints
- complexity signals
- hotspots and findings
It then renders a concise report in the terminal and can export the full profile as JSON.
Core Commands
repodna init .- create a starterrepodna.tomlrepodna scan .- generate a profile reportrepodna compare ./a ./b- compare two projectsrepodna export report.json- export the latest scan profilerepodna watch .- live rescan while files changerepodna explain .- explain the detected classificationrepodna doctor- verify the installation and workspace healthrepodna validate profile.json- validate a saved RepoDNA exportrepodna --theme ocean scan .- switch the CLI theme on the fly
Install
pip install .
For local release packaging:
python -m flit build
RepoDNA installs a console script named repodna.
If you want to run from the repository without installing first:
python scripts/repodna.py --help
Entry Points
RepoDNA supports two practical ways to launch the CLI:
repodna --help
python -m repodna --help
The repo also includes:
scripts/repodna.py
That launcher is useful during development when you want a direct repo-local entrypoint.
Configuration
Run this to create a starting config file:
repodna init .
That creates repodna.toml with sensible defaults for ignore rules and scan limits.
Example configuration:
[scan]
ignore = [
"node_modules",
"dist",
"build",
".next",
"coverage",
]
include_hidden = false
max_depth = 12
max_file_size_bytes = 250000
max_files = 5000
top_n = 5
sample_lines = 5
[report]
title = "RepoDNA profile"
[ui]
theme = "midnight"
[hardening]
recommendations = [
"Keep manifests and lockfiles committed intentionally.",
"Exclude generated build outputs and cache directories.",
]
RepoDNA will also look for config and ignore files in parent directories, so you can run scans from nested folders without losing the repo-level rules.
You can change the terminal look with --theme on the CLI or by setting [ui] theme in repodna.toml.
Available themes:
midnightauroraemberocean
Output Overview
The main scan report is intentionally structured for terminal readability:
- snapshot panel
- language table
- architecture table
- complexity summary
- findings panel
- hotspots panel
- recommendations panel
The report is rendered with rich, so it stays readable even in narrow terminals.
UI Preview Gallery
Below are real CLI previews from this project.
Actual Screenshots
These images were generated from the live CLI output in this repository.
Compare Mode
RepoDNA can compare two projects and summarize:
- shared traits
- differences
- architecture overlap
- complexity gap
- package manager differences
- dominant language differences
Example:
repodna compare ./project-a ./project-b
What the DNA Signature Means
The DNA signature is a compact fingerprint built from the strongest detected traits.
Examples:
NEXT-TS-TAILWIND-SUPABASE-MEDIUMPYTHON-CLI-TYPER-PACKAGE-LIGHTCLI-TOOL-PYTHON-TOML-CLI-LIGHT
The intent is to make it easy to compare repos without reading the full report.
Hardening Notes
RepoDNA includes guardrails that make it safer to use on real repositories:
.gitignoresupport- ancestor config detection
- hidden-file toggles
- file size limits
- depth limits
- max file caps
- JSON export and validation
- health checks for packaging and launcher setup
The scanner is heuristic-based and intentionally deterministic.
Development
Useful commands while iterating locally:
python -m unittest discover -s tests -v
python -m repodna --no-brand doctor
python -m repodna --no-brand scan . --compact
python -m repodna --no-brand watch . --max-cycles 1 --compact
Project Layout
src/repodna/
cli.py
compare.py
config.py
models.py
reporting.py
scanner.py
assets/magnexis-logo.png
scripts/repodna.py
tests/test_repodna.py
Notes
- Version 1 is heuristic-based and does not use AI.
- The Magnexis splash banner is optional via
--no-brand. - The CLI theme can be changed with
--themeor[ui] themein config. repodna watch .is available for live rescans while you edit a codebase.- The project uses Flit for packaging and ships as a standard Python CLI.
- RepoDNA is licensed under GPL-3.0-only. See
LICENSEfor the full notice.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file repodna-0.1.0.tar.gz.
File metadata
- Download URL: repodna-0.1.0.tar.gz
- Upload date:
- Size: 33.8 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.34.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fdf3e7ee86771d9342137094bed18f27c4abd07655af0c1493612410b9cae11a
|
|
| MD5 |
acd55ea53f498662c7cb5aef5da9a160
|
|
| BLAKE2b-256 |
533890792614acd27a4e7a06e9dcc6c79a821427dcf09371a1be2a9ab9772a05
|
File details
Details for the file repodna-0.1.0-py3-none-any.whl.
File metadata
- Download URL: repodna-0.1.0-py3-none-any.whl
- Upload date:
- Size: 120.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-requests/2.34.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d7d13b71e9474baebafecc8ac5b9da9052fa55d16b28db04579e2047c3b8de7
|
|
| MD5 |
8690088c8c025326b5daf1fbafeee62a
|
|
| BLAKE2b-256 |
cc80a4cfd4e10eefdf72d354daf88db526de9c1109629b8083ffc8503f92ee98
|