Skip to content

Command Line Interface

The fullfinity-server CLI is the primary tool for managing your Fullfinity installation. It handles server startup, module management, and code generation.

Terminal window
fullfinity-server -c config.yaml [options] [command]

The -c/--config flag is required for all operations.

Terminal window
fullfinity-server -c config.yaml

This starts the server using settings from config.yaml. The API will be available at http://localhost:8000 by default.

Terminal window
fullfinity-server -c config.yaml -db mycompany

In multi-tenant setups, use -db to specify which database to connect to.

Terminal window
fullfinity-server -c config.yaml --host 127.0.0.1 --port 9000

Override the default binding address and port.

Terminal window
fullfinity-server -c config.yaml --workers 8

Override the number of worker processes (default from config file).

Terminal window
fullfinity-server -c config.yaml --rebuild

Rebuilds the React frontend from source (app/) and copies the built files to static/ before starting the server.

All module operations require the -db flag to specify the target database.

Terminal window
fullfinity-server -c config.yaml -db mycompany --update-module-list

Scans the addon paths for new or updated modules and registers them in the database. Run this after adding new module folders.

Terminal window
# Install single module
fullfinity-server -c config.yaml -db mycompany -i sales
# Install multiple modules
fullfinity-server -c config.yaml -db mycompany -i sales,invoicing,crm
# Long form
fullfinity-server -c config.yaml -db mycompany --install sales,invoicing

Installs the specified modules and their dependencies. The installation process:

  1. Resolves module dependencies
  2. Runs database migrations
  3. Loads security groups and access rules
  4. Loads views, actions, and menus
  5. Loads seed data
Terminal window
# Update specific modules
fullfinity-server -c config.yaml -db mycompany -u sales,invoicing
# Update all installed modules
fullfinity-server -c config.yaml -db mycompany -u all
# Long form
fullfinity-server -c config.yaml -db mycompany --update all

Updates modules to apply changes:

  • New or modified fields (runs schema migration)
  • Updated views and actions
  • New security rules
  • Updated seed data
Terminal window
fullfinity-server -c config.yaml -db mycompany --uninstall sales

Removes a module and cleans up:

  • Deletes records owned by the module
  • Updates dependent modules to restore their original state
  • Reverts any extensions made by the uninstalled module

Warning: Uninstalling a module may delete user data associated with that module.

Terminal window
fullfinity-server -c config.yaml -db newcompany --init core,sales,invoicing

Combines --update-module-list and --install for new database setup. Use this when setting up a fresh tenant database.

Terminal window
fullfinity-server -c config.yaml -db mycompany -u all --stop-after-init

The --stop-after-init flag performs the module operations and exits without starting the server. Useful for:

  • CI/CD pipelines
  • Database updates in deployment scripts
  • Batch operations

upgrade is an alias for -u all — there is no separate version-based upgrade path. After pulling new code, run either:

Terminal window
git pull origin main
fullfinity-server -c config.yaml -db mycompany -u all # or: ... upgrade

This runs the additive schema sync and replays the schema-change ledger (renames, deletes, complex/data migrations) in one atomic transaction — per installed module, in change-id order. It’s safe to re-run (idempotent) and rolls back wholesale on failure. There are no pre_upgrade/post_upgrade hooks and no framework-version gating.

See Migrations & Upgrades for how schema changes are recorded (--check-schema / --resolve-schema) and replayed.

Terminal window
fullfinity-server -c config.yaml --addons-path ./fullfinity/modules,./addons,/opt/addons

Override the module search paths. Fullfinity will scan all specified directories for modules.

The new command scaffolds a module with the standard directory structure and sample files.

Terminal window
fullfinity-server -c config.yaml new my_module
# Create it in a specific directory (default: current directory)
fullfinity-server -c config.yaml new my_module --path ./addons

The module identifier must be a snake_case identifier (letters, digits, underscores; not starting with a digit). The scaffolder writes a ready-to-install module:

my_module/
├── __init__.py
├── manifest.yaml # Module metadata
├── models/ # Model definitions (.py) — includes models/__init__.py
├── views/ # UI views, actions, menus (.yaml)
├── security/ # Groups, permissions (.yaml)
├── data/ # Seed data
├── demo/ # Demo data
├── i18n/ # Translations
├── tests/ # Tests (.py)
├── templates/ # Templates
├── routes/ # Custom routes
└── static/src/{css,js}/ # Frontend assets

The generated models/, views/, security/, and tests/ folders contain working sample files (a model, list/form views, an action, a menu, a security group, and a test). After scaffolding, install it:

Terminal window
fullfinity-server -c config.yaml -db mycompany -i my_module

Note: new does not require the -db flag since no database access is needed.

OptionShortDescription
--config-cPath to configuration file (required)
--database-dbTarget database name
--help-hShow help message
OptionDescription
--hostHost to bind to (default: 0.0.0.0)
--portPort to run on (default: 8000)
--workersNumber of worker processes
--rebuildRebuild frontend before starting
--addons-pathComma-separated addon directories
OptionShortDescription
--install-iInstall modules (comma-separated)
--update-uUpdate modules (comma-separated or “all”)
--uninstallUninstall modules (comma-separated)
--initInitialize modules (update list + install)
--update-module-listScan for new modules
--stop-after-initExit after module operations
Terminal window
fullfinity-server -c config.yaml -db mycompany upgrade

Alias for -u all: additive schema sync + atomic ledger replay. Requires -db.

Terminal window
# Scaffold a new module (no -db required)
fullfinity-server -c config.yaml new my_module [--path DIR]

new options:

OptionDescription
nameModule identifier (snake_case), e.g. my_module (positional)
--pathDirectory to create the module in (default: current directory)
Terminal window
fullfinity-server -c config.yaml -db mydb test [options]

test options:

OptionShortDescription
--module-mOnly run tests for this module
--verbose-vVerbose output
-kOnly run tests matching this pattern
--json-summaryWrite JSON test results to a file
Terminal window
# Create database (via psql or your preferred method)
createdb newclient
# Initialize with core modules
fullfinity-server -c config.yaml -db newclient --init core,sales,crm --stop-after-init
# Start server for the tenant
fullfinity-server -c config.yaml -db newclient
Terminal window
# Pull new version
git pull origin main
# Upgrade after pulling new code (alias for -u all)
fullfinity-server -c config.yaml -db production upgrade
# Start server
fullfinity-server -c config.yaml -db production

The upgrade command handles both schema updates and data upgrade hooks. No separate -u all step is needed.

Terminal window
# Pull latest code (same framework version, module changes only)
git pull origin main
# Update all modules on production database
fullfinity-server -c config.yaml -db production -u all --stop-after-init
# Restart server (handled by process manager)
Terminal window
# Scaffold module structure
fullfinity-server -c config.yaml new custom_module
# Or create manually:
# mkdir -p modules/custom_module/{models,views,data,security,templates}
# Create manifest.json, models, views...
# Register the module
fullfinity-server -c config.yaml -db mycompany --update-module-list
# Install it
fullfinity-server -c config.yaml -db mycompany -i custom_module
Terminal window
# Make changes to module code
# Update the module to apply changes
fullfinity-server -c config.yaml -db dev -u mymodule --stop-after-init
# Or update and start server in one command
fullfinity-server -c config.yaml -db dev -u mymodule
CodeMeaning
0Success
1General error
2Configuration error

The CLI reads one environment variable, FULLFINITY_CONFIG_PATH, which records the path to the config file so worker processes (Gunicorn/Uvicorn workers, the job runner) can load it. It is set automatically from the -c/--config flag — you normally don’t set it by hand:

Terminal window
export FULLFINITY_CONFIG_PATH=./config.yaml

Individual configuration keys (DB_HOST, SECRET_KEY, etc.) are not overridable via environment variables — they are read from config.yaml (and a sibling config.local.yaml overlay). See Configuration.