Skip to content

Acknowledgements

alai borrows ideas from a number of projects, and is built on others. If alai is useful to you, these may be too.

Inspiration

  • uv, Astral's package and project manager for Python. alai's commands, flags, defaults and output are heavily modeled on uv's. Commands like alai add, alai lock and alai sync are meant to feel and act like their uv counterparts, with only a few minor differences.
  • ModuleFast, by Justin Grote. ModuleFast does for PowerShell modules and the PowerShell Gallery what alai does for Ansible collections and Galaxy. Its artifact and index mirroring is what inspired me to do the same for Galaxy and collection content.
  • Cargo, Rust's package manager. Its registry index shaped alai's index format. Like Cargo's sparse index, alai's is a set of static files that any web server or CDN can serve, with one file per collection and a line per version.
  • PwshSpectreConsole, by Shaun Lawrie, inspired these docs. Its examples are run and recorded, so the documentation shows what the commands really print. The recordings in these docs do the same for alai.

Built with

These are some of the key components alai is built with, though the list isn't exhaustive:

  • Ansible Galaxy, the source of alai's default index. The content from Ansible Galaxy is mirrored to the alai index as part of a regular sync job.

Python

Rust

Part of alai is a native extension written in Rust, for the work that's slow in Python.

  • PyO3 and maturin build the extension into the Python package.
  • PubGrub chooses the versions, as the version solving algorithm uv and Cargo use.
  • tar and flate2 extract collection tarballs, and sha2 checks each file against the collection's FILES.json as it goes.
  • reqwest downloads from the index on Tokio, over HTTP/2 where the host supports it.
  • rustls makes the TLS connections with AWS-LC for its cryptography, and rustls-platform-verifier has the operating system verify their certificates.
  • serde_json reads index files and each collection's MANIFEST.json and FILES.json.
  • libyaml-safer reads a collection's galaxy.yml and meta/runtime.yml. libyaml-safer is a Rust port of the libyaml parser that ansible-core reads YAML with.
  • toml_edit reads alai.toml, alai.lock and the config files, and edits alai.toml while keeping the rest of its text, as Cargo and uv do.

Docs