oxide-sloc
oxide-sloc is a Rust-based local code analysis tool — IEEE 1045-1992 SLOC analysis, unit test detection, and coverage reporting.
Quick Start
On Windows with no Git Bash, use the native-PowerShell installer instead — it needs no bash (see Windows without Git Bash):
powershell -ExecutionPolicy Bypass -File scripts\internal\install.ps1
.\oxide-sloc.exe serve
| Platform | What happens |
|---|---|
| Windows 10/11 (Git Bash) | bash scripts/run.sh — extracts the pre-built binary from dist/, or builds offline |
| Windows 10/11 (no Git Bash) | powershell -File scripts\internal\install.ps1 — native, no bash; extracts dist/ or builds fully offline (needs a MinGW linker) |
| Linux — Rust installed | Builds offline from the committed vendor.tar.gz.* parts |
| Linux — no Rust, toolchain committed | Bootstraps Rust from toolchain/ archives, builds offline |
| Linux — online | bash scripts/internal/install.sh --online downloads the release binary |
| Air-gapped | See docs/airgap.md |
Features
- CLI + web UI —
analyze / report / diff / serve / send / initcommands; guided 4-step web flow with Quick Scan - IEEE 1045-1992 physical SLOC — configurable mixed-line, continuation-line, compiler-directive, and blank-in-comment policies; symbol counting (functions, classes, variables, imports)
- Deep metrics — COCOMO I effort/cost estimate, approximate cyclomatic complexity (branch-keyword count), ULOC / DRYness, and duplicate-file detection on every run
- Git Hotspots — ranks refactor candidates by
code lines × commit activityover a configurable window (90 days by default); per-file commit counts and last-changed dates from a singlegit logpass - Code Ownership — per-author line attribution via
git blame; contributor leaderboard, per-author file drill-down, hotspot ownership, and.mailmapidentity merge/export; on by default - Test Metrics — lexical test function detection across 60 languages; test-to-code density; multi-format coverage import (LCOV, Cobertura XML, JaCoCo XML, coverage.py JSON, Istanbul/NYC JSON)
- Flexible output — HTML reports, PDF, CSV, and 4-sheet Excel export; re-render any saved JSON
- Git integration — branch/tag/commit browser (remote URLs and local checkouts), recursive submodule scanning, GitHub/GitLab/Bitbucket webhooks and polling, submodule breakdown
- CI/CD — GitHub Actions, Jenkins, GitLab CI; native Jira + Bitbucket + Confluence publishing; JSON metrics API, SVG badge endpoint, embeddable widget, SMTP/webhook delivery
- Offline-first — vendored deps, Chart.js compiled in, no CDN calls; Docker on GHCR; LAN server mode with API key auth and optional TLS
Why oxide-sloc vs cloc / tokei / scc / UCC?
| Capability | oxide-sloc | cloc | tokei | scc | UCC |
|---|---|---|---|---|---|
| Languages | 60 | 250+ | 240+ | 240+ | ~30 |
| Web UI + HTML/PDF reports | ✓ | — | — | — | — |
| MCP server (AI agent tools) | ✓ | — | — | — | — |
| Test function detection | ✓ | — | — | — | — |
| Trend / history tracking | ✓ | — | — | — | — |
| Coverage file import | ✓ | — | — | — | — |
| Git Hotspots (churn × size) | ✓ | — | — | — | — |
| Code ownership (git-blame attribution) | ✓ | — | — | — | — |
| COCOMO + complexity¹ + DRYness | ✓ | — | — | ✓ | partial |
| IEEE 1045-1992 compliance | ✓ | partial | — | — | partial |
| REST API + SVG badge | ✓ | — | — | — | — |
| Git webhook integration | ✓ | — | — | — | — |
| CI/CD marketplace action | ✓ | — | — | — | — |
| Offline / air-gapped build | ✓ | — | — | — | — |
¹ Complexity is a lexical approximation — a sum of branch/decision keywords (if, for, while, ||, &&, …) per code line, not a control-flow-graph McCabe computation.
cloc, tokei, and scc win on raw language count and throughput for pure line-counting pipelines; UCC (USC's Unified Code Count) brings rigorous physical/logical SLOC counting, cyclomatic complexity, and two-baseline differencing from an academic lineage. oxide-sloc is the right choice when you need analysis depth, visual reports, history, or AI-native integration — particularly as an MCP tool callable by Claude, Copilot, and other agents.
Screenshots

| View Reports | Scan Delta |
|---|---|
![]() |
![]() |
| Trend Reports | Test Metrics |
![]() |
![]() |
| PDF Report | Excel Export |
![]() |
![]() |

Installation
Package managers
| Manager | Command | Platform |
|---|---|---|
| winget | winget install NimaShafie.OxideSLOC |
Windows |
| Chocolatey | choco install oxide-sloc |
Windows |
| Scoop | scoop bucket add oxide-sloc https://github.com/oxide-sloc/scoop-oxide-sloc && scoop install oxide-sloc |
Windows |
| Homebrew | brew tap oxide-sloc/oxide-sloc && brew install oxide-sloc |
macOS / Linux |
| Nix | nix run github:oxide-sloc/oxide-sloc |
Linux / macOS |
| cargo | cargo install oxide-sloc --locked |
Any |
| DEB / RPM | Download from Releases | Ubuntu / RHEL |
Docker
# CLI via Docker
Set SLOC_API_KEY, SLOC_ALLOWED_ROOTS, and SLOC_TLS_CERT/SLOC_TLS_KEY as needed. See docs/server-deployment.md.
Windows without Git Bash
The bash launchers (run.sh / install.sh) need Git Bash. On a locked-down or
air-gapped Windows host where you cannot install Git for Windows,
use the native-PowerShell installer — it reproduces the full offline flow
(checksum-verify → reassemble split parts → extract with the built-in tar.exe →
bootstrap the bundled toolchain → cargo build --release --offline) using only tools
that ship with Windows 10/11:
powershell -ExecutionPolicy Bypass -File scripts\internal\install.ps1
# flags: -Rebuild (fresh compile), -Build (compile even if dist\ exists),
# -MingwBin <dir>, -SkipDist
If a pre-built binary is committed in dist\, it is extracted and no build runs. For a
source build, the one requirement PowerShell cannot supply is a C linker: the bundled
toolchain targets x86_64-pc-windows-gnu, which links with MinGW gcc/ld. The
installer auto-locates it from a PortableGit folder (a no-install extract),
-MingwBin <dir>, $env:SLOC_MINGW_BIN, or a gcc already on PATH:
# Stage a portable Git Bash once (no installer) — provides both the
# bash.exe for CI and the mingw64\bin linker for the native build:
powershell -ExecutionPolicy Bypass -File ci\jenkins\stage-portable-git.ps1 PortableGit-2.47.0-64-bit.7z.exe
$env:SLOC_PORTABLE_GIT = 'C:\Tools\PortableGit' # only if staged outside the workspace
For running the Jenkins pipeline on a Windows agent without a system Git install, see
the Windows-agents section of docs/ci-integrations.md.
Usage
CLI
# Analyze — common forms
# Other commands
Run oxide-sloc <command> --help for the full flag list.
Web UI
A guided 4-step flow: select project → counting rules → outputs → review & run. Quick Scan submits from step 1 with all defaults. Reports include a ranked Git Hotspots table (when run against a git repo) alongside the SLOC, complexity, and COCOMO breakdowns.
Additional pages: Test Metrics (/test-metrics), Trend Reports (/trend-reports), Compare Scans (/compare-scans), Code Ownership (/code-ownership) for per-author blame attribution and the contributor leaderboard, Integrations (/integrations) for webhook and Jira/Bitbucket/Confluence setup, and the Git Browser (/git-browser) for scanning any branch, tag, or commit — from a remote URL or a local checkout, with recursive submodule support.
Configuration
IEEE 1045-1992 counting parameters — mixed_line_policy, continuation_line_policy, blank_in_block_comment_policy, count_compiler_directives — are configurable via TOML or CLI flags. CLI flags always override config file values.
Supported Languages (60)
Ada, Assembly, Awk, C, C++, C#, Clojure, CMake, Crystal, CSS, D, Dart, Dockerfile, Elixir, Elm, Erlang, F#, Fortran, GLSL/HLSL, Go, GraphQL, Groovy, Haskell, HCL/Terraform, HTML, Java, JavaScript, Julia, Kotlin, Lisp/Scheme, Lua, Makefile, Nim, Nix, Objective-C, OCaml, Pascal/Delphi, Perl, PHP, PowerShell, Protocol Buffers, Python, R, Ruby, Rust, Scala, SCSS/Sass, Shell, Solidity, SQL, Svelte, Swift, Tcl, TypeScript, Verilog/SystemVerilog, VHDL, Visual Basic, Vue, XML/SVG, Zig.
TOML, Markdown, and YAML are intentionally not supported — no meaningful SLOC metric applies.
Metrics API
| Endpoint | Description |
|---|---|
GET /api/metrics/latest |
Metrics for the most recent scan |
GET /api/metrics/:run_id |
Metrics for a specific run |
GET /api/project-history?path=<dir> |
Scan history for a project root |
GET /badge/:metric |
SVG badge (code-lines, files, comment-lines, blank-lines) |
GET /embed/summary |
Embeddable HTML widget |
GET /healthz |
Plain-text liveness probe (ok) |
GET /readyz |
Readiness probe (200 ready / 503 when the registry or output dir is not writable) |
GET /api/health |
Structured health JSON (status, version, git SHA, build time, uptime, dependency checks) |
GET /api/version |
Version + build provenance (git short SHA, RFC-3339 build time) |
Full OpenAPI 3.1 spec: GET /api/openapi.yaml or docs/openapi.yaml.

CI/CD
| Platform | File |
|---|---|
| GitHub Actions | ci/sloc-github-action.yml — copy to .github/workflows/ |
| GitHub Marketplace | uses: NimaShafie/oxide-sloc@main (see action.yml) |
| Jenkins | testing/examples/jenkins/Jenkinsfile |
| GitLab CI | ci/sloc-gitlab.yml — include via include: |
| Bitbucket Pipelines | testing/examples/bitbucket/bitbucket-pipelines.yml |
| Azure Pipelines | testing/examples/azure/azure-pipelines.yml |
Marketplace action:
- uses: NimaShafie/oxide-sloc@main
id: sloc
with:
path: .
html-out: sloc-out/report.html
- run: echo "Code lines ${{ steps.sloc.outputs.code-lines }}"
For Jenkins/GitLab setup, native Jira / Bitbucket / Confluence publishing, and artifact repository integration, see docs/ci-integrations.md.
To scan repositories hosted on different git instances than the tool/pipeline (e.g. tooling on bitbucket.instance1.com, code on bitbucket.instance2.com) — with per-host credentials, corporate proxy/VLAN support, and air-gapped offline import — across local, server, and Jenkins modes, see docs/multi-instance.md.
Editor & Build Integrations
Run oxide-sloc reports without leaving your editor or build:
| Integration | Location | What it does |
|---|---|---|
| VS Code extension | oxide-sloc-vscode | Analyze the workspace or a file, view HTML reports, and see a live code-line count in the status bar. |
| Visual Studio extension | oxide-sloc-visual-studio | VS 2022 VSIX: analyze the solution or a selected item, a metrics tool window, and HTML report/web UI commands. |
| CMake module | cmake/OxideSloc.cmake |
include(OxideSloc) + oxide_sloc_add_report(...) adds a report target with exit-code build gating. |
| CMake example | examples/cmake/ |
A runnable sample project wiring the module in. |
See docs/ide-integrations.md for setup, settings, and the exit-code table.
LAN Server
See docs/server-deployment.md for persistent deployments, TLS, and firewall configuration.
Development
Repository Layout
crates/
sloc-cli/ # CLI entry point and commands (binary: oxide-sloc)
sloc-config/ # Config schema and TOML parsing
sloc-core/ # File discovery, decoding, aggregation, delta engine, COCOMO/hotspots
sloc-git/ # Git CLI wrappers, webhook parsing, scan-schedule store
sloc-languages/ # Language detection, lexical analyzers, symbol counting
sloc-report/ # HTML rendering, PDF/CSV/Excel export
sloc-web/ # Axum web server, metrics API, badge endpoint
sloc-mcp/ # MCP stdio server for AI agent integration
ci/ # CI scripts + config presets
cmake/ # OxideSloc.cmake reusable CMake module
docs/ # airgap.md, ci-integrations.md, ide-integrations.md, server-deployment.md, openapi.yaml
dist/ # Windows pre-built binary (committed by CI after each release)
examples/ # examples/cmake/ runnable CMake integration sample
scripts/ # run.sh, serve-server.sh (user-facing entry points)
testing/ # fixtures/ (scan sample repo) + examples/ (CI configs, sloc.example.toml)
AI Integration
The sloc-mcp binary implements the Model Context Protocol (protocol revision 2025-06-18, with version negotiation), making oxide-sloc callable as a tool from Claude Desktop, Claude Code, and any MCP-compatible host. All 7 tools carry read-only / open-world annotations and return structured content alongside their text block.
Claude Code (project .mcp.json):
Available tools: analyze_path · get_metrics_latest · get_metrics_history · get_run_metrics · compare_runs · health_check · ingest_result
Pre-built tool definitions for Claude API (tool_use) and OpenAI (function_calling): docs/mcp/. A running server also exposes GET /llms.txt and GET /llms-full.txt for agent self-discovery.
License
oxide-sloc is licensed under AGPL-3.0-or-later. Copyright (C) 2026 Nima Shafie.
Nima Shafie — github.com/NimaShafie





