Repository Analysis

Zettlr/Zettlr

Your One-Stop Publication Workbench

1.7 Likely human-written View on GitHub
1.7
Adjusted Score
1.7
Raw Score
100%
Time Factor
2026-05-27
Last Push
13,045
Stars
TypeScript
Language
154,338
Lines of Code
763
Files
180
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 0MEDIUM 30LOW 150

Pattern Findings

180 matches across 8 categories. Click a row to expand file-level details.

Fake / Example Data66 hits · 79 pts
SeverityFileLineSnippet
LOWCHANGELOG.md4289- HTML-style comments (`<!-- Lorem Ipsum -->`) are now also exempt from the word counting.
LOWtest/counter.spec.ts57 input: '---\ntitle: "Some title"\nkeywords:\n - one\n - two\n - three\n...\n\n# Heading\n\nLorem Ipsum dolor, sit
LOWtest/extract-yaml-frontmatter.spec.ts33 author: 'Jane Doe',
LOWtest/extract-yaml-frontmatter.spec.ts47 author: 'Jane Doe',
LOWscripts/test-gui/test-files/README.md3You are viewing the Zettlr testing environment. This normally means that you have run the `yarn test-gui` command, so in
LOW…st-gui/test-files/Miscellaneous/Export Link Removal.md17Lorem Ipsum [[file]] dolor sit
LOW…st-gui/test-files/Miscellaneous/Export Link Removal.md21Lorem Ipsum [[this is some file]] dolor sit
LOW…ipts/test-gui/test-files/Syntax Highlighting/Config.md29ENV myName="John Doe" myDog=Rex\ The\ Dog \
LOW…ts/test-gui/test-files/Rendering/Generic Document 2.md41Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna ali
LOW…ts/test-gui/test-files/Rendering/Generic Document 2.md41Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna ali
LOWscripts/test-gui/test-files/Rendering/Math.md84Lorem ipsum dolor sit amet, $a^2 + b^2 = c^2$ consectetur adipiscing elit. Nam eros velit, fringilla et magna nec, posue
LOWscripts/test-gui/test-files/Rendering/Math.md84Lorem ipsum dolor sit amet, $a^2 + b^2 = c^2$ consectetur adipiscing elit. Nam eros velit, fringilla et magna nec, posue
LOW…ts/test-gui/test-files/Rendering/Generic Document 1.md11abstract: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
LOW…ts/test-gui/test-files/Rendering/Generic Document 1.md11abstract: Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore
LOW…ts/test-gui/test-files/Rendering/Generic Document 1.md86> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
LOW…ts/test-gui/test-files/Rendering/Generic Document 1.md86> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
LOW…ts/test-gui/test-files/Rendering/Generic Document 1.md96> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
LOW…ts/test-gui/test-files/Rendering/Generic Document 1.md96> This is a blockquote with two paragraphs. Lorem ipsum dolor sit amet,
LOW…ts/test-gui/test-files/Rendering/Generic Document 1.md181* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
LOW…ts/test-gui/test-files/Rendering/Generic Document 1.md181* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
LOW…ts/test-gui/test-files/Rendering/Generic Document 1.md189* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
LOW…ts/test-gui/test-files/Rendering/Generic Document 1.md189* Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
LOW…ts/test-gui/test-files/Rendering/Generic Document 1.md1991. This is a list item with two paragraphs. Lorem ipsum dolor
LOW…ts/test-gui/test-files/Rendering/Generic Document 1.md216only required to indent the first line. Lorem ipsum dolor
LOWscripts/test-gui/test-files/Rendering/Citations.md58Lorem ipsum [@Marx1962] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md58Lorem ipsum [@Marx1962] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md62Lorem ipsum [-@Marx1962] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md62Lorem ipsum [-@Marx1962] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md66Lorem ipsum [This is a prefix @Marx1962] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md66Lorem ipsum [This is a prefix @Marx1962] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md70Lorem ipsum [invalid citepart; some prefix @Marx1962, suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md70Lorem ipsum [invalid citepart; some prefix @Marx1962, suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md74Lorem ipsum [@Marx1962 very much a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md74Lorem ipsum [@Marx1962 very much a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md78Lorem ipsum [@Marx1962{} very much a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md78Lorem ipsum [@Marx1962{} very much a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md82Lorem ipsum [@{https://dx.doi.org/some/doi.12345}{} this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md82Lorem ipsum [@{https://dx.doi.org/some/doi.12345}{} this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md86Lorem ipsum [@Marx1962; @Marx2009] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md86Lorem ipsum [@Marx1962; @Marx2009] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md90Lorem ipsum [This is a prefix @Marx1962 and a suffix; a second prefix -@Marx2009, 23-24 and a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md90Lorem ipsum [This is a prefix @Marx1962 and a suffix; a second prefix -@Marx2009, 23-24 and a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md94Lorem ipsum [This is a prefix -@Marx1962, §§ 23-24, and this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md94Lorem ipsum [This is a prefix -@Marx1962, §§ 23-24, and this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md98Lorem ipsum [This is a prefix @Marx1962, §§ 23-24, and this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md98Lorem ipsum [This is a prefix @Marx1962, §§ 23-24, and this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md102Lorem ipsum [This is a prefix -@Marx1962, 23-24, and this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md102Lorem ipsum [This is a prefix -@Marx1962, 23-24, and this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md106Lorem ipsum [This is a prefix -@Marx1962, iv-xx, and this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md106Lorem ipsum [This is a prefix -@Marx1962, iv-xx, and this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md110Lorem ipsum [This is a prefix -@Marx1962, pp. iiim-mci, and this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md110Lorem ipsum [This is a prefix -@Marx1962, pp. iiim-mci, and this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md114Lorem ipsum [@Marx1962, especially figure 3, and more] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md114Lorem ipsum [@Marx1962, especially figure 3, and more] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md118Lorem ipsum @Marx1962 dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md118Lorem ipsum @Marx1962 dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md122Lorem ipsum @Marx1962 [§§ 23-24, and this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md122Lorem ipsum @Marx1962 [§§ 23-24, and this is a suffix] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md126Lorem ipsum @Marx1962 [23-24] dolor sit amet.
LOWscripts/test-gui/test-files/Rendering/Citations.md126Lorem ipsum @Marx1962 [23-24] dolor sit amet.
6 more matches not shown…
Decorative Section Separators20 hits · 60 pts
SeverityFileLineSnippet
MEDIUMstatic/defaults/Microsoft Word to Markdown.yaml2# ====================
MEDIUMstatic/defaults/text2tags to Markdown.yaml2# ====================
MEDIUMstatic/defaults/OPML to Markdown.yaml2# ====================
MEDIUMstatic/defaults/Reveal.js.yaml2# ====================
MEDIUMstatic/defaults/Rich Text Format.yaml2# ====================
MEDIUMstatic/defaults/Wiki to Markdown.yaml2# ====================
MEDIUMstatic/defaults/Open Document Text to Markdown.yaml2# ====================
MEDIUMstatic/defaults/reStructuredText to Markdown.yaml2# ====================
MEDIUMstatic/defaults/Markdown.yaml2# ====================
MEDIUMstatic/defaults/Markdown.yaml5# ====================
MEDIUMstatic/defaults/Open Document Text.yaml2# ====================
MEDIUMstatic/defaults/LaTeX to Markdown.yaml2# ====================
MEDIUMstatic/defaults/HTML to Markdown.yaml2# ====================
MEDIUMstatic/defaults/HTML.yaml2# ====================
MEDIUMstatic/defaults/Textile to Markdown.yaml2# ====================
MEDIUMstatic/defaults/Orgmode to Markdown.yaml2# ====================
MEDIUMstatic/defaults/XeLaTeX PDF.yaml2# ====================
MEDIUMstatic/defaults/Microsoft Word.yaml2# ====================
MEDIUMstatic/defaults/Plain Text.yaml2# ====================
MEDIUMstatic/defaults/LaTeX.yaml2# ====================
Over-Commented Block44 hits · 44 pts
SeverityFileLineSnippet
LOWwebpack.main.config.js41 __BUILD_DATE__: JSON.stringify((new Date()).toISOString()),
LOWforge.config.js201 // We must add native node modules to this option. Doing so ensures that
LOWresources/icons/compile-macos-icon.sh1#!/usr/bin/env bash
LOWsource/app/app-service-container.ts141 // instantiate them to ensure that their boot functions work properly. We
LOWsource/app/util/attach-app-navigation-handlers.ts61 // NOTE: This is only called when a *renderer* wants to open a new window.
LOWsource/app/service-providers/updates/index.ts441
LOWsource/app/service-providers/commands/file-rename.ts101
LOW…e/app/service-providers/commands/dir-project-export.ts61 this._app.log.error(`Could not export project: Directory ${dir.name} is not a project.`)
LOW…app/service-providers/citeproc/util/database-loader.ts81 // get citekeys to autocomplete, I found out by looking at a problematic CSL
LOWsource/app/service-providers/documents/index.ts801 // provider when the user intents to open them. Users can also link
LOWsource/app/service-providers/documents/index.ts1541 doc.saveTimeout = undefined
LOWsource/common/util/css-safe-string.ts21 *
LOWsource/common/util/make-valid-uri.ts41 // github.com --> is a valid hostname, but has no protocol and no "www"
LOWsource/common/util/make-valid-uri.ts121 // At this point, it might be that isFile is still undefined. If so,
LOWsource/common/util/make-valid-uri.ts141 // NOTE: Using hasPotentialLocalFilenameExtension, we prevent this
LOWsource/common/util/is-function.ts21 // We are calling the toString-function of the object prototype, as we can
LOW…ules/markdown-editor/plugins/md-paste-drop-handlers.ts101 // type "Files" and "text/html", the latter of which often includes the
LOW…common/modules/markdown-editor/keymaps/table-editor.ts61 shift: _v => movePrevRow(mainView) ?? true
LOW…n/modules/markdown-editor/parser/frontmatter-parser.ts61 if (!/^(?:-{3}|\.{3})$/.test(line.text)) {
LOW…/modules/markdown-editor/parser/pandoc-table-parser.ts21import {
LOW…/modules/markdown-editor/parser/pandoc-table-parser.ts41// [|+]?$ => optional tailing pipe or cross
LOW…mmon/modules/markdown-editor/parser/citation-parser.ts361 }
LOW…mmon/modules/markdown-editor/parser/citation-parser.ts421 // complex, I could not use a switch statement, nor an if-else branching
LOW…mmon/modules/markdown-editor/parser/citation-parser.ts641 // If the last character at position i in the citekey is a punctuation
LOW…common/modules/markdown-editor/table-editor/subview.ts41
LOW…/common/modules/markdown-editor/table-editor/widget.ts81 super()
LOW…/common/modules/markdown-editor/table-editor/widget.ts461 // anywhere inside the table cell delimiters, and this will make
LOW…/common/modules/markdown-editor/table-editor/widget.ts501 contentWrapper.innerHTML = html.length > 0 ? sanitizeHTML(html) : '&nbsp;'
LOW…ommon/modules/markdown-editor/linters/language-tool.ts261 })
LOW…odules/markdown-utils/markdown-ast/parse-table-node.ts41 * could not parse the table, a TextNode is
LOW…odules/markdown-utils/markdown-ast/parse-table-node.ts61 // consist of multiple lines. The AST-parser needs to allow those, too.
LOWsource/common/modules/preload/index.ts21// listen to a few events, we need to ramp up some of the channels' max
LOWstatic/defaults/Microsoft Word to Markdown.yaml1# ZETTLR DEFAULTS FILE
LOWstatic/defaults/Markdown.yaml1# ZETTLR DEFAULTS FILE
LOWscripts/get-pandoc.sh41# 0: stdin | 1: stdout | 2: stderr
LOWscripts/i18n.sh1# This script extracts (new) translatable strings from the source and updates
LOWscripts/update_apt.sh1#!/bin/zsh
LOWscripts/add-osx-cert.sh1#!/usr/bin/env sh
LOWscripts/test-gui/test-config.example.yml1# This is a test configuration file that will be read and parsed to JSON during
LOW.github/workflows/build.yml1name: Build
LOW.github/workflows/build.yml21# #
LOW.github/workflows/build.yml41# * Every runner will retrieve the package.json's "version" field by running #
LOW.github/workflows/build.yml401 # #
LOW.vscode/extensions.json1{
Hyper-Verbose Identifiers32 hits · 32 pts
SeverityFileLineSnippet
LOWforge.config.js74function generateRendererEntrypoint (name, folder) {
LOWsource/app/app-service-container.ts66export function isAppServiceContainerReady (): boolean {
LOWsource/app/util/attach-app-navigation-handlers.ts57export function attachAppNavigationHandlers (log: LogProvider): void {
LOW…urce/app/service-providers/commands/open-attachment.ts44function getBibliographyForDescriptor (descriptor: MDFileDescriptor): string {
LOW…-providers/windows/create-project-properties-window.ts34export default function createProjectPropertiesWindow (logger: LogProvider, config: ConfigProvider, conf: WindowPosition
LOW…vice-providers/windows/dialog/should-overwrite-file.ts26export default async function shouldOverwriteFileDialog (win: BrowserWindow|null, filename: string): Promise<boolean> {
LOWsource/win-main/App.vue774function fileManagerSplitComponentResized (sizes: [number, number]): void {
LOWsource/win-main/App.vue778function editorSidebarSplitComponentResized (sizes: [number, number]): void {
LOWsource/win-main/EditorBranch.vue103function paneShouldHaveBorderRight (index: number): boolean {
LOWsource/win-main/EditorBranch.vue119function paneShouldHaveBorderBottom (index: number): boolean {
LOWsource/win-main/MainEditor.vue60function getBibliographyForDescriptor (descriptor: MDFileDescriptor): string {
LOWsource/win-main/MainEditor.vue655function maybeHighlightSearchResults (): void {
LOWsource/win-main/sidebar/ReferencesTab.vue37function getBibliographyForDescriptor (descriptor: MDFileDescriptor): string {
LOWsource/win-log-viewer/App.vue170function containerScrolledToBottom (): boolean {
LOWsource/common/util/file-extention-checks.ts149export function hasAnyRecognizedFileExtension (filePath: string, customExtensions: string[] = []): boolean {
LOWsource/common/util/file-extention-checks.ts160export function getExtensionForDocumentType (type: DocumentType): string {
LOWsource/common/util/file-extention-checks.ts182export function getDocumentTypeForExtension (filePath: string): DocumentType|undefined {
LOWsource/common/util/get-bibliography-for-descriptor.ts28export function getBibliographyForDescriptor (descriptor: MDFileDescriptor): string {
LOWsource/common/vue/iris-indicator-utils/util/webgl.ts80export function resizeCanvasToDisplaySize (canvas: HTMLCanvasElement) {
LOW…on/modules/window-register/register-default-context.ts38export default function registerDefaultContextMenu (): void {
LOWsource/common/modules/markdown-editor/util/links.ts96export function findLinksforReferenceLinkLabel (state: EditorState, labelString: string): SyntaxNode[] {
LOWsource/common/modules/markdown-editor/util/links.ts128export function findReferenceForLinkLabel (state: EditorState, labelString: string): SyntaxNode|null {
LOWsource/common/modules/markdown-editor/util/links.ts165export function countLinksReferencingLabel (state: EditorState, labelString: string): number {
LOW…odules/markdown-editor/plugins/default-context-menu.ts35function getLinkOrImageNodeFromPos (view: EditorView, pos: number): SyntaxNode|null {
LOW…ules/markdown-editor/plugins/md-paste-drop-handlers.ts39function normalizePathForInsertion (p: string, basePath: string): string {
LOW…mon/modules/markdown-editor/table-editor/widget-dom.ts21export function generateEmptyTableWidgetElement (): { wrapper: HTMLDivElement, table: HTMLTableElement } {
LOW…/modules/markdown-editor/table-editor/commands/util.ts209export function getDelimiterLineCellOffsets (line: string, delimChar: string): [number, number][] {
LOWsource/common/modules/markdown-editor/theme/syntax.ts143export function markdownSyntaxHighlighter (): Extension {
LOW…e/common/modules/markdown-editor/commands/footnotes.ts169export function selectFootnoteBeforeDelete (target: EditorView): boolean {
LOW…ommon/modules/markdown-editor/linters/language-tool.ts64export function extractLTSpellcheckSuggestionsFrom (diag: Diagnostic): string[]|null {
LOW…ommon/modules/markdown-editor/linters/language-tool.ts86export function isLanguageToolMisspelling (diag: Diagnostic): boolean {
LOWsource/pinia/document-tree-store.ts138function maybeUncollapseDirectories (filePath: string): void {
AI Slop Vocabulary7 hits · 21 pts
SeverityFileLineSnippet
MEDIUMsource/app/service-providers/citeproc/index.ts395 // every chokidar process we utilize. Otherwise, the fsevents dylib will
MEDIUMsource/app/service-providers/documents/index.ts604 // every chokidar process we utilize. Otherwise, the fsevents dylib will
MEDIUMsource/app/service-providers/fsal/fsal-watchdog.ts108 // every chokidar process we utilize. Otherwise, the fsevents dylib will
MEDIUMsource/common/vue/window/WindowChrome.vue307 // position: absolute without having to delve into weird hacks.
MEDIUM…on/modules/markdown-editor/autocomplete/code-blocks.ts111 // To make the regex more robust, there is a capturing group that captures
MEDIUM…ce/common/modules/markdown-editor/plugins/toc-field.ts122 // utilize the full tree.
MEDIUM…mmon/modules/markdown-editor/parser/citation-parser.ts727 // Essentially, this `if` branch requires that a valid citation must have
Slop Phrases5 hits · 8 pts
SeverityFileLineSnippet
LOWsource/app/service-providers/config/index.ts212 // Don't forget to update the version
MEDIUMsource/win-assets/DefaultsTab.vue114const NEW_DEFAULTS_FILE_CONTENTS = `# This is a new defaults file that you can use to define rules for exporting or
LOWsource/common/vue/window/SplitView.vue102 // Don't forget to also update the minimum widths
LOWscripts/get-pandoc.sh24# optional second one. Also make sure to check the required one
LOW.github/workflows/build.yml488 # We must make sure to copy the three additional files
Verbosity Indicators4 hits · 6 pts
SeverityFileLineSnippet
LOWsource/app/util/environment-check.ts98 // We need to check if Pandoc has been bundled with this package.
LOWsource/common/vue/PopoverWrapper.vue242 // we need to check if we have to move the popover in the second axis. For
LOW…e/common/modules/markdown-editor/parser/math-parser.ts67 // However, if this is an invalid closing delimiter, we need to check if
LOWsource/pinia/window-state-store.ts58 * This variable stores search results from the global search
Self-Referential Comments2 hits · 6 pts
SeverityFileLineSnippet
MEDIUMscripts/add-osx-cert.sh20# Create a new keychain using the password "actions"
MEDIUM.github/workflows/build.yml9# This file contains the logic necessary to build a full release from source. #