Pablo is a CLI deployment helper that automates building, filtering, and deploying artifacts across multiple environments. It supports local and remote (SSH) targets driven by a single YAML manifest.
Full schema reference:
schema/schema.mdWiki (extended docs): github.com/septillioner/pablo/wiki
- Multi-profile manifests — manage frontend, backend, and infra in one
pablo.yaml. - Multi-stage pipeline — hooks, build, filter, deploy, template variables, health check.
- Remote SSH deploy — tar-based streaming for fast bulk transfers.
- Safety checks — protected system directory detection and automatic backups.
- Self-deploy — Pablo can build and install itself.
- VS Code extension — syntax highlighting, autocomplete, hover docs, and snippets for
pablo.yaml.
- Go 1.25.5 or newer (only required to build from source)
- Git (only required for
git-syncdeployment type) - Docker (only required for
dockerdeployment type) - OpenSSH client / private key (only required for remote SSH deploys)
- Supported host platforms: Windows, macOS, Linux
- Open the latest release: Releases page
- Download the archive matching your OS / arch
(
pablo-<os>-<arch>for macOS/Linux,pablo-<os>-<arch>.exefor Windows). - Verify the SHA-256 checksum against
checksums.txt. - Move the binary to a directory on your
PATH(e.g./usr/local/bin/pabloorC:\Program Files\Pablo\pablo.exe). - Verify the install:
pablo versiongit clone https://github.com/septillioner/pablo.git
cd pablo
# Build for the current platform (output goes to ./build)
./build.sh
# Or build for all supported platforms
./build.sh allThe resulting binary is written to build/pablo (or build/pablo.exe on Windows).
Pablo can build and register itself in your PATH using its own pipeline:
# macOS / Linux
./publish-self.sh
# Windows (PowerShell, runs elevated)
./publish-self.ps1After self-deploy, the pablo command is available globally.
Create a minimal pablo.yaml (or run pablo init to generate a sample):
name: my-app
version: 0.1.0
profiles:
default:
type: static
build:
command: npm run build
output_dir: ./dist
artifacts:
include: ["**/*"]
environments:
production:
deploy:
target_path: /var/www/my-app
strategy: backupThen:
pablo check # Validate the manifest
pablo run -e production # Execute the deploymentpablo run -p <profile> -e <env> [-f pablo.yaml] [--force]
pablo check -f <file> [-p profile] [-e env]
pablo init
pablo uninstall -p <profile> -e <env> [--remove-backups]
pablo version
Defaults: manifest = pablo.yaml, profile = default, env = production.
| Type | Description | Local | Remote SSH | Status |
|---|---|---|---|---|
static |
Frontend / SPA — build, filter artifacts, deploy files | Yes | Yes | Working |
binary |
Compiled executables — build, deploy, PATH register | Yes | Yes | Working |
docker |
Docker Compose — git clone/pull, compose up | Yes | No | Working (local) |
git-sync |
Interpreted languages — git pull, post commands | Yes | Yes | Working |
| Strategy | Description | Status |
|---|---|---|
overwrite |
Copy files over existing (default) | Working |
backup |
Rename existing dir with timestamp, then deploy | Working |
recreate |
Delete target dir, create fresh, deploy | Working |
blue-green |
Zero-downtime swap | Not implemented |
- Pre-deploy hooks (
hooks.pre) - Build (
build.command) - Pre-deployment commands (
deploy.pre_commands) - Deployment (local copy or SSH tar stream)
- Post-deployment commands (
deploy.post_commands) - Post-deploy hooks (
hooks.post) - Health check (
pipeline.health_check)
- Full local deploy pipeline for
staticandbinarytypes. - Remote SSH deploy with tar-streaming and SCP fallback.
- Glob-based artifact filtering (include/exclude patterns).
- Template variable substitution (
{{VAR}}in config files). - Config inheritance — profile settings cascade into environments.
- Automatic PATH registration (Windows, macOS, Linux user scope).
- Backup and recreate strategies with protected path detection.
dockertype with local Docker Compose orchestration.git-syncwith local and remote (SSH) git clone/pull.- Environment variable injection via
.envfile generation. - LSP-powered VS Code extension with completion, hover, and YAML validation.
- No unit tests — only YAML test fixtures exist under
tests/. blue-greenstrategy — declared but not implemented (returns error).- SSH host key verification — currently disabled (
InsecureIgnoreHostKey); see SECURITY.md. - Windows PATH uninstall —
RemovePathreturns "not yet implemented" on Windows. - Remote docker deploy —
dockertype only works locally; no remote SSH compose support. - LSP schema validation — only YAML syntax errors are reported; semantic checks are TODO.
filepath.Joinon remote paths — may produce backslashes when a Windows host deploys to Linux.builder.Service— exists as a standalone service but is currently unused; builds run inline.- Snippet versions — hardcoded; not synced with the
VERSIONfile.
src/ Go CLI source (module: pablo)
main.go Entry point - cobra commands
internal/
domain/ Config, Profile, Environment, Deploy types
config/ YAML loader + inheritance resolver
services/
pipeline/ Orchestrator - full deploy lifecycle
deployer/ Local + SSH deploy with safety checks
builder/ Build command executor (unused)
filter/ Include/exclude file filtering
scm/ Git clone/pull
hooks/ Lifecycle hook runner
health/ HTTP health check
template/ {{VAR}} replacement
adapters/
ssh/ SSH connect, SCP, tar pipeline
docker/ Docker Compose wrapper
system/ PATH registration (cross-platform)
pkg/ui/ Colored terminal output
extensions/
pablo-lsp/ Go LSP server (completion, hover, validation)
vscode-pablo/ VS Code extension (language client, snippets, syntax)
tests/ YAML test fixtures
schema/ Schema documentation
Contributions are welcome. Please read CONTRIBUTING.md before opening an issue or pull request.
If you discover a security vulnerability, please follow the disclosure process described in SECURITY.md. Do not open a public issue for security reports.
The release process (version bump, build matrix, checksums, tagging, GitHub Release) is documented in RELEASING.md.
Distributed under the Apache License. See LICENSE for details.
Ege Ismail Kosedag github.com/septillioner