High-performance. Compliance-ready. Zero bloat.
Built for developers who ship real APIs.
FrankenPHP worker mode. 732 req/s with 100 concurrent users. 44,011 requests in 1 minute. Zero errors.
NF525 fiscal, GDPR, SOC 2, ISO 27001 — all baked into the framework. Not bolted on. Not an afterthought.
No sessions. No cookies. No Blade templates. JWT authentication, OpenAPI docs, webhooks. Just what your API needs.
Eloquent-like models with eager loading, soft deletes, type casting, and N+1 prevention built in.
Access & refresh tokens, role-based access control, password policies, account lockout.
Sync, Redis Pub/Sub, or database broker. Auto-discovered listeners via PHP 8 attributes.
Async job processing with retry logic, failure handling, and configurable workers.
API documentation generated from your code. Scalar UI at /docs. Always up to date.
Generate CRUD, models, controllers, DTOs, migrations. One command: ./forge make:all
Isolated databases per tenant. Automatic domain/port-based resolution. SaaS-ready.
Real-time Server-Sent Events via Redis Streams. Push updates to clients instantly.
$router->group([
'prefix' => '/api',
'middleware' => [[Auth::class, ['admin']]],
], function ($router) {
$router->get('/users', [UserController::class, 'list']);
$router->post('/users', [UserController::class, 'create']);
$router->put('/users/{id}', [UserController::class, 'update']);
$router->delete('/users/{id}', [UserController::class, 'delete']);
});
#[Table('posts')]
class Post extends Model
{
protected static bool $softDeletes = true;
protected static array $casts = [
'is_published' => 'bool',
'metadata' => 'json',
'published_at' => 'datetime',
];
public function author(): BelongsTo
{
return $this->belongsTo(User::class, 'author_id');
}
}
// Eager loading — 2 queries, not N+1
$posts = Post::with('author')
->where('is_published', true)
->paginate(10);
// Auto-discovered via attribute — zero config
#[Listener(OrderPlaced::class, priority: 10)]
class NotifyWarehouse
{
public function handle(OrderPlaced $event): void
{
Job::dispatch(SendNotification::class, [
'order_id' => $event->orderId,
]);
}
}
// Dispatching is one line
Event::dispatch(new OrderPlaced(
orderId: 42,
total: 199.99
));
#[Table('invoices'), Nf525(prefix: 'FA')]
class Invoice extends Model
{
use HasNf525;
}
// Create — auto sequential number + SHA-256 chain
$invoice = new Invoice([
'client_name' => 'ACME Corp',
'total_ht' => 1000.00,
'tva' => 200.00,
'total_ttc' => 1200.00,
]);
$invoice->save();
// → FA-2026-000001, SHA-256 hash chain established
// Verify integrity of the entire chain
HashChainVerifier::verify(table: 'invoices');
// → ['valid' => true, 'total' => 1500, 'errors' => []]
No third-party packages. No configuration nightmare. Compliance is part of the framework.
FA-2026-000001./forge nf525:verify
./forge nf525:export --year=2026
./forge make:gdpr
./forge audit:purge
Real K6 load tests. 100 concurrent users. Zero errors.
Higher is better · JSON health endpoint · K6 benchmark
Start your next API project in under a minute.
fennectra new my-api