Skip to content
CAI
Software that uses CAICheck a score

entronad/graphic

68.8

Adequate · 19 September 2026

20.7k

lines of production code

Dart

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a Flutter-based data visualization library that implements a declarative charting architecture grounded in the Grammar of Graphics. It provides a reactive dataflow engine to map data to visual properties, supporting a wide range of mark types, coordinate systems, and interactive features like selections and animations. The library also includes a custom rendering engine for smooth transitions and comprehensive utilities for data transformation and scale calculation.

How it got here

2020 — Initial library release and scaffolding

10 changes.

This period established the foundational structure and core functionality of the Graphic Flutter charting library, implementing key components such as coordinate systems, scales, and mark types based on the Grammar of Graphics. It also included the creation of comprehensive project documentation and the scaffolding of a multi-platform example application to demonstrate the library's capabilities.

2021 — reactive charting engine development

15 changes.

This period focused on building a comprehensive reactive charting library, introducing a core dataflow engine and declarative specification parser to replace imperative patterns. The work established foundational infrastructure including graphics algebra, configurable guides, and interaction models, while expanding visual capabilities with new shape implementations and a scene-based rendering engine.

2022–2026 — Graffiti architecture and desktop support

8 changes.

The project introduced a comprehensive new architecture for the graphic library, featuring a structured mark and encode system, primitive elements, and path morphing infrastructure for animations. Simultaneously, it expanded platform support by adding native scaffolding for Linux, Windows, and macOS example applications, alongside improved linear scale tick generation and agent skill creation tools.

Features

Add Android and Web scaffolding for the graphic\_example app

The example application now includes the necessary Android and Web platform configurations, enabling users to run the app on these targets. Android support is established via a new \MainActivity\ (Kotlin), \AndroidManifest.xml\ files, and standard Flutter V2 embedding resources (themes, launch backgrounds). Web support is added through \index.html\ and \manifest.json\, configuring the app as a standalone PWA with appropriate icons and metadata.

example/android · high confidence

Add interval and point selection interactions

Users can now select data points using two new interaction modes: point selection for discrete data values and interval selection for continuous ranges. Point selection supports toggling individual items, finding the nearest data point, and configuring a test radius, while interval selection allows users to drag or scale to select a continuous range of values, visualized by a rectangle mark. These selections can trigger aesthetic updates via \SelectionUpdater\ and are triggered by configurable gestures (e.g., tap for point, scale/drag for interval).

lib/src/interaction/selection · high confidence

Added macOS example app scaffolding

The example/macos directory now includes a complete Xcode project structure for the macOS platform, enabling the example application to be built and run on macOS. This includes the necessary configuration files (Info.plist, entitlements, xcconfigs), Swift source files (AppDelegate, MainFlutterWindow), and the Xcode project/workspace definitions required to integrate the Flutter framework into a native macOS application.

example/macos · high confidence

Added native Linux and Windows project scaffolding for the example app

The example application now includes the necessary build configuration and native entry points to run on Linux and Windows. On Linux, the change adds a GTK-based CMake build system and application code that initializes a Flutter view within a native window. On Windows, it adds a Visual Studio-compatible CMake setup and C++ runner code that hosts the Flutter engine, including support for high-DPI scaling and console attachment for debugging. These files provide the platform-specific glue code required to compile and launch the example app on desktop environments.

example/linux, example/windows · high confidence

Initial example app scaffolding for Graphic library

Added a new Flutter example application demonstrating the Graphic charting library. The entry includes configuration files (.gitignore, analysis\_options.yaml, .metadata) and a README that categorizes demo charts into intervals, lines/areas, polygons, interactions, animations, big data performance, Echarts recreations, and crosshairs.

example · high confidence

Initial example app scaffolding with navigation and sample data

The example application is established with a main entry point that configures a Flutter MaterialApp and defines a set of example pages (such as Interval, Echarts, Crosshair, and Animation) accessible via a home screen list. This change introduces the core data structures required for these demos, including basic genre sales data, complex grouped time-series data, and specific datasets for echarts visualizations like area stacks and line markers.

example/lib · high confidence

Initial iOS example app scaffolding with iOS 12 minimum deployment target

The example/ios directory now contains a complete, new iOS project structure for the 'graphic\_example' app, including the Xcode project, workspace, and Runner configuration files. This setup establishes a minimum deployment target of iOS 12.0, as defined in the AppFrameworkInfo.plist, ensuring the example app is compatible with modern iOS versions while excluding older devices.

example/ios · high confidence

Initial release of core charting infrastructure and defaults

This change introduces the foundational components for the charting library, including layer ordering definitions, default visual styles (colors, axes, labels), and core specification classes. It establishes the base architecture for data conversion, dimension handling, and label rendering, providing the essential building blocks for creating and customizing charts.

lib/src/common · high confidence

Initial release of the charting library

This entry introduces the core charting components, including the main Chart widget, its state management, and the underlying dataflow view. It establishes the foundation for data visualization by defining specifications for variables, marks, coordinates, axes, and annotations. The update also implements a comprehensive interaction system, supporting gesture events (such as taps, scales, and long presses), resize events, and data change streams, along with UI guides like tooltips and crosshairs.

lib/src/chart · high confidence

Initial release of the graphic charting library

This change introduces the \graphic\ library, a Flutter-based data visualization toolkit. It provides a \Chart\ widget that automatically evaluates and paints based on a declarative specification, supporting core concepts from the Grammar of Graphics such as variables, scales, coordinates, and aesthetics. The release includes a comprehensive set of mark types (e.g., \IntervalMark\, \LineMark\, \PointMark\), shape renderers, and interaction capabilities like event streams and selections. It also exposes utilities for data transformation, scale calculations (including \linearNiceNumbers\ and \linearNiceRange\), and visual guides like axes, tooltips, and crosshairs.

lib · high confidence

Introduce ChangeDataEvent and DataOp for handling dynamic data updates

A new \ChangeDataEvent\ class and \DataOp\ operator have been added to the data layer to support emitting events when underlying data changes. This allows the charting system to react to data modifications, with the \DataOp\ evaluating the new data from the event and ensuring that updates are processed even if the same list instance is modified in place.

lib/src/data · high confidence

Introduce Graffiti rendering engine with scene-based animation support

Adds the core Graffiti rendering engine, which manages a collection of scenes that can be sorted by layer and built-in layer indices. The engine supports transition animations for both graphical elements and clip regions, allowing scenes to animate between states using configurable duration, curve, and repeat settings.

lib/src/graffiti · high confidence

Introduce annotation guide for chart overlays

This change adds a new annotation system to the charting library, allowing users to overlay visual elements on their charts. It introduces several annotation types: LineAnnotation for drawing straight or arc lines, RegionAnnotation for highlighting areas with solid colors or gradients, TagAnnotation for displaying text labels, and CustomAnnotation for rendering arbitrary graphics via a custom function. These annotations support positioning by data variables or absolute coordinates, layering, and clipping, providing a flexible way to annotate chart data.

lib/src/guide/annotation · high confidence

Introduce base operator classes for dataflow rendering and value handling

Added two new operator classes in the common operators module: \Render\, which serves as a sink node for rendering mark elements to a scene and marking the chart view as dirty, and \Value\, which acts as a source node that holds a value and is updated exclusively via streams rather than direct evaluation.

lib/src/common/operators · high confidence

Introduce configurable crosshair and tooltip guides

Added new \CrosshairGuide\ and \TooltipGuide\ classes in the interaction module, enabling users to configure visual indicators for pointer and selection states. The crosshair now supports custom line styles, label formatting, padding, and edge expansion, while the tooltip allows for detailed customization of appearance (background, radius, elevation, text style) and positioning (anchor, alignment, offset), including support for custom rendering via a \TooltipRenderer\ callback.

lib/src/guide/interaction · high confidence

Introduce new shape implementations for area, line, and candlestick charts

The \lib/src/shape\ directory now includes new shape classes that define how specific chart types are rendered. \BasicAreaShape\ supports smooth, looped, and stepped area fills, while \BasicLineShape\ adds support for dashed lines and single-point rendering. A new \CandlestickShape\ enables financial candlestick charts with hollow or filled styles. These changes expand the library's visual capabilities for area, line, and financial data visualizations.

lib/src/shape · high confidence

Introduces scale and variable specifications for chart data mapping

The library now defines explicit \Scale\ and \Variable\ classes to control how data is mapped to visual properties. \Variable\ specifications define how to extract values from input data and assign a scale type (inferred as \OrdinalScale\ for strings, \LinearScale\ for numbers, and \TimeScale\ for dates). \Scale\ specifications (including \ContinuousScale\, \DiscreteScale\, \LinearScale\, \OrdinalScale\, and \TimeScale\) allow users to configure axis boundaries, margins, tick counts, and formatters. The underlying data flow operators (\VariableOp\, \ScaleConvOp\, \ScaleOp\) use these specifications to transform raw data tuples into scaled values for rendering.

lib/src/scale · high confidence

Introduction of configurable axis guides with label backgrounds

This change introduces the \AxisGuide\ specification and its rendering implementations for horizontal, vertical, circular, and radial axes. Users can now configure axis appearance via properties such as \tickLine\, \label\, \grid\, and the new \labelBackground\ and \labelBackgroundMapper\ options, allowing for per-tick customization of tick lines, labels, grids, and label backgrounds. The implementation supports both static styles and dynamic mappers that receive the tick text, index, and total count, enabling fine-grained control over axis visual elements across different coordinate systems.

lib/src/guide/axis · high confidence

Introduction of coordinate system specification and conversion operators

The \lib/src/coord\ directory now contains the foundational classes for defining chart coordinate systems, including the abstract \Coord\ specification, concrete \RectCoord\ (for Cartesian charts) and \PolarCoord\ (for pie/radar charts), and their respective converters (\RectCoordConv\, \PolarCoordConv\). These components handle the mapping between abstract data dimensions and canvas pixels, supporting features like dimension transposition, 1D domain filling, and configurable range boundaries. Additionally, dataflow operators (\RegionOp\, \RectCoordConvOp\, \RegionBackgroundRenderOp\) are introduced to compute the coordinate region geometry and render background colors or gradients based on the defined coordinate specifications.

lib/src/coord · high confidence

Introduction of declarative chart specification parser

The library now includes a new \parse.dart\ module that translates a high-level \Chart\ specification into a concrete rendering pipeline. This parser initializes event streams for gestures, resizing, and data changes, configures coordinate systems (rectangular or polar) with specific padding and range settings, and sets up the underlying dataflow operators required to render the view. This change enables users to define charts via declarative configuration objects rather than imperative builder patterns.

lib/src/parse · high confidence

Introduction of graphics algebra for variable composition

A new \Varset\ class and supporting algebraic types (\AlgTerm\, \AlgForm\) have been added to the library, enabling users to define and compose variable sets using cross (\\*\), blend (\+\), and nest (\/\) operators. This feature allows for structured definition of how variables map to chart dimensions and how data tuples are grouped for features like faceting or separating lines, providing a programmatic way to build complex graphic expressions.

lib/src/algebra · high confidence

Introduction of reactive dataflow graph for chart rendering

The \lib/src/dataflow\ directory now contains the core implementation of a reactive data processing engine, introducing \Dataflow\ and \Operator\ classes that manage a directed acyclic graph of processing nodes. This system enables automatic, dependency-aware evaluation of chart attributes (such as position, color, and shape) by tracking operator dependencies and scheduling updates via a priority queue. The addition of \Attributes\ and \Tuple\ types supports the storage and transformation of datum values through this pipeline, replacing previous ad-hoc calculation methods with a structured, event-driven architecture for handling data scaling and visual mapping.

lib/src/dataflow · high confidence

New Skill Creator skill for building and packaging agent skills

A new 'skill-creator' skill has been added to the .agents directory to guide users in creating, validating, and packaging new agent skills. This skill provides documentation on skill structure, context management, and output patterns, and includes Python scripts to initialize new skill templates, validate skill metadata (such as name and description constraints), and package valid skills into distributable .skill zip files.

.agents · high confidence

New interactive chart examples and demos added

The example application now includes several new demonstration pages showcasing advanced charting capabilities. These include an animation page for auto-ranking and rose charts, a big data scatter chart for performance testing, a crosshair page with configurable labels and padding, and an interaction page demonstrating dynamic data streams and coupled gesture events. Additionally, new pages cover echarts-style gradient area charts, custom polygon shapes, and various interval and line/area mark configurations.

example/lib/pages · high confidence

New mark and encode architecture for the graphic library

The library introduces a comprehensive new architecture for defining and rendering chart marks, replacing the previous implementation. This change adds a structured encode system (lib/src/encode) that handles aesthetic mappings for color, gradient, size, shape, elevation, and labels, supporting both continuous and discrete data scales. It also defines a hierarchy of geometry marks (lib/src/mark) including Area, Interval, Line, Point, Polygon, and Custom marks, each with specific position completion rules. Additionally, it introduces collision modifiers (Dodge, Jitter, Stack, Symmetric) to adjust mark positions and prevent visual overlapping, along with transition animation support via the new graffiti/transition module.

lib/src/mark · high confidence

New path segment types and morphing infrastructure for graffiti animations

The graffiti library now supports a comprehensive set of path segment types—including Arc, ArcToPoint, Close, Conic, Cubic, Line, Move, and Quadratic segments—each implementing a common Segment interface. This addition enables advanced path morphing capabilities by providing methods to linearly interpolate between segments (lerpFrom), convert various segment types to cubic bezier curves for uniform animation handling (toCubic), and normalize segment lists to ensure compatible morphing between different path structures. Users can now create more complex and smooth animated graffiti effects with precise control over path geometry transitions.

lib/src/graffiti/element/segment · high confidence

New primitive and block graphic elements introduced

The \lib/src/graffiti/element\ directory now includes a comprehensive set of new element classes for rendering graphics, including \ArcElement\, \CircleElement\, \LineElement\, \OvalElement\, \PathElement\, \PolygonElement\, \PolylineElement\, \RectElement\, \SectorElement\, and \SplineElement\. Additionally, \BlockElement\ subclasses \ImageElement\ and \LabelElement\ have been added to support image display and text rendering. These elements provide the foundational building blocks for the library's visual composition, supporting features like rotation, styling via \PaintStyle\, and animation interpolation through \lerpFrom\ methods.

lib/src/graffiti/element · high confidence

New utility library for geometry, collections, and assertions

Added a new set of utility modules in lib/src/util to support chart rendering and data handling. This includes path utilities for generating cubic Catmull–Rom splines and stepped polylines, math extensions for safe number comparisons, collection helpers for deep equality and safe sublisting, and assertion helpers for validating parameter states.

lib/src/util · high confidence

New variable data transformation capabilities

This change introduces a new variable transform system within the graphic library, enabling users to manipulate data tuples before rendering. The new \lib/src/variable/transform\ module provides several distinct transformation operators: \Filter\ to reduce tuple lists based on predicates, \MapTrans\ to map tuples to new values, \Sort\ to order tuples using custom comparators, and \Proportion\ to calculate field value proportions (optionally grouped by nesting expressions). These transforms allow for more complex data preparation and statistical aggregation directly within the variable definition pipeline.

lib/src/variable/transform · high confidence

Behavioural changes

Improved handling of large numbers in linear scale tick generation

The linear scale utility now uses an extended Wilkinson algorithm for generating nice numbers and a refined range calculation logic. This change specifically addresses issues with calculating nice ranges and numbers for large values, ensuring that tick marks remain readable and accurate even when dealing with significant magnitudes in linear scales.

lib/src/scale/util · high confidence

Test coverage

Added unit tests for algebraic operations, modifier equality, and scale utilities; Added widget smoke test for the example app.

Housekeeping

Initial repository structure and documentation for Graphic Flutter library

This change establishes the foundational structure for the Graphic Flutter charting library. It adds essential project configuration files including \.gitignore\, \.pubignore\, and \analysis\_options.yaml\ (configured with \flutter\_lints\). It also introduces core documentation and metadata files such as \README.md\, \CHANGELOG.md\ (starting from v0.1.0 up to v2.7.0), \CLAUDE.md\ (providing architecture and usage guidance for AI coding agents), \DEVLOG.md\, and \LICENSE\. Additionally, it includes \skills-lock.json\ to manage AI skill dependencies and updates the copyright year in the \LICENSE\ file to 2024.

(repo-wide) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Baseline

  • First survey — no prior run to compare against. CAI 69.

Lenses

  • Code Health 86
  • Architecture 93
  • Maturity 64
  • Readiness 58
  • Security 97
  • Domain Modelling 100

Changes since last survey

  • 176 commits — 154 feature/other, 22 fixes

By area

  • lib/src — 104 commits
  • (root) — 32 commits
  • example/lib — 10 commits
  • graffiti_dev/lib — 8 commits
  • (repo) — 4 commits
  • example/ios — 3 commits
  • lib/graphic.dart — 3 commits
  • skills/flutter-chart — 2 commits
  • .agents/skills — 1 commit
  • .github/FUNDING.yml — 1 commit
  • .github/workflows — 1 commit
  • debug/ios — 1 commit
  • devdoc/model_design — 1 commit
  • devdoc/models — 1 commit
  • devdoc/selection_channel.gif — 1 commit
  • example/android — 1 commit
  • example/macos — 1 commit
  • graffiti_dev/ios — 1 commit

Notable commits

  • fix: Fix SelectionUpdateOp update always repainting (#262)
  • fix: Fix memory leak (#150)
  • fix: Fix: dart analysis warnings & hints (#300)
  • fix: Merge pull request #63 from canastro/fix/tooltip-leave
  • fix: Merge pull request #70 from bernardobelchior/fix/handle-nan-in-point-shape
  • fix: Merge pull request #75 from canastro/fix/chart-key
  • fix: Revert "feat: add CrosshairPage to demo its' feature. (#313)" (#315)
  • fix: echarts debug | fix example README links
  • fix: fix dim type in coord.invertDistance
  • fix: fix example pic link
  • fix: fix gif
  • fix: fix logo link in readme
  • fix: fix pubspec, devdoc
  • fix: fix(#68): handle NaN in Point shape
  • fix: fix(#95): fix Stack Overflow when comparing modifiers (#96)
  • fix: fix: add dispose to Chart.dart (#79)
  • fix: fix: add key to Chart StatefulWidget
  • fix: fix: handle big numbers when calculating nice range/numbers (#107)
  • fix: fix: iOS minimum version from 9.0 -> 12.0. (#312)
  • fix: fix: line annotation x axis (#91)
  • …and 156 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

entronad/graphic was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 3b6f31e785948293f7c3c20dd5a2b7c0f7aecd92 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.