Library / SDK
keras-team/keras avatar
keras-team/keras

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.

64,424 stars19,818 forksPythonApache-2.0

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 received new commits within the last day.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on November 13, 2026, and from our analysis. They are not legal advice.

From daily snapshots

Star history

  • keras-team/keras64,424 ★ · +239
Star history
Repository2026-07-282026-11-13
keras-team/keras64.2k64.4k

239 Stars in the last 108 days, measured from the daily GitHub snapshot. Compare with other projects

Editorial 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.6.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, Keras 3 is intended as a drop-in replacement for tf.keras. That means you still get TensorFlow's production ecosystem, but you also inherit its dependency weight. If your tf.keras model has custom components and you want to run it on another backend, the README says it is usually possible to convert them to a backend-agnostic implementation in just a few minutes.

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 README describes the 20% to 350% figure as speedups compared to other frameworks and says the fastest backend is often JAX, so you cannot assume JAX will always be fastest for your model.

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. The README also says you can take a Keras model and train it in a training loop written from scratch in native TF, JAX, or PyTorch. 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.

Frequently asked questions

What is Keras vs TensorFlow?

Keras 3 is a multi-backend deep learning framework that supports JAX, TensorFlow, PyTorch, and OpenVINO, and it can act as a drop-in replacement for tf.keras when the TensorFlow backend is in use.

What is Keras used for?

It is used to build and train models for computer vision, natural language processing, audio processing, timeseries forecasting, recommender systems, and similar tasks.

What is Keras vs PyTorch?

Keras 3 runs on PyTorch as one of its backends, with a minimum supported PyTorch version of 2.6.0, and a Keras model can be used as part of a PyTorch-native Module.

how to install keras

Run pip install keras --upgrade to get Keras 3 from PyPI, and also install a backend package such as tensorflow, jax, or torch. The openvino backend is supported for inference only.

how to install keras and tensorflow

Install keras with pip install keras --upgrade, then install tensorflow as the backend package. With the TensorFlow backend, Keras 3 is meant as a drop-in replacement for tf.keras using the .keras save format.

Official sources

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/keras-team-keras.svg)](https://hysenlabs.com/projects/keras-team-keras)

Star history chart for your README

markdown
[![Star history](https://hysenlabs.com/chart/keras-team-keras.svg)](https://hysenlabs.com/projects/keras-team-keras)

Was this useful?