Thanks for your interest in making Cristalyse better! We're building the grammar of graphics library that Flutter developers deserve, and we'd love your help.
- Flutter 1.17.0+ (we support a wide range!)
- Dart 3.7.0+
- Git
- A code editor (VS Code, Android Studio, IntelliJ)
git clone https://github.com/rudi-q/cristalyse.git
cd cristalyse
flutter pub getcd example
flutter runYou should see animated charts demonstrating current features!
- Search existing issues first - might already be reported
- Create a new issue with:
- Clear title describing the problem
- Steps to reproduce
- Expected vs actual behavior
- Flutter/Dart versions
- Code sample if possible
- Check our roadmap in the README - might already be planned
- Open a discussion before diving into code
- Keep it focused - smaller features are easier to review
- Fix typos, improve examples, add clarifications
- Documentation lives in
/docand code comments - README improvements are always welcome
- Look for
good first issuelabels for newcomers - Comment on the issue to claim it
- Ask questions if anything is unclear
git checkout -b feature/your-feature-name
# or
git checkout -b fix/bug-description- Keep it focused - one feature/fix per PR
- Follow our coding style (see below)
- Add tests for new features
- Update examples if adding new APIs
# Run tests
flutter test
# Test the example app
cd example && flutter run
# Test on multiple platforms if possible
flutter run -d chrome # Web
flutter run -d macos # Desktop (if available)- Clear title explaining what you changed
- Link to issue if applicable
- Describe your changes and why you made them
- Screenshots/GIFs for visual changes are gold! ✨
We follow standard Dart conventions:
flutter analyze
dart format .- Grammar of Graphics - Keep the API consistent with ggplot2 patterns
- Performance First - 60fps is non-negotiable
- Cross-Platform - Code should work identically everywhere
- Progressive Enhancement - New features shouldn't break existing code
lib/
├── src/
│ ├── core/ # Core classes (Chart, Geometry, Scale)
│ ├── geometries/ # Specific geometry implementations
│ ├── scales/ # Scale implementations
│ ├── themes/ # Theme system
│ └── widgets/ # Flutter widgets
├── cristalyse.dart # Main export file
example/
├── lib/ # Example applications
test/
├── *_test.dart # Unit tests
When adding a new geometry (like geom_bar):
- Create the geometry class in
lib/src/core/geometry.dart:
class BarGeometry extends Geometry {
final double width;
final BarOrientation orientation;
BarGeometry({this.width = 0.8, this.orientation = BarOrientation.vertical});
}- Add the API method in
lib/src/core/chart.dart:
CristalyseChart geomBar({double? width, BarOrientation? orientation}) {
_geometries.add(BarGeometry(width: width ?? 0.8, orientation: orientation ?? BarOrientation.vertical));
return this;
}- Implement rendering in the chart painter
- Add tests in
test/ - Update example in
example/lib/
flutter testcd example
flutter test integration_test/- Works on iOS simulator
- Works on Android emulator
- Works in Chrome (web)
- Works on desktop (if available)
- Animations are smooth (60fps)
- No console errors or warnings
- Memory usage stays reasonable
(For maintainers)
- Update version in
pubspec.yaml - Update
CHANGELOG.mdwith new features/fixes - Run full test suite
- Tag release:
git tag v0.x.x - Publish:
flutter pub publish
- CristalyseChart - Main API entry point, fluent interface
- Geometry - Base class for visual elements (points, lines, bars)
- Scale - Data transformation (linear, ordinal, color, size)
- ChartTheme - Visual styling system
Data → Mapping → Scaling → Geometry → Canvas → Animation
- Uses Flutter's
AnimationControllerfor smooth 60fps - Supports staggered animations for multiple elements
- Progressive rendering for line charts
- Validates all values to prevent crashes
- Developer Experience First - API should feel natural to Flutter developers
- Grammar of Graphics - Layered approach like ggplot2, not rigid chart types
- Performance Matters - Native rendering, not web-based solutions
- Progressive Disclosure - Simple things simple, complex things possible
- General discussion: GitHub Discussions
- Bug reports: GitHub Issues
- Quick questions: Comment on relevant issues
Contributors get:
- Credit in
CHANGELOG.md - Mention in release notes for major contributions
- Eternal gratitude!
Ready to contribute? Pick an issue and let's build something amazing together! 🚀