Skip to main content

The Problem with Booting Applications

Traditional PHP documentation tools boot the entire Laravel application kernel to inspect routes and controllers. This leads to serious operational issues:
  • Database Dependency: The application fails to boot or throws exceptions if database credentials are not configured, database servers are unreachable, or migrations have not run.
  • Accidental Side Effects: Running controller constructors, service providers, or action methods can trigger external API requests, database queries, Redis connections, or file operations.
  • Slow CI Execution: Running documentation commands in CI requires provisioning databases, seeders, and Redis instances just to build static documentation.
  • Brittle Environments: Locked-down production or pre-commit hook environments without database access cannot run documentation generators.

How Geni Does Zero-Boot

Geni adheres strictly to a zero-boot philosophy for inference:

No Database Connections

Geni never calls DB::connection(), PDO, or database drivers. All database structure is reconstructed from your migration source files.

No Controller Instantiation

Geni never executes new $controllerClass() or invokes action methods. Analysis is performed statically on AST nodes.

No Eloquent Hydration

Model relationships, table names, and column types are determined by static heuristics and migration schemas, not live queries.

Deterministic Output

Generating the documentation multiple times produces identical output with canonicalized key ordering and zero false drift.

What Touches the Runtime?

The only runtime element used by Geni is reading the Laravel RouteCollection via Route::getRoutes():
Everything that happens after route discovery (reading files, extracting rules, analyzing return statements, mapping schemas) is 100% static AST parsing.