CodeVetter
← All unpacks
CodeVetter · Repo Unpack evidence

keystonejs/keystone

Scanned commit 1a8f2b7fae dated 2026-09-14 — last upstream commit. Generated by codevetter 1.15.0 on 2026-10-02.

github.com/keystonejs/keystone ↗ · 1474 files · 5.6 MB

--- Keystone helps you build faster and scale further than any other CMS or App Framework.

Deep analysis by cli:codex via the codex CLI on 2026-10-02 (381s) — every claim below links to its cited source files. Source inspection; upstream code and tests were not executed.

Overview

Keystone is a TypeScript CMS and application backend framework for developers who define data models in code and give editors a generated management interface. List and field definitions produce GraphQL APIs, Prisma database schemas, typed server contexts, and a Next.js Admin UI, with configurable authentication, access control, hooks, actions, and asset storage. This brief describes the source inspected at commit 1a8f2b7fae39ea5dac415745caea4f766109e669; the investigation is bounded and no repository code or tests were executed.

System map

The repository packages a configurable backend framework alongside authentication, document editing, Cloudinary integration, examples, and a documentation website. Core separates configuration/schema construction, Prisma-backed execution, Express/Apollo transport, and a generated Next.js Admin UI. Package publication and static website deployment have separate GitHub Actions workflows.

Feature catalog

Keystone exposes generated CRUD APIs and an editor-facing interface from the same configured lists. Built-in fields cover scalar, relationship, password, and asset data, with a separate rich-document package. Authentication, custom actions, storage integrations, and project scaffolding provide additional application capabilities.

Data flow

Configuration is transformed into executable schemas, generated artifacts, and browser metadata before requests arrive. Each HTTP GraphQL request receives a context containing its decoded session and shared Prisma access. Persistence flows through input resolvers and hooks, while browser preferences, session stores, asset stores, and telemetry use separate state boundaries.

Behavior traces

The inspected flows connect CLI startup, browser item creation, password login, and asset persistence to their actual execution functions. Branches such as disabled UI, failed authentication, denied queries, and frozen builds change the sequence materially. These are source-derived walkthroughs, not executed traces.

Testing signals

Tests and CI were inspected, not executed; test existence and workflow commands do not establish passing results. The inspected coverage includes access control, authentication, asset lifecycle, editor behavior, CLI artifacts, and browser deletion feedback across several frameworks and database providers. This is a bounded inventory, with explicit suite exclusions and local coverage limits rather than exhaustive coverage claims.

Risk map

The main sensitive boundaries are privileged context APIs, authentication/session configuration, external storage, and commands that generate files or alter databases. Source inspection also reveals example/API drift and a Cloudinary metadata mapping concern. These findings are source observations or explicitly labeled hypotheses, not confirmed vulnerabilities or executed defect reproductions.

Extension points

Keystone extensions are primarily configuration callbacks and typed factories rather than a central plugin registry. Lists, fields, hooks, actions, schema extensions, sessions, and storage strategies feed into generated runtime and UI structures. Transport and Admin UI generation expose additional integration boundaries.

Contributor handoff

Begin with the owning package and relevant example, then trace configuration, generated schemas, request context, and persistence together. Tests and CI were inspected, not executed; future validation must distinguish selected test commands from actual results and use disposable databases. Keep source edits small, preserve generated/public API boundaries, and treat this inventory as bounded rather than exhaustive.

Languages

LanguageFilesShare of source
TypeScript97898%
Markdown137docs/config
JSON109docs/config
YAML37docs/config
JavaScript182%
CSS11docs/config
HTML2docs/config
SQL10%

Start reading here

Probable source entrypoint: packages/ — inferred from the directory tree and manifest, not the upstream docs.

Source roots

packages/ (344 files)

Repository structure

Top-level pathFiles
examples/575
packages/344
docs/302
tests/194
tests2/17
.github/15
prisma-utils/4
scripts/3

Docs found: CONTRIBUTING.mdREADME.mddocs/CHANGELOG.mddocs/README.mddocs/content/blog/a-year-of-releases-in-review.mddocs/content/blog/customisable-admin-ui.mddocs/content/blog/embedded-mode-with-sqlite-nextjs.mddocs/content/blog/general-availability.mddocs/content/blog/introducing-keystone-blog.mddocs/content/blog/keystone-8.md

Package

package.json — @keystone-6/mono-repo, 20 declared dependencies.

@babel/core@babel/plugin-transform-runtime@babel/preset-env@babel/preset-react@babel/preset-typescript@changesets/changelog-github@changesets/cli@changesets/get-github-info@changesets/get-release-plan@preconstruct/cli@types/node@types/react

CI & config entrypoints

Structural health signals

Average score 7.2/10 across 96 analyzed source files; 21 hotspots surfaced.

These are deterministic review leads — size, churn, and structural signals — not proof of a bug in this project.

Recent history