Changelog
Release history for Crest.
A summary of features and significant enhancements in each release.
0.48
- Interceptors can declare options. The
@CrestInterceptormethod may take@Optionparameters and@Optionsbeans alongside itsCrestContext. Declared options parse from the command line, appear in help and bash completion, and are passed to the interceptor at execution — the command method does not need to declare them. A command and interceptor declaring the identical option (same name, type, and default) share one value; conflicting declarations fail at deploy time naming both parties. CrestContext.getOptions()— the mutable option namespace of the invocation, keyed by option name: every option declared by the command or any interceptor bound to it. Where the command declares the option, the entry is a live view over the same storage asgetParameters(). Replacing a value is seen by every interceptor later in the chain and by the command itself; writes are type checked against the declared option type.@Optionsbeans are derived values, rebuilt from their constituents when one is replaced.@Priorityfor interceptor ordering. Double-valued: lower runs first (outermost), unannotated interceptors run at 5, ties keep declaration order. The valid range is greater than 0 and less than 11 — the endpoints are deliberately excluded so there is always room to slot a new interceptor before or after any existing priority without renumbering: between 6 and 7 there is 6.5, before 1 there is 0.9.- Deploy-time interceptor binding. Bindings resolve when the
Mainis constructed: an unresolved custom annotation, a class with no@CrestInterceptormethod, an out-of-range priority, or an option conflict fails at startup instead of on first invocation. - Interceptors run once even when reachable through several bindings on the same command, e.g. an interceptor class carrying two custom annotations both used on the method.
- Bash completion now offers the constituent options of
@Optionsbean parameters and interceptor-declared options. toolzdemo module.
0.47
tomitribe-crest-utilmodule with a generic include/exclude regexFilterfor list commands.- Commands can see which fields will be visible in table output.
- Update to tomitribe-util 1.5.14.
0.46
- Fix wrong javadoc description resolved for a method (#131).
0.45
- Wrap long command descriptions in listings.
- Omit groups from recursive listings.
0.44
- Expanded help documentation and fully rendered examples.
- Don’t show the help suggestion on man-page style output.
- Fix javadoc bullet indentation/continuation (#129).
0.43
help --alllists every command in the CLI as a flat, full-path listing.help <group> --allscopes the listing to a subtree, andhelp <group>(or bare-group invocation) now defaults to recursive. Groups appear inline alongside leaves so the structure is self-documenting at every level.Help:section added to listings and man pages, surfacinghelp --allandhelp <command>so users discover detailed help even when they don’t already know it exists. On a leaf’s man page the hint shows the actual command path, copy-paste ready.- Unlimited sub-command depth in the
helpcommand. Varargs collapsed fourhelp()overloads into one and now navigate paths of arbitrary depth, replacing the previous 3-level cap. - Optional positional varargs. Framework no longer requires
≥1value for listable positional parameters; opt into the strict behavior with@Required. - Fix NPE in
HtmlDocumentParserthat crashed help output when javadoc contained HTML tags like<p>or<br>.
0.42
- More accurate first-sentence extraction for
@Commanddescriptions sourced from javadoc. The first sentence (split on period+space, exclamation, or question) is now extracted viaDocumentParserso heading-prefixed and multi-paragraph javadoc resolve correctly.
0.41
- Multi-level command groups.
@Command("quote line-item")on a class creates nested groups to any depth. Class and method paths are concatenated following the JAX-RS@Pathmodel. Intermediate groups are auto-created. Multiple classes can contribute to the same deep group. - Constructor validation improvements.
0.40
- Hugo documentation site.
- Crest Maven Plugin can now create executable jars.
@Editorsupport in table output.- Show negated boolean options in help.
- Class include/exclude filtering for command loading.
0.39
@Commanddescriptions from Javadoc, extracted at compile time by annotation processor.
0.38
- Split-class command groups. Multiple classes can contribute sub-commands to the same
@Commandgroup.
0.37
@GlobalOptionsannotation for flags that apply across all commands.- Global options support in bash completion.
0.36
- Pluggable bean provider via
TargetProviderSPI for CDI and other DI frameworks.
0.35
@Editorsupport loaded fromLoaderand used in help output.
0.34
- Help output matches method signature order.
- Fix help for overloaded commands.
0.33
- CSV and TSV table output no longer pads or wraps rows.
0.32
- Remove deprecated
Main.systemDefaults()builder method.
0.31
- Command name and version in help from
Main.builder()orMANIFEST.MF. - Convenience
--csvand--tsvflags for table output.
0.30
Main.builder()API for programmatic CLI construction.
0.29
- CSV table format via
@Table.
0.28
- TSV table format via
@Table.
0.27
- Fix regression with object-based tables.
- Map key escaping and field name escaping for tables.
0.26
- Map support in table formatting.
0.25
- Programmatic table builder API.
0.24
- Case-insensitive field/column names in tables.
0.23
- Print help when
@Exit(help=true)is set on exceptions.
0.22
- Allow commands to set table options.
0.21
- Allow commands to set table options at runtime.
0.20
- Prefer
@Optionsconstructor with Crest annotations.
0.19
- Javadoc fallback for help text.
- Archetype fixes.
0.18
@Tableannotation for automatic table formatting of return values.- Table border styles, headers, field selection, sorting, and word wrapping.
Streamreturn type support.
0.17
- CDI-style custom interceptor annotations via
@CrestInterceptor. - GraalVM native image support via Apache Arthur extension.
0.16
- Windows compatibility fixes.
- Dependency updates (ASM 9, JUnit 4.13.1).
0.15
@Exitexceptions control reporting. Help is only printed when requested.
0.14
- Table output from
String[][]return values with configurable borders. - Man page piped to
less. - Auto-detect terminal width.
0.13
- Improved exception handling for all return types.
0.12
- Bash completion script generation.
Streamreturn type support.
0.11
@DefaultMappingmade repeatable.- Upgrade to Java 8 compilation.
0.10
- System property and environment variable interpolation for defaults.
- Nullable
@Optionssupport. - Varargs with
@In/@Outstreams.
0.9
@Option(description)for inline option descriptions.
0.8
- Bean validation fixes.
- Ctrl+C handling in CLI.
0.7
- Bean Validation 1.1 support.
- Interactive CLI with history, clear, and alias support.
0.6
- Command interceptors for cross-cutting concerns like security.
0.5
- Crest Maven Plugin for compile-time command discovery.
@Defaultfor prefixed bean parameters.@In/@Out/@Errstream injection.
0.4
@Exitannotation for exception exit codes.Iterablereturn type support.
0.3
- Maven archetype for quick project setup.