shellican (shell-i-can) is a powerful CLI for managing runnables (scripts/commands) in collections. It allows you to organize your shell scripts, define their environment, and run them easily.
shellican bridges the gap between simple shell aliases and complex Makefile setups.
- Beyond One-Liners & Aliases: Instead of cluttering your
.zshrcor.bashrcwith forgotten aliases, turn them into organized runnables. Keep your logic structured, named, and easy to find. - Shareable Workflows: Stop saying "copy this script and change line 5". With import / export, you can package your collections and share them with friends or colleagues. They get a ready-to-run environment without manual editing.
- Self-Documenting: Every runnable supports a
helpdescription and a fullREADME. You (and your team) will know exactly what a script does, even months later.
- Collections & Runnables: Organize your scripts into collections.
- YAML Configuration: Define runnables and environments in
collection.ymlandrunnable.yml. - Environment Management: Inject environment variables defined in configuration.
- Hooks: Pre (
before) and post (after) hooks for runnables. - Shell Helper: Generate shell wrappers for easy access.
- Import/Export: Share collections easily.
go install github.com/brsyuksel/shellican@latestYou can download the pre-compiled binary for your operating system (macOS, Linux) from the Releases page.
Default storage location: ~/.shellican (or $SHELLICAN_HOME/.shellican).
~/.shellican/
├── my-collection/
│ ├── collection.yml
│ ├── script-a/
│ │ └── runnable.yml
│ └── script-b/
│ ├── runnable.yml
│ └── main.sh
- New Collection:
shellican new collection <name> - New Runnable:
shellican new runnable <collection> <name> - Run:
shellican run <collection> <runnable> [args...] - List:
shellican list collectionsorshellican list runnables <collection> - Show:
shellican show collection <name>orshellican show runnable <collection> <name> - Create Shell Shortcut:
shellican create-shell <collection>(creates~/.local/bin/<collection>-shell) - Import/Export:
shellican import <source>/shellican export <collection>
collection.yml
name: "My Scripts"
help: "A collection of useful scripts"
readme: "README.md"
runnables:
- script-a
environments:
GLOBAL_VAR: "true"script-a/runnable.yml
name: "Script A"
help: "This script does something awesome"
readme: "README.md"
run: "./main.sh" # or "echo hello"
before: "echo 'Starting...'"
after: "echo 'Finished!'"
environments:
LOCAL_VAR: "123"- dirty-vm - A collection for creating and managing virtual machines with QEMU, cloud-init, and networking support.
- Fork the repo
- Create feature branch
- Commit changes
- Push and create PR
MIT

