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.
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
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
.mdfiles in the working dir
- references are updated automatically across all
- 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)
| File | Size | Uploaded | |
|---|---|---|---|
| zenmarked-0.4.0.tar.gz | 764.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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