--- # The name of your project title: Spring Shell badges: # Customize your project's badges. Delete any entries that do not apply. custom: - name: Source (GitHub) url: https://github.com/spring-projects/spring-shell icon: github - name: Issues (GitHub) url: https://github.com/spring-projects/spring-shell/issues icon: tracking - name: CI (Bamboo) url: https://build.spring.io/browse/SPRINGSHELL icon: ci - name: StackOverflow url: https://stackoverflow.com/questions/tagged/spring-shell icon: stackoverflow --- {% capture billboard_description %} The Spring Shell project provides an interactive shell that allows you to plugin your own custom commands using a Spring based programming model. {% endcapture %} {% capture main_content %} ## Introduction Users of the Spring Shell project can easily build a full featured shell ( *aka* command line) application by depending on the Spring Shell jars and adding their own commands (which come as methods on spring beans). Creating a command line application can be useful *e.g.* to interact with your project's REST API, or to work with local file content. ## Features Spring Shell's features include * A simple, annotation driven, [programming model](https://docs.spring.io/spring-shell/docs/current-SNAPSHOT/reference/htmlsingle/#_writing_your_own_commands) to contribute custom commands * Use of Spring Boot auto-configuration functionality as the basis for a command plugin strategy * Tab completion, colorization, and script execution * Customization of command prompt, shell history file name, handling of results and errors * [Dynamic enablement](https://docs.spring.io/spring-shell/docs/current-SNAPSHOT/reference/htmlsingle/#dynamic-command-availability) of commands based on domain specific criteria * Integration with the [bean validation API](https://docs.spring.io/spring-shell/docs/current-SNAPSHOT/reference/htmlsingle/#_validating_command_arguments) * Already [built-in commands](https://docs.spring.io/spring-shell/docs/current-SNAPSHOT/reference/htmlsingle/#built-in-commands), such as clear screen, gorgeous help, exit * ASCII art Tables, with formatting, alignment, fancy borders, *etc.* ## Quick Start {% include download_widget.md %} Then to create a simple command that could be invoked as ``` shell:>translate "hello world!" --from en_US --to fr_FR bonjour monde! ``` assuming you'd have access to some kind of translation service that worked with Locales: ```java package foo; @ShellComponent public class TranslationCommands { private final TranslationService service; @Autowired public TranslationCommands(TranslationService service) { this.service = service; } @ShellMethod("Translate text from one language to another.") public String translate( @ShellOption(mandatory = true) String text, @ShellOption(mandatory = true, defaultValue = "en_US") Locale from, @ShellOption(mandatory = true) Locate to ) { // invoke service return service.translate(text, from, to); } } ``` {% endcapture %} {% capture related_resources %} ### Samples & Related Projects * [Spring Shell Samples](https://github.com/spring-projects/spring-shell/tree/master/spring-shell-samples) * [Spring Cloud Skipper Shell](https://github.com/spring-cloud/spring-cloud-skipper/tree/master/spring-cloud-skipper-shell-commands) {% endcapture %} {% include project_page.html %}