Ada is a structured, statically typed, imperative, and object-oriented high-level programming language designed for safety-critical and mission-critical systems. Originally developed in the 1980s for the U.S. Department of Defense, Ada is renowned for:
-
Strong typing โ Catches errors at compile time rather than runtime
-
Built-in concurrency โ Native tasking support for parallel programming
-
Contract-based programming โ Pre/post conditions and type invariants
-
Real-time systems support โ Deterministic behavior for embedded systems
-
Long-term maintainability โ Designed for systems with 30+ year lifecycles
Ada is used in aerospace (Boeing, Airbus), defense systems, rail transportation, medical devices, and financial systems where reliability is paramount.
asdf is a universal version manager that allows you to manage multiple runtime versions with a single CLI tool. Instead of juggling separate version managers for each language, asdf provides one interface to rule them all.
Managing Ada/GNAT compiler versions traditionally requires manual downloads, environment variable configuration, and careful PATH management. asdf-ada simplifies this by providing:
| Feature | Benefit |
|---|---|
Version Switching |
Switch between GNAT versions instantly per project |
Project Isolation |
Each project can specify its required Ada version via |
Reproducible Builds |
Team members and CI/CD pipelines use identical compiler versions |
Multiple Distributions |
Support for FSF GNAT, GNAT Community, and Alire-managed toolchains |
Cross-Platform |
Works on Linux, macOS, and Windows (via WSL) |
| Platform | Minimum Version | Notes |
|---|---|---|
Linux |
Ubuntu 20.04+ / Fedora 35+ / Debian 11+ |
x86_64 and aarch64 supported |
macOS |
macOS 11 (Big Sur)+ |
Intel and Apple Silicon (M1/M2/M3) |
Windows |
Windows 10+ with WSL2 |
Native support planned for future releases |
Before installing the plugin, ensure you have the following:
# Debian/Ubuntu
sudo apt-get update
sudo apt-get install -y curl git build-essential libc6-dev
# Fedora/RHEL
sudo dnf install -y curl git gcc glibc-devel
# macOS (via Homebrew)
brew install curl git
xcode-select --install # For build tools
# Arch Linux
sudo pacman -S curl git base-develIf you havenโt installed asdf yet:
# Clone asdf
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.14.0
# Add to your shell (bash)
echo '. "$HOME/.asdf/asdf.sh"' >> ~/.bashrc
echo '. "$HOME/.asdf/completions/asdf.bash"' >> ~/.bashrc
# Add to your shell (zsh)
echo '. "$HOME/.asdf/asdf.sh"' >> ~/.zshrc
# Add to your shell (fish)
echo 'source ~/.asdf/asdf.fish' >> ~/.config/fish/config.fish
# Reload your shell
exec $SHELL# Add the asdf-ada plugin
asdf plugin add ada https://github.com/hyperpolymath/asdf-ada-plugin.git
# Verify installation
asdf plugin list# List all available versions
asdf list all ada
# Install a specific version
asdf install ada 14.1.0 # FSF GNAT 14.1.0
asdf install ada community-2021 # GNAT Community 2021
asdf install ada alire-latest # Latest via Alire
# Install the latest stable version
asdf install ada latest# Set global default (used when no local version is specified)
asdf global ada 14.1.0
# Set local version for current project (creates .tool-versions)
asdf local ada 14.1.0
# Set version for current shell session only
asdf shell ada 14.1.0
# Verify the active version
asdf current ada
gnatmake --versionCreate a .tool-versions file in your project root:
ada 14.1.0When you cd into the project directory, asdf automatically activates the specified version.
# List installed versions
asdf list ada
# Show current version
asdf current ada
# Uninstall a version
asdf uninstall ada 13.2.0
# Reshim after installing Ada tools (e.g., via Alire)
asdf reshim ada
# Show installation path
asdf where ada 14.1.0The plugin respects and sets the following environment variables:
| Variable | Description | Default |
|---|---|---|
|
Preferred distribution ( |
|
|
Custom mirror URL for downloads |
Official sources |
|
Skip checksum verification ( |
|
|
Auto-install GPRbuild ( |
|
# GPRbuild is included with most GNAT installations
gprbuild --version
# Build an Ada project
gprbuild -P my_project.gprAlire is Adaโs package manager. You can use it alongside asdf:
# Install Alire separately or use asdf-managed version
asdf install ada alire-latest
# Initialize an Alire project
alr init my_project
cd my_project
alr buildOfficial GNU Compiler Collection Ada frontend:
14.1.0, 14.0.0, 13.3.0, 13.2.0, 13.1.0
12.4.0, 12.3.0, 12.2.0, 12.1.0
11.5.0, 11.4.0, 11.3.0, 11.2.0, 11.1.0
10.5.0, 10.4.0, 10.3.0AdaCoreโs free community releases (discontinued after 2021):
community-2021
community-2020
community-2019Create ~/.config/asdf-ada/config for persistent settings:
# Default distribution preference
distribution = fsf
# Download mirror (leave empty for official sources)
mirror =
# Verify checksums (recommended)
verify_checksums = true
# Install GPRbuild automatically
install_gprbuild = true
# Concurrent downloads
parallel_downloads = 4Native ARM64 builds are available for GNAT 13.1.0+. For older versions, Rosetta 2 emulation is used automatically.
ARM64 builds are provided for: - Raspberry Pi 4/5 (64-bit OS) - AWS Graviton instances - Other aarch64 systems
-
Version not found when running
gnatmakeRun
asdf reshim adaafter installation and ensure your shell is properly configured. -
Download fails with SSL errors
Ensure
ca-certificatesis installed:sudo apt-get install ca-certificates -
"Permission denied" during installation
Check write permissions for
~/.asdf/installs/ada/ -
Slow downloads
Set
ASDF_ADA_MIRRORto a geographically closer mirror.
-
Check the GitHub Issues for known problems
-
Join the Ada community chat
-
Open a new issue with:
-
Your OS and version
-
asdf version (
asdf --version) -
Plugin version
-
Full error output
-
We welcome contributions! Please see our Contributing Guide for details.
# Fork and clone
git clone https://github.com/YOUR_USERNAME/asdf-ada-plugin.git
cd asdf-ada-plugin
# Create a feature branch
git checkout -b feature/your-feature-name
# Make changes and test
./scripts/test.sh
# Submit a pull requestThis project adheres to the Contributor Covenant. Please read our Code of Conduct before participating.
This roadmap outlines the planned development phases for asdf-ada.
Status: ๐ง In Progress
-
Core plugin structure following asdf plugin template
-
bin/list-allโ Fetch available GNAT versions from upstream -
bin/downloadโ Download GNAT releases -
bin/installโ Install and configure GNAT toolchain -
bin/latest-stableโ Resolve latest stable version -
Basic FSF GNAT support (Linux x86_64)
-
README and initial documentation
-
GitHub Actions CI/CD pipeline
-
Basic test suite using Bats
Status: ๐ Planned
-
macOS x86_64 support
-
macOS ARM64 (Apple Silicon) support
-
Linux ARM64 support
-
Windows WSL2 documentation and testing
-
Checksum verification for all downloads
-
Progress indicators during download/install
-
Improved error messages and logging
Status: ๐ Planned
-
GNAT Community Edition support (2019-2021)
-
Alire toolchain integration
-
AdaCore GNAT Pro stub support (license required)
-
Custom mirror configuration
-
Version aliases (
lts,stable,latest) -
bin/helpplugin subcommands
Status: ๐ Planned
-
Automatic GPRbuild installation
-
GNATcov integration
-
SPARK tools inclusion
-
Shell completions (bash, zsh, fish)
-
Version constraint solving (semver support)
-
asdf-ada doctorcommand for diagnostics
Status: ๐ Planned
-
Alire crate template generation
-
VS Code Ada extension compatibility documentation
-
GNAT Studio integration notes
-
Docker/container image publishing
-
CI/CD examples (GitHub Actions, GitLab CI, Jenkins)
-
Nix flake support
Status: ๐ฎ Future
-
Stable API with semantic versioning
-
Comprehensive test coverage (90%+)
-
Full documentation with tutorials
-
Offline installation support
-
Corporate proxy support
-
Signed releases
-
Official asdf plugin registry listing
-
Community governance model
These features are under consideration for post-1.0 releases:
-
Cross-compilation toolchains โ ARM bare-metal, RISC-V targets
-
GNAT-LLVM support โ LLVM-based Ada compiler backend
-
Version diffing โ Show changelog between versions
-
Performance profiling integration โ GNATbench-like features
-
IDE project generation โ Templates for various editors
-
Dependency caching โ Speed up clean installs
-
Native Windows support โ Without WSL requirement
-
asdf โ The universal version manager
-
GNAT Downloads โ Official AdaCore downloads
-
Alire โ Ada/SPARK package manager
-
Ada Programming Language โ Official Ada resources
-
learn.adacore.com โ Free Ada/SPARK tutorials
-
Awesome Ada โ Curated Ada resources
This plugin is part of the Hyperpolymath asdf ecosystem, a layered architecture for managing developer tool versions.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ asdf-control-tower โ โ Layer 3: Presentation
โ (docs + dashboard) โ
โโโโโโโโโโโโโฌโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ asdf-ui-plugin โโโโโโผโโโโโ asdf-plugin-configurator โ โ Layer 2โ3
โ (visual UX; planned) โ โ โ (Rust CLI; config/policy)โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโดโโโโโโโโโโโโ
โ asdf-metaiconic-pluginโ โ Layer 1: Registry
โ (registry + schema) โ
โโโโโโโโโโโโโฌโโโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Individual asdf tool plugins (Layer 5) โ
โ โ
โ โ
asdf-ada-plugin โ YOU ARE HERE โ
โ asdf-neo4j-plugin โ
โ asdf-ghjk โ
โ โฆ(68+ installable plugins) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ| Layer | Component | Purpose |
|---|---|---|
Layer 0 |
Infrastructure Spine |
Multi-forge mirroring, instant-sync, policy constraints ( |
Layer 1 |
Canonical metadata registry: |
|
Layer 2 |
Rust CLI for declarative plugin configuration โ apply policy to machines/projects, consume registry for validation |
|
Layer 3 |
Human-facing dashboard, documentation hub, visual discovery UI (planned) |
|
Layer 4 |
Domain Collections |
Category "umbrella" plugins (e.g., |
Layer 5 |
Tool Plugins โ |
Actual installable units โ implements |
asdf-ada-plugin is a Layer 5 tool plugin โ the actual "workhorse" that asdf uses to install and manage Ada/GNAT compiler versions. It:
-
Implements the asdf plugin contract (
bin/list-all,bin/download,bin/install,bin/latest-stable) -
Fetches releases from the GNAT-FSF-builds upstream
-
Provides checksum verification, multi-platform support, and robust error handling
-
Is indexed by
asdf-metaiconic-pluginfor ecosystem-wide discovery -
Can be configured via
asdf-plugin-configuratorfor team/project consistency
-
asdf-control-tower โ Ecosystem documentation hub
-
asdf-metaiconic-plugin โ Plugin registry and metadata
-
asdf-plugin-configurator โ Policy enforcement CLI
This project is licensed under the GNU Affero General Public License v3.0 or later. See the LICENSE file for details.
SPDX-License-Identifier: AGPL-3.0-or-laterMade with โค๏ธ for the Ada community