Config

`config.json` sits at the project root. The generator reads it on every run and rewrites its `table` map afterwards.

Full example

{
  "alias": { "component": "c", "layout": "l" },
  "env": {
    "host": "example.com",
    "sslhost": ".example.com",
    "dbhost": "localhost",
    "dbname": "demo",
    "dbuser": "username",
    "dbpwd": "password",
    "samesite": "Strict",
    "httponly": true,
    "secure": true
  },
  "fresh": false,
  "postgresql": false,
  "back-end": ["php"],
  "front-end": ["angular"],
  "angular": { "outputPath": "../public_html/manager", "assets": [] },
  "table": { "user": true, "invoice": true }
}

Keys

KeyRead byEffect
env.dbhost dbname dbuser dbpwdmigrate / sync, DenoThe database connection. For Deno these are also written to deno/.env (DBHOST, DBNAME and so on).
env.hostDenoHOST= in deno/.env.
env.* (every key)PHPEach key becomes a define('key', value); in php/env.php. The runtime relies on sslhost, httponly, samesite and secure for the session cookie.
freshmigratetrue drops and recreates the database. With false, statements that fail are skipped and logged as [SKIP].
postgresqlwrite / migrate / synctrue emits PostgreSQL SQL instead of MySQL.
back-endconfig()One or more of "php", "deno" or "python".
front-endconfig()One or more of "angular" or "solidjs".
angular.outputPathAngularPatched into angular/angular.json as the build output path.
angular.assetsAngular"src/storage" is symlinked to storage/public. Any other asset is copied from config/angular/<asset>.
aliasview compilerTag aliases for Resource/View. With component → c, you can write <t-c.card>.
tablePHP controllersThe protected-controller map. See below.

Protecting hand-edited controllers: table

After each run, write() saves config.json with a key under table for every model. The PHP generator only writes a controller when the model has no key in table. The check is isset, which is true even when the value is false:

"table": {
  "invoice": true,   // protected: never regenerated
  "brand": false     // ALSO protected, because the key exists
}
  • To keep your custom code, leave the key in place. Use true to make the intent obvious.
  • To regenerate a controller from scratch, delete its key, then run php setup.php again.

Models, interfaces, SQL and frontend services are always regenerated. Keep custom logic in controllers, or in files the generator does not own.

Backends and frontends that are not wired in

ValueState
"dotnet", "golang", "spring"The generator classes exist, but config() never calls them and their templates are missing. Setting these does nothing today. See .NET, Go and Spring.
"vuets"This is recognised, but the Vue generator never runs its set() step, so no files are produced. See VueJS.