Keras 3: One API, Four Backends, and the Cost of Abstraction
Multi-backend deep learning framework that runs the same high-level API on JAX, TensorFlow, or PyTorch, scaling from a laptop to clusters of GPUs and TPUs.
At a glance
- What is it?
- Keras 3 is a multi-backend deep learning framework that runs the same high-level API on TensorFlow, JAX, PyTorch, and OpenVINO. This review covers its architecture, installation, backend switching, compatibility claims, and the trade-offs you should weigh before adopting it.
- Who is it for?
- Adopt Keras 3 if you want a single high-level API that can target multiple backends, especially if you are a PyTorch or JAX user who wants a higher-level workflow or a TensorFlow user seeking a drop-in replacement for tf.keras. Do not adopt it if you need OpenVINO for training, because that backend is inference-only, or if you rely on custom components that are not yet backend-agnostic.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 14, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What Keras 3 Actually Solves
The target user is someone who values portability over the lowest-level control. If you are a PyTorch power user who lives in native torch modules, Keras 3 might feel like an unnecessary layer. But if you manage multiple projects across different frameworks, the ability to share model definitions is valuable. The README claims to serve nearly three million developers, but that number is not a quality metric; it is a scale claim that you should ignore when evaluating the technical fit.
How the Multi-Backend Mechanism Works
The data flow is also backend-agnostic. The README states that Keras models can consume datasets in any format, regardless of the backend. You can train with existing tf.data.Dataset pipelines or PyTorch DataLoaders. That is a significant convenience because it means you do not have to rewrite your data loading code when switching backends. However, the documentation does not explain how Keras reconciles the different data iterator types, so you may hit edge cases when mixing a tf.data pipeline with a JAX backend. The abstraction is not free; you are trading some control for portability.
Installation and Backend Setup: Real Commands
The backend compatibility table lists minimum versions: TensorFlow 2.16.1, JAX 0.4.20, PyTorch 2.1.0, and OpenVINO 2026.2.0. These are minimums, so you need to check whether your existing environment meets them. The README notes that Windows users should use WSL2, which is a limitation for native Windows development. If you are on Windows and not using WSL2, you are outside the supported path.
The OpenVINO Backend: Inference Only
The inference-only design also affects the portability promise. You cannot write a model and expect it to train on any backend. The abstraction is not uniform across all four backends. This is a genuine limitation that you should weigh before adopting Keras 3 for a project that might need OpenVINO training in the future. The README does not promise otherwise, so the documentation is honest, but the marketing around multi-backend support can obscure this nuance.
Backward Compatibility with tf.keras
The drop-in claim also depends on the TensorFlow backend being installed and configured. If you use the TensorFlow backend, you are essentially using tf.keras under the hood, but with the Keras 3 API surface. That means you still get TensorFlow's production ecosystem, but you also inherit its dependency weight. If you want to escape TensorFlow entirely, you need to rewrite your custom components, which is not a drop-in experience. The README does not hide this, but it does not emphasize the effort either.
Performance Claims and the JAX Advantage
The performance claim is a reason to consider Keras 3, but it is not a reason to adopt it blindly. The README says to pick the backend that is fastest for your model, which implies you need to benchmark your specific model on multiple backends. That is extra work, and the README does not provide a tool to automate it. You will need to write your own benchmarking scripts. The 20% to 350% range is so wide that it could mean a 20% slowdown for some models, so you cannot assume JAX will always be faster.
Maintenance and Upgrade Costs
The license is Apache-2.0, which is permissive for commercial use. That is a positive for adoption, but it does not mean you are free from dependency licenses. If you use the TensorFlow backend, you inherit TensorFlow's license and its update cadence. The README does not discuss these indirect costs, but you should factor them in. The recommendation to use separate environments for each backend also increases maintenance overhead, as you need to keep multiple Python environments updated.
Alternatives and the Abstraction Trade-off
The abstraction trade-off is real. Keras 3 promises to let you write custom components that work across backends, but that means you cannot use backend-specific features directly in those components. For example, if you want to use a PyTorch-specific optimizer or a JAX-specific transformation, you would need to go outside the Keras API. The README does not describe how to do that, so you should be prepared to write backend-specific code if you need it. The result is that Keras 3 is best for models that fit within its high-level API, not for every possible deep learning use case.
Editorial conclusion
Adopt Keras 3 if you want a single high-level API that can target multiple backends, especially if you are a PyTorch or JAX user who wants a higher-level workflow or a TensorFlow user seeking a drop-in replacement for tf.keras. Do not adopt it if you need OpenVINO for training, because that backend is inference-only, or if you rely on custom components that are not yet backend-agnostic. Before committing, verify that your existing tf.keras model saves in the .keras format and that your custom layers or train_step methods can be converted without breaking changes. The project is actively maintained with recent releases, but the backend must be chosen before import, so test your workload on each candidate backend before standardizing.
Community notes