Library / SDK
aeon-toolkit/aeon avatar
aeon-toolkit/aeon

aeon: a scikit-learn compatible library for time series machine learning

A toolkit for time series machine learning and deep learning

1,454 stars352 forksPythonBSD-3-Clause

At a glance

What is it?
aeon collects classification, regression, clustering, forecasting, anomaly detection, segmentation and similarity search behind a scikit-learn style API. This review covers what it solves, how its estimator and collection design works, how to install it, and where it stops being the right tool.
Who is it for?
Pick aeon when your data is a collection of series and you want one API across classification, regression, clustering and segmentation, or when you need a published method rather than a general-purpose model applied to lagged features. Skip it if you only need univariate forecasting with exogenous variables, or if you need a stable API surface across releases.
Can I use it commercially?
Yes. BSD-3-Clause 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 29, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The gap aeon fills: series collections, not rows

Most machine learning libraries assume a two-dimensional array where each row is an independent sample. Time series data breaks that assumption in two different ways, and aeon is built around the second one. The first case, a single long series you want to forecast, is served by dedicated forecasting libraries. The second case is a collection of series: hundreds or thousands of short sequences, each with its own class label or target value. Think of ECG recordings, sensor traces from a production line, or motion captures from a phone accelerometer. Each recording is one sample, and each sample is a sequence.

Ordinary tabular tooling handles this badly. You either flatten the series into fixed-length feature vectors, which discards the ordering that carries the signal, or you hand-engineer summary statistics per series and hope the useful structure survives. aeon takes the sequence as the input type. Its classification, regression, clustering and segmentation modules all consume collections of series directly, and the README states that many implementations are contributed and maintained by the researchers who developed the original methods. That last point matters more than it sounds. When you call a distance-based classifier or a shapelet transform here, you are running the author's implementation rather than a reimplementation by someone else.

The audience is narrow but real: researchers benchmarking against published results, and engineers whose product data is inherently sequential. If your data fits in a DataFrame of independent rows, aeon adds a vocabulary you do not need.

How aeon's estimator API and data containers fit together

aeon follows the scikit-learn contract. Estimators expose fit and predict, transformers expose fit and transform, and the project describes itself as scikit-learn compatible. The dependency list in pyproject.toml pins scikit-learn to a bounded range, so the compatibility is a maintained relationship rather than a coincidence.

Where aeon diverges is the data container. Series collections use a nested structure: a 3D numpy array of shape (n_cases, n_channels, n_timepoints), or a list of 2D arrays when series have unequal lengths. That second form is the important one. Most real collections are not uniformly sampled, and aeon's container design accepts that instead of forcing padding on you. Anomaly detection uses a different shape, a single series with a binary label per time point, and segmentation produces change point indices rather than class labels. The same library covers all three, but the input contracts differ, which is why reading the API reference for your specific task matters before writing code.

Underneath, numba is a core dependency with a pinned upper bound below 0.64.0. Several distance and transform implementations are compiled, which is what makes them usable on collections where a pure Python loop would be hopeless. The trade-off is that numba's version constraints become your version constraints, and numba in turn constrains numpy. The pyproject.toml pins numpy to a range starting at 2.0.0 and pandas below 2.4.0. If your environment already holds an older numpy, aeon will not install without resolving that first.

Benchmarking is a first-class module rather than an afterthought, which fits the research audience. The examples directory mirrors the module list, with separate folders for classification, clustering, forecasting, anomaly detection, regression, segmentation, similarity search, distances, transformations and networks.

Installing aeon and running a first classification

The package is on PyPI and conda-forge, and the README links both badges. The pyproject.toml requires Python 3.11 or newer and below 3.15, so an older interpreter will be rejected at install time rather than failing later.

Install from PyPI with pip:

bash
pip install aeon

The README also lists a conda-forge channel, so conda users can install from there instead. Optional functionality sits behind extras rather than in the base install. The pyproject.toml defines an all_extras group that pulls in packages such as huggingface-hub, imbalanced-learn, matplotlib and pycatch22. If you plan to plot results or use catch22 features, install the extras; the base package will not carry them.

Once installed, the documentation's getting started page and the examples directory are the two places the project points new users. The examples folder is organised by module, with separate directories for classification, clustering, forecasting, anomaly detection, regression, segmentation, similarity search, distances, transformations and networks. Each holds runnable notebooks. That layout is the practical entry point: open the folder matching your task, run the notebook against the bundled data, then swap in your own collection. The repository also ships a Binder configuration, so the examples can be run in a browser without a local install.

Where aeon is the wrong tool

The clearest boundary is univariate forecasting with exogenous variables. aeon does include forecasting, and the module is listed alongside the others, but the library's centre of gravity is collections of series. If your problem is one long series plus a set of external regressors, a library designed around that shape will give you a shorter path.

The second boundary is API stability. The version history shows v1.3.0, v1.4.0 and v1.5.0 arriving at roughly six-month intervals, with minor version bumps rather than patch releases. Minor versions are where deprecations complete and names change. The repository carries a CHANGELOG.md at the top level, which is the file to read before upgrading, and the dependency pins in pyproject.toml move with each release. A pipeline pinned to aeon 1.3.0 will not necessarily run unchanged on 1.5.0, and the changelog is the only reliable way to find out what moved.

The third boundary is the compiled core. Because numba and numpy are pinned to bounded ranges, aeon can conflict with an environment that already holds a different numpy major version. In a shared environment, that conflict surfaces as a resolver error at install time, not as a wrong answer at runtime, which is at least honest but still blocks you until one side moves.

Finally, aeon is not a feature store or a pipeline orchestrator. It provides estimators and data containers. Scheduling, retraining and serving are outside its scope.

aeon vs sktime: overlapping scope, different emphasis

sktime is the comparison people reach for, and the overlap is genuine. Both are Python, both target time series, and both adopt a scikit-learn style interface. The difference in approach shows up in what each treats as the centre.

sktime organises around a unified estimator interface that spans forecasting, classification, regression and transformation, with an emphasis on composability: building pipelines and ensembles out of parts. aeon organises around the series collection as the primary object, with a broad set of algorithms per task and a benchmarking module that sits next to the estimators rather than apart from them. The README's framing, that many implementations come from the researchers behind the original methods, describes a library that prioritises carrying specific published algorithms over maximising the number of composable pieces.

In practice, the choice often comes down to which algorithms you need and which interface your existing code already speaks. If your work is benchmarking classifiers on standard collection datasets, aeon's structure is closer to that workflow. If your work is assembling a forecasting pipeline from interchangeable components, sktime's emphasis is closer. Both are actively developed open source projects, and neither is a drop-in replacement for the other in the sense of identical class names. Porting between them means rewriting estimator imports, not just changing a package name.

Maintenance, releases and the BSD-3-Clause licence

The repository is not archived, and the last push was on 2026-09-09, which is recent relative to the release cadence. The most recent release in the list is v1.5.0 from 2026-06-29, following v1.4.0 on 2026-03-23 and v1.3.0 on 2025-09-09. Two releases in the first half of 2026 and one in late 2025 suggests a steady rhythm rather than bursts.

The upgrade cost is the thing to budget for. With minor versions landing every few months and carrying removals, a team that pins aeon should also pin a maintenance window to read CHANGELOG.md before each bump. The dependency ranges in pyproject.toml are bounded on both sides for numba, numpy, pandas, scikit-learn and scipy. That is a deliberate choice: it prevents aeon from silently running against a version of numpy it was never tested with. It also means aeon will refuse to install in an environment that has drifted outside those ranges, and you will need to move the environment rather than force the install.

On licensing, aeon is BSD-3-Clause, as stated in the README badge and the LICENSE file at the repository root. That is a permissive licence, which generally means you can use, modify and redistribute the code, including in commercial products, provided the copyright notice and licence text are retained. It does not come with a patent grant of the kind some other permissive licences include. Whether that matters depends on your organisation's policy, and it is a question for your legal team rather than something this review can settle. What can be said plainly is that the licence is permissive and the terms are short enough to read in full.

Editorial conclusion

Pick aeon when your data is a collection of series and you want one API across classification, regression, clustering and segmentation, or when you need a published method rather than a general-purpose model applied to lagged features. Skip it if you only need univariate forecasting with exogenous variables, or if you need a stable API surface across releases. Before adopting, check the pyproject.toml dependency pins against your environment, confirm that the estimator you plan to use is still exported from its module, and read CHANGELOG.md for the removal notes that accompany each minor release.

Frequently asked questions

What does aeon stand for?

The repository does not expand the name into an acronym. The README describes aeon only as a scikit-learn compatible Python library for learning from time series, and the project is published in the Journal of Machine Learning Research under that name.

Is aeon a crypto project?

No. aeon-toolkit/aeon is a Python library for time series machine learning, licensed BSD-3-Clause, with its source on GitHub and documentation at aeon-toolkit.org. It has no relation to any cryptocurrency.

How do I install aeon?

Install it from PyPI with pip install aeon, or from the conda-forge channel that the README links. The pyproject.toml requires Python 3.11 or newer and below 3.15.

What shape of data does aeon expect for classification?

Series collections use a 3D numpy array of shape (n_cases, n_channels, n_timepoints), or a list of 2D arrays when the series have unequal lengths. Anomaly detection uses a single series with a label per time point instead.

Does aeon work with scikit-learn pipelines?

The project describes itself as scikit-learn compatible, and its estimators follow the fit and predict contract. The pyproject.toml pins scikit-learn to a bounded version range, so the compatibility is maintained rather than incidental.

How often does aeon release new versions?

The listed releases are v1.3.0 on 2025-09-09, v1.4.0 on 2026-03-23 and v1.5.0 on 2026-06-29, which works out to roughly every three to six months. The CHANGELOG.md at the repository root records what changed in each.

Official sources

  1. aeon-toolkit/aeon on GitHub
  2. License: BSD-3-Clause
  3. Project website
  4. README
  5. Releases
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/aeon-toolkit-aeon.svg)](https://hysenlabs.com/projects/aeon-toolkit-aeon)