Library / SDK
EMI-Group/evox avatar
EMI-Group/evox

EvoX's default install is the plotting extra, and its 100x claim has three uncaptioned pictures behind it

Distributed GPU-Accelerated Framework for Evolutionary Computation. Comprehensive Library of Evolutionary Algorithms & Benchmark Problems.

2,630 stars351 forksPythonGPL-3.0

At a glance

What is it?
A PyTorch evolutionary computation framework whose default extras are two visualisation packages, whose ecosystem numbers are five times the shipped ones, whose description field is one word, and whose smoother Windows path is a batch file on a documentation site.
Who is it for?
The library looks well made and the algorithm coverage in the package is real, but read the extras before installing. The documented default install gives you plotting and nothing else, so a physics-engine user or anyone wanting the accelerator has to know the extras exist.
Can I use it commercially?
Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
Is it still maintained?
Yes. The repository last received commits 6 days 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 October 4, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The ecosystem advertises five times what the package ships

The overview paragraph contains two numbers and then immediately corrects them.

It says the ecosystem offers more than a hundred and forty evolutionary algorithms and more than two hundred and forty benchmark problems and environments. Then, in the same sentence, it says about thirty algorithms and about thirty benchmark problems are built into this package, the rest coming from sister libraries.

So the headline figures describe a collection of repositories, and the package you can install contains roughly a fifth of the algorithms and an eighth of the problems. The feature list then repeats both pairs without the correction, so a reader skimming for a number finds one hundred and forty twice and no mention of the thirty.

There is a table of contents with seven entries and the sixth is sister projects, so the rest of the collection is meant to be discoverable. Nothing on the visible page names those libraries.

The practical consequence is straightforward. If you are choosing this for algorithm coverage, install it and count what you got. If you are choosing it for a specific algorithm, check the algorithm reference page rather than the ecosystem number, because the reference documents the package.

The naming follows the same split: the project styles itself with a capital letter in prose while the package and the repository are lowercase.

The default install gives you a plotting library and a dataframe library

The documented installation command installs the package with its default extras. Read what is in that group.

The visualisation extra is a plotting library and a dataframe library. The default group is the same two packages, in the same order, with the same version floors. The two groups are identical.

The extras that contain the interesting capability are elsewhere. One group adds a physics engine, a vision library, an image writer and a benchmarking environment. The test group is that same set plus the plotting library. And there is a separate group for a kernel compiler, gated to Linux by an environment marker.

So the default install of a GPU-accelerated optimisation framework gives you plotting.

bash
pip install "evox[default]"

To get the physics engines you name that group, to get the compiler you name another and you must be on Linux, and the test group is the closest thing to an everything extra.

That is not unusual for a research package with many optional backends. It is unusual to make the default equal to the visualisation group rather than to a core set, because the default is what the documented one-line command installs.

The dependencies themselves are minimal and recent: a tensor library with a high floor and NumPy at two or later, on an interpreter floor three versions lower. That combination is fine for a new installation and awkward for a locked-down research environment that cannot move NumPy.

The speed claim is one number and the evidence is three images

The performance section has a heading about ultra performance and one bullet under it.

The bullet says the framework supports acceleration across processors and accelerators and achieves speedups over one hundred times.

There is no baseline. No comparison library is named, no problem is named, no hardware is named, and there is no before-and-after. One hundred times is a large enough number that the missing context is the whole story: against an interpreted loop it is easy, against a vectorised baseline it is not.

The page's header does carry three rendered result images, with no captions. One appears to be a particle swarm result, one another algorithm's result, and the third an animation of a half-cheetah benchmark run. None of them is referenced from the text, none carries an axis label or a legend, and none is paired with a number.

So the performance evidence on this page is a figure with no context and three pictures with no text. That is not evidence against the claim; it is simply not evidence, and a reader who needs to know whether the speedup applies to their problem has nothing to go on.

The arXiv paper linked in the header is where the numbers would be, and it predates the current PyTorch version by some distance.

Six personal email addresses and a one-word description

Small packaging facts, and together they say something about how this project is run.

The manifest lists six authors, each with a personal address. Four are from two large free mail providers, one is from a Chinese provider, and one is a provider-generated address that encodes a numeric identifier and the account name.

There is no organisation field, no maintainer field and no contact address. The project sits under an academic group's organisation, and the manifest names six individuals.

The description field is the package name. One word. So on a package index, this project appears as a bare name with no sentence explaining what it does, which is the one piece of metadata that would be visible to somebody browsing.

None of this is a problem for the people using it. All of it matters for the two questions a package index is actually asked: what is this, and who maintains it. The repository's readme answers both, in full, and neither answer is in the manifest.

There is a licence and it is consistent: the repository records GPL-3.0, the manifest declares it with an or-later suffix, and there is a licence file at the root. That is the one field where the two sources agree without help.

The smooth Windows path is a batch file hosted on the documentation site

The feature list promises effortless setup with one-click installation for Windows users. The installation section says how that works.

Windows users can use a batch script, and the link for it is a file hosted under the documentation site's download path rather than a repository path or a package index.

So the frictionless install for a Windows user is: download a batch file from a documentation site and run it. That is the documented happy path for a third of your users, and it is the exact pattern that makes people hesitate, because a batch file cannot be reviewed by eye and its host is a docs site rather than a source repository.

The alternatives are fine. The package installs from the package index with pip, and the source route is a clone and an editable install. Both work on Windows with the right toolchain.

The batch file is probably a convenience wrapper around one of those two, saving people a command line. But it is worth naming the shape: for Windows, the documented one-click path is an opaque script fetched over the network, and the repository does not host it.

Results stream in a proprietary file format

Under visualisation there are three sub-headings, and the third one is the interesting one.

The first is a set of ready-made visualisation tools for analysing evolutionary processes across tasks. The second lets you plug in your own visualisation code. The third says the framework uses its own file format, with a custom extension, to simplify and accelerate real-time data streaming.

So results can be streamed in a format the ecosystem defines rather than an open one. That is a real design decision with a real benefit: a purpose-built container for a hot path of high-frequency numbers is faster than a general format, and the page is honest that the point is speed.

The cost is that a result file is readable only by this library. If you want to plot an optimisation run in something else, you either use the library's export or you re-implement the reader. Over a long optimisation run that is the artefact you most want to keep, and it is the one that gets locked in.

The middle sub-heading is the mitigation and it is a good one. Because you can bring your own visualisation code, you are not obliged to use the streaming format, and the documentation on that is described as tailored and flexible.

The repository layout backs this up. There is a benchmarks directory at the root and a unit test directory rather than a conventional tests directory.

A framework rewritten on a different array library, with the old one on a branch

There is a note near the top, and it explains a decision that shaped everything else.

Users of the previous version, which was built on a different array library, can find it on a version branch. So this is not a library that grew; it was rewritten on top of a different numerical stack, and the earlier implementation is preserved on a long-lived branch for people who depended on it.

That is the right call for a research library whose algorithms are all array operations, because the whole point of the rewrite was to get the ecosystem it already had, and the page leans on that compatibility heavily when it describes itself as friendly to anyone from the previous ecosystem.

It also explains the dependency floors. A tensor library at a recent major version and NumPy at two or later, on an interpreter floor three minor versions older. If you are on the older stack, the branch is your only option and the current package will not resolve for you.

The engineering artefacts in the root match a project with a hard build: a Nix flake with a lock file, a script that builds a development environment from it, a pre-commit configuration, a read-the-docs configuration, and a context file at the root for tooling to read.

Two of those are worth a note. A locked Nix development environment means every contributor builds against the same interpreter and libraries, which is the right answer to the floor problem above. And a context file is a convention from newer coding assistants, which is a small signal about what the maintainers expect to be working in this repository.

Editorial conclusion

The library looks well made and the algorithm coverage in the package is real, but read the extras before installing. The documented default install gives you plotting and nothing else, so a physics-engine user or anyone wanting the accelerator has to know the extras exist. And treat the ecosystem totals as a roadmap rather than as this package's contents, because the shipped count is a fraction of them.

Frequently asked questions

What is EvoX?

A distributed framework for evolutionary computation built on a tensor library, offering single-objective and multi-objective optimisation algorithms, benchmark problem suites, integration with physics engines for reinforcement learning, custom problem definitions, and visualisation tooling including real-time result streaming.

How many algorithms does EvoX include?

About thirty algorithms and about thirty benchmark problems ship inside the package. The wider ecosystem advertises more than a hundred and forty algorithms and more than two hundred and forty problems across sister libraries, which are not named on the readme.

What does installing EvoX with the default extras give me?

A plotting library and a dataframe library, because the default group is identical to the visualisation group. Physics engines, vision libraries and a benchmarking environment live in another extra, and the kernel compiler extra is gated to Linux by an environment marker.

What happened to the earlier version of EvoX built on a different array library?

It is preserved on a version branch for users who depended on it. The current package requires a recent tensor library and NumPy two or later, while its declared interpreter floor is much older.

Does EvoX require a GPU?

No. It supports acceleration on processors and accelerators, and its distributed workflows scale across multiple nodes or devices. A separate extra enables a kernel compiler and is marked as available on Linux only.

Official sources

  1. EMI-Group/evox on GitHub
  2. Issues
  3. License: GPL-3.0
  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/emi-group-evox.svg)](https://hysenlabs.com/projects/emi-group-evox)