JCommandChain (JCC) v0.1.1
JCC is a simple CLI tool that lets you alias long commands and run multiple of them concurrently — all from a single
jcc.config.jsonin your project directory.
This is the first release of JCommandChain, establishing the core aliasing and concurrent command execution workflow for developers tired of typing the same long commands over and over.
Release Highlights
- Command aliasing — Map short names to long, complex commands in a simple JSON config. Type
jcc clientinstead ofLiveReloadWebServer 'path/client' --port 1200 -useSsl --useLiveReload. - Concurrent execution — Run multiple aliased commands in parallel with a single
jccinvocation, using Go'ssync.WaitGroupunder the hood. - Named command groups — Define groups of aliases under
multipleand run them all at once with a single key (e.g.jcc run). --initscaffolding — Generates an emptyjcc.config.jsonin the current directory. Prompts before overwriting an existing config.- Colored output — Clear, color-coded terminal feedback for errors, hints, and internal command output.
- Windows installer —
JCommandChainSetup@v0.1.1.exehandles installation and PATH registration on Windows via NSIS.
Changes
This is the initial release — all features are new.
Added
main.go— Entry point; reads config, resolves aliases and multiple groups, and runs commands concurrently via goroutines.internal_commands/internal_commands.go— Handles--init(config scaffolding with overwrite prompt) and--help(usage guidance). Checks for config file existence before any command execution.jcc.config.jsonformat — JSON config with two top-level keys:aliases— maps a short name to a full shell command stringmultiple— maps a group name to a list of alias keys to run concurrently
- Concurrent execution — All resolved commands are dispatched as goroutines and waited on with
sync.WaitGroup. - Duplicate key guard — If a name exists in both
aliasesandmultiple, JCC surfaces a red error and halts rather than silently misbehaving. - NSIS installer (
script.nsi) — Windows installer that copiesjcc.exetoProgram Files\JCommandChain, registers it on the systemPATH, and adds an uninstall entry.
Dependencies
| Package | Version | Purpose |
|---|---|---|
github.com/fatih/color |
v1.17.0 |
Colored terminal output |
github.com/mattn/go-colorable |
v0.1.13 |
Cross-platform color support |
github.com/mattn/go-isatty |
v0.0.20 |
Terminal detection for color |
golang.org/x/sys |
v0.18.0 |
System-level OS support |
Installation & Usage
Option 1 — Windows Installer (Recommended for Windows)
Download JCommandChainSetup@v0.1.1.exe from the Releases page and run it. The installer will:
- Copy
jcc.exetoProgram Files\JCommandChain - Automatically add the install directory to your system
PATH - Register an uninstaller under Add or Remove Programs
Open a new terminal and jcc is ready to use.
Option 2 — Build from Source
git clone https://github.com/JasnRathore/JCommandChain.git
cd JCommandChain
go build -o jcc.exeAdd the resulting jcc.exe to your PATH manually.
Option 3 — Manual Binary
Download the pre-built binary from the Releases page, place it somewhere on your PATH, and you're done.
Initialize a Config
In your project directory:
jcc --initThis creates a jcc.config.json with empty aliases and multiple sections.
Configure Your Commands
{
"aliases": {
"client": "LiveReloadWebServer 'path/client' --port 1200 -useSsl --useLiveReload",
"tailwind": "npx tailwindcss -i ./client/input.css -o ./client/output.css --watch"
},
"multiple": {
"run": ["client", "tailwind"]
}
}Run Commands
jcc client # Run a single alias
jcc client tailwind # Run two aliases concurrently (ad-hoc)
jcc run # Run all commands defined in the "run" groupConfig Rules
- Don't reuse a name across both
aliasesandmultiple— JCC will error and halt. multipleentries must reference alias keys, not raw command strings.
Known Issues
- Windows-only testing — JCC uses
sh -cto run commands, which requires a Unix shell. On Windows this depends on Git Bash, WSL, or a similar shell being available. Nativecmd/PowerShell execution is not yet supported. - No error recovery — If one command in a concurrent group fails,
log.Fatalis called, which kills the entire process including other running commands. - No
--addcommand — The--addinternal command (for adding aliases via the terminal) is stubbed out in the source but not yet implemented. - Config must be in the current directory — JCC always looks for
jcc.config.jsonin the working directory; there is no way to specify a custom config path.
What's Next
- 🖥️ Native Windows shell support — Run commands via
cmd /con Windows instead of requiringsh. - ➕
--addcommand — Add aliases directly from the terminal without editing the JSON file. - 📁 Custom config path — Support a
--configflag to point JCC at a config file in a different directory. - 🛑 Graceful error handling — Stop one failing command from taking down the entire concurrent group.
- 🐧 Linux/macOS binary distribution — Shell install script or package manager support.
Get Involved
JCC is intentionally minimal — a small Go binary with a simple JSON config. Feedback and contributions are welcome.
- 🐛 Found a bug? Open an issue
- 💡 Have an idea? Start a discussion or submit a PR
- ⭐ Find it useful? A GitHub star helps others discover the project