The script flow resides in the main directory of the Flow distribution.
From a shell you should be able to run the script by entering ./flow:

./flow
Flow 3.0.0 ("Development" context)
usage: ./flow <command identifier>
See './flow help' for a list of all available commands.

To get an overview of all available commands, enter ./flowhelp:

./flow help
Flow 3.0.0 ("Development" context)
usage: ./flow <command identifier>
The following commands are currently available:
PACKAGE "NEOS.FLOW":
-------------------------------------------------------------------------------
* flow:cache:flush Flush all caches
cache:warmup Warm up caches
configuration:show Show the active configuration
settings
configuration:listtypes List registered configuration types
configuration:validate Validate the given configuration
configuration:generateschema Generate a schema for the given
configuration or YAML file.
* flow:core:setfilepermissions Adjust file permissions for CLI and
web server access
* flow:core:migrate Migrate source files as needed
* flow:core:shell Run the interactive Shell
database:setcharset Convert the database schema to use
the given character set and
collation (defaults to utf8mb4 and
utf8mb4_unicode_ci).
doctrine:validate Validate the class/table mappings
doctrine:create Create the database schema
doctrine:update Update the database schema
doctrine:entitystatus Show the current status of entities
and mappings
doctrine:dql Run arbitrary DQL and display
results
doctrine:migrationstatus Show the current migration status
doctrine:migrate Migrate the database schema
doctrine:migrationexecute Execute a single migration
doctrine:migrationversion Mark/unmark a migration as migrated
doctrine:migrationgenerate Generate a new migration
help Display help for a command
package:create Create a new package
package:delete Delete an existing package
package:activate Activate an available package
package:deactivate Deactivate a package
package:list List available packages
package:freeze Freeze a package
package:unfreeze Unfreeze a package
package:refreeze Refreeze a package
resource:publish Publish resources
resource:clean Clean up resource registry
routing:list List the known routes
security:importpublickey Import a public key
security:importprivatekey Import a private key
security:showeffectivepolicy Shows a list of all defined
privilege targets and the effective
permissions for the given groups.
security:showunprotectedactions Lists all public controller actions
not covered by the active security
policy
security:showmethodsforprivilegetarget Shows the methods represented by the
given security privilege target
server:run Run a standalone development server
typeconverter:list Lists all currently active and
registered type converters
PACKAGE "NEOS.KICKSTARTER":
-------------------------------------------------------------------------------
kickstart:package Kickstart a new package
kickstart:actioncontroller Kickstart a new action controller
kickstart:commandcontroller Kickstart a new command controller
kickstart:model Kickstart a new domain model
kickstart:repository Kickstart a new domain repository
* = compile time command
See './flow help <commandidentifier>' for more information about a specific command.

Depending on your Flow version you’ll see more or less the above available
commands listed.

If you get an error at this point, like a “404 Not Found” this could be
caused by outdated cache entries. Because Flow should be running in
Development context at this point, it is supposed to detect changes to
code and resource files, but this seems to sometimes fail… Before you go
crazy looking for an error on your side, try reloading the page and if
that doesn’t work you can clear the cache manually by executing the
./flowflow:cache:flush--force command.

If you look at the drawing of our overall model you’ll notice that you need controllers
for the most important domain model, being Post.
For the PostController we know that we’ll need some standard actions, so let’s
have them created as well:

Created .../Acme.Blog/Classes/Domain/Model/Post.php
Created .../Acme.Blog/Tests/Unit/Domain/Model/PostTest.php
Created .../Acme.Blog/Classes/Domain/Repository/PostRepository.php
Created .../Acme.Blog/Classes/Controller/PostController.php
Omitted .../Acme.Blog/Resources/Private/Layouts/Default.html
Created .../Acme.Blog/Resources/Private/Templates/Post/Index.html
Created .../Acme.Blog/Resources/Private/Templates/Post/New.html
Created .../Acme.Blog/Resources/Private/Templates/Post/Edit.html
Created .../Acme.Blog/Resources/Private/Templates/Post/Show.html
As new models were generated, don't forget to update the database schema with the respective doctrine:* commands.

Tip

To see a full description of the kickstart commands and its options, you can
display more details with ./flowhelpkickstart::actioncontroller.

The kickstarter can also generate models and repositories, as you have seen above
when using the --generate-related option while kickstarting the PostController.
Of course that can also be done specifically with the kickstart:model command.

Before we do this, you should have a look at the next section on models and repositories.

A “vendor namespace” is used to avoid conflicts with other packages. It is common to use the name of the
company/organization as namespace. See Part III - Package Management for
some more information on package keys.