Leaderboard github.com
DevToys-app/DevToys
A Swiss Army knife for developers.
AI provenance
0%
possible
- Confidence
- 65%
- Coverage
- 100%
Estimated share of AI-generated code. Explicit attribution is a lower bound.
Code quality
61/100
weak
- Confidence
- 90%
- Coverage
- 100%
Complexity, duplication, lint density, tests, CI, docs and review process.
Security
43/100
poor
- Confidence
- 85%
- Coverage
- 100%
Secrets, static analysis, vulnerable dependencies, CI and supply-chain posture.
AI provenance
0% possible
Weak signals consistent with AI-assisted development.
How the score is built
- Explicitly attributed share0%
- Unattributed share in AI-pace bursts7%
- Estimated AI-generated share0%
- AI tool configuration files0
- Work sessions at AI pace3
- Releases at AI pace0
- Coding-style index (1.0+ means possible)0.01
Lines added per month all AI-attributed share
- 2021-0911,743 · 0% AI
- 2021-1015,763 · 0% AI
- 2021-115,474 · 0% AI
- 2021-124,059 · 0% AI
- 2022-0111,979 · 0% AI
- 2022-021,301 · 0% AI
- 2022-032,976 · 0% AI
- 2022-04130 · 0% AI
- 2022-051,220 · 0% AI
- 2022-06826 · 0% AI
- 2022-071,562 · 0% AI
- 2022-0856 · 0% AI
- 2022-094,379 · 0% AI
- 2022-100 · 0% AI
- 2022-120 · 0% AI
- 2023-0117,586 · 0% AI
- 2023-027,403 · 0% AI
- 2023-034,139 · 0% AI
- 2023-047,005 · 0% AI
- 2023-055,966 · 0% AI
- 2023-0616,020 · 0% AI
- 2023-079,991 · 0% AI
- 2023-086,219 · 0% AI
- 2023-094,509 · 0% AI
- 2023-105,286 · 0% AI
- 2023-1110,489 · 0% AI
- 2023-1212,719 · 0% AI
- 2024-015,445 · 0% AI
- 2024-021,481 · 0% AI
- 2024-0318,028 · 0% AI
- 2024-04243 · 0% AI
- 2024-052,170 · 0% AI
- 2024-062,768 · 0% AI
- 2024-071,572 · 0% AI
- 2024-0848 · 0% AI
- 2024-10248 · 0% AI
- 2024-11345 · 0% AI
- 2025-020 · 0% AI
- 2026-01288 · 0% AI
- 2026-0236 · 0% AI
- 2026-0933 · 0% AI
Evidence by analyzer
Explicit AI attributionok
- attributed_commit_share
- 0.0%
- attributed_commits
- 0
- attributed_loc
- 0
- attributed_loc_share
- 0.0%
- commits
- 1,040
- effective_loc
- 201,505
- tools_detected
- 0
AI tool configurationok
- artifacts
- 0
- tools_configured
- 0
- workflow_agents
- 0
Commit velocityok3 items
- 7,198 lines of first-party code in ~4.0h (1,800 lines/hour, 1 commit session)
- 3,693 lines of first-party code in ~4.0h (923 lines/hour, 1 commit session)
- 3,370 lines of first-party code in ~4.0h (842 lines/hour, 1 commit session)
- excluded_import_loc
- 35,189
- flagged_loc
- 14,261
- flagged_loc_share
- 8.6%
- flagged_units
- 3
- max_loc_per_hour
- 1,948
- measured_loc
- 166,316
- median_loc_per_hour
- 65.21
- pr_timed_units
- 114
- pre_ai_era_burst_loc
- 0
- pre_ai_era_bursts
- 0
- pre_ai_era_measured_loc
- 0
- work_units
- 519
Release velocityok
- flagged_releases
- 0
- max_loc_per_day
- 155.40
- releases
- 8
Coding styleok
- count:assistant_voice
- 0
- count:emoji_in_code
- 1
- count:narrated_steps
- 0
- count:placeholder
- 0
- files:assistant_voice
- 0
- files:emoji_in_code
- 1
- files:narrated_steps
- 0
- files:placeholder
- 0
- index
- 0.01
- lines_scanned
- 56,540
- per_kloc:assistant_voice
- 0
- per_kloc:emoji_in_code
- 0.02
- per_kloc:narrated_steps
- 0
- per_kloc:placeholder
- 0
Code quality
61 weak
Code quality is weak: test-to-source ratio 0.05, no CI test run detected; 8% of function code in complex or long functions; 18% duplicated lines. Weakest area: type safety.
How the score is built
- Complexity78
- Duplication33
- Lint and smells97
- Tests and CI46
- Documentation80
- Type safety0
- Review processnot measured
Evidence by analyzer
Complexity (lizard)ok10 items
- placePopover in src/app/dev/DevToys.Blazor/Assets/javascript/popover.js: complexity 67, 137 lines
- placePopover in src/app/dev/DevToys.Blazor/wwwroot/js/devtoys.g.js: complexity 67, 136 lines
- if in src/app/dev/DevToys.Blazor/Assets/javascript/popover.ts: complexity 66, 123 lines
- OneOfParser::new in src/app/dev/platforms/desktop/DevToys.CLI/Core/OneOfParser.cs: complexity 51, 250 lines
- RicherMonacoEditorBase::EventCallbackAsync in src/app/dev/DevToys.Blazor/Components/Text/MonacoEditor/RicherMonacoEditorBase.cs: complexity 40, 120 lines
- GuiToolMetadata::GuiToolMetadata in src/app/dev/DevToys.Core/Tools/Metadata/GuiToolMetadata.cs: complexity 39, 68 lines
- this.drag in src/app/dev/DevToys.Blazor/wwwroot/js/simplebar-modified.js: complexity 31, 36 lines
- setEventListener in src/app/dev/DevToys.Blazor/Assets/javascript/monacoEditor.js: complexity 28, 89 lines
- RicherMonacoEditorBase::SetEventListenersAsync in src/app/dev/DevToys.Blazor/Components/Text/MonacoEditor/RicherMonacoEditorBase.cs: complexity 28, 112 lines
- setEventListener in src/app/dev/DevToys.Blazor/wwwroot/js/devtoys.g.js: complexity 28, 89 lines
- complex_functions
- 23
- function_nloc
- 26,365
- functions
- 2,707
- long_functions
- 7
- many_param_functions
- 6
- mean_ccn
- 2.28
- p90_ccn
- 4
- risky_nloc_share
- 8.1%
Duplication (jscpd)ok10 items
- 6+ duplicated lines: src/app/dev/DevToys.Api/Core/ObservableHashSet.cs:123 and src/app/dev/DevToys.Api/Core/ObservableHashSet.cs:391
- 6+ duplicated lines: src/app/dev/DevToys.Api/Core/OneOfExtensions.cs:10 and src/app/dev/DevToys.Api/Core/OneOfExtensions.cs:30
- 6+ duplicated lines: src/app/dev/DevToys.Api/Core/ResultInfo.cs:19 and src/app/dev/DevToys.Api/Core/ResultInfo.cs:66
- 6+ duplicated lines: src/app/dev/DevToys.Api/Core/SandboxedFileReader.cs:1 and src/app/dev/DevToys.Api/Core/SimpleSandboxedFileReader.cs:1
- 6+ duplicated lines: src/app/dev/DevToys.Api/Core/Theme/ApplicationTheme.cs:8 and src/app/dev/DevToys.Api/Core/Theme/AvailableApplicationTheme.cs:13
- 6+ duplicated lines: src/app/dev/DevToys.Api/Strings/ApiText/ApiText.Designer.cs:1 and src/app/dev/DevToys.Blazor/BuiltInGroups/Groups.Designer.cs:1
- 6+ duplicated lines: src/app/dev/DevToys.Api/Strings/ApiText/ApiText.Designer.cs:55 and src/app/dev/DevToys.Localization/Strings/ToggleSwitch/ToggleSwitch.Designer.cs:55
- 6+ duplicated lines: src/app/dev/DevToys.Api/Tool/GUI/Components/IUIButton.cs:20 and src/app/dev/DevToys.Api/Tool/GUI/Components/IUIDropDownButton.cs:15
- 6+ duplicated lines: src/app/dev/DevToys.Api/Tool/GUI/Components/IUIButton.cs:26 and src/app/dev/DevToys.Api/Tool/GUI/Components/IUIDropDownMenuItem.cs:21
- 6+ duplicated lines: src/app/dev/DevToys.Api/Tool/GUI/Components/IUIButton.cs:129 and src/app/dev/DevToys.Api/Tool/GUI/Components/IUIUtf32IconButton.cs:28
- compared_lines
- 36,222
- duplicated_lines
- 6,698
- duplicated_share
- 18.5%
- files
- 618
Lintok
- category:best-practice
- 5
- category:correctness
- 5
- findings
- 10
- scanned_lines
- 56,284
- weighted_findings
- 6.25
Tests and CIok2 items
- CI config: .github/workflows/ci.yml
.github/workflows/ci.yml - CI config: .github/workflows/issue_labeler.yml
.github/workflows/issue_labeler.yml
- check:ci_present
- yes
- check:ci_runs_lint
- no
- check:ci_runs_tests
- no
- check:has_tests
- yes
- check:test_ratio
- no
- check:tests_cochange
- no
- ci_files
- 2
- cochange_commits
- 174
- cochange_share
- 21.3%
- source_lines
- 56,540
- test_lines
- 2,722
- test_ratio
- 0.05
Documentationok3 items
- README.md
README.md - LICENSE.md
LICENSE.md - CONTRIBUTING.md
CONTRIBUTING.md
- check:changelog
- no
- check:contributing
- yes
- check:license
- yes
- check:readme
- yes
- readme_lines
- 48
Type safetyok
- check:low_escape_density
- no
- check:strict_config
- no
- escapes
- 25
- escapes_per_kloc
- 10.21
Security
43 poor
Security posture is poor: 0 possible secret(s) in the tree, 2 only in history; 10 high-severity SAST findings; 10 high-severity workflow issues. Weakest area: ci actions.
How the score is built
- Secrets14
- Static analysis (SAST)95
- Vulnerable dependenciesnot measured
- CI workflows11
- Security posture60
- OpenSSF Scorecardnot measured
Evidence by analyzer
OpenSSF Scorecardskipped
no published OpenSSF Scorecard result for this repo
Package registriesok
- checked
- 34
- declared
- 34
- lookup_errors
- 0
- missing
- 0
- recent
- 0
Secrets (gitleaks)ok
- secrets_current
- 0
- secrets_history
- 2
- secrets_low_confidence
- 0
- secrets_nonprod
- 48
Static analysis (opengrep)ok
- findings
- 10
- findings_high
- 10
- findings_low
- 0
- findings_medium
- 0
- parse_errors
- 2
- scanned_lines
- 56,284
- weighted_findings
- 7.50
Dependencies (osv-scanner)skipped
CI workflows (zizmor)ok
- findings
- 18
- findings_high
- 10
- findings_low
- 0
- findings_medium
- 8
- penalty
- 134.40
- workflows
- 2
Security postureok2 items
- Security policy: SECURITY.md
SECURITY.md - src/app/dev/DevToys.Blazor/package.json has no lockfile alongside it (unpinned dependencies)
src/app/dev/DevToys.Blazor/package.json
- check:dependency_updates
- no
- check:lockfiles
- no
- check:security_policy
- yes
- check:signed_commits
- yes
- signed_commit_share
- 60.5%
- unpinned_manifests
- 1
Release downloadsok5 items
- release v2.0.9.0 ships devtoys.cli_linux_arm.deb (259 downloads)
- release v2.0.9.0 ships devtoys.cli_linux_arm.zip (184 downloads)
- release v2.0.9.0 ships devtoys.cli_linux_arm_portable.zip (205 downloads)
- release v2.0.9.0 ships devtoys.cli_linux_x64.deb (1008 downloads)
- release v2.0.9.0 ships devtoys.cli_linux_x64.zip (255 downloads)
- binary_assets
- 252
- signals
- 1
- suspicious
- 0
Findings
20 high15 medium53 low
| Severity | Rule | Location | Message | Tool |
|---|---|---|---|---|
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:14 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:16 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:29 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:31 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:45 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:48 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/ci.yml:50 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/issue_labeler.yml:22 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/issue_labeler.yml:25 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | zizmor/unpinned-uses |
.github/workflows/issue_labeler.yml:31 | unpinned action reference [confidence high] | CI workflows (zizmor) |
| high | opengrep/javascript.browser.security.insecure-document-method |
src/app/dev/DevToys.Blazor/Assets/javascript/dom.js:110 | User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-innerhtml |
src/app/dev/DevToys.Blazor/Assets/javascript/dom.js:110 | User controlled data in a `css.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-document-method |
src/app/dev/DevToys.Blazor/Assets/javascript/dom.ts:131 | User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-innerhtml |
src/app/dev/DevToys.Blazor/Assets/javascript/dom.ts:131 | User controlled data in a `css.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-document-method |
src/app/dev/DevToys.Blazor/Components/UIElements/UIWebViewPresenter.razor.js:6 | User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-innerhtml |
src/app/dev/DevToys.Blazor/Components/UIElements/UIWebViewPresenter.razor.js:6 | User controlled data in a `iframeDocument.body.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-document-method |
src/app/dev/DevToys.Blazor/Components/UIElements/UIWebViewPresenter.razor.ts:7 | User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-innerhtml |
src/app/dev/DevToys.Blazor/Components/UIElements/UIWebViewPresenter.razor.ts:7 | User controlled data in a `iframeDocument.body.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-document-method |
src/app/dev/DevToys.Blazor/wwwroot/js/devtoys.g.js:956 | User controlled data in methods like `innerHTML`, `outerHTML` or `document.write` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| high | opengrep/javascript.browser.security.insecure-innerhtml |
src/app/dev/DevToys.Blazor/wwwroot/js/devtoys.g.js:956 | User controlled data in a `css.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] | Static analysis (opengrep) |
| medium | opengrep/javascript.lang.best-practice.lazy-load-module |
src/app/dev/DevToys.Blazor/Components/Layout/SplitGrid/SplitGrid.razor.js:52 | Lazy loading can complicate code bundling if care is not taken, also `require`s are run synchronously by Node.js. If they are called from within a function, it may block other requests from being handled at a more critical time. The... | Lint |
| medium | opengrep/javascript.lang.best-practice.lazy-load-module |
src/app/dev/DevToys.Blazor/Components/Layout/SplitGrid/SplitGrid.razor.ts:66 | Lazy loading can complicate code bundling if care is not taken, also `require`s are run synchronously by Node.js. If they are called from within a function, it may block other requests from being handled at a more critical time. The... | Lint |
| medium | opengrep/javascript.lang.best-practice.assigned-undefined |
src/app/dev/DevToys.Blazor/wwwroot/js/simplebar-modified.js:446 | `undefined` is not a reserved keyword in Javascript, so this is "valid" Javascript but highly confusing and likely to result in bugs. | Lint |
| medium | opengrep/javascript.lang.best-practice.assigned-undefined |
src/app/dev/DevToys.Blazor/wwwroot/js/simplebar-modified.js:499 | `undefined` is not a reserved keyword in Javascript, so this is "valid" Javascript but highly confusing and likely to result in bugs. | Lint |
| medium | opengrep/javascript.lang.best-practice.assigned-undefined |
src/app/dev/DevToys.Blazor/wwwroot/js/simplebar-modified.js:508 | `undefined` is not a reserved keyword in Javascript, so this is "valid" Javascript but highly confusing and likely to result in bugs. | Lint |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:1 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/artipacked |
.github/workflows/ci.yml:14 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:24 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/artipacked |
.github/workflows/ci.yml:29 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:39 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/artipacked |
.github/workflows/ci.yml:48 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| medium | zizmor/excessive-permissions |
.github/workflows/ci.yml:9 | overly broad permissions [confidence medium] | CI workflows (zizmor) |
| medium | zizmor/artipacked |
.github/workflows/issue_labeler.yml:22 | credential persistence through GitHub Actions artifacts [confidence low] | CI workflows (zizmor) |
| medium | gitleaks/private-key |
src/app/dev/DevToys.Tools/Models/JsonWebToken/JsonWebTokenPemEnumeration.cs:9 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| medium | gitleaks/private-key |
src/dev/impl/DevToys/ViewModels/Tools/EncodersDecoders/JwtDecoderEncoder/JwtEncoder.cs:30 | Possible private-key secret in history (commit 1954d5c42c); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
build.sh:7 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
init.sh:34 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
tools/Restore-MonacoEditor.sh:25 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
tools/Restore-MonacoEditor.sh:32 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command |
tools/Restore-MonacoEditor.sh:36 | Variable expansions must be double-quoted so as to prevent being split into multiple pieces according to whitespace or whichever separator is specified by the IFS variable. If you really wish to split the variable's contents, you may... | Lint |
| low | gitleaks/generic-api-key |
src/app/tests/DevToys.UnitTests/Tools/Helpers/JsonWebTokenDecoderHelperTests.cs:35 | Possible generic-api-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/Helpers/JwtHelperTests.cs:11 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/CertificateDecoder/PemCertWithPrivateKey.txt:1 | Possible private-key secret in history (commit 495db7dee4); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/CertificateDecoder/PemCertWithPrivateKeyWithExtensions.txt:1 | Possible private-key secret in history (commit 495db7dee4); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/ES/ES256-ComplexToken.txt:1 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/ES/ES256-PrivateKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/ES/ES384-ComplexToken.txt:1 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/ES/ES384-PrivateKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/ES/ES512-ComplexToken.txt:1 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/ES/ES512-PrivateKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/HS/HS256-BasicToken.txt:1 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/HS/HS256-ComplexToken.txt:1 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/PS/PS256-ComplexToken.txt:1 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/PS/PS256-PrivateKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/PS/PS256-RsaPrivateKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/PS/PS384-ComplexToken.txt:1 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/PS/PS384-PrivateKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/PS/PS512-ComplexToken.txt:1 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/PS/PS512-PrivateKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/RS/RS256-ComplexToken.txt:1 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/RS/RS256-EncryptedComplexToken.txt:1 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/RS/RS256-EncryptedPrivateKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/RS/RS256-EncryptedPublicKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/RS/RS256-PrivateKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/RS/RS256-RsaPrivateKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/RS/RS384-ComplexToken.txt:1 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/RS/RS384-PrivateKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/RS/RS512-ComplexToken.txt:1 | Possible jwt secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/app/tests/DevToys.UnitTests/Tools/TestData/JsonWebTokenEncoderDecoder/RS/RS512-PrivateKey.txt:1 | Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/generic-api-key |
src/tests/DevToys.Tests/Helpers/CertificateHelperTests.cs:164 | Possible generic-api-key secret in history (commit 59f989f9b7); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/tests/DevToys.Tests/Helpers/CertificateHelperTests.cs:268 | Possible private-key secret in history (commit 5d5e6eef9b); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/tests/DevToys.Tests/Helpers/JwtHelperTests.cs:13 | Possible jwt secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/tests/DevToys.Tests/Providers/TestData/Jwt/ES/BasicToken.txt:1 | Possible jwt secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/tests/DevToys.Tests/Providers/TestData/Jwt/ES/ComplexToken.txt:1 | Possible jwt secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/tests/DevToys.Tests/Providers/TestData/Jwt/ES/PrivateKey.txt:1 | Possible private-key secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/tests/DevToys.Tests/Providers/TestData/Jwt/HS/BasicToken.txt:1 | Possible jwt secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/tests/DevToys.Tests/Providers/TestData/Jwt/HS/ComplexToken.txt:1 | Possible jwt secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/tests/DevToys.Tests/Providers/TestData/Jwt/PS/BasicToken.txt:1 | Possible jwt secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/tests/DevToys.Tests/Providers/TestData/Jwt/PS/ComplexToken.txt:1 | Possible jwt secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/tests/DevToys.Tests/Providers/TestData/Jwt/PS/PrivateKey.txt:1 | Possible private-key secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/tests/DevToys.Tests/Providers/TestData/Jwt/RS/BasicToken.txt:1 | Possible jwt secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/tests/DevToys.Tests/Providers/TestData/Jwt/RS/CertBasicToken.txt:1 | Possible jwt secret in history (commit 1954d5c42c); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/tests/DevToys.Tests/Providers/TestData/Jwt/RS/ComplexToken.txt:1 | Possible jwt secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/tests/DevToys.Tests/Providers/TestData/Jwt/RS/PrivateKey.txt:1 | Possible private-key secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/tests/DevToys.Tests/Providers/TestData/Jwt/RS/RsaPrivateKey.txt:1 | Possible private-key secret in history (commit 1954d5c42c); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/jwt |
src/tests/DevToys.Tests/Providers/Tools/JwtDecoderEncoderTests.cs:22 | Possible jwt secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/generic-api-key |
src/tests/DevToys.Tests/Providers/Tools/JwtDecoderTests.cs:76 | Possible generic-api-key secret in history (commit 3b0be14396); removed from the current tree but still retrievable | Secrets (gitleaks) |
| low | gitleaks/private-key |
src/tests/DevToys.Tests/Providers/Tools/JwtEncoderTests.cs:250 | Possible private-key secret in history (commit a8b700b769); removed from the current tree but still retrievable | Secrets (gitleaks) |
Tools and coverage
Every analyzer that ran on this commit. A failed or skipped tool is a coverage gap: its share of the score is left out and the coverage figure drops.
| Analyzer | Pillar | Status | Version | Findings | Note |
|---|---|---|---|---|---|
| AI tool configuration | AI provenance | ok | signatures-v1 | 0 | |
| Explicit AI attribution | AI provenance | ok | signatures-v1 | 0 | |
| Release velocity | AI provenance | ok | prov-5 | 0 | |
| Coding style | AI provenance | ok | — | 0 | |
| Commit velocity | AI provenance | ok | prov-5 | 0 | |
| Complexity (lizard) | Code quality | ok | lizard 1.25.1 | 0 | |
| Documentation | Code quality | ok | — | 0 | |
| Duplication (jscpd) | Code quality | ok | repotrust-dup-w6 | 0 | |
| Lint | Code quality | ok | opengrep 1.33.1; rules f1d2b562b414 | 10 | |
| Tests and CI | Code quality | ok | — | 0 | |
| Type safety | Code quality | ok | — | 0 | |
| CI workflows (zizmor) | Security | ok | zizmor 1.32.0 | 18 | |
| Dependencies (osv-scanner) | Security | skipped | — | 0 | |
| Release downloads | Security | ok | — | 0 | |
| Security posture | Security | ok | — | 0 | |
| Package registries | Security | ok | — | 0 | |
| Static analysis (opengrep) | Security | ok | opengrep 1.33.1; rules f1d2b562b414 | 10 | |
| OpenSSF Scorecard | Security | skipped | — | 0 | no published OpenSSF Scorecard result for this repo |
| Secrets (gitleaks) | Security | ok | gitleaks 8.30.1 | 50 |
Score history
| Scored | Commit | Scoring | AI provenance | Quality | Security |
|---|---|---|---|---|---|
| 2026-11-14 | 2dbbc8aa5949 | prov-5+qual-2+sec-2 | 0% | 61 | 43 |
Full text report
- Repository: https://github.com/DevToys-app/DevToys
- Commit:
2dbbc8aa594978d11165a0e8112243c96a277dbc - Generated: 2026-11-14T15:22:34+00:00
- Scorer 0.1.0, scoring prov-5+qual-2+sec-2, report schema v2
Scores
| Pillar | Score | Signal | Confidence | Coverage |
|---|---|---|---|---|
| AI provenance (estimated AI-generated share) | 0 | possible | 65% | 100% |
| Code quality | 61 | weak | 90% | 100% |
| Security | 43 | poor | 85% | 100% |
AI provenance
Weak signals consistent with AI-assisted development.
-
Explicitly attributed share (lower bound): 0.0%
-
Unattributed share in AI-consistent velocity bursts: 7.1%
-
Estimated AI-generated share: 0.0%
-
Stylometry index: 0.01 per 1,000 lines (narrated steps 0, placeholders 0, assistant phrasing 0, emoji 1). Reported as a signal, not scored.
| Month | Lines added | Attributed to AI |
|---|---|---|
| 2024-02 | 1,481 | 0% |
| 2024-03 | 18,028 | 0% |
| 2024-04 | 243 | 0% |
| 2024-05 | 2,170 | 0% |
| 2024-06 | 2,768 | 0% |
| 2024-07 | 1,572 | 0% |
| 2024-08 | 48 | 0% |
| 2024-10 | 248 | 0% |
| 2024-11 | 345 | 0% |
| 2026-01 | 288 | 0% |
| 2026-02 | 36 | 0% |
| 2026-09 | 33 | 0% |
Evidence
- 7,198 lines of first-party code in ~4.0h (1,800 lines/hour, 1 commit session) (65716422d1e4)
- 3,693 lines of first-party code in ~4.0h (923 lines/hour, 1 commit session) (a8b700b76944)
- 3,370 lines of first-party code in ~4.0h (842 lines/hour, 1 commit session) (25189b1dfa28)
AI provenance describes how code was produced; it is not a quality judgment. Unless attribution is explicit, these are signals consistent with AI generation, not proof. Squash/rebase workflows, imported code, and rewritten history reduce accuracy.
Code quality
Code quality is weak: test-to-source ratio 0.05, no CI test run detected; 8% of function code in complex or long functions; 18% duplicated lines. Weakest area: type safety.
| Area | Score |
|---|---|
| Complexity (lizard) | 78 |
| Duplication | 33 |
| Code smells (Opengrep) | 97 |
| Tests and CI | 46 |
| Documentation | 80 |
| Type safety | 0 |
| Process (Scorecard review/maintenance) | n/a |
- Functions: 2,707; mean complexity 2.3, 90th percentile 4; 23 complex and 7 long functions
- Duplicated lines: 18.5% of 36,222 compared
- Tests: 2,722 test lines for 56,540 source lines (ratio 0.05); CI test commands: none detected; 21% of recent source commits also change tests
- Docs missing or thin: changelog
Most complex functions:
- placePopover in src/app/dev/DevToys.Blazor/Assets/javascript/popover.js: complexity 67, 137 lines
- placePopover in src/app/dev/DevToys.Blazor/wwwroot/js/devtoys.g.js: complexity 67, 136 lines
- if in src/app/dev/DevToys.Blazor/Assets/javascript/popover.ts: complexity 66, 123 lines
- OneOfParser::new in src/app/dev/platforms/desktop/DevToys.CLI/Core/OneOfParser.cs: complexity 51, 250 lines
- RicherMonacoEditorBase::EventCallbackAsync in src/app/dev/DevToys.Blazor/Components/Text/MonacoEditor/RicherMonacoEditorBase.cs: complexity 40, 120 lines
Security
Security posture is poor: 0 possible secret(s) in the tree, 2 only in history; 10 high-severity SAST findings; 10 high-severity workflow issues. Weakest area: ci actions.
| Area | Score |
|---|---|
| Secrets (gitleaks, tree + history) | 14 |
| Static analysis (Opengrep) | 95 |
| Vulnerable dependencies (OSV) | n/a |
| CI workflows (zizmor) | 11 |
| Posture (policy, updates, signing, lockfiles) | 60 |
| OpenSSF Scorecard | n/a |
- Posture checks passed: security policy, signed commits; missing: dependency updates, lockfiles
Top findings
| Severity | Finding | Location |
|---|---|---|
| high | opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
src/app/dev/DevToys.Blazor/Assets/javascript/dom.js:110 |
| high | opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a css.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
src/app/dev/DevToys.Blazor/Assets/javascript/dom.js:110 |
| high | opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
src/app/dev/DevToys.Blazor/Assets/javascript/dom.ts:131 |
| high | opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a css.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
src/app/dev/DevToys.Blazor/Assets/javascript/dom.ts:131 |
| high | opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
src/app/dev/DevToys.Blazor/Components/UIElements/UIWebViewPresenter.razor.js:6 |
| high | opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a iframeDocument.body.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
src/app/dev/DevToys.Blazor/Components/UIElements/UIWebViewPresenter.razor.js:6 |
| high | opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
src/app/dev/DevToys.Blazor/Components/UIElements/UIWebViewPresenter.razor.ts:7 |
| high | opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a iframeDocument.body.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
src/app/dev/DevToys.Blazor/Components/UIElements/UIWebViewPresenter.razor.ts:7 |
| high | opengrep/javascript.browser.security.insecure-document-method: User controlled data in methods like innerHTML, outerHTML or document.write is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
src/app/dev/DevToys.Blazor/wwwroot/js/devtoys.g.js:956 |
| high | opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a css.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] |
src/app/dev/DevToys.Blazor/wwwroot/js/devtoys.g.js:956 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:14 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:16 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:29 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:31 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:45 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:48 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/ci.yml:50 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/issue_labeler.yml:22 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/issue_labeler.yml:25 |
| high | zizmor/unpinned-uses: unpinned action reference [confidence high] |
.github/workflows/issue_labeler.yml:31 |
| medium | gitleaks/private-key: Possible private-key secret in history (commit ea3dc87719); removed from the current tree but still retrievable |
src/app/dev/DevToys.Tools/Models/JsonWebToken/JsonWebTokenPemEnumeration.cs:9 |
| medium | gitleaks/private-key: Possible private-key secret in history (commit 1954d5c42c); removed from the current tree but still retrievable |
src/dev/impl/DevToys/ViewModels/Tools/EncodersDecoders/JwtDecoderEncoder/JwtEncoder.cs:30 |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/ci.yml:14 |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/ci.yml:29 |
| medium | zizmor/artipacked: credential persistence through GitHub Actions artifacts [confidence low] |
.github/workflows/ci.yml:48 |
Static signals only: the scorer never runs the project's code. Secret findings are pattern matches that were not verified, and secret values are never stored.
Distribution signals
- binary-release-asset: release v2.0.9.0 ships devtoys.cli_linux_arm.deb (259 downloads)
- binary-release-asset: release v2.0.9.0 ships devtoys.cli_linux_arm.zip (184 downloads)
- binary-release-asset: release v2.0.9.0 ships devtoys.cli_linux_arm_portable.zip (205 downloads)
- binary-release-asset: release v2.0.9.0 ships devtoys.cli_linux_x64.deb (1008 downloads)
- binary-release-asset: release v2.0.9.0 ships devtoys.cli_linux_x64.zip (255 downloads)
Signals consistent with a repository that exists to distribute a download. They are heuristics, not a verdict; release files were not downloaded or inspected.
Repository profile
- Source lines: 56,540; test lines: 2,722
| Language | Lines |
|---|---|
| C# | 50,291 |
| JavaScript | 6,089 |
| TypeScript | 2,449 |
| PowerShell | 256 |
| Shell | 177 |