Skip to content

Public API Reference

Creates a CrateRouter integrated with a vibe.d URLRouter.

auto crateRouter = router.crateSetup; // Default: RestApi
auto crateRouter = router.crateSetup!RestApi; // Explicit
auto crateRouter = router.crateSetup!Mcp; // MCP only

Returns: CrateRouter!(Policies...)

Start an HTTP server and event loop. For quick prototyping and tutorials.

router.run(); // Default port 8080
router.run(9090); // Custom port

Returns: int (event loop exit code)


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)

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)

Register a model with only the specified policies.

// User only gets REST, not MCP
crateRouter.prepareFor!(RestApi)(userCrate);
// Space gets both
crateRouter.prepareFor!(RestApi, Mcp)(spaceCrate);

Returns: TypeRouter (single selected policy) or BlankRouter[] (multiple selected policies)

Like add, but only registers with selected policies. Accepts middleware.

crateRouter.addFor!(RestApi)(userCrate, authMiddleware);

Returns: CrateRouter (for chaining)

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-matched

Returns: IApiOperation or null


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)

Add a custom IApiOperation to this router.

crateRouter.prepare(userCrate)
.withCustomOperation(new MyCustomOperation);

Returns: TypeRouter (for chaining)

Expose a model’s @Action method as an HTTP endpoint.

crateRouter.prepare(userCrate)
.expose!"archive"; // Exposes User.archive() as an endpoint

Returns: TypeRouter (for chaining)

Add a custom operation scoped to a single item (:id in path).

crateRouter.prepare(userCrate)
.itemOperation!("download", downloadOp);

Returns: TypeRouter (for chaining)


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 routers

Returns: BlankRouter[] (for chaining)

crateRouter.prepare(userCrate)
.withCustomOperation(myOp); // Added to all policy routers

Returns: BlankRouter[] (for chaining)


PolicyModuleRoutingDescription
RestApicrate.protocols.restApi.policyPath-basedStandard REST endpoints
JsonApicrate.protocols.jsonApi.policyPath-basedJSON:API compliant endpoints
Mcpcrate.protocols.mcp.policyBody-matchedModel Context Protocol (JSON-RPC)
GraphQLcrate.protocols.graphql.policyBody-matchedGraphQL queries and mutations

Customize the base URL for any policy:

auto crateRouter = router.crateSetup!(
RestApiPolicy!(PolicyConfig("/api/v1")),
McpPolicy!(PolicyConfig("/mcp"))
);

Control which CRUD operations are enabled per model:

auto config = CrateConfig!User;
config.deleteItem = false; // Disable DELETE
config.replaceItem = false; // Disable PUT
auto crate = new MongoCrate!User(collection, config);
FieldDefaultDescription
getListtrueGET /resources
getItemtrueGET /resources/:id
addItemtruePOST /resources
deleteItemtrueDELETE /resources/:id
replaceItemtruePUT /resources/:id
updateItemtruePATCH /resources/:id
singularautoSingular name for URLs/keys
pluralautoPlural name for URLs/keys

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.