Æsh, Another Extensible SHellSkip to content
CTRL K
Docs
Æsh Readline
Installation
Getting Started with Æsh Readline
Readline API Reference
Prompt
Edit Modes
Key Bindings
Completion
Terminal Environment
History
Fuzzy History Search
Terminal
Color Detection
Connection
InputReader
Terminal Colors
Remote Connectivity
Device Attributes
VT Escape Sequence Parser
Examples and Tutorials
Right Prompt
Mouse Tracking
Terminal Images
Synchronized Output
Hyperlinks
Clipboard
Windows Native Access
POSIX Native Access
Focus Tracking
Print Above
Status Lines
Split Screen
Terminal Provider SPI
GraalVM Native Image
Æsh
Installation
Getting Started with Æsh
Command Definition
Options
Arguments
Option Groups
Option Lists
Mixins
Group Commands
Sub-Command Mode
Completers
Ghost Text Suggestions
Validators
Converters
Activators
Selectors
File and Resource Handling
Renderers
Result Handlers
Console and Runtime Runners
CommandInvocation API
Examples and Tutorials
Settings Configuration
Extensions Library
Command Registry
Operators
Advanced Topics
Documentation Generation
Annotation Processor
Troubleshooting & FAQ
Migrating from Picocli
Table Display
Progress Bar
Tree Display
Charts
Graph Display
Terminal Graphics
TamboUI Integration
About
Contact ↗
LightDark<br>System
Light
Dark
System
Æsh - Java Libraries for Command-Line Interfaces<br>Æsh (Another Extendable SHell) is a collection of Java libraries for building command-line interfaces, interactive shells, and terminal applications.<br>Overview
The Æsh project provides two complementary libraries:<br>Æsh - High-level command framework with annotation-based definitions<br>Æsh Readline - Low-level terminal input/output and line editing<br>Both libraries are production-ready, cross-platform (POSIX and Windows), and actively maintained.<br>Æsh - Command Framework
Æsh provides a high-level API for building CLI applications with commands, options, and arguments. It handles parsing, validation, type conversion, and help generation automatically.<br>Example
@CommandDefinition(name = "deploy", description = "Deploy an application")<br>public class DeployCommand implements CommandCommandInvocation> {
@Option(shortName = 'e', defaultValue = "production",<br>description = "Target environment")<br>private String environment;
@Option(shortName = 'f', hasValue = false,<br>description = "Force deployment")<br>private boolean force;
@Argument(description = "Application name", required = true)<br>private String application;
@Override<br>public CommandResult execute(CommandInvocation invocation) {<br>invocation.println("Deploying " + application + " to " + environment);<br>if (force) {<br>invocation.println("Force flag enabled");<br>return CommandResult.SUCCESS;
Start an interactive console or execute single commands:<br>// Interactive console with history and tab completion<br>AeshConsoleRunner.builder()<br>.command(DeployCommand.class)<br>.prompt("[deploy-tool]$ ")<br>.start();
// Single command execution (for CLI tools)<br>AeshRuntimeRunner.builder()<br>.command(DeployCommand.class)<br>.args(args)<br>.execute();
Key Capabilities
Command Definition<br>Annotation-based (@CommandDefinition, @Option, @Argument) or builder API<br>Optional compile-time annotation processor eliminates runtime reflection<br>Automatic parsing and type conversion (String, Integer, Boolean, File, Enum, custom types)<br>Support for short (-v) and long (--verbose) option names<br>Required and optional parameters with default values<br>Command Organization<br>Command groups and subcommands (e.g., git remote add, docker container start)<br>Unlimited nesting depth for complex hierarchies<br>Dynamic command registration and removal at runtime<br>User Experience<br>Automatic help generation (--help) with visibility levels<br>Tab completion for commands, options, and values<br>Shell completion script generation for bash, zsh, and fish<br>Built-in completers for files, booleans, enums<br>Ghost text suggestions as you type<br>Command history and line editing (via Readline)<br>Clear error messages and validation feedback<br>Extensibility<br>Validators - Custom validation rules for options and arguments<br>Converters - Convert string input to custom types<br>Completers - Domain-specific tab completion<br>Activators - Conditionally enable/disable options based on other options<br>Renderers - Customize help output format<br>Execution Modes<br>Console mode - Interactive shell with readline features<br>Runtime mode - Single command execution from command-line arguments<br>Programmatic - Direct command invocation from Java code<br>Performance & Native Images<br>Annotation processor shifts all reflection to compile time – 3-4x faster startup than the reflection path<br>67-655x faster command registration than picocli in benchmarks<br>8-21x faster command-line parsing than picocli<br>GraalVM native-image friendly – generated code uses direct new calls, no reflection configuration needed<br>Zero external dependencies<br>Coming from picocli? See the Migration Guide.<br>Use Cases
CLI tools and utilities<br>Interactive shells and REPLs<br>Build...