# - Bashly > Bashly is a command line application (written in Ruby) that lets you generate feature-rich bash command line tools. - [Welcome to Bashly](https://bashly.dev/index.md): Welcome to Bashly - [Installation](https://bashly.dev/installation.md): Install bashly using one of these methods. - [Examples](https://bashly.dev/examples.md): The examples folder in the GitHub repository contains many detailed and documented example configuration files, with their output. - [Using Bashly with AI](https://bashly.dev/ai.md): There are three practical ways to use AI while building Bashly projects. Choose the one that matches your workflow. - [Installing Ruby](https://bashly.dev/installing-ruby.md): The installation instructions provided below aim to be the fastest and simplest way to install Ruby, with the ability to install gems that build native extensions. ## Usage - [Getting Started](https://bashly.dev/usage/getting-started.md): Everything in bashly originates from a single configuration file, named bashly.yml. - [Writing Your Scripts](https://bashly.dev/usage/writing-your-scripts.md): The bashly generate command is performing the following actions: - [Settings](https://bashly.dev/usage/settings.md): Some of bashly's behavior and output can be tweaked through the use of environment variables, or a settings file. - [Testing Your Scripts](https://bashly.dev/usage/testing-your-scripts.md): The bash scripts generated by bashly are shellcheck compliant, and shfmt compliant. ## Configuration - [Command](https://bashly.dev/configuration/command.md): The command object serves two purposes, it: - [Argument](https://bashly.dev/configuration/argument.md): Specify positional arguments (required or optional) used by your script. - [Flag](https://bashly.dev/configuration/flag.md): Specify flags (required or optional) used by your script. - [Environment Variable](https://bashly.dev/configuration/environment-variable.md): Specify environment variables (required or optional) used by your script. - [Dependency](https://bashly.dev/configuration/dependency.md): Specify a list of required external dependencies (commands). The script execution will be halted with a friendly error unless all dependency commands exist. - [Variable](https://bashly.dev/configuration/variable.md): This option allows you to define bash variables that will be accessible in your script and its subcommands. While it's possible to define variables ## Advanced Features - [Custom Strings](https://bashly.dev/advanced/strings.md): Bashly lets you control all the strings emitted by your generated bash script. - [Library Functions](https://bashly.dev/advanced/library.md): Bashly comes with a set of library functions that can be added to your script by running the bashly add command. All libraries are documented inline, and the documentation below is a high level overview with examples. - [Custom Validations](https://bashly.dev/advanced/validations.md): Bashly supports custom validation functions for your arguments, flag arguments, and environment variables. This is how it works: - [Custom Filters](https://bashly.dev/advanced/filters.md): Bashly supports custom filter functions for your commands. These filters allow you to define custom conditions that can prevent your command from running unless they are met. - [Function Hooks](https://bashly.dev/advanced/hooks.md): Bashly provides you with three general purpose hooks that let you inject your own code. To use a hook, simply create one of the files listed below in your src directory. - [Bash Completion](https://bashly.dev/advanced/bash-completion.md): Bashly comes with a built-in bash completions generator, provided by the completely gem. - [Split Config](https://bashly.dev/advanced/split-config.md): In case your bashly.yml file becomes too large, you may import smaller configuration snippets by using the import keyword. - [ERB in Config](https://bashly.dev/advanced/erb-in-config.md): The bashly.yml configuration is pre-processed by ERB before it is loaded by the bashly command line. This means that you can use Ruby code to load values from external sources into your bashly configuration. - [Extensible Scripts](https://bashly.dev/advanced/extensible-scripts.md): You may configure your generated bash script to delegate any unknown command to an external executable, by setting the extensible option to either true, or to a different external command. - [Rendering Documentation](https://bashly.dev/advanced/rendering.md): Bashly is capable of rendering documentation for your script based on your bashly.yml configuration by using the bashly render command. - [Custom Libraries Source](https://bashly.dev/advanced/lib-source.md): Bashly is capable of importing library functions from a custom external source (not built into Bashly itself) using the bashly add --source NAME ... command.