Frequently Asked Questions¶
Differences with Make?¶
See below how Castor is different from Make:
Criterion | Castor | Make |
---|---|---|
Language | PHP — your own language | Makefile syntax (custom DSL) |
Learning curve | Easy for any PHP dev | Steep if you're not familiar with Makefile syntax nor Shell |
Task definition | PHP functions with attributes | Rule-based, using targets and dependencies |
Dynamic logic | ✅ Native in PHP (conditions, loops, etc.) | ⚠️ Harder — requires shell scripting or complex rules |
Error handling | Try/catch, logging, etc. in PHP | Shell-based error codes and operators (like && ) |
Dependencies | Composer-managed, remote imports | External shell commands |
Cross-platform | ✅ Fully portable (runs with PHP) | ⚠️ Depends on shell tools — may vary on Windows/Linux |
Designed for PHP devs | ✅ Yes | ❌ Not really |
TL;DR
- Make is great for compiling C projects in 1995.
- Castor is great for automating (PHP or not) projects in 2025.
Make is powerful, but its syntax is obscure and hard to debug.
Castor lets you write tasks in PHP — the language you already know.
Differences with Robo?¶
See below how Castor is different from Robo:
Criterion | Castor | Robo |
---|---|---|
Philosophy | Simple PHP functions with attributes | OOP-based task classes |
Task definition | Annotated PHP functions (#[AsTask] ) |
Methods inside a class extending Tasks |
Installation | Phar, static binary, Composer, Github Action | Phar, Composer |
CLI autocompletion | ✅ Built-in | ❌ Not by default |
Learning curve | ✅ Very low – just write a function | ⚠️ Requires boilerplate and understanding of inheritance |
Modern PHP | ✅ Uses modern features (attributes, PHP 8+) | ⚠️ More traditional OOP, less "modern PHP"-oriented |
Symfony Console-based | ✅ Yes (under the hood) | ✅ Yes (used directly) |
Community | Small but active | Larger but not very active |
TL;DR
- Castor is minimal, expressive, and easy to use. You define tasks as plain PHP functions with attributes — that’s it.
- Robo is powerful but more verbose and class-oriented. It might feel too heavy for small or script-like automation needs.
If you prefer "just PHP" over complex CLI frameworks, you'll love Castor.
If you're building a full-featured CLI app, Robo might fit — but Castor often gets you there faster.
Differences with Phing?¶
See below how Castor is different from Phing:
Criterion | Castor | Phing |
---|---|---|
Main focus | General-purpose task runner | Build system (tests, packaging) |
Config language | Native PHP (functions + attributes) | ⚠️ XML (build.xml ) |
Ease of use | ✅ High (readable, IDE friendly) | ❌ Low (verbose XML, harder to maintain) |
Modernity | ✅ Very modern (PHP 8+, DX-focused) | ⚠️ Old (Ant-inspired, legacy) |
Built-in tasks | ✅ Lightweight, extensible in PHP | Large catalog of built-in tasks |
Learning curve | Gentle (PHP developers feel at home) | Steep (XML + conventions) |
Community | Young, growing | Historical, smaller today |
Best suited for | Local automation, CI/CD, DevOps | Legacy projects, complex build scripts |
TL;DR
- Castor is modern, minimal, and uses plain PHP functions with attributes.
- Phing is XML-heavy, verbose, and feels like it belongs in a museum next to Ant and SOAP.
Phing shines if you love writing
blocks and closing tags.
Castor shines if you prefer actual PHP code in 2025 instead of XML from 2005.
Differences with Deployer?¶
See below how Castor is different from Deployer:
Criterion | Castor | Deployer |
---|---|---|
Main focus | General-purpose task runner | Deployment automation (SSH orchestration) |
Config language | Native PHP (functions + attributes) | Native PHP (deploy.php ) |
Ease of use | High (simple, IDE autocomplete) | Medium (requires deployment knowledge) |
Modernity | Very modern (PHP 8+, DX-focused) | Mature, widely adopted |
Built-in tasks | Lightweight, generic (extensible) | Rich deployment-specific plugins (Symfony, Laravel, etc.) |
Learning curve | Gentle (PHP-centric) | Medium (deployment flow concepts) |
Community | Young, growing | Large, strong adoption in production |
Best suited for | Automation, CI/CD, local tooling | Deployments and server orchestration |
TL;DR
- Castor is a general-purpose task runner: tests, CI/CD, local automation, Docker, Ansible… all in plain PHP.
- Deployer is laser-focused on one thing: pushing your code to servers.
If you need a Swiss Army knife for automation, Castor has your back.
If your only goal is “ship this to production”, Deployer is the specialist.
How is Castor different from raw Symfony Console usage?¶
Castor is a task runner, so it's primary goal is to run simple tasks to simplify the project development. Usually, it is used to run Docker commands, database migrations, cache clearing, etc.
Usually, tasks are very small, like 1 or 2 lines of code. So you probably don't want to waste your project with ops command that are not strictly related to the business.
Why "Castor"?¶
Castor means "beaver" in french. It's an animal building stuff. And this is what this tool does: it helps you build stuff 😁