Pagination + filters are great. Any plan for cursor pagination?
Umbral REST
Official Featured by Umbral contributorsmodel resources, filters, search, pagination, safe writes
About
The same models that power your admin can become a JSON API without a second data layer. Umbral REST is the DRF-equivalent: register a resource and get list / create / retrieve / update / delete, pagination, filtering, search, and an auth + permission chain — all wired to the model you already declared. And it's safe by default: a resource with no explicit permission is read-only, so a stray POST returns 403 until you opt writes in.
Install
Wire it up
use *;
use ;
let app = builder
.database
.plugin
.build?;
GET /api/ lists every resource; GET /api/authuser/ returns a paginated page.
Target: writable, but only for the right callers
Flip a resource to writable and gate it behind a permission — the default stays read-only for everything you don't opt in.
use ;
default
.resource;
What you get
- Model → JSON resource with zero serializer code
- Pagination, query-string filters, and free-text search
- Session / bearer auth chain with per-resource permission gates
GET /api/discovery root listing resources and endpoints- Custom
@actionendpoints beyond CRUD - Safe by default: writes 403 until a permission opts them in; list capped
Usage
Register a `ResourceConfig::for_::<Model>()` per model you want on the wire. Resources are read-only until you attach a write permission via `.default_permission(...)`, so a bare `POST` is a 403, not an open door.
cargo add umbral-rest
Feature tracker
Per-feature shipping status, recorded in the directory.
Models become JSON resources with zero config.
Collection/detail routes with page slicing.
Query-string filters and free-text search per resource.
Query-string filters, free-text search, and sortable collections.
Session/bearer auth chain with per-resource permission gates.
GET /api/ API root listing resources and plugin endpoints.
Collection/detail actions beyond CRUD.
Create a parent and its children in one request.
Bulk create/update/delete routes with safety guards.
Export collection results for spreadsheet workflows.
File/Image fields serialize as usable media URLs.
Per-resource throttling support for noisy clients.
Compatibility
Declared support per Umbral version and database backend.
No compatibility rows declared yet.
Community notes
2 notes in the discussion thread.
Confirmed working end-to-end on Postgres 16.
Reported issues
Bugs and abuse reports filed against this plugin.
No open issues
No issues have been reported against this plugin. Track upstream bugs on the maintainer's tracker, or report a directory problem to the Umbral team.