Open the web preview · Get the Android app · Build locally
Fractal Forge is an open-source Flutter explorer for mathematical systems and generative art. Browse 965 production fractals, tune parameters in real time, move through deep-zoom render paths, and export the views worth keeping.
The loop and catalog grid are browser smoke evidence, not a claim of full web/app parity. Export, sharing, CPU precision, and hardware GPU behavior are most complete in the installable app; see the renderer backend matrix.
- Broad mathematical range — 965 production fractals across escape-time formulas, root-finding basins, strange attractors, IFS, cellular systems, tilings, space-filling curves, and ray-marched 3D forms.
- GPU-first interaction — Flutter fragment shaders keep ordinary exploration responsive, with deeper preview and CPU paths where the module supports them.
- A real creative toolset — presets, randomizer, looper, auto-explore, dual Mandelbrot/Julia viewing, wallpaper tools, sharing, and Fractal Music experiments.
- Color as a first-class control — 60+ color schemes plus smooth coloring, orbit traps, distance estimation, stripe and curvature averaging, and normal-map relief.
- Private by design — no ads, tracking, account requirement, or data collection.
- Accessible controls — high contrast, reduced motion, screen-reader labels, and configurable touch targets.
| Family | Examples |
|---|---|
| Escape-time | Mandelbrot, Julia, Burning Ship, Tricorn, Celtic, Buffalo, Nova, Phoenix, Lyapunov |
| Root finding | Newton, Halley, Householder, Schroeder, Traub–Ostrowski, Noor Newton |
| Attractors | Clifford, Peter de Jong, Lorenz, Rössler, Aizawa, Dadras, Sprott, Svensson |
| IFS and geometry | Sierpiński, Koch, Barnsley Fern, Hilbert, Peano, Gosper, circle inversion |
| Cellular and number systems | Wolfram rules, Life-like families, Langton systems, Wireworld, Farey and Ulam views |
| 3D and hypercomplex | Mandelbulb, Mandelbox, pseudo-Kleinian, quaternion Julia, KIFS |
The catalog counts stable renderable identities—not palettes, camera angles, presets, or thumbnails as separate fractals.
The renderer keeps exploration, history, export, wallpaper, looper, and audio tools on the same view state instead of forking the formula state for each feature.
| Tier | Method | Intended use |
|---|---|---|
| 1 | Realtime GPU | Standard interactive pan, zoom, and parameter changes |
| 2 | Extended GPU preview | Deeper double-float or perturbation-backed preview for supported modules |
| 3 | CPU Precision | Slower exact-intended refinement for modules with a native CPU formula |
The ladder is capability-based. An unsupported module is not labeled “CPU Precision” merely because a synthetic fallback can draw something.
Open fractal.trebuchetdynamics.com in a modern WebGL 2.0 browser.
- Pick a card from the catalog.
- Drag to move; pinch or scroll to zoom.
- Open controls to change iterations, palette, formula-specific parameters, or a preset.
- Use the installable app when you need the fullest export, sharing, wallpaper, or precision behavior.
Install Fractal Forge from Google Play for the primary mobile experience.
- Flutter SDK 3.x (installation guide)
- Dart 3.x, included with Flutter
- A GPU or emulator with shader support; OpenGL ES 3.0+ is recommended
git clone https://github.com/TrebuchetDynamics/flutter-fractal-forge.git
cd flutter-fractal-forge
flutter pub get
flutter run -d chromeChoose another target with:
flutter devices
flutter run -d linux # or android, macos, windows, iosChrome and Android are the most useful first targets when diagnosing device-specific shader behavior.
| Gesture | 2D fractals | 3D fractals |
|---|---|---|
| Drag | Pan | Rotate |
| Pinch / scroll | Zoom | Zoom |
| Double tap | Reset view | Reset view |
| Long press | Set the Julia seed in the dual viewer | Not used |
Common controls include iterations, bailout, power, color scheme, Julia seed, orbit traps, rendering technique, and family-specific coefficients.
| Platform | Status | Notes |
|---|---|---|
| Android | Primary | Maintained Google Play build path |
| Web | Preview | JavaScript/WebGL 2.0; not full app parity |
| Linux, macOS, Windows | Development targets | Shader support depends on GPU and driver behavior |
| iOS | Build target | Requires Apple signing and Metal-backed Flutter rendering |
flutter build apk --release
flutter build appbundle --release
flutter build web --release
flutter build linux --releaseFor a Google Play upload build:
- Copy
android/key.properties.exampletoandroid/key.properties. - Point
storeFileto a private upload keystore, preferably outside the repository. - Never commit signing files or
android/key.properties. - Run
scripts/build-play-console.sh.
Equivalent Flutter build targets exist for macOS, Windows, and iOS. Linux Fractal Music uses paplay or aplay when available.
main.dart
└─ app shell + Provider services
└─ HomeScreen
├─ CatalogRepository → ModuleRegistry → FractalModule
└─ FractalViewerScreen
├─ GPU / extended preview / CPU precision renderers
├─ controls + presets + history + looper
└─ export + wallpaper + share + Fractal Music
lib/
├── app/ app composition and startup
├── core/ models, controllers, modules, services, theme
├── features/ catalog, viewer, renderer, controls, export, looper
├── l10n/ generated localization output
├── shared/ cross-feature widgets and utilities
└── main.dart entry point and compatibility facade
shaders/ Flutter GLSL fragment shaders
integration_test/ device and GPU rendering flows
test/ unit, widget, contract, and golden tests
ModuleRegistry assembles the catalog from declarative configs, shared catalogs, custom builders, and debug-only diagnostics. Every viewer feature consumes the selected module and the same controller state.
flutter analyze
flutter test
flutter test integration_test/ # requires a device or emulatorUseful focused lanes:
flutter test test/features/renderer/
flutter test test/catalog/
flutter test integration_test/flows/critical_journey_test.dartSee test/README.md for the fast safety lane and test conventions.
Shaders live in shaders/ and must be declared under flutter.shaders in pubspec.yaml.
A typical addition is deliberately small:
- Add or update the
.fragshader. - Register the asset in
pubspec.yaml. - Add the module config or builder mapping.
- Add a focused contract or renderer test.
- Run a GPU thumbnail/render audit for visual changes.
#include <flutter/runtime_effect.glsl>
precision highp float;
uniform vec2 uResolution;
uniform vec2 uCenter;
uniform float uZoom;
out vec4 fragColor;
void main() {
vec2 uv = (FlutterFragCoord().xy - 0.5 * uResolution) / uResolution.y;
fragColor = vec4(uv * 0.5 + 0.5, 0.2, 1.0);
}- Renderer backend matrix
- Performance notes
- Shader optimization notes
- Formula coverage limitation
- Launch ladder
- Contributing guide
- Security policy
- Changelog
Contributions are welcome. Good first areas include thumbnail quality, presets, shader correctness, web-preview QA, accessibility checks, tests, and documentation. Read CONTRIBUTING.md before opening a pull request.
Apache License 2.0. See LICENSE.
Built with Flutter. Shader and fractal techniques are informed by the wider mathematical visualization community, including the educational work of Inigo Quilez.

