What packages are part of the Flux ecosystem?
Updated
Flux's ecosystem covers probabilistic programming, graph neural networks, computer vision, natural language processing, and scientific machine learning. The packages named on fluxml.ai are Turing.jl and Stheno.jl (probabilistic programming and Gaussian processes), GraphNeuralNetworks.jl (graph neural networks with CUDA GPU acceleration), Metalhead.jl (computer vision models with pre-trained weights), Transformers.jl (transformer components and trained language models), and the SciML ecosystem (mixing neural nets with differential equations). All of them build on the FluxML stack, so they share Flux's pure-Julia base and its GPU and automatic differentiation support.
Ecosystem packages at a glance
| Package | Domain | What it provides |
|---|---|---|
| Turing.jl | Probabilistic programming | Probabilistic programming and Bayesian inference on top of Flux |
| Stheno.jl | Gaussian processes | Gaussian process modelling within the same probabilistic stack |
| GraphNeuralNetworks.jl | Graph neural networks | A GNN library for Flux with CUDA GPU acceleration |
| Metalhead.jl | Computer vision | Many state-of-the-art vision models with pre-trained weights |
| Transformers.jl | Natural language processing | Components for transformer architectures, plus several trained models out of the box |
| SciML | Scientific machine learning | Combines neural nets with differential equations for hybrid black-box and mechanistic modelling |
How the pieces fit together
Flux itself is described as a 100% pure-Julia stack offering lightweight abstractions over Julia's native GPU and AD support. That design is what lets the ecosystem packages plug in rather than sit beside it:
- Shared differentiability. Existing Julia libraries are differentiable and can be incorporated directly into Flux models, so packages like Turing.jl and Stheno.jl can treat Flux models as components of a larger probabilistic program.
- GPU access without a separate layer. GPU kernels can be written directly in Julia via CUDA.jl, which is why GraphNeuralNetworks.jl can advertise CUDA acceleration as part of its Flux support.
- Hackability at every level. From GPU code to custom gradients and layers, any part can be tweaked — useful when a domain package needs behaviour that isn't in the core library.
For example, a team modelling a physical system with uncertain parameters could pair a Flux neural network with differential equations through SciML, then place priors on the network's parameters and run Bayesian inference with Turing.jl — all within one language and one differentiation system.
Choosing the right package for your task
The decision usually follows from the problem type rather than from package popularity:
- Quantifying uncertainty or fitting Bayesian models → Turing.jl; add Stheno.jl when the model is naturally expressed as a Gaussian process.
- Data with relational structure (molecules, meshes, social graphs) → GraphNeuralNetworks.jl, with CUDA acceleration available.
- Image classification or transfer learning → Metalhead.jl, which supplies pre-trained weights so you don't start from scratch.
- Text and language modelling → Transformers.jl, which includes trained models out of the box.
- Systems governed by known equations → SciML, to blend mechanistic modelling with learned components.
These categories overlap in practice: a vision model from Metalhead.jl can sit inside a larger Flux model, and a SciML hybrid model can be given a Bayesian treatment through Turing.jl.
Getting involved
Flux is maintained by a community team under a published governance model. The site points to Zulip (channels #ml-contributors and #machine-learning), the official Julia Slack (#flux-bridged and #machine-learning), the Julia Discourse machine learning forum, and Stack Overflow for Flux.jl questions. Code contributions are explicitly welcomed, and the site's "See all" link is the place to browse the full set of reusable models and related packages beyond the five highlighted above.