Skip to content

allanShady/vue-notion

Repository files navigation

vue-notion

An unofficial Notion renderer

Package version Compressed size MIT license Follow on Twitter


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

Features

🎯 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 Nuxt and other frameworks

Install

npm install vue-notion

How To

Docs

Check out a demo at vue-notion.now.sh

More information on the NotionRenderer specification, syntax-highlighting, the Notion API, and integration with Nuxt can be found at docs/.

Basic Example

This example is hosted at vue-notion.now.sh/welcome.

<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>

The example above uses a simple wrapper around the notion-api-worker. It is also possible to store and use plain .json objects received from the Notion API.

⚠️ Use with caution. The getPageBlocks and getPageTable are based on the private Notion API. We can not gurantee 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 in docs#notion-api.

A full working example using Nuxt and static generation can be found inside the example directory.

Roadmap

Add issues, request features and upvote block types that you want to see next!

Sites using vue-notion

List of pages that are using this library.

  • StorePreviewer
  • ...if you're using vue-notion, we'd be happy to feature you here

Supported Blocks

Most 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 ✅ Partially Highlighting coming soon
Web Bookmark ✅ Yes
Toggle List ✅ Yes
Page Links ✅ Yes
Header ✅ Yes Enable with fullPage
Databases ❌ Not planned
Checkbox ❌ Not planned
Table Of Contents ❌ Not planned

Please, feel free to open an issue if you notice any missing blocks or anything wrong with existing blocks.

Credits

License ⚖️

MIT © Jannik Siebert

About

A fast Vue renderer for Notion pages

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Vue 51.6%
  • CSS 24.3%
  • JavaScript 23.7%
  • Shell 0.4%