Public API Reference
Entry Point
Section titled “Entry Point”crateSetup
Section titled “crateSetup”Creates a CrateRouter integrated with a vibe.d URLRouter.
auto crateRouter = router.crateSetup; // Default: RestApiauto crateRouter = router.crateSetup!RestApi; // Explicitauto crateRouter = router.crateSetup!Mcp; // MCP onlyauto crateRouter = router.crateSetup!(RestApi, Mcp);auto crateRouter = router.crateSetup!(RestApi, Mcp, GraphQL);Returns: CrateRouter!(Policies...)
Start an HTTP server and event loop. For quick prototyping and tutorials.
router.run(); // Default port 8080router.run(9090); // Custom portReturns: int (event loop exit code)
CrateRouter Methods
Section titled “CrateRouter Methods”Register a model with all configured policies. Auto-discovers @Action methods. Accepts optional middleware.
crateRouter.add(userCrate);crateRouter.add(userCrate, authMiddleware, filterMiddleware);Returns: CrateRouter (for chaining)
prepare
Section titled “prepare”Register a model with all policies and return the router for further configuration (custom operations, expose, etc.).
auto prepared = crateRouter.prepare(userCrate);prepared .withCustomOperation(myOp) .and(authMiddleware);Returns: TypeRouter (single policy) or BlankRouter[] (multiple policies)
prepareFor
Section titled “prepareFor”Register a model with only the specified policies.
// User only gets REST, not MCPcrateRouter.prepareFor!(RestApi)(userCrate);
// Space gets bothcrateRouter.prepareFor!(RestApi, Mcp)(spaceCrate);Returns: TypeRouter (single selected policy) or BlankRouter[] (multiple selected policies)
addFor
Section titled “addFor”Like add, but only registers with selected policies. Accepts middleware.
crateRouter.addFor!(RestApi)(userCrate, authMiddleware);Returns: CrateRouter (for chaining)
enable
Section titled “enable”Enable OAuth2 authentication globally for all routes.
crateRouter.enable(oAuth2Instance);Returns: CrateRouter (for chaining)
Create a standalone BlankRouter for custom operations that don’t belong to any model.
crateRouter.blank() .withCustomOperation(healthCheckOp);Returns: BlankRouter
Get all routing rules across all registered routers.
auto allRules = crateRouter.rules();Returns: CrateRule[]
Find the operation matching an HTTP method and path.
auto op = crateRouter.match(HTTPMethod.GET, "/users");auto op = crateRouter.match(HTTPMethod.POST, "/mcp", requestBody); // Body-matchedReturns: IApiOperation or null
TypeRouter Methods
Section titled “TypeRouter Methods”Returned by prepare() and prepareFor() when a single policy is selected.
Apply middleware to all operations on this router.
crateRouter.prepare(userCrate) .and(authMiddleware) .and(filterMiddleware);Returns: TypeRouter (for chaining)
withCustomOperation
Section titled “withCustomOperation”Add a custom IApiOperation to this router.
crateRouter.prepare(userCrate) .withCustomOperation(new MyCustomOperation);Returns: TypeRouter (for chaining)
expose
Section titled “expose”Expose a model’s @Action method as an HTTP endpoint.
crateRouter.prepare(userCrate) .expose!"archive"; // Exposes User.archive() as an endpointReturns: TypeRouter (for chaining)
itemOperation
Section titled “itemOperation”Add a custom operation scoped to a single item (:id in path).
crateRouter.prepare(userCrate) .itemOperation!("download", downloadOp);Returns: TypeRouter (for chaining)
BlankRouter[] UFCS Functions
Section titled “BlankRouter[] UFCS Functions”When multiple policies are selected, prepare() and prepareFor() return BlankRouter[]. These UFCS functions forward calls to every router in the array:
crateRouter.prepare(userCrate) // Returns BlankRouter[] .and(authMiddleware); // Applied to all policy routersReturns: BlankRouter[] (for chaining)
withCustomOperation
Section titled “withCustomOperation”crateRouter.prepare(userCrate) .withCustomOperation(myOp); // Added to all policy routersReturns: BlankRouter[] (for chaining)
Available Policies
Section titled “Available Policies”| Policy | Module | Routing | Description |
|---|---|---|---|
RestApi | crate.protocols.restApi.policy | Path-based | Standard REST endpoints |
JsonApi | crate.protocols.jsonApi.policy | Path-based | JSON:API compliant endpoints |
Mcp | crate.protocols.mcp.policy | Body-matched | Model Context Protocol (JSON-RPC) |
GraphQL | crate.protocols.graphql.policy | Body-matched | GraphQL queries and mutations |
PolicyConfig
Section titled “PolicyConfig”Customize the base URL for any policy:
auto crateRouter = router.crateSetup!( RestApiPolicy!(PolicyConfig("/api/v1")), McpPolicy!(PolicyConfig("/mcp")));CrateConfig
Section titled “CrateConfig”Control which CRUD operations are enabled per model:
auto config = CrateConfig!User;config.deleteItem = false; // Disable DELETEconfig.replaceItem = false; // Disable PUT
auto crate = new MongoCrate!User(collection, config);| Field | Default | Description |
|---|---|---|
getList | true | GET /resources |
getItem | true | GET /resources/:id |
addItem | true | POST /resources |
deleteItem | true | DELETE /resources/:id |
replaceItem | true | PUT /resources/:id |
updateItem | true | PATCH /resources/:id |
singular | auto | Singular name for URLs/keys |
plural | auto | Plural name for URLs/keys |
Global Registry
Section titled “Global Registry”crateGetters
Section titled “crateGetters”Maps model names to their getItem functions. Required for relation resolution during POST/PATCH.
crateGetters["Team"] = &teamCrate.getItem;crateGetters["Picture"] = &pictureCrate.getItem;Registered automatically by prepare()/prepareFor() for the model being added. You must register getters manually for any models that the added model references.