Road Map

See Release Notes for the record of previously released features.


Version upgrades

Near-term stuff from quantum circuit future work

0.7.x Scala 3

See Scala 3 section of future work for foundation

0.8.x Game

See Future Work for Axle Game

0.9.x Randomness and Uncertainty

Factoring and Bayesian Networks

And Future Work for Probability Model

See Future Work for PGMs

0.10.x Bugs and adoption barriers

See Future work for Foundation

0.11.x Text improvements

Near-term stuff from text

0.12.x Visualization

See future work for axle visualization

0.13.x Mathematics

See future work

Build and Release

For contributors

Publish snapshots

Push commits to repo.

Monitor progress of github action.

Confirm jars are present at the sonatype snapshot repo

Release new version

For example, tag with a version:

git tag -a v0.1.6 -m "v.0.1.6"
git push origin v0.1.6

Monitor progress

Confirm jars are present at the sonatype repo

Update Site

Run the script

Monitor progress of action.

Verify by browsing to the site or look at the gh-pages branch

Verify before update

Just to do the build locally, run

sbt -J-Xmx8G 'project axle-docs' mdoc
sbt 'project axle-docs' laikaSite

To preview the changes, do:

sbt 'project axle-docs' laikaPreview

then browse to https://localhost:4242

If it looks good, push with:

sbt 'project axle-docs' ghpagesCleanSite ghpagesPushSite

Monitor and verify as before.

References for Build and Deploy



Axle models a set of formal subjects that the author has encountered throughout his lifetime. They take the form of functioning code that allows the reader to experiment with alternative examples.

Although the primary aim of this code is education and clarity, scalability and performance are secondary goals.

The name "axle" was originally chosen because it sounds like "Haskell". Given the use of UTF symbols, I tried spelling it using Greek letters to get "αχλε". It turns out that this is the Etruscan spelling of Achilles


(image context)

Follow @axledsl on Twitter.

Project History References


The first time I had the idea to group units into quanta was at NOCpulse (2000-2002). NOCpulse was bought by Red Hat, which open-sourced the code. There is still evidence of that early code online.

In a 2006 class given by Alan Kay at UCLA, I proposed a system for exploring and learning about scale. The idea occurred to me after reading a news article about a new rocket engine that used the Hoover Dam as a point of reference. I wound up implementing another idea, but always meant to come back to it.

Machine Learning

Based on many classes at Stanford (in the 90's) and UCLA (in the 00's), and more recently the Coursera machine learning course in the Fall of 2011. The inimitable Artificial Intelligence: A Modern Approach has been a mainstay throughout.

Statistics, Information Theory, Bayesian Networks, & Causality

The Information Theory code is based on Thomas Cover's Elements of Information Theory and his EE 376A course.

I implemented some Bayesian Networks code in Java around 2006 while Adnan Darwiche class on the subject at UCLA. The Axle version is based on his book, Modeling and Reasoning with Bayesian Networks

Similarly, I implemented ideas from Judea Pearl UCLA course on Causality in Java. The Axle version is based on his classic text Causality

Game Theory

As a senior CS major at Stanford in 1996, I did some independent research with Professor Daphne Koller and PhD student Avi Pfeffer.

This work spanned two quarters. The first quarter involved using Koller and Pfeffer's Gala language (a Prolog-based DSL for describing games) to study a small version of Poker and solve for the Nash equilibria. The second (still unfinished) piece was to extend the solver to handle non-zero-sum games.

The text I was using at the time was Eric Rasmusen's Games and Information


Based on notes from Ed Stabler's graduate courses on language evolution and computational linguistics (Lx 212 08) at UCLA.


Adam Pingel

Adam Pingel is an Iowa native who wrote his first lines of code on an Apple ][ in 1983.

He moved to the San Francisco Bay Area in 1992 to study Computer Science at Stanford. After graduating in 1996, spent several years at, helping it scale to become the 3rd largest site on the web at the time. After Excite he spent two years at NOCpulse -- a startup acquired by Red Hat.

In 2002 he left Silicon Valley to join the UCLA Computer Science department's PhD program. His major field was programming languages and systems, and his minor fields were AI and Linguistics. His first year he worked as a TA for the undergraduate Artificial Intelligence class. The second was spent as a graduate student researcher working on programming tools for artists at the Hypermedia Lab (a part of the UCLA School of Theater, Film, and Television). From 2005 - 2009 he mixed graduate studies with consulting. He received an MS along the way, and ultimately decided to pursue his research interests in the open source community.

In April 2009 he moved to San Francisco and joined the Independent Online Distribution Alliance (IODA) as the Lead Systems Engineer. During his time there, IODA was acquired by Sony Music and then The Orchard. In April 2012 he co-founded Eddgy. In May 2013 he joined VigLink as Staff Software Engineer and later managed a team there. In September 2015 he became VP of Engineering at Ravel Law. In June 2017 Ravel Law was acquired by LexisNexis, where he became a Sr. Director. In late 2019, he became the CTO of Global Platforms. In early 2022, he joined IBM's Accelerated Discovery team as Technical Lead for Generative Discovery.

For more background, see his accounts on:

He can be reached at


"Axle" talk at Scala by the Bay 2015

Adam at SBTB 2015

"Lawful AI" talk at Scale by the Bay 2017

Adam at SBTB 2017

Release Notes

See Road Map for the plan of upcoming releases and features.


0.6.1-6 (April-May 2022)

0.6.0 cats.effect for (December 31, 2020)


0.5.4 Sampler Axioms + package reorg (September 28, 2020)

0.5.3 (September 13, 2020)

0.5.2 (September 7, 2020)


0.4.1 (June 4, 2017)

0.4.0 (May 30, 2017)


0.3.6 (May 29, 2017)

0.3.5 (May 23, 2017)

0.3.4 (May 22, 2017)

0.3.3 (May 7, 2017)

0.3.2 (May 6, 2017)

0.3.1 (May 1, 2017)

0.3.0 (April 12, 2017)


0.2.8 (March 28, 2016)

0.2.7 (January 2016)

0.2.6 (November 2016)

0.2.5 (October 2016)

0.2.4 (September 5, 2016)

0.2.3 (July 30, 2016)

0.2.2 (October 10, 2015)

0.2.0 (August 12, 2015)


0.1.13 through 0.1.17 (October 12, 2014)

0.1-M12 (June 26, 2014)

0.1-M11 (February 26, 2014)

0.1-M10 (May 14, 2013)

0.1-M9 (April 7, 2013)

0.1-M8 (March 11, 2013)

0.1-M7 (February 19, 2013)

0.1-M6 (February 13, 2013)

0.1-M5 (January 1, 2013)

0.1-M4 (December 16, 2013)

0.1-M3 (December 11, 2012)

0.1.M2 (October 24, 2012)

0.1.M1 (July 15, 2012)