Skip to main content

A tool to use Notion as a Markdown editor.

Project description

Narkdown

Narkdown

PyPI PyPi - Python Version code style: black PyPI - License

| English | 한국어 |

A tool to use Notion as a Markdown editor.


⚠️ NOTE: Narkdown is dependent on notion-py, the unofficial Notion API created by Jamie Alexandre. It can not gurantee it will stay stable. If you need to use in production, I recommend waiting for their official release.


Installation

pip install narkdown
# pip3 install narkdown

Usage

⚠️ NOTE: the latest version of narkdown requires Python 3.5 or greater.

Quick Start

CLI

narkdown-image-0

How To Find Your Notion v2 Token - Red Gregory

Python

example.py

narkdown-image-1

python3 example.py

Database template page for test

Here is an database template page for importing pages from the database. Move to that page, duplicate it, and test it.

narkdown-image-2

Features

  • Import page from Notion and save it to the desired path.

  • Import database from Notion and save pages to the desired path.

    • Useful for CMS(Contents Manage System) of static pages such as blog or docs page.

    • Support import by status of content.

    • Support filter contents.

  • Import child page in Notion page recursively. And import linked page as a Notion page link.

  • Support nested block. (e.g. bulleted, numbered, to-do, toggle)

  • Support language selection of code block.

Configuring Narkdown

Narkdown provides some configuration for how to extract documents. You can configure Narkdown via narkdown.config.json .

Create narkdown.config.json and run python3 -m narkdown in that directory.

// narkdown.config.json
{
  "exportConfig": {
    "recursiveExport": true,
    "createPageDirectory": true,
    "addMetadata": true,
    "appendCreatedTime": true,
    "generateSlug": true
  },
  "databaseConfig": {
    "categoryColumnName": "Category",
    "statusColumnName": "Status",
    "currentStatus": "✅ Completed",
    "nextStatus": "🖨 Published"
  }
}

Name Description Default
recursiveExport Whether or not to recursively export child page. [true]
createPageDirectory Whether or not to create subdirectories with page titles for each page. [true]
addMetadata Whether or not to add metadata to content. [false]
appendCreatedTime Whether or not to append created time to filename. ( The page must have a created time property.) [false]
generateSlug Whether or not to generate and append slug to metatdata. [false]

Name Description Default
categoryColumnName In Notion database, content can be classified by category by select property. When you create the select property in the Notion database and pass the name of the column, folders are created by category. [""]
statusColumnName In the Notion database, you can manage the status of content with Select property. If you create a Select property in the Notion database and pass the name of the column, you can import contents in a specific state or change the status of the content. (should be used with the currentStatus or nextStatus option.) [""]
currentStatus Import only the content that corresponds to currentStatus value. ( statusColumnName must be set.) [""]
nextStatus Changes content status to nextStatus value after import. ( statusColumnName must be set.) [""]

Set env variable for token_v2

The token_v2 of notion is a variable that should not be shared. You can use os environment variable for notion token.

Narkdown use the NOTION_TOKEN as an environment variable for token_v2. Setting this environment variable allow the CLI to omit token_v2 input.

Advanced

Notion2Github recommended

Github action to synchronize the content of the notion database with github.

Supported Blocks

Block Type Supported Notes
Heading 1 ✅ Yes Converted to heading 2 in markdown.
Heading 2 ✅ Yes Converted to heading 3 in markdown.
Heading 3 ✅ Yes Converted to heading 4 in markdown.
Text ✅ Yes
Divider ✅ Yes Divider after the Heading 1 is not added.
Callout ✅ Yes Callout block will be exported as quote block with emoji.
Quote ✅ Yes
Bulleted list ✅ Yes Support nested block.
Numbered list ✅ Yes Support nested block.
To-do list ✅ Yes Support nested block.
Toggle list ✅ Yes Support nested block.
Code ✅ Yes Support syntax highlighting.
Image ✅ Yes Uploaded image will be downloaded to local. Linked image will be linked not be downloaded.
Web bookmark ✅ Yes Same as link text.
Page ✅ Yes Import "Child page" in Notion page recursively. And import "Linked page" as a Notion page link.
Table (aka database) ✅ Yes
Video ❌ No
Audio ❌ No
File ❌ No
Embed other services ❌ No
Advanced ❌ No
Layout in page ❌ No

License

MIT © younho9

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

narkdown-1.3.5.tar.gz (44.4 kB view details)

Uploaded Source

Built Distribution

narkdown-1.3.5-py3-none-any.whl (48.5 kB view details)

Uploaded Python 3

File details

Details for the file narkdown-1.3.5.tar.gz.

File metadata

  • Download URL: narkdown-1.3.5.tar.gz
  • Upload date:
  • Size: 44.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.8.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.0

File hashes

Hashes for narkdown-1.3.5.tar.gz
Algorithm Hash digest
SHA256 27a13b382590b6b894362e45bdf68a46f66428a23246a496cb4f2a75fe243a77
MD5 e2334e133920fa7de60be6cee923de32
BLAKE2b-256 86bee3bd6c0891cc21dfcc17cd97f2b4a63952919e2486726bd454942f800de7

See more details on using hashes here.

File details

Details for the file narkdown-1.3.5-py3-none-any.whl.

File metadata

  • Download URL: narkdown-1.3.5-py3-none-any.whl
  • Upload date:
  • Size: 48.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.8.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.9.0

File hashes

Hashes for narkdown-1.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 0e71ae15a12fae797c6fa2bc8574190f891b524466f90016c023e5c480a165ab
MD5 cb8d43d54438742f881d1545f32347c4
BLAKE2b-256 a1b306d5796c62c381eba70837159473ab672c1a963e1cfe385c50b085f60790

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page