Installation
Requirements
Section titled “Requirements”-
PHP 8.5 or higher, with the
dom(libxml2) extension enabled -
A supported database, and its PDO driver:
Engine Minimum version PDO extension PostgreSQL (recommended and default) 16 pdo_pgsqlMySQL 8.0 pdo_mysqlMariaDB 10.5 pdo_mysqlSQLite 3.35 pdo_sqliteMSSQL / SQL Server 2012 pdo_dblibOracle 12c pdo_oci(must be built from source)
See Supported databases for driver setup — in particular for Oracle, where pdo_oci isn’t distributed as a prebuilt package for any current PHP version and has to be compiled against an Oracle Instant Client.
Propulsion depends on a handful of Symfony components (symfony/console, symfony/yaml), psr/log for its logging interface, psr/event-dispatcher for model events, psr/simple-cache for the PSR-16 cache contract the query cache is written against, and psr/http-client, psr/http-factory and php-http/discovery — the PSR-18/PSR-17 interfaces and the discovery shim that finds a concrete HTTP client at runtime — for exporting OpenTelemetry spans over OTLP. All of these are interface packages rather than implementations, and Composer pulls them in automatically.
Installing via Composer
Section titled “Installing via Composer”Propulsion is available on Packagist. The latest stable version is v3.0.0 — if you’re upgrading an existing 2.x project rather than starting fresh, read Upgrading from 2.x to 3.0 first, since it changes the shape of every generated stub class.
composer require quioteframework/propulsionOr add it to your composer.json manually:
{ "require": { "quioteframework/propulsion": "^3.0" }}Then run:
composer installThe bin/propulsion CLI
Section titled “The bin/propulsion CLI”Propulsion ships a single console script, bin/propulsion, that replaces everything Propel 1 did through Phing. It’s a plain Symfony Console application — no build.xml, no Ant, no propel-gen wrapper script. Check that it’s available:
vendor/bin/propulsionThis prints the Propulsion version and the full list of available commands:
| Command | Purpose |
|---|---|
init | Scaffold a new project’s directory structure, a sample schema, and a starter config file |
model:build | Generate Object Model and Query classes from a schema |
sql:build | Generate SQL DDL from a schema |
sql:exec | Run .sql files against a live database |
sql:diff | Compare a schema against a live database and generate migration SQL |
schema:reverse | Generate a schema from an existing database |
graph:build | Render a schema as a Graphviz diagram |
migration:status | List pending and already-applied migrations |
migration:up | Execute the next pending migration |
migration:down | Revert the most recently applied migration |
data:dump | Dump the rows of a live database into an XML dataset file |
data:sql | Convert an XML dataset file into INSERT SQL |
See Building your schema for model:build and sql:build in detail, Migrations for the migration:* commands and the versioning table they read, XML dataset fixtures for the data:* pair, and Migrating from Propel 1 for the full old-Phing-target-to-new-command mapping.
Scaffolding a new project with init
Section titled “Scaffolding a new project with init”bin/propulsion init asks a couple of questions and creates a starting point for a new project:
vendor/bin/propulsion initIt prompts for a project name (used to name the generated directory and the sample database) and a database platform (mysql, postgresql, sqlite, oracle, or mssql), then creates:
<project>/schema/— holds your schema XML files, seeded with a sampleschema.xmldescribing a smalluser/postdata model (with atimestampablebehavior and a foreign key between them) so you have something to build against immediately<project>/generated-classes/— the default output directorymodel:buildwrites Object Model and Query classes into<project>/generated-sql/— the default output directorysql:buildwrites DDL into- a starter connection configuration file with a DSN guessed from the platform you picked (e.g.
pgsql:host=localhost;dbname=<project>) and placeholder credentials you’ll need to edit
Treat the generated config as a starting point rather than a final answer — for a real project you’ll want to move to a build.php file (see Building your schema) once you’re past the initial scaffold. From there, the workflow is the same one init prints at the end: edit the schema, run model:build, then sql:build and sql:exec to create the tables.
Next steps
Section titled “Next steps”With Propulsion installed, move on to Building your schema to describe a data model in XML and generate PHP classes from it.