awesome-repositories.com
Blog
MCP
awesome-repositories.com

Discover the best open-source repositories with AI-powered search.

ExploreCurated searchesOpen-source alternativesSelf-hosted softwareBlogSitemap
ProjectMCP serverAboutHow we rankPress
LegalPrivacyTerms
© 2026 Bringes Technology SRL·VAT RO45896025·hello@awesome-repositories.com
penrose avatar

penrose/penrose

0
View on GitHub↗
7,949 stars·357 forks·TypeScript·MIT·18 viewspenrose.cs.cmu.edu↗

Penrose

Penrose is a compiler that transforms structured mathematical notation into optimized SVG diagrams. It uses a three-stage pipeline of separate domain, substance, and style files to define mathematical objects, relationships, and visual presentation, then solves continuous optimization problems with user-defined spatial constraints and objectives to automatically arrange diagram elements.

The system separates diagram content from visual style using distinct declarative languages, and provides a typed domain language with subtype hierarchies for mathematical objects. It supports embedding compiled diagrams in React and SolidJS applications with real-time optimization and drag-based manipulation, and offers incremental optimization stepping for interactive diagram tuning. The project installs as an NPM package with native TypeScript type definitions and integrates with modern JavaScript bundlers.

Penrose generates diagrams from plain-text notation, supports browser-based diagramming without local installation, and can package diagram source files into standalone web applications. It provides built-in literal types, arithmetic operations, color specification, and collection-based variable matching for aggregate operations across diagram elements.

Features

  • Mathematical Notation Diagramming - Creates mathematical diagrams by compiling plain-text Domain, Substance, and Style programs.
  • Structured Notation Compilers - Transforms structured mathematical notation into optimized SVG diagrams through a three-stage pipeline of domain, substance, and style files.
  • Declarative Visualization DSLs - Defines custom mathematical domains and visual styles through separate declarative DSL files.
  • Diagram Embedding Components - Ships a pre-built React component that renders mathematical diagrams by accepting source files.
  • Declarative Content Specifications - Defines the objects and relationships that appear in a diagram using domain-specific predicates and functions.
  • Diagrammatic Notation Renderers - Generates diagrams from plain-text mathematical notation using a domain-specific language.
  • Mathematical Domain Definitions - Describes the types of objects, predicates, and functions that can appear in a diagram for a specific subject area.
  • Mathematical Notation Compilers - Generates mathematical diagrams from plain-text notation using a domain-specific language.
  • Diagram Layout Algorithms - Runs the full layout optimization on a compiled diagram state to produce a final arrangement.
  • Framework-Specific Embeddings - Ships pre-built React and SolidJS components for embedding interactive mathematical diagrams in web applications.
  • Domain Specific Languages - Compiles separate domain, substance, and style DSL files into an intermediate representation for diagram generation.
  • Mathematical Domain Languages - Defines the types, objects, and operations within a mathematical field using a dedicated domain-specific language.
  • Diagram DSLs - Provides a declarative DSL to define mathematical objects, relationships, and visual styles.
  • Diagram - Defines the kinds of objects that can appear in a diagram, establishing the vocabulary for the visual domain.
  • Numerical Parameter Optimization - Minimizes a continuous objective function with constraints to automatically position diagram elements.
  • Repulsion Penalty Functions - Implements repulsion penalties that grow as diagram shapes get closer together.
  • Mathematical Predicate Declarations - Defines named predicates with typed arguments to represent mathematical or logical statements about diagram objects.
  • Instance Specifications - Lists the specific instances of objects to include in a diagram using a dedicated notation file.
  • Optimization Problem Solvers - Sets up a problem with constraints and an objective, then runs the optimizer until convergence or a stopping condition is met.
  • Layout Constraints - Defines spatial relationships as optimization constraints and objectives that the solver minimizes to produce a diagram layout.
  • Spatial Objective Functions - Defines continuous objective functions encoding spatial relationships for diagram optimization.
  • Geometric Containment Constraints - Defines geometric containment relationships as optimization constraints for diagram layout.
  • Continuous Optimization Layout Engines - Arranges diagram elements by solving continuous optimization problems with spatial constraints.
  • Content-Style Separation Languages - Separates diagram content from visual presentation using distinct declarative languages.
  • Diagram Element Styling - Defines how domain objects and relationships are visually displayed in the generated diagram.
  • Relationship Declarations - Specifies relationships between object types, like subset or disjoint, that the diagram can illustrate between objects.
  • Text-to-Diagram Compilers - Compiles structured notation into optimized SVG diagrams through a three-stage pipeline.
  • Multi-File Diagram Compilers - Accepts a trio of domain, substance, and style programs and returns a compiled state ready for layout.
  • SVG Renderers - Converts optimized diagram state into SVG elements for web-based display and interaction.
  • Live SVG DOM Renderers - Converts compiled diagram state into live SVG DOM elements for web page display.
  • Substance Object Collections - Groups multiple Substance objects into named collections for aggregate operations across diagram elements.
  • Browser-Based Diagramming Tools - Runs the diagramming system directly in a web browser without requiring any local installation or setup.
  • Optimized Scalar Placeholders - Assigns placeholders that the engine initializes randomly and optimizes to suitable values for diagram layout.
  • TypeScript Diagram Authoring - Provides native TypeScript definitions and React components for type-safe diagram development.
  • Hot-Reload Diagram Editors - Supports interactive diagram development with hot-reload and browser-based testing.
  • Interactive Diagramming Libraries - Creates optimization-driven interactive diagrams in JavaScript using a domain-specific language for mathematical visualizations.
  • Typed Function Declarations - Declares functions with typed inputs and outputs that diagram schemas can reference.
  • Typed Constructors - Declares constructors that create objects of specified types for diagram generation.
  • Literal Type Definitions - Provides String and Number as predeclared types that can be inferred from literal expressions and used as arguments to predicates and functions.
  • Optimization Variable Declarations - Declares a numeric variable with an initial value that the optimizer can adjust during the solving process.
  • Domain-Specific - Provides a typed domain language with subtype hierarchies and built-in literal types for mathematical objects.
  • Subtype Hierarchies - Declares 'is-a' relationships between types so subtype objects are accepted wherever parent types are expected.
  • TypeScript Type Definitions - Provides native TypeScript type definitions and React component support for type-safe diagram development.
  • Constrained Shape Draggers - Enables drag-based translation and scaling of diagram shapes with movement constraints.
  • Visualization - Declarative diagramming and Venn visualization.

Star history

Star history chart for penrose/penroseStar history chart for penrose/penrose

How this analysis was created: This summary and feature list were written by an AI model that read the project's README and public documentation pages. Each feature links to the documentation it came from; stars, license and language come straight from the GitHub API. The model does not read the source code, and the analysis is refreshed when the project is re-analysed. Learn more on our About page.

AI search

Explore more awesome repositories

Describe what you need in plain English — the AI ranks thousands of curated open-source projects by relevance.

Start searching with AI

Open-source alternatives to Penrose

Similar open-source projects, ranked by how many features they share with Penrose.
  • likec4/likec4likec4 avatar

    likec4/likec4

    2,723View on GitHub↗

    likec4 is an architecture-as-code framework that transforms text-based architecture definitions into interactive diagrams, static websites, and image files. It serves as a system architecture visualizer and C4 model diagram generator, allowing users to define software components, boundaries, and deployment infrastructure using a domain-specific language. The tool distinguishes itself by providing a modeling environment with Language Server Protocol integration for real-time validation and autocomplete. It enables interactive architecture documentation where users can navigate through hierarch

    TypeScriptarchitecturearchitecture-as-codec4
    View on GitHub↗2,723
  • tone-row/flowchart-funtone-row avatar

    tone-row/flowchart-fun

    3,357View on GitHub↗

    Flowchart Fun is a text-based diagram generator and interactive visual canvas editor that automatically transforms plain text input and natural language prompts into structured flowcharts and diagrams without requiring manual node placement. The application combines automated layout algorithms and structural templates with a web canvas interface for organizing layouts, applying custom shapes, borders, colors, and text sizes to diagram nodes and edges. The platform includes multi-format export pipelines that convert finished charts directly into vector graphics, raster images, and document dat

    TypeScriptdiagram-generatorflowchartflowchart-editor
    View on GitHub↗3,357
  • plantuml/plantumlplantuml avatar

    plantuml/plantuml

    13,093View on GitHub↗

    PlantUML is a text-to-diagram generator that translates human-readable markup into structured graphical representations. It functions as a diagram-as-code tool, allowing users to create and maintain technical documentation, architectural models, and flowcharts by decoupling diagram content from visual layout. The project distinguishes itself through a comprehensive rendering pipeline that processes domain-specific markup into various output formats, including vector and raster graphics. It utilizes a graph-based layout engine to calculate spatial positioning, while a declarative styling layer

    Javadiagramdiagram-as-codediagrams
    View on GitHub↗13,093
  • ohmjs/ohmohmjs avatar

    ohmjs/ohm

    5,471View on GitHub↗

    Ohm is a formal grammar parser generator and domain-specific language framework. It provides a system for defining custom languages to parse, validate, and extract data from input text, transforming raw strings into hierarchical abstract syntax trees based on specified formal rules. The project utilizes an Earley parsing algorithm, which allows it to support all context-free grammars, including those with left recursion and ambiguity, without requiring predefined operator precedence. It also includes a dedicated debugging toolkit for tracing and visualizing the step-by-step state transitions

    JavaScriptcompilergrammarsjavascript
    View on GitHub↗5,471
See all 30 alternatives to Penrose→

Frequently asked questions

What does penrose/penrose do?

Penrose is a compiler that transforms structured mathematical notation into optimized SVG diagrams. It uses a three-stage pipeline of separate domain, substance, and style files to define mathematical objects, relationships, and visual presentation, then solves continuous optimization problems with user-defined spatial constraints and objectives to automatically arrange diagram elements.

What are the main features of penrose/penrose?

The main features of penrose/penrose are: Mathematical Notation Diagramming, Structured Notation Compilers, Declarative Visualization DSLs, Diagram Embedding Components, Declarative Content Specifications, Diagrammatic Notation Renderers, Mathematical Domain Definitions, Mathematical Notation Compilers.

What are some open-source alternatives to penrose/penrose?

Open-source alternatives to penrose/penrose include: likec4/likec4 — likec4 is an architecture-as-code framework that transforms text-based architecture definitions into interactive… tone-row/flowchart-fun — Flowchart Fun is a text-based diagram generator and interactive visual canvas editor that automatically transforms… plantuml/plantuml — PlantUML is a text-to-diagram generator that translates human-readable markup into structured graphical… ohmjs/ohm — Ohm is a formal grammar parser generator and domain-specific language framework. It provides a system for defining… awaitility/awaitility — Awaitility is a Java asynchronous testing library and conditional polling framework. It provides a fluent… facebookresearch/nevergrad — Nevergrad is a gradient-free optimization library and hyperparameter optimization framework designed to find the…