When we started building data-driven features across our apps, we hit a wall. Flutter's charting options either looked dated, performed poorly with real data, or required so much boilerplate that you'd spend more time fighting the library than building your product. The moment you needed something beyond a basic bar chart — dual y-axes, layered geometries, proper interactivity — you were on your own.
So we built Cristalyse: an open-source charting library for Flutter that doesn't make you choose between beauty, performance, and developer experience.
Grammar of Graphics, Meet Flutter
If you've used ggplot2 in R or Vega in JavaScript, you know how powerful the grammar of graphics approach is. Instead of rigid chart widgets with dozens of properties, you compose layers: data, mappings, geometries, scales, and themes. You describe what you want, and the library handles how.
This composability is what makes it click. Want a scatter plot with a trend line? Layer both geometries on the same chart. Need to color-code by category? Map a data field to the color aesthetic. You build complex visualizations the same way you build simple ones — just with more layers.
The Features That Were Missing
We built Cristalyse around the things other Flutter chart libraries couldn't do well — or at all. Dual y-axis support for plotting different scales on the same chart. SVG export so you can hand a chart to someone who needs it in a slide deck. Real theming where you control colors, fonts, spacing, and grid styles instead of picking from a handful of presets. Interactive tooltips and pan-and-zoom that feel native, not bolted on.
These aren't niche requirements. They're the basics of working with data. We just couldn't find a Flutter library that handled all of them.
60fps or Nothing
Cristalyse renders directly through Flutter's CustomPainter, which gives us access to the canvas without building complex widget trees. The result is smooth 60fps animations and interactions, even with large datasets. No web views, no DOM manipulation, no platform-specific rendering quirks.
Touch gestures, transitions, and hover states are built in from the start. When you pinch to zoom or tap a data point, it just works — on every platform Flutter supports.
One Codebase, Every Platform
One of Flutter's biggest strengths is cross-platform, and a charting library should respect that. Cristalyse runs on iOS, Android, web, and desktop with the same code, the same performance, and the same visual output. No "works great in Chrome, broken on mobile" surprises.
We open-sourced Cristalyse under the MIT license because we think good developer tools should be accessible to everyone. If you're building with Flutter and need charts that actually keep up with your data, give it a try.