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.tsimport{initTRPC}from'@trpc/server';import{createChromeHandler}from'trpc-chrome/adapter';constt=initTRPC.create({isServer: false,allowOutsideOfServer: true,});constappRouter=t.router({// ...procedures});exporttypeAppRouter=typeofappRouter;createChromeHandler({router: appRouter/* 👈 */,});3. Add a chromeLink to the client in your content script.
// content.tsimport{createTRPCClient}from'@trpc/client';import{chromeLink}from'trpc-chrome/link';importtype{AppRouter}from'./background';constport=chrome.runtime.connect();exportconstchromeClient=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 💙
