Library / SDK
aimacode/aima-java avatar
aimacode/aima-java

aima-java is a course-sized Java library whose releases stopped in 2016

Java implementation of algorithms from Russell And Norvig's "Artificial Intelligence - A Modern Approach"

1,621 stars811 forksJavaMIT

At a glance

What is it?
aima-java implements the algorithms of Artificial Intelligence: A Modern Approach 3rd edition in Java, with every class indexed to a figure and page number in the book. The interesting facts are the two that the readme admits in brackets: the Javadoc is outdated and the browser demos are not up to date, while the default branch has been pushed as recently as 2026-06-10.
Who is it for?
Adopt aima-java if you are teaching or studying from the third edition of Artificial Intelligence: A Modern Approach and want runnable code whose class names match the book's figure numbers, because that index is the thing this repository does that a general search library does not, and take it as a reference implementation rather than a production dependency.
Can I use it commercially?
Yes. MIT 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 112 days ago.
What is it written in?
Mainly Java, according to GitHub's language statistics.

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

Editorial analysis

Every class is indexed to a figure and a page, which is the whole design

The readme leads with an algorithm index whose columns are figure, page, name in the third edition, and a link to the source. That table is the repository's argument. AIMA is a book of algorithms defined precisely enough that an implementation is a transcription exercise, and this project treats the mapping from the book to the code as the primary artefact: figure 2.10 on page 49 is SimpleReflexAgentProgram, figure 3.11 on page 82 is BreadthFirstSearch, figure 3.18 on page 89 is IterativeDeepeningSearch, figure 4.26 on page 99 is RecursiveBestFirstSearch, figure 5.7 on page 170 is AlphaBetaSearch, figure 6.3 on page 209 is AC3Strategy, figure 6.8 on page 221 is MinConflictsSolver. Reading down the package paths tells you the same story in a second way. The uninformed searches sit in search.uninformed, informed ones in search.informed, local search in search.local, adversarial in search.adversarial, constraint satisfaction under search.csp with its own solver, inference and example subpackages, and propositional logic under logic.propositional with a separate knowledge base, agent and parsing subtrees. A student who can find a class by figure number can find it by package name, and a lecturer can point at a page in the book and know which file to open. That is a real pedagogical advantage, and it is also why the project is more useful as a reference than as a library, since the names are optimised for lookup against a book rather than for reuse in an application.

Four modules, and a GUI you should not plan around

The top-level entries describe a workspace rather than a single library: aima-core, aima-all, aima-gui, aimax-osm, plus notebooks, an environment file, a build configuration and an out directory. Read that as four projects with different jobs. aima-core is the algorithm code the index links into. aima-all is presumably the assembled distribution, since that is what the name suggests and what an aggregate module is for. aima-gui is the demonstration front end, and it is where the JavaFX addition from the 2016 release notes lives, which tells you the demos are the part of the project most sensitive to the JDK you run. aimax-osm holds example maps and has its own versioned release, aimax-osm-v3, separate from the aima3e line, which is a useful signal: the map data is versioned independently of the algorithms. The three published browser demos are linked with the note that they are unfortunately not up to date, and the Javadoc link carries the note that it is outdated. Both notes are in the readme, which is more candour than most projects manage, and both describe a project whose reference material has drifted from its code. That drift is the single most important thing to weigh before adopting anything here, because the algorithm implementations are the stable part and the teaching surfaces built on top of them are the stale part.

Using it as a dependency, and the version mismatch to watch

The readme gives Maven coordinates for integration as a third party library, and they are the most useful thing on the page:

xml
<dependency>
    <groupId>com.googlecode.aima-java</groupId>
    <artifactId>aima-core</artifactId>
    <version>3.0.0</version>
</dependency>

Note the three numbers that do not line up with the release list. The newest release tag is aima3e-v1.9.1 from 2016-12-18, the second-edition line is aima2e-v0.95 marked no longer supported, and the Maven version here is 3.0.0 under a com.googlecode group. So the published library and the published release are different version lines, and the mapping between them is not documented in the readme. If you are pinning this in a build, the decision to make is whether 3.0.0 from the group is what you actually want, and the way to answer that is to resolve it and read the artefact, not to trust the tag names. The other practical note is the JDK floor. The title line says JDK 8 or later, and the project uses JavaFX for its demos, which means the module layout on a modern JDK differs from what these releases were built against. The project asks for contributors and publishes a wiki with pages for the project overview, the workspace setup, contributing, and comments on architecture and design, so the working knowledge is in the wiki rather than in the readme, which is worth knowing before you plan a contribution.

Chapter coverage you can verify, and the part the readme truncates

The index in the readme is cut off partway through the propositional logic chapter, at the entry for TTEntails. Everything before that point is visible: agents and the agent program hierarchy, the Romania map, the search framework with its node and problem abstractions, the uninformed and informed families, local search including hill climbing, simulated annealing and a genetic algorithm, and-or graph search for nondeterminism, online search with LRTA*, adversarial search with minimax and alpha-beta, and constraint satisfaction with AC-3, backtracking, min-conflicts and a tree CSP solver. That is a coherent course arc from chapter 2 through chapter 7. The release note for 1.9.1 adds that chapters 22, 23 and 25 are implemented, which is reinforcement learning, decision making under uncertainty and MDPs, so the coverage extends deep into the book. What you cannot tell from the readme is the state of the middle, and the readme does not claim completeness for it. The lesson here is methodological: the index is the contract, and when it is truncated you should read the source tree rather than assume a chapter is done because the book has it. Searching by package name for a chapter directory is a more reliable check than the readme summary, and the fact that the readme links a separate wiki page on architecture and design suggests the maintainers agree the structure is the part worth understanding.

What a decade of no releases means for a reference library

Set the dates against each other. The latest releases are 1.9.1 in December 2016, the map data version in March 2015, and the second edition in March 2015 marked no longer supported. The last push to the default branch was on 2026-06-10. The pattern is a project with a long-dormant published history and recent commits, which is a materially different thing from either an abandoned archive or a maintained release line. What it means in practice is that the code changes and the released artefacts do not, so a recent commit is not something you can get from a version number, and a fix you read about in the history will not arrive by bumping a dependency. The licence is MIT, which removes the usual reason to hesitate, so the constraint is purely about versioning discipline. For a course repository this is acceptable, since students clone the branch rather than resolving an artefact, and the wiki's workspace setup page exists for exactly that workflow. For anything you intend to ship, the safer arrangement is to vendor aima-core into your own build, which is easy because the module is a plain library, and to record which commit you took. Copying a permissively licensed reference implementation is a normal engineering choice; depending on a coordinate that no longer tracks its branch is not.

Editorial conclusion

Adopt aima-java if you are teaching or studying from the third edition of Artificial Intelligence: A Modern Approach and want runnable code whose class names match the book's figure numbers, because that index is the thing this repository does that a general search library does not, and take it as a reference implementation rather than a production dependency. Do not adopt it for a new service: the newest published release is 1.9.1 from 2016-12-18, the linked Javadoc is described as outdated, the browser demos are described as not up to date, and the second-edition line is marked no longer supported. If you take the dependency anyway, note that the Maven coordinates in the readme are version 3.0.0 under a different group and artifact than the release tag, and that the project requires JDK 8 or later. Verify three things: which branch you clone, because the default is AIMA3e and other lines exist; which chapters your course actually needs, since the readme's algorithm index is truncated and later-chapter coverage is not fully documented there; and whether the code still compiles on a current JDK, since the last push to the default branch was on 2026-06-10 and the release artefacts have not moved since 2016. The MIT licence is permissive and is not the constraint here.

Frequently asked questions

How do I add aima-java to a Maven project?

The readme gives the coordinates for the core module: a group of com.googlecode.aima-java, an artifact of aima-core, and a version of 3.0.0. Note that this version line does not match the published release tag, which is aima3e-v1.9.1.

Which Java version does aima-java require?

The readme title states JDK 8 or later. The GUI module uses JavaFX, which the 1.9.1 release notes say was added, so the module layout on a current JDK will differ from what those releases were built against.

How do I find the implementation of a specific algorithm?

The readme contains an index mapping figure number and page number in the third edition to the algorithm name and a direct link to the source, for example figure 3.11 on page 82 for BreadthFirstSearch and figure 6.3 on page 209 for AC3Strategy. The index is truncated partway through the propositional logic chapter.

What are the modules in the aima-java repository?

The top level contains aima-core with the algorithm implementations, aima-all, aima-gui for the demonstrations, and aimax-osm for example maps, which has its own separate versioned release. There are also notebooks, a build configuration and an out directory.

What licence is aima-java released under?

MIT, according to the repository licence field. The second edition line, aima2e-v0.95, is marked no longer supported, and the newest release of the third edition line is 1.9.1 from 2016-12-18.

Official sources

  1. aimacode/aima-java on GitHub
  2. Issues
  3. License: MIT
  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/aimacode-aima-java.svg)](https://hysenlabs.com/projects/aimacode-aima-java)