Deterministic dynamic forms for Laravel.
Important
This README is intentionally lightweight. For complete, chaptered documentation, go to: formforge.schleret.ch
Packagist Version Packagist Downloads License PHP >= 8.2 Laravel 12.x | 13.x
FormForge is a backend form engine for Laravel (non-UI):
- deterministic form schema
- immutable form revisions
- strict server-side validation
- built-in HTTP API
- scoped routes and owner-aware authorization
- submission exports (CSV/JSONL)
- GDPR retention/anonymization tools
composer require evanschleret/formforge php artisan formforge:install php artisan migrate
<?php declare(strict_types=1); use EvanSchleret\FormForge\Facades\Form; Form::define('contact') ->title('Contact') ->version('1') ->text('name')->required() ->email('email')->required() ->textarea('message')->required(); Form::sync(); $submission = Form::get('contact')->submit([ 'name' => 'Ada', 'email' => 'ada@example.com', 'message' => 'Hello', ]);
Enable and configure endpoints in config/formforge.php, then use routes under:
/api/formforge/v1
Main endpoint groups:
- schema
- submission
- upload
- resolve
- draft
- management
For scoped tenant/context URLs, use formforge.http.scoped_routes.
php artisan formforge:list php artisan formforge:describe contact php artisan formforge:http:routes php artisan formforge:http:options php artisan formforge:sync
Use the full docs for setup patterns, scoped routes, policies, automation resolvers, exports, and GDPR:
MIT