# Bytes Radar
[](https://github.com/zmh-program/bytes-radar/actions)
[](https://crates.io/crates/bytes-radar)
[](LICENSE)
[](https://www.rust-lang.org)
A fast code analysis tool for remote repositories with multi-platform support.
## Features
- **Asynchronous Repository Processing**: Non-blocking HTTP client with async streaming request processing for efficient remote repository fetching and decompression, optimized for **low memory usage** and **serverless environments** (always `<32MiB` runtime memory usage for large files)
- **Multi-Platform URL Resolution**: Features intelligent URL parsing engine that normalizes different Git hosting platform APIs (GitHub, GitLab, Bitbucket, Codeberg) into unified archive endpoints with branch/commit resolution
- **Streaming Archive Analysis**: Processes tar.gz archives directly in memory using streaming decompression without temporary file extraction, reducing I/O overhead and memory footprint
- **Language Detection Engine**: Implements rule-based file extension and content analysis system supporting 150+ programming languages with configurable pattern matching and statistical computation (use tokei [languages map](https://github.com/XAMPPRocky/tokei/blob/master/languages.json))
- **Real-time Progress Monitoring**: Features bandwidth-aware progress tracking with download speed calculation, ETA estimation, and adaptive UI rendering for terminal environments
- **Structured Data Serialization**: Provides multiple output format engines (Table, JSON, CSV, XML) with schema validation and type-safe serialization for integration with external tools
- **Authentication Layer**: Implements OAuth token management with secure credential handling for accessing private repositories across different hosting platforms
- **Cross-Platform Binary Distribution**: Supports native compilation targets for Linux, macOS, and Windows with platform-specific optimizations and dependency management
- **WebAssembly Support**: Run bytes-radar directly in browsers or WASI environments with full feature parity
## Installation
### From Cargo (Recommended)
```bash
cargo install bytes-radar
```
### From npm (WASM)
```bash
npm install bytes-radar-wasm
```
### From Releases
Download the latest binary from [GitHub Releases](https://github.com/zmh-program/bytes-radar/releases)
### From Source
```bash
git clone https://github.com/zmh-program/bytes-radar.git
cd bytes-radar
cargo build --release
# For WASM build
wasm-pack build --target web --features wasm
```
## Usage
```bash
bytes-radar [OPTIONS] <URL>
```
### Examples
#### Basic Repository Analysis
Analyze GitHub repositories using shorthand notation:
```bash
bytes-radar torvalds/linux
bytes-radar microsoft/typescript
bytes-radar rust-lang/cargo
```
#### Branch and Commit Targeting
Specify particular branches or commit hashes for analysis:
```bash
bytes-radar microsoft/vscode@main
bytes-radar kubernetes/kubernetes@release-1.28
bytes-radar rust-lang/rust@abc1234567
```
#### Multi-Platform Repository Support
Analyze repositories from different Git hosting platforms:
```bash
bytes-radar https://gitlab.com/gitlab-org/gitlab
bytes-radar https://bitbucket.org/atlassian/stash
bytes-radar https://codeberg.org/forgejo/forgejo
```
#### Output Format Configuration
Generate analysis results in structured data formats:
```bash
bytes-radar -f json torvalds/linux
bytes-radar -f csv microsoft/typescript
bytes-radar -f xml rust-lang/cargo
```
#### Private Repository Access
Authenticate with platform tokens for private repository analysis:
```bash
bytes-radar --token ghp_xxxxxxxxxxxxxxxxxxxx private-org/confidential-repo
bytes-radar --token glpat-xxxxxxxxxxxxxxxxxxxx https://gitlab.com/private-group/project
```
#### Performance and Output Control
Configure analysis behavior and output verbosity:
```bash
bytes-radar --quiet --no-progress user/repo
bytes-radar --timeout 600 --detailed large-org/massive-repo
```
## Usage Environments
### CLI
See the CLI Options section below for command-line usage.
### WebAssembly
bytes-radar can be used in both browser and WASI environments. For detailed WASM usage instructions and API reference, see [WASM Documentation](docs/wasm.md).
#### Browser Example
```javascript
import init, { analyze_repository } from 'bytes-radar';
async function main() {
await init();
const result = await analyze_repository('torvalds/linux');
console.log(result);
}
```
#### WASI Example
```javascript
import { WASI } from '@wasmer/wasi';
const wasi = new WASI({
args: ['bytes-radar', 'torvalds/linux']
});
const instance = await WebAssembly.instantiate(
await WebAssembly.compile(
await fs.readFile('bytes-radar.wasm')
),
{ wasi_snapshot_preview1: wasi.wasiImport }
);
wasi.start(instance);
```
## Output Formats
### Table (Default)
```shell
$ bytes-radar torvalds/linux
Analyzing: https://github.com/torvalds/linux
Analysis completed in 123.76s
================================================================================
Project linux@main
Total Files 89,639
Total Lines 40,876,027
Code Lines 32,848,710
Comment Lines 2,877,885
Blank Lines 5,149,432
Languages 51
Primary Language C
Code Ratio 80.4%
Documentation 8.8%
================================================================================
Language Files Lines Code Comments Blanks Share%
================================================================================
C 35,586 25,268,107 18,782,347 2,836,806 3,648,954 61.8%
C Header 25,845 10,247,647 9,481,722 0 765,925 25.1%
Device Tree 5,789 1,831,396 1,589,630 0 241,766 4.5%
ReStructuredText 3,785 782,387 593,628 0 188,759 1.9%
JSON 961 572,657 572,655 0 2 1.4%
Text 5,100 566,733 499,590 0 67,143 1.4%
YAML 4,862 548,408 458,948 0 89,460 1.3%
GNU Style Assembly 1,343 373,956 326,745 0 47,211 0.9%
Shell 960 189,965 155,974 0 33,991 0.5%
Plain Text 1,298 128,205 105,235 0 22,970 0.3%
Python 293 89,285 69,449 5,770 14,066 0.2%
Makefile 3,115 82,692 57,091 13,109 12,492 0.2%
SVG 82 53,409 53,316 0 93 0.1%
Perl 58 43,986 33,264 4,406 6,316 0.1%
Rust 158 39,561 19,032 16,697 3,832 0.1%
XML 24 22,193 20,971 0 1,222 0.1%
PO File 7 6,711 5,605 0 1,106 0.0%
Happy 10 6,078 5,352 0 726 0.0%
Assembly 11 5,361 4,427 0 934 0.0%
Lex 10 2,996 2,277 347 372 0.0%
AWK 12 2,611 1,777 487 347 0.0%
C++ 7 2,267 1,932 0 335 0.0%
Forge Config 15 1,352 1,065 0 287 0.0%
Bazel 78 1,303 1,097 21 185 0.0%
Jinja2 141 1,107 902 137 68 0.0%
Unreal Script 5 672 574 0 98 0.0%
ASN.1 15 656 528 0 128 0.0%
Markdown 3 578 436 0 142 0.0%
LD Script 13 551 466 0 85 0.0%
Autoconf 6 449 387 29 33 0.0%
Gherkin (Cucumber) 1 330 293 0 37 0.0%
CSS 3 295 241 0 54 0.0%
SWIG 1 252 181 0 71 0.0%
TeX 1 234 228 0 6 0.0%
Alex 2 222 180 0 42 0.0%
XSL 10 200 122 52 26 0.0%
RPM Specfile 1 174 152 0 22 0.0%
HEX 2 173 173 0 0 0.0%
Module-Definition 2 157 137 0 20 0.0%
Snakemake 4 143 114 15 14 0.0%
Pacman's makepkg 1 131 102 0 29 0.0%
C++ Header 2 125 106 0 19 0.0%
Objective-C 1 89 72 0 17 0.0%
TOML 3 47 40 0 7 0.0%
Vim Script 1 42 39 0 3 0.0%
HTML 2 33 30 0 3 0.0%
Automake 3 31 23 3 5 0.0%
Ruby 1 29 25 0 4 0.0%
Apache Velocity 1 15 15 0 0 0.0%
INI 2 13 11 0 2 0.0%
Bitbake 3 13 4 6 3 0.0%
================================================================================
Total 89,639 40,876,027 32,848,710 2,877,885 5,149,432 100.0%
```
### JSON Output
```json
{
"project_name": "linux@master",
"summary": {
"total_files": 75823,
"total_lines": 28691744,
"code_lines": 22453891,
"comment_lines": 3891234,
"blank_lines": 2346619
},
"language_statistics": [...]
}
```
## Supported Platforms
| **GitHub** | `user/repo` or full URL | `torvalds/linux` |
| **GitLab** | Full URL | `https://gitlab.com/user/repo` |
| **Bitbucket** | Full URL | `https://bitbucket.org/user/repo` |
| **Codeberg** | Full URL | `https://codeberg.org/user/repo` |
| **Direct** | tar.gz URL | `https://example.com/file.tar.gz` |
## CLI Options
```bash
bytes-radar [OPTIONS] <URL>
ARGUMENTS:
<URL> URL to analyze: user/repo, user/repo@branch, or full URL
OPTIONS:
-f, --format <FORMAT> Output format [table|json|csv|xml]
--detailed Show detailed file-by-file statistics
-d, --debug Enable debug output
--token <TOKEN> GitHub token for private repositories
--timeout <SECONDS> Request timeout in seconds [default: 300]
--allow-insecure Allow insecure HTTP connections
--no-progress Disable progress bar
--quiet Quiet mode - minimal output
-h, --help Print help
-V, --version Print version
```
## Contributing
We welcome contributions! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
### Development Setup
```bash
# Clone the repository
git clone https://github.com/zmh-program/bytes-radar.git
cd bytes-radar
# Install dependencies
cargo build
# Run tests
cargo test --all-features
# Format code
cargo fmt
# Lint code
cargo clippy --all-targets --all-features
```