Skip to main content

zenmarked

A snappy offline-first markdown editor featuring:

  • live preview via marked.js
  • images support: add with drag-and-drop or paste from clipboard
  • syntax highlighting via CodeMirror
  • user-friendly shortcuts

It runs as a local web server, you access it in your browser.

Screenshot of ZenMarked in action

ZenMarked being used to update its own README

Installation

You can install with:

pip install zenmarked

If you use uv, you can install it with:

uv tool install zenmarked

Or skip installation and just use it through uvx like so: uvx zenmarked

Usage

zenmarked [FILE.md] [options]
Argument Description
FILE.md Optional. File to open on start (created if it doesn't exist). Its directory becomes the working directory.
Option Description
--port PORT Port to listen on (default: auto-assign)
--image-dir PATH Directory for uploaded images (default: images/ inside working dir)
--no-autosave Disable auto-save (use Ctrl+S only)
--theme THEME Color theme: light or dark (default: dark)
--mode MODE View mode: split, edit, or preview (default: split)
--no-browser Don't auto-open browser on start

Examples

# Open CWD — sidebar shows all .md files, create/edit freely
zenmarked

# Open a specific file
zenmarked notes.md

# Light theme, custom port
zenmarked journal.md --theme light --port 8080

# Open in preview-only mode (editor hidden)
zenmarked draft.md --mode preview

# Custom image directory, no autosave
zenmarked docs/readme.md --image-dir docs/assets/imgs --no-autosave

Screenshots

Screenshot of zenmarked in dark mode

Dark mode

Features

  • 3-column layout: sidebar (file list + image gallery) + editor + live preview
  • View modes: split (editor + preview), edit (editor only), or preview (preview only) — toggle via the segmented control in the sidebar or cycle with Ctrl+\
  • Markdown syntax highlight via CodeMirror
  • Live preview via marked.js, updates as you type
  • Auto-save enabled by default, Ctrl+S to save manually at any time
  • Image support: drag-and-drop, click drop zone, or paste from clipboard
  • Image insertion modal: alt text, caption, alignment, custom width
  • Click image in preview to edit its properties
  • Rename image right-click image in the gallery to rename it
    • references are updated automatically across all .md files in the working dir
  • Smart URL paste: select text in editor, paste a URL → auto-creates a markdown link
  • Light / Dark themes

Image paths

Images are stored in ./images/ (relative to the working directory) by default, and inserted into markdown as ./images/filename.png.

The image target directory can be overriden through option --image-dir PATH

Keyboard shortcuts

Shortcut Action
Ctrl+S Save current file
Alt+N Create new file
Ctrl+\ Cycle view mode (split → edit → preview)
Escape Close modals
Ctrl+B Bold
Ctrl+I Italic
Ctrl+E Inline code
Ctrl+K Insert link
Ctrl+Shift+7 Ordered list
Ctrl+Shift+8 Unordered list
Ctrl+Shift+. Blockquote

Metadata

Release files for zenmarked 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for zenmarked 0.4.0
File Size Uploaded
zenmarked-0.4.0.tar.gz 764.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for zenmarked 0.4.0
File Interpreter ABI Platform
zenmarked-0.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.5 MB

Release files / zenmarked-0.4.0.tar.gz

Download URL zenmarked-0.4.0.tar.gz
Size 764.4 kB
Tags Source
SHA-256 checksum
How to use checksums
60475f53ef5eebdbc0db2863159b5bb4850c7b8f4c8e3fb14db29ad4091eb53f
BLAKE2b-256 checksum
How to use checksums
f90040f4e3b7351e78faaf0fbfac75e10d9ca13ed3ec50f13ced29354571caba
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.

Transparency log

Release files / zenmarked-0.4.0-py3-none-any.whl

Download URL zenmarked-0.4.0-py3-none-any.whl
Size 765.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
91f004d6149cd690bba38a1bc7c44f0929da91541656ff38739ad2097df31381
BLAKE2b-256 checksum
How to use checksums
c187fca4c7bec15861719c1e5d048a71bf9e31c7ace38a70dffcaa1d41af1177
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jul 30, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.4.0 This release

2 release files

0.3.1

2 release files

0.3.0

2 release files

0.2.0

2 release files

0.1.2

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page