| Crates.io | axl |
| lib.rs | axl |
| version | 0.1.0 |
| created_at | 2025-11-17 16:41:56.647272+00 |
| updated_at | 2025-11-17 16:41:56.647272+00 |
| description | Stack-aware developer workflow CLI |
| homepage | |
| repository | https://github.com/cesarferreira/axl |
| max_upload_size | |
| id | 1937181 |
| size | 69,601 |
AXL is the single muscle-memory for every repo you touch. It inspects the
current tree, figures out the stack (Android, Bun, Rust, Flutter, Bazel, …),
and maps universal verbs like dev, build, test, reset, or logs to the
right stack-specific commands. Instead of memorising 20 rituals, you just run:
axl dev # start the dev server / run target
axl build # produce release artifacts
axl test # execute the stack's tests
axl clean # remove build artifacts
axl reset # wipe caches + reinstall deps
axl open # open the project in the OS UI
axl logs # tail relevant logs
axl install # install the project locally
AXL is ideal for engineers juggling dozens of repositories and switching between wildly different toolchains all day. It removes cognitive overhead instead of adding yet another bespoke CLI to learn.
bun.lock,
package.json, gradlew, Cargo.toml, go.mod, Gemfile, pom.xml,
composer.json, mix.exs, *.csproj, Package.swift, pubspec.yaml,
BUILD.bazel, pyproject.toml, or falls back to .git.bun run dev, Rust → cargo run, Go → go run .). Works out-of-the-box.axl.toml in any repo to redefine verbs,
set env vars, enforce tool requirements, or change the detected stack.axl info, axl detect, axl doctor, axl init, axl recent, axl resume,
axl switch, and axl version.~/.config/axl/projects.json, enabling
axl recent, axl resume, and axl switch.bun,
cargo, adb, go, dotnet). AXL verifies they exist before spawning anything.cargo install --path .
(Or build however you prefer; it’s a single Rust binary.)
From any repository:
axl dev # start the dev server / run target
axl build # produce release artifacts
axl test # execute the stack's tests
axl clean # remove build artifacts
axl reset # wipe caches + reinstall deps
axl open # open the project in the OS UI
axl logs # tail relevant logs
axl install # install the project locally
| Verb | Description |
|---|---|
axl dev |
Launch the stack's "dev" target (server, emulator, binary, etc.) |
axl build |
Produce release/production artifacts for the current project. |
axl test |
Run the default test suite for the detected stack. |
axl clean |
Remove build outputs / caches to get a fresh tree. |
axl reset |
Perform a deeper nuke (node_modules, Gradle caches, bootstrap). |
axl open |
Open the repo in the OS UI (IDE, Finder, Explorer, etc.). |
axl logs |
Tail the relevant logs (adb logcat, flutter logs, vite output). |
axl install |
Install the project locally (cargo install --path ., etc.). |
| Command | Description |
|---|---|
axl info |
Show detected stack, config file, and the resolved command map. |
axl detect |
Print only the detection reason (handy for debugging). |
axl doctor |
Check for missing requirements per verb. |
axl init |
Generate an axl.toml with stack defaults (use --force to overwrite). |
| Command | Description |
|---|---|
axl recent |
List recent projects + last verb/time. |
axl resume [query] |
Jump back into the last verb for a project (fuzzy name). |
axl switch [query] |
Print cd <path> (or just the path with --path-only). |
axl.toml)AXL doesn’t need configuration, but when you want full control you can create
an axl.toml in the project root:
[project]
name = "polygone"
stack = "bun"
[dev]
cmd = "bun run dev"
requires = ["bun", "node"]
[test]
cmd = "bun run test"
[reset]
cmd = "rm -rf node_modules bun.lock && bun install"
Each verb section can define:
cmd (string): the exact command to run.requires (array): binaries that must exist in $PATH.env (table): environment variables to inject when running.If [project] supplies stack, it overrides detection.
| Marker | Stack / defaults |
|---|---|
bun.lock |
Bun |
package.json |
Node / TypeScript |
gradlew |
Gradle / Android / Kotlin |
Cargo.toml |
Rust |
pubspec.yaml |
Flutter |
melos.yaml |
Dart monorepo (Melos) |
BUILD.bazel |
Bazel |
pyproject.toml |
Python |
go.mod |
Go |
Gemfile |
Ruby / Rails |
pom.xml |
Maven / Java |
composer.json |
PHP / Laravel |
mix.exs |
Elixir / Phoenix |
*.csproj |
.NET / C# |
*.sln |
.NET / C# (solution) |
Package.swift |
Swift |
If axl.toml exists, its stack value wins.
cargo fmt
cargo check
cargo run -- dev # or any other verb
AXL sets AXL_VERB and AXL_ROOT when spawning commands so scripts can
inspect the context if needed.