Your components.
Write familiar React. Keep your content, styles, and interactions together in a widget folder.
THE REACT WIDGET FRAMEWORK
Make your Notion feel a little more like you. Build with React, customize the details, and bring your widgets into the pages you use every day.
React + TypeScript
Built-in editor
Static site output
Shareable embed URLs
BUILT AROUND YOUR WIDGETS
Spend your time on the part that makes it yours. The gallery, editor, and embed pages come with the package.
Write familiar React. Keep your content, styles, and interactions together in a widget folder.
Define a few fields. Get a gallery, settings controls, and a live preview without building them yourself.
Colors, text, and options travel in the embed URL. No account or database required for configuration.
Build a static site and deploy it to your own host. Copy your public embed URL into any Notion page.
FROM AN IDEA TO AN EMBED
Start with a greeting. Turn it into something you’ll want to see every day.
pnpm create notion-widget my-widgetsRequires Node.js 22.18 or later.
Follow the setup guideRun the command, then install and start.
cd my-widgets
pnpm install
pnpm devEdit the greeting in widgets/. Add your own React components and define their editable fields.
Run pnpm check and pnpm build. Deploy dist/ to a public HTTPS host, then paste your widget’s URL into a Notion /embed block.
A React framework for building your own collection of Notion widgets. You write the widget components and field definitions; the package provides discovery, a gallery, a settings editor, previews, embed pages, and a static site build.
You use React and TypeScript to create or change a widget. Once a widget is built, its settings editor lets you adjust the exposed content and appearance fields without editing code. The initializer includes a greeting widget to get you started.
Build your widget site, deploy it to a public HTTPS address, then open its editor and copy the embed URL. In Notion, type /embed, paste the URL, and resize the block to fit your page. Your host must allow the widget to load inside an iframe.
Field settings are encoded in the URL query parameters. To share a new configuration, copy the updated embed URL and replace the link in Notion. Temporary interactions, such as a running focus timer, belong to the widget and are not automatically saved in the URL.
A new workspace starts with a greeting widget. The repository also has six examples—clock, calendar, countdown, quote, progress, and focus timer—in apps/demo/widgets. Use them as references or copy their widget folders into your own workspace.