Repository Analysis

tinacms/tinacms

A fully open-source headless CMS that supports Markdown and Visual Editing

0.8 Likely human-written View on GitHub
0.8
Adjusted Score
0.8
Raw Score
100%
Time Factor
2026-05-29
Last Push
13,374
Stars
TypeScript
Language
191,545
Lines of Code
2019
Files
99
Pattern Hits
2026-05-31
Scan Date

Score History

Severity Breakdown

CRITICAL 0HIGH 1MEDIUM 27LOW 71

Pattern Findings

99 matches across 10 categories. Click a row to expand file-level details.

Decorative Section Separators22 hits · 66 pts
SeverityFileLineSnippet
MEDIUMplaywright/tina-playwright/tests/api/pagination.spec.ts43// ── 1. `first` limits results ─────────────────────────────────────────────────
MEDIUMplaywright/tina-playwright/tests/api/pagination.spec.ts63// ── 2. `hasNextPage` reflects whether more results exist ──────────────────────
MEDIUMplaywright/tina-playwright/tests/api/pagination.spec.ts104// ── 3. `after` cursor advances pages with no overlap ──────────────────────────
MEDIUMplaywright/tina-playwright/tests/api/sorting.spec.ts57// ── 1. Unknown sort key — documents the current behavior (throws) ─────────────
MEDIUMplaywright/tina-playwright/tests/api/sorting.spec.ts82// ── 2. Index freshness after CREATE ──────────────────────────────────────────
MEDIUMplaywright/tina-playwright/tests/api/sorting.spec.ts118// ── 3. Index freshness after UPDATE ──────────────────────────────────────────
MEDIUMplaywright/tina-playwright/tests/api/sorting.spec.ts181// ── 4. Index freshness after DELETE ──────────────────────────────────────────
MEDIUMplaywright/tina-playwright/tests/api/sorting.spec.ts225// ── 5. Ascending order via `sort` ────────────────────────────────────────────
MEDIUMplaywright/tina-playwright/tests/api/sorting.spec.ts255// ── 6. Descending order via `last` ────────────────────────────────────────────
MEDIUMplaywright/tina-playwright/tests/api/search.spec.ts25// ── 1. Title field is indexed — "gamma" only exists in the title ──────────────
MEDIUMplaywright/tina-playwright/tests/api/search.spec.ts45// ── 2. Query is precise — "gamma" does not return unrelated posts ─────────────
MEDIUMpackages/@tinacms/graphql/src/database/database.test.ts25// ─── InMemoryBridge ──────────────────────────────────────────────────────────
MEDIUMpackages/@tinacms/graphql/src/database/database.test.ts64// ─── Schema ──────────────────────────────────────────────────────────────────
MEDIUMpackages/@tinacms/graphql/src/database/database.test.ts86// ─── Fixtures ─────────────────────────────────────────────────────────────────
MEDIUMpackages/@tinacms/graphql/src/database/database.test.ts111// ─── Setup helper ────────────────────────────────────────────────────────────
MEDIUMpackages/@tinacms/graphql/src/database/database.test.ts147// ─── Tests ───────────────────────────────────────────────────────────────────
MEDIUM…ckages/@tinacms/graphql/src/database/datalayer.test.ts22// ─── Helpers ───────────────────────────────────────────────────────────────
MEDIUM…ckages/@tinacms/graphql/src/database/datalayer.test.ts54// ─── makeFilter ─────────────────────────────────────────────────────────────
MEDIUM…ckages/@tinacms/graphql/src/database/datalayer.test.ts310// ─── makeFilterChain ─────────────────────────────────────────────────────────
MEDIUM…ckages/@tinacms/graphql/src/database/datalayer.test.ts457// ─── makeFilterSuffixes ──────────────────────────────────────────────────────
MEDIUM…ckages/@tinacms/graphql/src/database/datalayer.test.ts587// ─── makeIndexOpsForDocument ─────────────────────────────────────────────────
MEDIUM…ckages/@tinacms/graphql/src/database/datalayer.test.ts695// ─── coerceFilterChainOperands ───────────────────────────────────────────────
Fake / Example Data32 hits · 32 pts
SeverityFileLineSnippet
LOWexamples/next/tina-self-hosted-demo/tina/tina-lock.json1{"schema":{"version":{"fullVersion":"2.2.3","major":"2","minor":"2","patch":"3"},"meta":{"flags":["experimentalData"]},"
LOWexamples/next/tina-self-hosted-demo/tina/tina-lock.json1{"schema":{"version":{"fullVersion":"2.2.3","major":"2","minor":"2","patch":"3"},"meta":{"flags":["experimentalData"]},"
LOW…xt/tina-self-hosted-demo/components/blocks/content.tsx30 body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam
LOW…xt/tina-self-hosted-demo/components/blocks/content.tsx30 body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam
LOWexamples/next/kitchen-sink/tina/tina-lock.json1{"schema":{"version":{"fullVersion":"2.3.0","major":"2","minor":"3","patch":"0"},"meta":{"flags":["experimentalData"]},"
LOWexamples/next/kitchen-sink/tina/tina-lock.json1{"schema":{"version":{"fullVersion":"2.3.0","major":"2","minor":"3","patch":"0"},"meta":{"flags":["experimentalData"]},"
LOW…amples/next/kitchen-sink/components/blocks/content.tsx38 body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam
LOW…amples/next/kitchen-sink/components/blocks/content.tsx38 body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam
LOWexamples/hugo/kitchen-sink/tina/tina-lock.json1{"schema":{"version":{"fullVersion":"2.2.3","major":"2","minor":"2","patch":"3"},"meta":{"flags":["experimentalData"]},"
LOWexamples/hugo/kitchen-sink/tina/tina-lock.json1{"schema":{"version":{"fullVersion":"2.2.3","major":"2","minor":"2","patch":"3"},"meta":{"flags":["experimentalData"]},"
LOWexamples/hugo/kitchen-sink/tina/schemas/blocks.ts182 body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam
LOWexamples/hugo/kitchen-sink/tina/schemas/blocks.ts182 body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam
LOWexamples/astro/visual-editing/tina/tina-lock.json1{"schema":{"version":{"fullVersion":"2.3.1","major":"2","minor":"3","patch":"1"},"meta":{"flags":["experimentalData"]},"
LOWexamples/astro/visual-editing/tina/tina-lock.json1{"schema":{"version":{"fullVersion":"2.3.1","major":"2","minor":"3","patch":"1"},"meta":{"flags":["experimentalData"]},"
LOWexamples/astro/visual-editing/tina/schemas/blocks.ts176 body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam
LOWexamples/astro/visual-editing/tina/schemas/blocks.ts176 body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam
LOWexamples/astro/kitchen-sink/tina/tina-lock.json1{"schema":{"version":{"fullVersion":"2.3.0","major":"2","minor":"3","patch":"0"},"meta":{"flags":["experimentalData"]},"
LOWexamples/astro/kitchen-sink/tina/tina-lock.json1{"schema":{"version":{"fullVersion":"2.3.0","major":"2","minor":"3","patch":"0"},"meta":{"flags":["experimentalData"]},"
LOWexamples/astro/kitchen-sink/tina/schemas/blocks.ts175 body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam
LOWexamples/astro/kitchen-sink/tina/schemas/blocks.ts175 body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam
LOWexamples/react/kitchen-sink/tina/tina-lock.json1{"schema":{"version":{"fullVersion":"2.2.3","major":"2","minor":"2","patch":"3"},"meta":{"flags":["experimentalData"]},"
LOWexamples/react/kitchen-sink/tina/tina-lock.json1{"schema":{"version":{"fullVersion":"2.2.3","major":"2","minor":"2","patch":"3"},"meta":{"flags":["experimentalData"]},"
LOW…s/react/kitchen-sink/src/components/blocks/content.tsx37 body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam
LOW…s/react/kitchen-sink/src/components/blocks/content.tsx37 body: 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Donec odio. Quisque volutpat mattis eros. Nullam
LOW…s/mdx/src/next/tests/markdown-basic-kitchen-sink/in.md15> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, v
LOW…s/mdx/src/next/tests/markdown-basic-kitchen-sink/in.md15> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, v
LOW…x/src/next/tests/markdown-basic-kitchen-sink/node.json72 "text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestib
LOW…x/src/next/tests/markdown-basic-kitchen-sink/node.json72 "text": "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestib
LOW…/mdx/src/next/tests/markdown-basic-kitchen-sink/out.md15> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, v
LOW…/mdx/src/next/tests/markdown-basic-kitchen-sink/out.md15> Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aliquam hendrerit mi posuere lectus. Vestibulum enim wisi, v
LOW…ckages/@tinacms/cli/src/cmds/init/templates/content.ts7Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut non lorem diam. Quisque vulputate nibh sodales eros pretium
LOW…ckages/@tinacms/cli/src/cmds/init/templates/content.ts7Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut non lorem diam. Quisque vulputate nibh sodales eros pretium
Over-Commented Block21 hits · 21 pts
SeverityFileLineSnippet
LOWexamples/next/tina-self-hosted-demo/next-env.d.ts1/// <reference types="next" />
LOWpackages/create-tina-app/src/util/isNpm.js1// Copyright (c) 2015, npm, Inc
LOW…ckages/@tinacms/mdx/src/next/shortcodes/mdast/index.ts361 position,
LOW…ckages/@tinacms/mdx/src/next/shortcodes/mdast/index.ts381 // b.type +
LOW…ges/@tinacms/app/src/fields/rich-text/monaco/index.tsx121 // endColumn: word.endColumn,
LOWpackages/@tinacms/cli/src/next/cache-manager.test.ts61 // `loadDatabaseFile` builds its outfile from the path returned here, so
LOWpackages/@tinacms/cli/src/next/config-manager.ts381 // Use a timestamped subdirectory inside the project's generated cache folder
LOW…ms/cli/src/next/localcontentpath-orchestration.test.ts1// End-to-end orchestration test for `localContentPath`.
LOW…nacms/cli/src/next/codegen/consumer-resolution.test.ts1// Consumer-side regression test for the generated `./types.js` import in
LOW…es/@tinacms/cli/src/next/commands/dev-command/index.ts321 heading: '✅ 🦙 TinaCMS Dev Server is active:',
LOW…ages/@tinacms/cli/src/cmds/init/prompts/gitProvider.ts41 // title: 'Other', // TODO should this be an input for init? it just leaves a broken database.ts file
LOW…ges/@tinacms/cli/src/cmds/init/prompts/authProvider.ts81export const chooseAuthProvider = async ({
LOW…ges/@tinacms/cli/src/cmds/init/prompts/authProvider.ts101 // value: 'other',
LOW…s/@tinacms/cli/src/cmds/forestry-migrate/util/index.ts241 }
LOWpackages/@tinacms/cli/src/server/server.ts81 // const levelHost = new ManyLevelHost(
LOWpackages/@tinacms/scripts/src/index.ts361
LOWpackages/tinacms/next-env.d.ts1/// <reference types="next" />
LOW…ins/mdx-field-plugin/plate/plugins/core/formatting.tsx61 allow: HEADING_LEVELS,
LOW…olkit/fields/plugins/mdx-field-plugin/monaco/index.tsx101 monaco.languages.typescript.typescriptDefaults.setEagerModelSync(true);
LOW.github/workflows/codeql.yml1# For most projects, this workflow file will not need changing; you simply need
LOW.github/workflows/codeql.yml61 # Initializes the CodeQL tools for scanning.
Hyper-Verbose Identifiers16 hits · 16 pts
SeverityFileLineSnippet
LOWpackages/create-tina-app/src/util/examples.ts45export async function downloadAndExtractExample(root: string, name: string) {
LOWpackages/create-tina-app/src/util/fileUtil.ts15export function folderContainsInstallConflicts(root: string): string[] {
LOWpackages/create-tina-app/src/util/fileUtil.ts83export function updateProjectPackageVersion(dir: string, version: string) {
LOWpackages/@tinacms/cli/src/next/database.ts44export async function createAndInitializeDatabase(
LOW…tinacms/cli/src/next/commands/doctor-command/doctor.ts374function readYarnBerryLockVersions(contents: string): Map<string, string> {
LOW…tinacms/cli/src/next/commands/doctor-command/doctor.ts399function normalizeInstalledVersion(version: string): string {
LOW…tinacms/cli/src/next/commands/doctor-command/doctor.ts418function extractYarnBerryPackageName(descriptor: string): string | undefined {
LOW…tinacms/cli/src/next/commands/doctor-command/doctor.ts425function getYarnBerryInstalledVersion(
LOW…acms/cli/src/next/commands/dev-command/server/media.ts273function resolveStrictlyWithinBase(userPath: string, baseDir: string): string {
LOWpackages/@tinacms/cli/src/server/models/media.ts159function resolveStrictlyWithinBase(userPath: string, baseDir: string): string {
LOWpackages/@tinacms/search/src/fuzzy/distance.ts47export function damerauLevenshteinDistance(str1: string, str2: string): number {
LOWpackages/@tinacms/graphql/src/database/datalayer.ts250function operatorMatchesBinaryFilter(
LOWpackages/@tinacms/graphql/src/database/datalayer.ts318function operatorMatchesTernaryFilter(
LOW…tinacms/src/toolkit/components/ui/date-time-picker.tsx114function getValidArrowMinuteOrSecond(value: string, step: number) {
LOW…/src/toolkit/fields/plugins/image-field-plugin.test.ts34function imageFieldOnChangeOriginal(
LOW…plugins/mdx-field-plugin/plate/plugins/core/common.tsx111export function normalizeLinksInCodeBlocks(node) {
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippet
MEDIUMpackages/tinacms/src/tina-cms.tsx175 // schema is now required as the Global Nav and CMS utilize it
MEDIUMpackages/tinacms/src/rich-text/static.tsx90 // Note: A more robust type would be a discriminated union of all possible node shapes.
MEDIUM…dashboard/media-usage-dashboard/media-usage-scanner.ts243 // Fetch _sys fully because `ui.router` could utilize any of them to construct a route
Cross-Language Confusion (JS/TS)1 hit · 5 pts
SeverityFileLineSnippet
HIGH…acms/cli/src/next/codegen/codegen/sdkPlugin/visitor.ts65 print(node)
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippet
MEDIUMpackages/tinacms/src/toolkit/core/cms.ts29 * #### Creating a CMS
Slop Phrases1 hit · 3 pts
SeverityFileLineSnippet
MEDIUM.github/workflows/codeql.yml55 # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize how
Redundant / Tautological Comments1 hit · 2 pts
SeverityFileLineSnippet
LOWscripts/require_gh_token.sh11 # Check if token can create a relese
Verbosity Indicators1 hit · 2 pts
SeverityFileLineSnippet
LOWpackages/@tinacms/schema-tools/src/schema/TinaSchema.ts147 // if the collection has a match or exclude, we need to check if the file matches