Website | Documentation | Quick Start
Note
NotroTail is currently in alpha release. Please provide feedback to help us achieve a stable release.
npm create notro@latest my-siteThe CLI will download the starter template, create .env from .env.example, and optionally install dependencies. Then edit .env with your Notion credentials and run npm run dev.
See the documentation for detailed setup instructions.
Create content and build a website with Notionβs user-friendly interface. No coding knowledge required.
Websites are output as static HTML by Astro, making them extremely fast and optimized for SEO. Whether for personal blogs or business purposes, it offers a great experience.
Supports Notion's Markdown Content API, so page content is fetched in a single API call rather than block by block. This significantly reduces the number of API calls at build time, resulting in fast builds.
Images used in Notion are delivered in WebP format, optimized for each device by Astro Assets.
Integrated with TailwindCSS, it allows you to easily create modern and responsive sites.
Generate websites from database templates or create from specific pages in a free format.
In addition to changing pre-defined CSS in tailwind.css, you can apply utilities directly in Notion, defining the appearance close to the content. HTML can also be written for advanced customization.
Check out NotroTail's style on Tailwind Play
Check out NotroTail's Collection style on Tailwind Play
For running locally or in an environment without Notro Connect.
Create an integration from here and record the Internal Integration Token as NOTION_TOKEN.
Choose an existing Notion page or duplicate a template. NotroTail works with any Notion page, but using a template provides rich features like headers and blogs.
Record the ID part of the URL as NOTION_ID.
https://www.notion.so/myworkspace/a8aec43384f447ed84390e8e42c2e089?v=...
|---------- NOTION_ID ----------|
Share the page with your integration following the steps here.
NOTION_TOKEN=<NOTION_TOKEN>
NOTION_DATASOURCE_ID=<NOTION_ID>NotroTail needs Astro 6.0 and Node.js 24 or later.
Install dependencies:
npm installRun the development server:
npm run devOpen http://localhost:4321 in your browser.
NotroTail uses Astro's static output mode β no SSR adapter required. Config files for each platform are included in the repository.
- Click the button above, or import the repository at vercel.com with root directory set to
templates/blog - Add environment variables:
NOTION_TOKENandNOTION_DATASOURCE_ID - Click Deploy β
vercel.jsonintemplates/blog/handles all build settings automatically
- Click the button above, or import the repository at netlify.com
- Add environment variables:
NOTION_TOKENandNOTION_DATASOURCE_ID - Click Deploy β
netlify.tomlhandles all build settings automatically
- Click the button above, or go to Workers & Pages β Create β Pages β Connect to Git in the Cloudflare dashboard
- Select the repository and enter the following build settings:
Build command: npm run build Build output dir: templates/blog/dist Root directory: (leave empty) - Add environment variables:
NOTION_TOKENandNOTION_DATASOURCE_ID - Click Save and Deploy β
wrangler.tomlis also included for reference
After updating Notion content, trigger a manual redeploy from the platform dashboard to rebuild the static site.
This repository is a pnpm workspace monorepo containing the following packages:
| Package | Path | Role |
|---|---|---|
remark-nfm |
packages/remark-nfm/ |
Pure remark plugin for Notion-flavored Markdown. Handles pre-parse normalization (10 fixes), :::callout directive syntax, and callout conversion. No Astro or Notion API dependencies β independently publishable to npm. |
notro-loader |
packages/notro-loader/ |
Astro + Notion API integration library. Provides the Content Loader, MDX compile pipeline (uses remark-nfm internally), and headless Astro components for all Notion block types. |
notro-ui |
packages/notro-ui/ |
Copy-and-own styled components for notro-loader (shadcn style). Run notro-ui add --all to install components into your project β they become your code, editable directly. |
rehype-beautiful-mermaid |
packages/rehype-beautiful-mermaid/ |
Rehype plugin that renders Mermaid code blocks to inline SVG at build time. |
create-notro |
packages/create-notro/ |
CLI scaffolding tool. Run npm create notro@latest to choose a template and scaffold a new site. |
notro-blog (blog) |
templates/blog/ |
Full-featured blog template β reference implementation with blog list, tags, pagination, RSS, and SEO. |
notro-blank (blank) |
templates/blank/ |
Minimal starter β just pages and Notion content rendering. |
docs |
docs/ |
Documentation site built with Astro Starlight. |
Dependency graph:
remark-nfm β notro-loader β notro-ui β templates/blog
β β
create-notro β templates/blank
The Notion API truncates page content at approximately 20,000 blocks. There is no pagination API for this endpoint, so truncated content cannot be retrieved in full. notro logs a warning and builds with what is available.
Workaround: Split large Notion pages into smaller sub-pages.
Some Notion block types cannot be converted to Markdown by the API. These blocks are silently omitted from the response. notro logs the affected block IDs so you can identify and update the content.
For details, see the Notion API documentation and the notro-loader README.
Please create an issue for bug reports or feature requests. Any feedback is welcome in any language. Pull requests are also appreciated.
See the Github Projects roadmap
NotroTail was inspired by the following repositories:
- Next.js Notion Starter Kit
- Used for creating a website based on Notion for the first time.
- Astro Notion Blog
- Used for creating a blog based on Astro.
- AstroWind
- Used as a design reference.

