# penrose/penrose

Create beautiful diagrams just by typing notation in plain text.

Repository: https://github.com/penrose/penrose
Canonical: https://ross.abutalabs.com/products/penrose
Homepage: https://penrose.cs.cmu.edu
Language: TypeScript
License: MIT
License Family: permissive
Topics: visualization, domain-specific-language, mathematics, diagrams, programming-language
Last push: 2026-08-08T07:02:42+00:00

## Health v2 (maintenance only)
Score: 70/100 (v2, computed 2026-09-02T17:46:02.011165+00:00)
- activity 96, release rhythm 18, longevity 100
- inputs: {"age_days": 3632, "days_push": 25, "days_rel": 339, "gap_med": null, "n_releases_24m": 1}
- flags: none
- formula: round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)

## Adoption (not part of the score)
Stars 7969, forks 359 (observed 2026-08-28T04:10:10.337993+00:00)

## What it is
Penrose is a platform and TypeScript library for creating mathematical and technical diagrams declaratively by writing plain-text notation in three programs (Domain, Substance, Style). It converts these specifications into an optimization problem solved with symbolic differentiation to automatically lay out high-quality SVG diagrams.

## Use cases
- create mathematical diagrams from plain text notation
- visualize set theory relationships like subsets and intersections
- generate publication-quality technical illustrations declaratively
- build interactive diagrams in the browser with JavaScript
- separate diagram content from visual styling
- teach mathematical concepts with auto-generated visuals

## When to choose
- you want declarative, reusable diagram specifications instead of dragging shapes
- you need diagrams of mathematical or technical concepts with automatic layout
- you want to separate diagram content from visual representation
- you need programmatically generated or interactive diagrams in web apps

## When to avoid
- you need free-form general-purpose drawing like flowcharts or UI mockups
- you require pixel-perfect manual control over shape placement
- you need a simple drag-and-drop diagramming tool for non-programmers
- your diagrams are outside Penrose's supported domains and you can't write a Style program

## Facets
- artifact type: library
- maturity: active
- function: data-visualization, programming-language, graphics, interpreter
- domain: data-visualization, mathematics, education, programming-languages
- platform: browser, cross-platform
- tags: diagramming, domain-specific-language, declarative-diagrams, svg, constraint-solver, typescript, nodejs, web-server

## Member repositories
- penrose/penrose (main) score 70

## Provenance
- Observed fields: from GitHub, fetched 2026-08-28T04:10:10.337993+00:00.
- Health v2: computed from the inputs above; adoption is never an input.
- Inferred fields (summary, facets, guidance): AI-extracted, prompt v1, taxonomy v1, on 2026-08-29T17:32:36.487801+00:00, confidence not recorded.
  - readme: https://github.com/penrose/penrose (fetched 2026-08-28T04:10:10.337993+00:00, sha eafca777af4f)
  - homepage: https://penrose.cs.cmu.edu (fetched 2026-08-29T08:30:01.474068+00:00, sha 6e67336c1b26)
  - site_page: https://penrose.cs.cmu.edu/docs/tutorial/welcome (fetched 2026-08-29T08:30:01.483130+00:00, sha 10f7100b4fc7)
  - site_page: https://penrose.cs.cmu.edu/docs/ref (fetched 2026-08-29T08:30:01.485202+00:00, sha 40f07ef33a5f)
  - site_page: https://penrose.cs.cmu.edu/docs/bloom/tutorial/getting_started (fetched 2026-08-29T08:30:01.486842+00:00, sha c28bfa08d7c0)
  - site_page: https://penrose.cs.cmu.edu/docs/team (fetched 2026-08-29T08:30:01.488266+00:00, sha 54e51814bdda)
- Data as of 2026-08-30T08:39:29.467469+00:00.
