
Security News
Engineering with AI Podcast: The Promise of AI-First Development
Socket CTO Ahmad Nassri shares practical AI coding techniques, tools, and team workflows, plus what still feels noisy and why shipping remains human-led.
vue-notion
Advanced tools
An unofficial Notion renderer
A Vue renderer for Notion pages. Use Notion as CMS for your blog, documentation or personal site.
vue-notion was ported to Vue from react-notion (developed by Splitbee 🐝 – a fast, reliable, free, and modern analytics for any team)
This package doesn't handle the communication with the API. Check out notion-api-worker from Splitbee for an easy solution.
Created by Jannik Siebert
🎯 Accurate – Results are almost identical
🎨 Custom Styles – Styles are easily adaptable. Optional styles included
🔮 Syntax-Highlighting – Beautiful themeable code highlighting using Prism.js
🌎 SSR / Static Generation Support – Functions to work with NuxtJS and other frameworks
npm install vue-notion
Install as a dev-dependency and add "vue-notion/nuxt" to the buildModules array in nuxt.config.js.
npm install vue-notion --save-dev
// nuxt.config.js
export default {
// ...
buildModules: ["vue-notion/nuxt"],
};
NotionRenderer: docs/docs/docs/docs/Check out a full working demo at vue-notion.now.sh ✨ The code for the demo is in
example/.
These examples use a simple wrapper around the notion-api-worker to access the Notion page data.
It is also possible to store a page received from the Notion API in .json and use it without the async/await part.
Use the
getPageBlocksandgetPageTablemethods with caution! They are based on the private Notion API. We can NOT guarantee that it will stay stable. The private API is warpped by notion-api-worker. If you use these methods a lot, please consider hosting you own instance, as described indocs#notion-api.
This example is a part of example/ and is hosted at vue-notion.now.sh/vue.
<template>
<NotionRenderer :blockMap="blockMap" fullPage />
</template>
<script>
import { NotionRenderer, getPageBlocks } from "vue-notion";
export default {
components: { NotionRenderer },
data: () => ({ blockMap: null }),
async created() {
// get Notion blocks from the API via a Notion pageId
this.blockMap = await getPageBlocks("8c1ab01960b049f6a282dda64a94afc7");
},
};
</script>
<style>
@import "vue-notion/src/styles.css"; /* optional Notion-like styles */
</style>
This example is a part of example/ and is hosted at vue-notion.now.sh/nuxt.
<template>
<NotionRenderer :blockMap="blockMap" fullPage />
</template>
<script>
export default {
data: () => ({ blockMap: null }),
async asyncData({ $notion }) {
// use Notion module to get Notion blocks from the API via a Notion pageId
const blockMap = await $notion.getPageBlocks(
"8c1ab01960b049f6a282dda64a94afc7"
);
return { blockMap };
},
};
</script>
<style>
@import "vue-notion/src/styles.css"; /* optional Notion-like styles */
</style>
Add issues and request features that you want to see implemented next!
List of pages that are using this library.
vue-notion, we'd be happy to feature you hereMost common block types are supported. We happily accept pull requests to add support for the missing blocks.
| Block Type | Supported | Notes |
|---|---|---|
| Text | ✅ Yes | |
| Heading | ✅ Yes | |
| Image | ✅ Yes | |
| Image Caption | ✅ Yes | |
| Bulleted List | ✅ Yes | |
| Numbered List | ✅ Yes | |
| Quote | ✅ Yes | |
| Callout | ✅ Yes | |
| Column | ✅ Yes | |
| iframe | ✅ Yes | |
| Video | ✅ Yes | Only embedded videos |
| Divider | ✅ Yes | |
| Link | ✅ Yes | |
| Code | ✅ Yes | |
| Web Bookmark | ✅ Yes | |
| Toggle List | ✅ Yes | |
| Page Links | ✅ Yes | |
| Cover | ✅ Yes | Enable with fullPage |
| Equations | ✅ Planned | |
| Databases | ❌ Not planned | |
| Checkbox | ❌ Not planned | |
| Table Of Contents | ❌ Not planned |
Please, feel free to open an issue if you notice any important blocks missing or anything wrong with existing blocks.
Jannik Siebert – vue-notion Code
Dominik Sobe – vue-notion Inspiration, Debugging
Tobias Lins – react-notion Idea, Code
Timo Lins – react-notion Code, Documentation
samwightt – react-notion Inspiration & API Typings
Big thanks to NuxtJS for being awesome!
MIT © Jannik Siebert
FAQs
A Vue renderer for Notion pages
The npm package vue-notion receives a total of 864 weekly downloads. As such, vue-notion popularity was classified as not popular.
We found that vue-notion demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Socket CTO Ahmad Nassri shares practical AI coding techniques, tools, and team workflows, plus what still feels noisy and why shipping remains human-led.

Research
/Security News
A five-month operation turned 27 npm packages into durable hosting for browser-run lures that mimic document-sharing portals and Microsoft sign-in, targeting 25 organizations across manufacturing, industrial automation, plastics, and healthcare for credential theft.

Research
Fake “Phantom Shuttle” VPN Chrome extensions (active since 2017) hijack proxy auth to intercept traffic and continuously exfiltrate user credentials to attacker infrastructure.