Skip to content

by the numbers

Nik edited this page May 30, 2026 · 3 revisions

By the numbers

Data collected on 2026-05-30.

These figures come from the git history and working tree of the DroidProxy repository. Where a number is a lower bound or skewed by automation, that is called out inline.

Size

The app is a single Swift package under src/, with a small React/TypeScript marketing site under website/. The Swift sources are the bulk of the code.

  • Swift source: ~4,911 lines across 15 files in src/Sources (down from ~5,169 after Amp routing was removed from ThinkingProxy on 2026-05-30).
  • Website TypeScript: ~726 lines (.ts / .tsx, excluding node_modules).
xychart-beta horizontal
    title "Lines of code by language"
    x-axis ["Swift (src/Sources)", "TypeScript (website)"]
    y-axis "Lines" 0 --> 5500
    bar [4911, 726]
Loading

File counts

Category Count Notes
Swift source files 15 src/Sources/**/*.swift
Swift test files 1 src/Tests/CLIProxyMenuBarTests/ClaudeThinkingBlockSanitizerTests.swift
Bundled YAML config 1 src/Sources/Resources/config.yaml
Swift packages 1 src/Package.swift

The test surface is small: a single unit-test file covers the Claude thinking-block sanitizer. There is no broader automated test suite in the Swift target at this time.

Activity

The repository started on 2025-10-04 and has ~761 commits as of this snapshot, with ~235 in the last 90 days. Commit volume by month:

xychart-beta
    title "Commits per month"
    x-axis ["2025-10", "2025-11", "2025-12", "2026-01", "2026-02", "2026-03", "2026-04", "2026-05"]
    y-axis "Commits" 0 --> 180
    bar [99, 49, 168, 116, 91, 76, 81, 81]
Loading

The 2025-12 spike lines up with the switch to the CLIProxyAPIPlus backend and the surrounding release churn. (That fork was later replaced by mainline CLIProxyAPI on 2026-05-30 — see Lore.)

Churn (last 90 days, files under src)

From git log --since="90 days ago" --pretty=format: --name-only -- src | sort | uniq -c | sort -rn:

Changes File
44 src/Sources/SettingsView.swift
33 src/Sources/ThinkingProxy.swift
24 src/Sources/Resources/cli-proxy-api-plus
22 src/Sources/AppPreferences.swift
14 src/Sources/AppDelegate.swift
13 src/Sources/ServerManager.swift
10 src/Sources/DroidProxyModelCatalog.swift
9 src/Sources/AuthStatus.swift

The two highest-churn source files (SettingsView.swift and ThinkingProxy.swift) are also the two largest, which is consistent with them carrying most of the feature work. The bundled backend binary shows high churn because it is re-bumped by an automated workflow rather than hand-edited; it appears here under its historical path cli-proxy-api-plus (renamed to cli-proxy-api on 2026-05-30 when the backend switched to mainline CLIProxyAPI).

Bot-attributed commits

A large share of commits come from automation rather than people:

  • github-actions[bot]: 278 commits (release automation and appcast updates).
  • dependabot[bot]: 3 commits.

That is ~281 of ~761 commits, roughly 37% of all history. The release bot dominates because the auto-release / appcast workflow commits a version bump and an appcast.xml update on each release. Treat any human-vs-bot split here as a lower bound for human authorship: bot attribution is only as accurate as the commit author field, and squashed or co-authored work can hide additional automation or human edits.

Complexity

The codebase concentrates complexity in a few large files.

Lines File
1255 src/Sources/SettingsView.swift
1124 src/Sources/ThinkingProxy.swift
498 src/Sources/ServerManager.swift
491 src/Sources/OAuthUsageTracker.swift
424 src/Sources/AppDelegate.swift
397 src/Sources/ClaudeThinkingBlockSanitizer.swift
285 src/Sources/DroidProxyModelCatalog.swift
190 src/Sources/AuthStatus.swift

SettingsView.swift and ThinkingProxy.swift together account for more than half of the Swift source. Both are also the highest-churn files, which makes them the most natural refactor candidates: the proxy mixes request parsing, routing, JSON scanning, and multiple upstream integrations in one type, and the settings view holds most of the UI surface in one file. (ThinkingProxy.swift shrank from 1,408 to 1,124 lines on 2026-05-30 when Amp routing was removed, so it is no longer the single largest file.)

There are 0 TODO / FIXME comments across src/Sources, so there is no in-code backlog marker to mine; refactor priorities have to be inferred from size and churn instead.

Related pages

Clone this wiki locally