RepoTrust

Leaderboard github.com

BookStackApp/BookStack

NOW MANAGED ON CODEBERG

  • View repository ↗
  • PHP
  • ★ 19,145
  • commit 0b6b667e0d84
  • scored 2026-11-14
  • scoring prov-5+qual-2+sec-2

AI provenance

0%

possible

Confidence
65%
Coverage
100%

Estimated share of AI-generated code. Explicit attribution is a lower bound.

Code quality

62/100

weak

Confidence
90%
Coverage
100%

Complexity, duplication, lint density, tests, CI, docs and review process.

Security

70/100

weak

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 bursts2%
  • 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

  1. 2015-074,870 · 0% AI
  2. 2015-084,076 · 0% AI
  3. 2015-093,043 · 0% AI
  4. 2015-10896 · 0% AI
  5. 2015-11923 · 0% AI
  6. 2015-122,148 · 0% AI
  7. 2016-011,635 · 0% AI
  8. 2016-022,963 · 0% AI
  9. 2016-033,289 · 0% AI
  10. 2016-041,268 · 0% AI
  11. 2016-052,261 · 0% AI
  12. 2016-06680 · 0% AI
  13. 2016-07440 · 0% AI
  14. 2016-08865 · 0% AI
  15. 2016-091,784 · 0% AI
  16. 2016-101,607 · 0% AI
  17. 2016-111,013 · 0% AI
  18. 2016-121,679 · 0% AI
  19. 2017-013,659 · 0% AI
  20. 2017-022,559 · 0% AI
  21. 2017-031,675 · 0% AI
  22. 2017-042,755 · 0% AI
  23. 2017-05426 · 0% AI
  24. 2017-061,312 · 0% AI
  25. 2017-072,767 · 0% AI
  26. 2017-084,785 · 0% AI
  27. 2017-094,383 · 0% AI
  28. 2017-10187 · 0% AI
  29. 2017-11470 · 0% AI
  30. 2017-121,018 · 0% AI
  31. 2018-012,169 · 0% AI
  32. 2018-021,336 · 0% AI
  33. 2018-03817 · 0% AI
  34. 2018-042,686 · 0% AI
  35. 2018-051,100 · 0% AI
  36. 2018-06314 · 0% AI
  37. 2018-072,495 · 0% AI
  38. 2018-081,286 · 0% AI
  39. 2018-093,358 · 0% AI
  40. 2018-102,461 · 0% AI
  41. 2018-11475 · 0% AI
  42. 2018-123,565 · 0% AI
  43. 2019-01756 · 0% AI
  44. 2019-022,836 · 0% AI
  45. 2019-031,750 · 0% AI
  46. 2019-042,732 · 0% AI
  47. 2019-051,613 · 0% AI
  48. 2019-061,286 · 0% AI
  49. 2019-072,647 · 0% AI
  50. 2019-082,830 · 0% AI
  51. 2019-092,962 · 0% AI
  52. 2019-108,613 · 0% AI
  53. 2019-111,403 · 0% AI
  54. 2019-123,243 · 0% AI
  55. 2020-013,184 · 0% AI
  56. 2020-022,314 · 0% AI
  57. 2020-034,695 · 0% AI
  58. 2020-043,459 · 0% AI
  59. 2020-05899 · 0% AI
  60. 2020-061,615 · 0% AI
  61. 2020-072,090 · 0% AI
  62. 2020-08628 · 0% AI
  63. 2020-093,447 · 0% AI
  64. 2020-101,527 · 0% AI
  65. 2020-112,544 · 0% AI
  66. 2020-12906 · 0% AI
  67. 2021-012,922 · 0% AI
  68. 2021-021,764 · 0% AI
  69. 2021-035,836 · 0% AI
  70. 2021-041,285 · 0% AI
  71. 2021-052,738 · 0% AI
  72. 2021-067,198 · 0% AI
  73. 2021-071,133 · 0% AI
  74. 2021-086,244 · 0% AI
  75. 2021-092,550 · 0% AI
  76. 2021-108,247 · 0% AI
  77. 2021-114,004 · 0% AI
  78. 2021-122,819 · 0% AI
  79. 2022-014,764 · 0% AI
  80. 2022-0215,058 · 0% AI
  81. 2022-034,709 · 0% AI
  82. 2022-043,668 · 0% AI
  83. 2022-05898 · 0% AI
  84. 2022-063,723 · 0% AI
  85. 2022-073,659 · 0% AI
  86. 2022-082,853 · 0% AI
  87. 2022-095,689 · 0% AI
  88. 2022-104,641 · 0% AI
  89. 2022-115,967 · 0% AI
  90. 2022-12435 · 0% AI
  91. 2023-014,103 · 0% AI
  92. 2023-023,528 · 0% AI
  93. 2023-031,457 · 0% AI
  94. 2023-044,101 · 0% AI
  95. 2023-053,127 · 0% AI
  96. 2023-064,349 · 0% AI
  97. 2023-072,086 · 0% AI
  98. 2023-086,146 · 0% AI
  99. 2023-093,740 · 0% AI
  100. 2023-105,672 · 0% AI
  101. 2023-111,908 · 0% AI
  102. 2023-125,534 · 0% AI
  103. 2024-011,666 · 0% AI
  104. 2024-024,041 · 0% AI
  105. 2024-03919 · 0% AI
  106. 2024-04868 · 0% AI
  107. 2024-053,289 · 0% AI
  108. 2024-062,948 · 0% AI
  109. 2024-073,822 · 0% AI
  110. 2024-086,148 · 0% AI
  111. 2024-0954,059 · 0% AI
  112. 2024-105,008 · 0% AI
  113. 2024-115,423 · 0% AI
  114. 2024-128,128 · 0% AI
  115. 2025-011,479 · 0% AI
  116. 2025-025,852 · 0% AI
  117. 2025-03821 · 0% AI
  118. 2025-041,868 · 0% AI
  119. 2025-052,533 · 0% AI
  120. 2025-06975 · 0% AI
  121. 2025-074,953 · 0% AI
  122. 2025-081,305 · 0% AI
  123. 2025-091,231 · 0% AI
  124. 2025-103,495 · 0% AI
  125. 2025-111,849 · 0% AI
  126. 2025-122,753 · 0% AI
  127. 2026-01962 · 0% AI
  128. 2026-023,301 · 0% AI
  129. 2026-03731 · 0% AI
  130. 2026-041,690 · 0% AI
  131. 2026-054,892 · 0% AI
  132. 2026-06458 · 0% AI
  133. 2026-072,109 · 0% AI
  134. 2026-084,391 · 0% AI
  135. 2026-092,762 · 0% AI
  136. 2026-10483 · 0% AI
  137. 2026-11559 · 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
4,853
effective_loc
439,803
tools_detected
0
AI tool configurationok
artifacts
0
tools_configured
0
workflow_agents
0
Commit velocityok3 items
excluded_import_loc
67,055
flagged_loc
9,418
flagged_loc_share
2.5%
flagged_units
3
max_loc_per_hour
10,656
measured_loc
372,748
median_loc_per_hour
59.99
pr_timed_units
247
pre_ai_era_burst_loc
5,147
pre_ai_era_bursts
2
pre_ai_era_measured_loc
153,315
work_units
2,943
Release velocityok
flagged_releases
0
max_loc_per_day
0
releases
0
Coding styleok2 items
count:assistant_voice
0
count:emoji_in_code
0
count:narrated_steps
2
count:placeholder
0
files:assistant_voice
0
files:emoji_in_code
0
files:narrated_steps
2
files:placeholder
0
index
0.01
lines_scanned
217,367
per_kloc:assistant_voice
0
per_kloc:emoji_in_code
0
per_kloc:narrated_steps
0.01
per_kloc:placeholder
0

Code quality

62 weak

Code quality is weak: test-to-source ratio 0.26, no CI test run detected; 11% of function code in complex or long functions; 16% duplicated lines. Weakest area: duplication.

How the score is built

  • Complexity72
  • Duplication39
  • Lint and smells99
  • Tests and CI43
  • Documentation65
  • Type safety100
  • Review process50

Evidence by analyzer

Complexity (lizard)ok10 items
complex_functions
74
function_nloc
61,395
functions
6,308
long_functions
22
many_param_functions
1
mean_ccn
2.36
p90_ccn
5
risky_nloc_share
11.2%
Duplication (jscpd)ok10 items
compared_lines
164,572
duplicated_lines
25,539
duplicated_share
15.5%
files
1,981
Lintok
category:correctness
14
findings
14
scanned_lines
217,362
weighted_findings
5.75
Tests and CIok
check:ci_present
no
check:ci_runs_lint
no
check:ci_runs_tests
no
check:has_tests
yes
check:test_ratio
no
check:tests_cochange
yes
ci_files
0
cochange_commits
228
cochange_share
50.4%
source_lines
217,367
test_lines
55,649
test_ratio
0.26
Documentationok2 items
  • readme.md readme.md
  • LICENSE LICENSE
check:changelog
no
check:contributing
no
check:license
yes
check:readme
yes
readme_lines
142
Type safetyok1 item
  • TypeScript strict type checking: tsconfig.json tsconfig.json
check:low_escape_density
yes
check:strict_config
yes
escapes
151
escapes_per_kloc
3.11

Security

70 weak

Security posture is weak: 6 known vulnerabilities in 6 dependencies; 74 high-severity SAST findings. Weakest area: posture.

How the score is built

  • Secrets88
  • Static analysis (SAST)90
  • Vulnerable dependencies77
  • CI workflowsnot measured
  • Security posture20
  • OpenSSF Scorecard20

Evidence by analyzer

OpenSSF Scorecardok10 items
aggregate
3.20
check:Binary-Artifacts
yes
check:Branch-Protection
no
check:CII-Best-Practices
no
check:Code-Review
no
check:Fuzzing
no
check:License
yes
check:Maintained
yes
check:Pinned-Dependencies
no
check:SAST
no
check:Security-Policy
no
Package registriesok
checked
36
declared
36
lookup_errors
0
missing
0
recent
0
Secrets (gitleaks)ok
secrets_current
0
secrets_history
0
secrets_low_confidence
2
secrets_nonprod
2
Static analysis (opengrep)ok
findings
111
findings_high
74
findings_low
0
findings_medium
37
parse_errors
5
scanned_lines
217,362
weighted_findings
64.75
Dependencies (osv-scanner)ok
penalty
16
vulnerabilities
6
vulnerable_packages
6
vulns_critical
0
vulns_high
0
vulns_low
1
vulns_medium
5
vulns_unknown
0
CI workflows (zizmor)skipped
Security postureok
check:dependency_updates
no
check:lockfiles
yes
check:security_policy
no
check:signed_commits
yes
signed_commit_share
92.5%
unpinned_manifests
0
Release downloadsok
binary_assets
0
signals
0
suspicious
0

Findings

74 high45 medium16 low

SeverityRuleLocationMessageTool
high opengrep/php.lang.security.weak-crypto app/Access/Guards/ExternalBaseSessionGuard.php:220 Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] Static analysis (opengrep)
high opengrep/php.laravel.security.laravel-dangerous-model-construction app/Activity/Models/Watch.php:26 Setting `$guarded` to an empty array allows mass assignment to every property in a Laravel model. This explicitly overrides Eloquent's safe-by-default mass assignment protections. [confidence low] Static analysis (opengrep)
high opengrep/php.lang.security.weak-crypto app/App/helpers.php:23 Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] Static analysis (opengrep)
high opengrep/php.laravel.security.laravel-cookie-secure-set app/Config/session.php:56 Found a configuration file where the secure attribute is not set to 'true'. Setting 'secure' to 'true' prevents the client from transmitting the cookie over unencrypted channels and therefore prevents cookies from being stolen through... Static analysis (opengrep)
high opengrep/php.lang.security.weak-crypto app/Entities/Tools/PageContent.php:361 Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] Static analysis (opengrep)
high opengrep/php.lang.security.weak-crypto app/Entities/Tools/SlugGenerator.php:55 Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] Static analysis (opengrep)
high opengrep/php.lang.security.weak-crypto app/Theming/CustomHtmlHeadContentProvider.php:27 Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] Static analysis (opengrep)
high opengrep/php.lang.security.weak-crypto app/Theming/CustomHtmlHeadContentProvider.php:43 Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] Static analysis (opengrep)
high opengrep/php.lang.security.weak-crypto app/Theming/ThemeService.php:139 Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] Static analysis (opengrep)
high opengrep/php.lang.security.weak-crypto app/Uploads/UserAvatars.php:108 Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/code/index.mjs:64 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 resources/js/code/index.mjs:64 User controlled data in a `elem.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/ajax-form.js:66 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 resources/js/components/ajax-form.js:66 User controlled data in a `this.responseContainer.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/ajax-form.js:71 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 resources/js/components/ajax-form.js:71 User controlled data in a `this.responseContainer.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/attachments.js:64 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 resources/js/components/attachments.js:64 User controlled data in a `this.listPanel.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/attachments.js:80 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 resources/js/components/attachments.js:80 User controlled data in a `this.editContainer.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/auto-suggest.js:116 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 resources/js/components/auto-suggest.js:116 User controlled data in a `this.list.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/code-editor.js:203 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 resources/js/components/code-editor.js:203 User controlled data in a `this.historyList.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/dropdown-search.js:57 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 resources/js/components/dropdown-search.js:57 User controlled data in a `this.listContainerElem.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/entity-search.js:44 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 resources/js/components/entity-search.js:44 User controlled data in a `this.searchResults.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/entity-selector.ts:141 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 resources/js/components/entity-selector.ts:141 User controlled data in a `this.resultsContainer.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/entity-selector.ts:159 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 resources/js/components/entity-selector.ts:159 User controlled data in a `this.resultsContainer.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/image-manager.js:187 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 resources/js/components/image-manager.js:187 User controlled data in a `el.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/image-manager.js:192 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 resources/js/components/image-manager.js:192 User controlled data in a `this.loadMore.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/image-manager.js:274 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 resources/js/components/image-manager.js:274 User controlled data in a `this.formContainer.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/page-comment-reference.ts:122 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 resources/js/components/page-comment-reference.ts:122 User controlled data in a `marker.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/page-comment-reference.ts:202 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 resources/js/components/page-comment-reference.ts:202 User controlled data in a `close.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/page-editor.js:56 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 resources/js/components/page-editor.js:56 User controlled data in a `this.draftDisplay.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/template-manager.js:77 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 resources/js/components/template-manager.js:77 User controlled data in a `this.list.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/template-manager.js:86 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 resources/js/components/template-manager.js:86 User controlled data in a `this.list.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/components/user-select.js:17 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 resources/js/components/user-select.js:17 User controlled data in a `this.userInfoContainer.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/services/dom.ts:176 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 resources/js/services/dom.ts:176 User controlled data in a `wrap.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/services/vdom.ts:26 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 resources/js/services/vdom.ts:26 User controlled data in a `contentDom.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/wysiwyg-tinymce/config.js:167 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 resources/js/wysiwyg-tinymce/config.js:167 User controlled data in a `el.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/wysiwyg-tinymce/plugin-codeeditor.js:103 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 resources/js/wysiwyg-tinymce/plugin-codeeditor.js:103 User controlled data in a `tempEl.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/wysiwyg-tinymce/plugins-details.js:237 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 resources/js/wysiwyg-tinymce/plugins-details.js:237 User controlled data in a `details.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/wysiwyg/ui/decorators/MentionDecorator.ts:99 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 resources/js/wysiwyg/ui/decorators/MentionDecorator.ts:99 User controlled data in a `iconWrap.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/wysiwyg/ui/framework/blocks/color-picker.ts:68 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 resources/js/wysiwyg/ui/framework/blocks/color-picker.ts:68 User controlled data in a `removeButton.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/wysiwyg/ui/framework/blocks/color-picker.ts:77 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 resources/js/wysiwyg/ui/framework/blocks/color-picker.ts:77 User controlled data in a `selectButton.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/wysiwyg/ui/framework/blocks/external-content.ts:23 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 resources/js/wysiwyg/ui/framework/blocks/external-content.ts:23 User controlled data in a `wrapper.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/wysiwyg/ui/framework/blocks/menu-button.ts:10 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 resources/js/wysiwyg/ui/framework/blocks/menu-button.ts:10 User controlled data in a `icon.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/wysiwyg/ui/framework/buttons.ts:64 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 resources/js/wysiwyg/ui/framework/buttons.ts:64 User controlled data in a `icon.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
high opengrep/javascript.browser.security.insecure-document-method resources/js/wysiwyg/ui/framework/modals.ts:60 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 resources/js/wysiwyg/ui/framework/modals.ts:60 User controlled data in a `closeButton.innerHTML` is an anti-pattern that can lead to XSS vulnerabilities [confidence low] Static analysis (opengrep)
medium opengrep/javascript.lang.correctness.no-stringify-keys resources/js/components/auto-suggest.js:101 JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead. Lint
medium opengrep/javascript.lang.correctness.no-stringify-keys resources/js/components/auto-suggest.js:96 JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead. Lint
medium opengrep/javascript.lang.correctness.no-stringify-keys resources/js/components/auto-suggest.js:97 JSON stringify does not produce a stable key ordering, and should not be relied on for producing object keys. Consider using json-stable-stringify instead. Lint
medium opengrep/php.lang.security.unlink-use app/Console/Commands/InstallModuleCommand.php:255 Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low] Static analysis (opengrep)
medium opengrep/php.lang.security.unlink-use app/Console/Commands/InstallModuleCommand.php:264 Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low] Static analysis (opengrep)
medium opengrep/php.lang.security.unlink-use app/Exports/PdfGenerator.php:151 Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low] Static analysis (opengrep)
medium opengrep/php.lang.security.unlink-use app/Exports/ZipExports/ZipExportBuilder.php:100 Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low] Static analysis (opengrep)
medium opengrep/php.lang.security.unlink-use app/Exports/ZipExports/ZipExportBuilder.php:106 Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low] Static analysis (opengrep)
medium opengrep/php.lang.security.unlink-use app/Exports/ZipExports/ZipExportBuilder.php:113 Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low] Static analysis (opengrep)
medium opengrep/php.lang.security.unlink-use app/Exports/ZipExports/ZipImportRunner.php:121 Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low] Static analysis (opengrep)
medium opengrep/php.lang.security.unlink-use app/Http/DownloadResponseFactory.php:51 Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low] Static analysis (opengrep)
medium opengrep/php.lang.security.unlink-use app/Theming/ThemeModuleManager.php:79 Using user input when deleting files with `unlink()` is potentially dangerous. A malicious actor could use this to modify or access files they have no right to. [confidence low] Static analysis (opengrep)
medium osv/GHSA-3g3m-2fjr-6pw4 package-lock.json [email protected] (npm) is affected by GHSA-3g3m-2fjr-6pw4 Dependencies (osv-scanner)
medium osv/GHSA-3g3m-2fjr-6pw4 package-lock.json [email protected] (npm) is affected by GHSA-3g3m-2fjr-6pw4 Dependencies (osv-scanner)
medium osv/GHSA-g3hv-75wg-m249 package-lock.json [email protected] (npm) is affected by GHSA-g3hv-75wg-m249 Dependencies (osv-scanner)
medium osv/GHSA-g3hv-75wg-m249 package-lock.json [email protected] (npm) is affected by GHSA-g3hv-75wg-m249 Dependencies (osv-scanner)
medium osv/GHSA-gcqx-w48m-w2h4 package-lock.json [email protected] (npm) is affected by GHSA-gcqx-w48m-w2h4 Dependencies (osv-scanner)
medium opengrep/javascript.lang.security.audit.unsafe-dynamic-method resources/js/code/languages.js:113 Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low] Static analysis (opengrep)
medium opengrep/javascript.jquery.security.audit.prohibit-jquery-html resources/js/code/languages.js:39 JQuery's `html` function is susceptible to Cross Site Scripting (XSS) attacks. If you're just passing text, consider `text` instead. Otherwise, use a function that escapes HTML such as edX's `HtmlUtils.setHtml()`. [confidence low] Static analysis (opengrep)
medium opengrep/javascript.lang.security.audit.unsafe-dynamic-method resources/js/components/ajax-form.js:64 Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low] Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/components/auto-suggest.js:116 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.audit.unsafe-dynamic-method resources/js/components/book-sort.js:200 Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low] Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/components/code-editor.js:205 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/markdown/actions.ts:115 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/markdown/actions.ts:141 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/markdown/actions.ts:344 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.audit.unsafe-dynamic-method resources/js/markdown/inputs/textarea.ts:149 Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low] Static analysis (opengrep)
medium opengrep/javascript.lang.security.audit.unsafe-dynamic-method resources/js/services/multi-lists.ts:61 Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low] Static analysis (opengrep)
medium opengrep/javascript.lang.security.audit.incomplete-sanitization resources/js/wysiwyg-tinymce/config.js:222 `` html, body, html.dark-mode { background: ${options.darkMode ? '#222' : '#fff'}; } body { padding-left: 15px !important; padding-right: 15px !important; height: initial !important; margin:0!important; ... Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/wysiwyg-tinymce/drop-paste-handling.js:50 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/wysiwyg-tinymce/drop-paste-handling.js:54 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.audit.unsafe-dynamic-method resources/js/wysiwyg-tinymce/fixes.js:155 Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low] Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/wysiwyg-tinymce/plugin-drawio.js:109 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/wysiwyg-tinymce/plugin-drawio.js:30 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/wysiwyg-tinymce/plugin-drawio.js:69 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/wysiwyg-tinymce/plugins-imagemanager.js:15 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/wysiwyg-tinymce/plugins-imagemanager.js:16 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.html-in-template-string resources/js/wysiwyg/lexical/rich-text/LexicalMediaNode.ts:349 This template literal looks like HTML and has interpolated variables. These variables are not HTML-encoded by default. If the variables contain HTML tags, these may be interpreted by the browser, resulting in cross-site scripting (XSS).... Static analysis (opengrep)
medium opengrep/javascript.lang.security.audit.unsafe-dynamic-method resources/js/wysiwyg/lexical/utils/index.ts:142 Using non-static data to retrieve and run functions from the object is dangerous. If the data is user-controlled, it may allow executing arbitrary code. [confidence low] Static analysis (opengrep)
medium opengrep/php.laravel.security.laravel-blade-form-missing-csrf resources/views/books/create.blade.php:30 Detected a form executing a state-changing HTTP method `POST` to route definition `{{ $bookshelf?->getUrl('/create-book') ?? url('/books') }}` without a Laravel CSRF decorator or explicit CSRF token implementation. If this form modifies... Static analysis (opengrep)
medium opengrep/php.laravel.security.laravel-blade-form-missing-csrf resources/views/books/edit.blade.php:19 Detected a form executing a state-changing HTTP method `POST` to route definition `{{ $book->getUrl() }}` without a Laravel CSRF decorator or explicit CSRF token implementation. If this form modifies sensitive state this will open your... Static analysis (opengrep)
medium opengrep/php.laravel.security.laravel-blade-form-missing-csrf resources/views/chapters/create.blade.php:18 Detected a form executing a state-changing HTTP method `POST` to route definition `{{ $book->getUrl('/create-chapter') }}` without a Laravel CSRF decorator or explicit CSRF token implementation. If this form modifies sensitive state... Static analysis (opengrep)
medium opengrep/php.laravel.security.laravel-blade-form-missing-csrf resources/views/chapters/edit.blade.php:20 Detected a form executing a state-changing HTTP method `POST` to route definition `{{ $chapter->getUrl() }}` without a Laravel CSRF decorator or explicit CSRF token implementation. If this form modifies sensitive state this will open... Static analysis (opengrep)
medium opengrep/php.laravel.security.laravel-blade-form-missing-csrf resources/views/shelves/create.blade.php:22 Detected a form executing a state-changing HTTP method `POST` to route definition `{{ url(` without a Laravel CSRF decorator or explicit CSRF token implementation. If this form modifies sensitive state this will open your application to... Static analysis (opengrep)
medium opengrep/php.laravel.security.laravel-blade-form-missing-csrf resources/views/shelves/edit.blade.php:19 Detected a form executing a state-changing HTTP method `POST` to route definition `{{ $shelf->getUrl() }}` without a Laravel CSRF decorator or explicit CSRF token implementation. If this form modifies sensitive state this will open your... Static analysis (opengrep)
low opengrep/bash.lang.correctness.unquoted-variable-expansion-in-command dev/docker/db-testing/run.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 dev/docker/db-testing/run.sh:52 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 dev/docker/db-testing/run.sh:53 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 dev/docker/db-testing/run.sh:58 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 dev/docker/db-testing/run.sh:59 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 dev/docker/db-testing/run.sh:68 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 dev/docker/db-testing/run.sh:69 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 dev/docker/db-testing/run.sh:70 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 dev/docker/db-testing/run.sh:79 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 dev/docker/db-testing/run.sh:80 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/javascript.lang.correctness.missing-template-string-indicator resources/js/wysiwyg-tinymce/config.js:224 This looks like a JavaScript template string. Are you missing a '$' in front of '{...}'? Lint
low osv/GHSA-63hm-g96r-2m2q composer.lock laravel/[email protected] (Packagist) is affected by GHSA-63hm-g96r-2m2q Dependencies (osv-scanner)
low gitleaks/generic-api-key config/app.php:81 Possible generic-api-key secret in history (commit db3acabc66); removed from the current tree but still retrievable Secrets (gitleaks)
low gitleaks/generic-api-key public/dist/wysiwyg.js:12 Possible generic-api-key secret in history (commit b5638a1c72); removed from the current tree but still retrievable Secrets (gitleaks)
low gitleaks/private-key tests/Helpers/OidcJwtHelper.php:92 Possible private-key secret in the current tree (test/docs/example file) Secrets (gitleaks)
low gitleaks/private-key tests/Unit/OpenIdConnectIdTokenTest.php:77 Possible private-key secret in history (commit f3d54e4a2d); 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.

AnalyzerPillarStatusVersionFindingsNote
AI tool configurationAI provenanceoksignatures-v10
Explicit AI attributionAI provenanceoksignatures-v10
Release velocityAI provenanceokprov-50
Coding styleAI provenanceok—0
Commit velocityAI provenanceokprov-50
Complexity (lizard)Code qualityoklizard 1.25.10
DocumentationCode qualityok—0
Duplication (jscpd)Code qualityokrepotrust-dup-w60
LintCode qualityokopengrep 1.33.1; rules f1d2b562b41414
Tests and CICode qualityok—0
Type safetyCode qualityok—0
CI workflows (zizmor)Securityskipped—0
Dependencies (osv-scanner)Securityokosv-scanner version: 2.7.16
Release downloadsSecurityok—0
Security postureSecurityok—0
Package registriesSecurityok—0
Static analysis (opengrep)Securityokopengrep 1.33.1; rules f1d2b562b414111
OpenSSF ScorecardSecurityokscorecard v5.6.00
Secrets (gitleaks)Securityokgitleaks 8.30.14

Score history

ScoredCommitScoringAI provenanceQualitySecurity
2026-11-140b6b667e0d84prov-5+qual-2+sec-20%6270

Embed a badge

Maintainers can show these in a README. Badges update when the repository is re-scored.

[![RepoTrust ai](https://repotrust.synapticcyber.com/badge/github.com/BookStackApp/BookStack/ai.svg)](https://repotrust.synapticcyber.com/r/github.com/BookStackApp/BookStack/)
[![RepoTrust quality](https://repotrust.synapticcyber.com/badge/github.com/BookStackApp/BookStack/quality.svg)](https://repotrust.synapticcyber.com/r/github.com/BookStackApp/BookStack/)
[![RepoTrust security](https://repotrust.synapticcyber.com/badge/github.com/BookStackApp/BookStack/security.svg)](https://repotrust.synapticcyber.com/r/github.com/BookStackApp/BookStack/)
Full text report

Scores

Pillar Score Signal Confidence Coverage
AI provenance (estimated AI-generated share) 0 possible 65% 100%
Code quality 62 weak 90% 100%
Security 70 weak 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: 2.1%

  • Estimated AI-generated share: 0.0%

  • Stylometry index: 0.01 per 1,000 lines (narrated steps 2, placeholders 0, assistant phrasing 0, emoji 0). Reported as a signal, not scored.

Month Lines added Attributed to AI
2025-12 2,753 0%
2026-01 962 0%
2026-02 3,301 0%
2026-03 731 0%
2026-04 1,690 0%
2026-05 4,892 0%
2026-06 458 0%
2026-07 2,109 0%
2026-08 4,391 0%
2026-09 2,762 0%
2026-10 483 0%
2026-11 559 0%

Evidence

  • 5,328 lines of first-party code in ~0.5h (10,656 lines/hour, PR #3258) (da0dc7292cda)
  • 3,080 lines of first-party code in ~0.5h (6,160 lines/hour, 1 commit session) (db4093d52335)
  • 1,010 lines of first-party code in ~1.2h (828 lines/hour, 1 commit session) (c519f707e826)
  • step-by-step narration comment: // Now we will clear the users out of memory so they are no longer available (app/Access/G)
  • step-by-step narration comment: // Now we process each of the unique target nodes, attempting (resources/js)

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.26, no CI test run detected; 11% of function code in complex or long functions; 16% duplicated lines. Weakest area: duplication.

Area Score
Complexity (lizard) 72
Duplication 39
Code smells (Opengrep) 99
Tests and CI 43
Documentation 65
Type safety 100
Process (Scorecard review/maintenance) 50
  • Functions: 6,308; mean complexity 2.4, 90th percentile 5; 74 complex and 22 long functions
  • Duplicated lines: 15.5% of 164,572 compared
  • Tests: 55,649 test lines for 217,367 source lines (ratio 0.26); CI test commands: none detected; 50% of recent source commits also change tests
  • Docs missing or thin: contributing, changelog

Most complex functions:

Security

Security posture is weak: 6 known vulnerabilities in 6 dependencies; 74 high-severity SAST findings. Weakest area: posture.

Area Score
Secrets (gitleaks, tree + history) 88
Static analysis (Opengrep) 90
Vulnerable dependencies (OSV) 77
CI workflows (zizmor) n/a
Posture (policy, updates, signing, lockfiles) 20
OpenSSF Scorecard 20
  • Known vulnerabilities: 6 in 6 packages (critical 0, high 0, medium 5, low 1)

  • Posture checks passed: signed commits, lockfiles; missing: security policy, dependency updates

  • OpenSSF Scorecard aggregate: 3.2/10 (published 2026-11-09)

Top findings

Severity Finding Location
high opengrep/php.lang.security.weak-crypto: Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] app/Access/Guards/ExternalBaseSessionGuard.php:220
high opengrep/php.laravel.security.laravel-dangerous-model-construction: Setting $guarded to an empty array allows mass assignment to every property in a Laravel model. This explicitly overrides Eloquent's safe-by-default mass assignment protections. [confidence low] app/Activity/Models/Watch.php:26
high opengrep/php.lang.security.weak-crypto: Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] app/App/helpers.php:23
high opengrep/php.laravel.security.laravel-cookie-secure-set: Found a configuration file where the secure attribute is not set to 'true'. Setting 'secure' to 'true' prevents the client from transmitting the cookie over unencrypted channels and therefore prevents cookies from being stolen through man in the middle attacks. [confidence low] app/Config/session.php:56
high opengrep/php.lang.security.weak-crypto: Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] app/Entities/Tools/PageContent.php:361
high opengrep/php.lang.security.weak-crypto: Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] app/Entities/Tools/SlugGenerator.php:55
high opengrep/php.lang.security.weak-crypto: Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] app/Theming/CustomHtmlHeadContentProvider.php:27
high opengrep/php.lang.security.weak-crypto: Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] app/Theming/CustomHtmlHeadContentProvider.php:43
high opengrep/php.lang.security.weak-crypto: Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] app/Theming/ThemeService.php:139
high opengrep/php.lang.security.weak-crypto: Detected usage of weak crypto function. Consider using stronger alternatives. [confidence low] app/Uploads/UserAvatars.php:108
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] resources/js/code/index.mjs:64
high opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a elem.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] resources/js/code/index.mjs:64
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] resources/js/components/ajax-form.js:66
high opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a this.responseContainer.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] resources/js/components/ajax-form.js:66
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] resources/js/components/ajax-form.js:71
high opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a this.responseContainer.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] resources/js/components/ajax-form.js:71
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] resources/js/components/attachments.js:64
high opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a this.listPanel.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] resources/js/components/attachments.js:64
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] resources/js/components/attachments.js:80
high opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a this.editContainer.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] resources/js/components/attachments.js:80
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] resources/js/components/auto-suggest.js:116
high opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a this.list.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] resources/js/components/auto-suggest.js:116
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] resources/js/components/code-editor.js:203
high opengrep/javascript.browser.security.insecure-innerhtml: User controlled data in a this.historyList.innerHTML is an anti-pattern that can lead to XSS vulnerabilities [confidence low] resources/js/components/code-editor.js:203
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] resources/js/components/dropdown-search.js:57

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.

Repository profile

  • Source lines: 217,367; test lines: 55,649
Language Lines
PHP 195,354
TypeScript 70,516
JavaScript 7,037
Shell 104
SQL 5