Tulip Logo IconTulip
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 LocalDriveProvider on 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";

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:

  • namespace
  • permission
  • meta
  • readonly
  • initialView
  • selection
  • selectionConditions
  • onMove
  • driveUploadClient
  • uploadHooks
  • onUploadCompleted
  • onUploadFailed
  • optimistic
  • disabled
  • parentId
  1. implement the server service
  2. implement the contract and expose route handlers
  3. build the upload client from those endpoints
  4. mount LocalDriveProvider
  5. feed LocalDriveViewProvider with data and commands

On this page