quickstart is a lightweight command-line orchestration tool built with Go and Cobra.
It helps developers automate, organize, and monitor multi-command workflows through a clear, declarative YAML configuration.
Instead of juggling multiple terminals or maintaining long shell scripts, quickstart lets you:
- Define all your tasks in one YAML file.
- Control dependencies between processes.
- Run everything with a single command.
Perfect for setting up local dev environments, running integration tests, or managing automation pipelines β all in a fast, reliable, and reproducible way.
- β‘ Simplify your setup β Stop memorizing long command chains. Just define them in YAML.
- β Reliable orchestration β Tasks run only when their dependencies are ready.
- π Flexible execution β Run concurrently or sequentially as your workflow requires.
- π§βπ» Developer-friendly β Ideal for repeatable setups in dev, test, or CI/CD environments.
- π Transparent & observable β Easy to debug, verify, and reproduce results.
- Spin up local environments with multiple services (databases, APIs, message queues).
- Run integration tests that depend on multiple running services.
- Automate CI/CD workflows with predictable, declarative orchestration.
- π§Ύ Declarative YAML config β Define tasks, dependencies, and health checks cleanly.
- βοΈ Process orchestration β Manage concurrent or sequential command execution.
- β€οΈ Built-in health checks β Validate task completion before proceeding.
- π§ Dependency control β Define startup order via
depends_on. - π‘ Flexible execution β Customize
base_dir,args, andenvsper task.
| Tool | Key Difference |
|---|---|
| Scripts | YAML offers structure, dependency logic, and health checks. |
| Makefiles | With relative tasks and customized execution check. |
| Docker Compose | Works with any executables, not just containers. |
quickstart brings structure, reliability, portabilty and observability to your automation workflows β helping you focus more on building and less on managing scripts.
Because we have
These warnings simply indicate that the app has not gone through Apple/Microsoftβs paid verification process β they do not mean the application contains malware. You can safely proceed by manually bypassing the system warning based on your OS instructions.
brew install --cask TPIsoftwareOSPO/tap/quickstart
# macos (as "Important Note!" mention above)
xattr -dr com.apple.quarantine $(which quickstart)# add scoop tap
scoop bucket add TPIsoftwareOSPO https://github.com/TPIsoftwareOSPO/scoop-bucket.git
# install quickstart
scoop install quickstartDownload the compressed file that matches your system from release.
The filename prefix will be quickstart-portable_.
To run the portable executable, it must be in the same directory with the quickstart.yaml file.
quickstart.yaml
tasks:
- name: echo
executable: echo
args:
- hello
- worldTo execute tasks defined in your configuration file:
quickstart upoutput:
quickstart|Using config file: ...(ellipsis)/quickstart.yaml
echo|hello world
echo|Completeddocker run --rm -v ./quickstart.yaml:/app/quickstart.yaml tpisoftwareopensource/quickstart upquickstart provides a straightforward command-line interface.
Usage:
quickstart [command]Available Commands:
| Command | Descriptions |
|---|---|
| check | Confirm the correctness of the YAML content format. |
| completion | Generate the autocompletion script for the specified shell. |
| down | Kill previous tasks processes. |
| help | Help about any command. |
| up | Execute tasks according to the YAML configuration file. |
| version | Show version number and build details of quickstart. |
| init | Generate minimal quickstart.yaml file |
The tasks key at the root of your YAML file contains a list of individual task definitions. Each task can have the following properties:
| key | type | description |
|---|---|---|
name |
string, required | A unique identifier for the task. |
base_dir |
string | The working directory for the command. cmd.Dir will be set to this path. If not specified, the current working directory of quickstart will be used. |
executable |
string, required | The path to the executable command |
args |
[]string | A list of arguments to pass to the executable. |
envs |
[]string | A list of environment variables to set for the command |
depends_on |
[]string | A list of task names that this task depends on. This task will only start after all its dependencies have successfully passed their health checks. |
healthcheck |
object | Defines how quickstart determines if a task is healthy. |
healthcheck.http |
object | Configures an HTTP GET health check. |
healthcheck.http.url |
string, required | The URL to send the HTTP GET request to. |
healthcheck.http.expect |
object, optional | Defines expected responses.If not set, a 2xx HTTP status code indicates health. |
healthcheck.http.expect.json |
object | Expects a JSON response. |
healthcheck.http.expect.json.jsonpath |
string, required | A JSONPath expression to extract a value from the response. |
healthcheck.http.expect.json.value |
string, required | The expected value |
healthcheck.command |
object | Configures a command-based health check. |
healthcheck.command.scripts |
[]string, required | A list where the first element is the command, and subsequent elements are its arguments. The command is considered healthy if it exits with a zero status code. |
healthcheck.frequency |
object | Controls the timing of health checks. |
healthcheck.frequency.interval |
duration string | The time between consecutive health check attempts |
healthcheck.frequency.timeout |
duration string | The maximum time allowed for a single health check attempt |
healthcheck.frequency.retries |
int | The maximum number of consecutive failed health checks before the task is considered unhealthy. |
healthcheck.frequency.delay |
duration string | The initial delay before the first health check attempt is made after a task starts |
The application's startup logs will be located in the logs/ directory.
Each log file will be named in the format {task:name}-{date}.log
Here's an example of how you might configure quickstart to start .jar file using java command
Prerequisite
- prepare your
myapp.jarfile. - (Optional) prepare portable jre. (e.g Azul Zulu)
- create a new directory, put in your
myapp.jarand jre directory. The file structure as below:
new-dir/
ββ jre/
ββ bin/
ββ java(.exe)
ββ myapp.jar
ββ quickstart.yaml
ββ (Optional) quickstart-portable(.exe)
Example of quickstart.yaml
-
With Portable Jre Java
tasks: - name: myapp base_dir: . executable: jre/bin/java(.exe) # portable jre executable args: - -jar - myapp.jar
-
Use System Jre Java
tasks: - name: myapp base_dir: . executable: java # call system java command args: - -jar - myapp.jar
Double-click the quickstart portable executable or run quickstart up in your current directory's terminal.
Here's an example of how you might configure quickstart to start Elasticsearch and Kibana,
with proper health checks and dependencies:
Prerequisite
- download elasticsearch
- download kibana
- Unzip the downloaded files and place them in the same directory. The file structure as below:
files structure:
new-dir/
ββ elasticsearch/
ββ kibana/
ββ quickstart.yaml
ββ kibana.yml
Example of kibana.yaml
csp.strict: false
server.ssl.enabled: false
telemetry:
enabled: false
xpack:
encryptedSavedObjects:
encryptionKey: "01234567890123456789012345678901" # only for demoExample of quickstart.yaml
tasks:
- name: elasticsearch
base_dir: ./elasticsearch
executable: bin/elasticsearch
args:
- -E
- xpack.security.enabled=false
- -E
- xpack.security.http.ssl.enabled=false
- -E
- xpack.security.transport.ssl.enabled=false
- -E
- xpack.monitoring.collection.enabled=true
healthcheck:
frequency:
interval: 5s
timeout: 10s
retries: 5
delay: 5s
http:
url: http://localhost:9200
- name: kibana
base_dir: ./kibana
executable: bin/kibana
args:
- -c
- kibana.yml
healthcheck:
frequency:
interval: 5s
timeout: 10s
retries: 5
delay: 5s
http:
url: http://localhost:5601/api/status
expect:
json:
value: available
jsonpath: "$.status.overall.level"
depends_on:
- elasticsearch
- name: curl1
executable: curl
args:
- -v
- http://localhost:9200
depends_on:
- elasticsearch
- name: curl2
executable: curl
args:
- -v
- http://localhost:5601/api/status
depends_on:
- kibanaDouble-click the quickstart portable executable or run quickstart up in your current directory's terminal.