A PHP TaskRunner for project automation. Class-based tasks, context switching, environment-aware execution.
Sputnik runs tasks defined as PHP classes. Each task is a single class with attributes -- no YAML actions, no function dumps, no DSL. You write normal PHP, Sputnik handles discovery, CLI, contexts, and shell routing.
#[Task(name: 'deploy', description: 'Deploy the application', environment: 'container')]
final class DeployTask implements TaskInterface
{
public function __invoke(TaskContext $ctx): TaskResult
{
$ctx->shell('rsync -avz ./dist/ {{ deployPath }}/');
$ctx->shellRaw('php artisan migrate --force');
return TaskResult::success();
}
}$ php sputnik.phar deploy
Sputnik 0.1.0 │ .sputnik.dist.neon │ prod
▸ deploy · Deploy the application
> rsync -avz ./dist/ /var/www/app/
> php artisan migrate --force
✓ Done (1.24s)
curl -Lo sputnik.phar https://github.com/refsz/sputnik/releases/latest/download/sputnik.phar
chmod +x sputnik.phar
php sputnik.phar initVerify the download:
curl -Lo sputnik.phar.sha256 https://github.com/refsz/sputnik/releases/latest/download/sputnik.phar.sha256
sha256sum -c sputnik.phar.sha256For IDE autocompletion you can additionally install via Composer: composer require --dev refs/sputnik. See Installation for details.
Tasks are PHP classes with #[Task] attributes. Options, arguments, and shell execution are built in. Writing Tasks
Contexts let you define named configurations -- different variables, different behavior. Switch with one command, no code changes. Contexts
Templates render files like .env with {{ variable }} syntax. Re-rendered automatically on context switch. Templates
Environments route commands transparently between host and container. A task marked environment: 'container' is automatically wrapped with your Docker executor. Environments
- Documentation -- full docs, recipes, CLI reference
- Releases -- release notes and downloads
- Contributing -- development setup
- Security -- reporting vulnerabilities
- License -- MIT