Chrome extension support for tRPC 🧩
- Easy communication for web extensions.
- Typesafe messaging between content & background scripts.
- Ready for Manifest V3.
1. Install trpc-chrome.
# npm
npm install trpc-chrome
# yarn
yarn add trpc-chrome2. Add createChromeHandler in your background script.
// background.ts
import { initTRPC } from '@trpc/server';
import { createChromeHandler } from 'trpc-chrome/adapter';
const t = initTRPC.create({
  isServer: false,
  allowOutsideOfServer: true,
});
const appRouter = t.router({
  // ...procedures
});
export type AppRouter = typeof appRouter;
createChromeHandler({
  router: appRouter /* 👈 */,
});3. Add a chromeLink to the client in your content script.
// content.ts
import { createTRPCClient } from '@trpc/client';
import { chromeLink } from 'trpc-chrome/link';
import type { AppRouter } from './background';
const port = chrome.runtime.connect();
export const chromeClient = createTRPCClient<AppRouter>({
  links: [/* 👉 */ chromeLink({ port })],
});Peer dependencies:
Please see full example here.
For advanced use-cases, please find examples in our complete test suite.
Please see full typings here.
| Property | Type | Description | Required | 
|---|---|---|---|
| port | chrome.runtime.Port | An open web extension port between content & background scripts. | true | 
Please see full typings here.
| Property | Type | Description | Required | 
|---|---|---|---|
| router | Router | Your application tRPC router. | true | 
| createContext | Function | Passes contextual ( ctx) data to procedure resolvers. | false | 
| onError | Function | Called if error occurs inside handler. | false | 
Distributed under the MIT License. See LICENSE for more information.
James Berry - Follow me on Twitter @jlalmes 💙
