Supported integrations
Integrations are how Docuccino understands the packages and conventions you already use. Each one reads a specific part of your app — form requests, API resources, Eloquent models, query builders, authentication — and contributes the matching pieces of your documentation.
This section is organized by what you’re documenting. Start with the page for the concern in front of you; come back to the matrix below when you want to know whether a particular package is supported.
Start with what you’re documenting
Section titled “Start with what you’re documenting”How support activates
Section titled “How support activates”Mostly, you never switch anything on:
- Laravel’s own conventions are always available — validation, form requests, response inference, API resources, Eloquent models, enums, error handling, rate limiting. There’s no package to detect.
- A package-backed integration activates the moment its package is installed. The Spatie Data
support the moment
spatie/laravel-datais there, the Passport support the moment Passport is. - Everything installed is enabled by default, with one exception. Spatie Laravel Permission is opt-in, because documenting role and permission names publishes your app’s internal authorization taxonomy.
- A disabled integration says so. An integration that’s installed but switched off emits one
integration.disabledinfo diagnostic per build, so the switch is always discoverable from the output rather than something you have to remember.
The integration matrix
Section titled “The integration matrix”Each row links to the page that covers it. Requires is what has to be installed for the
integration to activate; Config is the bag that tunes it. Anything with an integrations.* bag
can also be switched off per document with integrations.<key>.enabled = false — see
integrations.
Requests & validation
Section titled “Requests & validation”| Integration | What it documents | Requires | Config |
|---|---|---|---|
| Validation rules | Laravel’s validation DSL turned into schema constraints — types, formats, sizes, presence, and enumerations | Built in — always on | — |
Form requests & inline validate() |
Request bodies and query parameters from a form request’s rules(), or an inline $request->validate([...]) / Validator::make(...) |
Built in — always on | — |
| Spatie Data | Data classes as reusable schemas, and request bodies from Data-typed action parameters | spatie/laravel-data |
integrations.spatie_data |
| Laravel Actions | Action classes as controllers — the resolved handle()/asController() signature, a request body from rules(), a 403 from authorize(), and a response body from jsonResponse() |
lorisleiva/laravel-actions |
integrations.laravel_actions |
Responses, models & schemas
Section titled “Responses, models & schemas”| Integration | What it documents | Requires | Config |
|---|---|---|---|
| Response inference | Success responses from your action return types — resources, models, enums, JsonResponse payloads with status codes, and 204 |
Built in — always on | — |
| API resources | Response schemas from JsonResource shapes, wrapped per the resource’s own $wrap |
Built in | integrations.api_resources.wrap |
| First-party JSON:API resources | JSON:API documents from Laravel’s own JsonApiResource, plus its include / fields[TYPE] parameters |
Laravel 13+ — activates when the JsonApiResource class exists |
integrations.api_resources |
| JSON:API resources (timacdonald) | Pre-13 JSON:API documents from timacdonald/json-api resources — identical output to the first-party support, plus include / fields[TYPE] |
timacdonald/json-api |
integrations.timacdonald_json_api |
| Eloquent models | Model schemas from columns, refined by $visible / $hidden / $appends / casts — including polymorphic MorphTo as a discriminated oneOf |
Built in | integrations.eloquent |
| Enums | Backed enums by their backing values, #[CaseDescription] prose as x-enumDescriptions, and optional codegen name hints |
Built in — always on | representation.enums |
Error responses
Section titled “Error responses”| Integration | What it documents | Requires | Config |
|---|---|---|---|
| Inferred exception handlers | 4xx/5xx responses from your real error handling — render callbacks, exception render(), and Responsable exceptions |
Built in — always on | error_responses |
| Problem Details preset | RFC 9457 application/problem+json error responses |
Built in — opt-in | error_responses: 'problem-details' |
| Framework error defaults | Laravel’s stock JSON error shapes — {message, errors} for 422, {message} for 401/403/404 |
Built in — always on | error_responses |
Authentication & operations
Section titled “Authentication & operations”| Integration | What it documents | Requires | Config |
|---|---|---|---|
| Sanctum | Bearer-token and stateful-cookie security schemes — both modes when a single route carries both | laravel/sanctum |
integrations.sanctum |
| Passport | An OAuth2 security scheme with per-operation scopes read from scope: / scopes: middleware |
laravel/passport |
integrations.passport.url |
| Spatie Laravel Permission | role: / permission: / role_or_permission: middleware as an x-permissions member and a description line |
spatie/laravel-permission |
Opt-in — integrations.permission.enabled |
| Rate limiting | A 429 response with Retry-After and X-RateLimit-* headers, read from throttle middleware |
Built in | integrations.rate_limit |
| Spatie Query Builder | Filters, sorts, includes, sparse field sets, and pagination — traced through the builder several method calls deep | spatie/laravel-query-builder |
integrations.query_builder |
| Spatie JSON API Paginate | JSON:API page[number] / page[size] (or page[cursor]) pagination parameters from jsonPaginate() |
spatie/laravel-json-api-paginate |
integrations.json_api_paginate |
Quality
Section titled “Quality”| Integration | What it documents | Requires | Config |
|---|---|---|---|
| Data-leakage lint | Warns when a schema property name looks sensitive (password, token, secret, api_key, …) before it ships — a diagnostic, never a mutation |
Built in — always on | lint.leakage |
How contributions combine
Section titled “How contributions combine”Several sources can describe the same operation — an inferred type, an integration, a docblock, an attribute. Docuccino merges them with a clear order of precedence, and higher layers win field by field (an attribute can override one field of a response without discarding the rest):
fallback < inference < integration < docblock < attribute < overlay < configSo an integration’s best guess is always something you can refine with a docblock or an attribute — you’re never fighting the tool.
Every contribution is recorded with its source in the document’s provenance (visible in the raw
UIR), labeled by the integration that made it — for example integration:query-builder or
integration:sanctum. That’s what lets tooling explain why a given detail is documented the way
it is.