Æsh, Another Extensible SHell

ankitg121 pts0 comments

Æ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...

command terminal readline options option line

Related Articles