Local Provider
Setup
Wire the local provider by combining storage logic, procedures, and provider components.
Required parts
- a concrete local drive service implementation
- a contract implementation created from
localDriveRouterContract - a
LocalDriveProvideron the client - optional upload client wiring for direct uploads
In practice, most screens also need:
- a route handler for opening files
- a query layer that feeds
LocalDriveViewProvider - breadcrumbs derived from
getFolderParents - mutation commands such as rename, create folder, archive, and delete
Main entrypoints
import { localDriveRouterContract } from "@tulip-systems/drive/local/server";
import { createLocalDriveRouteHandler } from "@tulip-systems/drive/local/server";
import { LocalDriveProvider } from "@tulip-systems/drive/local/client";
import { createLocalDriveUploadClient } from "@tulip-systems/drive/local/client";
import { implement } from "@orpc/server";
import { RPCContext } from "@tulip-systems/core/router/server";Recommended server pattern
Use contract-first implementation with your app's own RPC context and middleware:
const localDriveProcedure = implement(localDriveRouterContract)
.$context<RPCContext<DatabaseSchema, AuthServerOptions>>()
.use(sessionMiddleware);Provider responsibilities
LocalDriveProvider composes selection, view state, drag and drop, permission checks, and
upload-zone state in one place.
Important LocalDriveProvider props
The provider accepts more than just namespace.
Useful props include:
namespacepermissionmetareadonlyinitialViewselectionselectionConditionsonMovedriveUploadClientuploadHooksonUploadCompletedonUploadFailedoptimisticdisabledparentId
Recommended setup order
- implement the server service
- implement the contract and expose route handlers
- build the upload client from those endpoints
- mount
LocalDriveProvider - feed
LocalDriveViewProviderwith data and commands