Standalone markdown editor with live preview and image support
Project description
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) |
--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
# 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
- 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 |
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 |
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zenmarked-0.3.0.tar.gz.
File metadata
- Download URL: zenmarked-0.3.0.tar.gz
- Upload date:
- Size: 763.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4f0b3a28b5b5bdaf9291833be4601ac13a1674e3381355a98f77c02ab0e37a66
|
|
| MD5 |
44e30d596e7c83de8a7dd666612451c2
|
|
| BLAKE2b-256 |
5b063644db3ed428e9ee2b5afc8a05e8cb7506a91c0e8321aa974200ffc51d3f
|
Provenance
The following attestation bundles were made for zenmarked-0.3.0.tar.gz:
Publisher:
publish.yml on eliasdorneles/zenmarked
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zenmarked-0.3.0.tar.gz -
Subject digest:
4f0b3a28b5b5bdaf9291833be4601ac13a1674e3381355a98f77c02ab0e37a66 - Sigstore transparency entry: 1057035218
- Sigstore integration time:
-
Permalink:
eliasdorneles/zenmarked@7656cb0d036be46ee3014e5d6c64ecd5ff7cd084 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/eliasdorneles
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7656cb0d036be46ee3014e5d6c64ecd5ff7cd084 -
Trigger Event:
release
-
Statement type:
File details
Details for the file zenmarked-0.3.0-py3-none-any.whl.
File metadata
- Download URL: zenmarked-0.3.0-py3-none-any.whl
- Upload date:
- Size: 764.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6b8fd9f7ad7e0266317ccdf14cc858e65cd3e71ab4f9c8a29970e0f04a5eef9b
|
|
| MD5 |
dc2706a33203088cb32a3d5cd6998d59
|
|
| BLAKE2b-256 |
02d9b7a56cd9b441043562c9adc291b547de82cac76decf0df4a710f99069c05
|
Provenance
The following attestation bundles were made for zenmarked-0.3.0-py3-none-any.whl:
Publisher:
publish.yml on eliasdorneles/zenmarked
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
zenmarked-0.3.0-py3-none-any.whl -
Subject digest:
6b8fd9f7ad7e0266317ccdf14cc858e65cd3e71ab4f9c8a29970e0f04a5eef9b - Sigstore transparency entry: 1057035234
- Sigstore integration time:
-
Permalink:
eliasdorneles/zenmarked@7656cb0d036be46ee3014e5d6c64ecd5ff7cd084 -
Branch / Tag:
refs/tags/v0.3.0 - Owner: https://github.com/eliasdorneles
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@7656cb0d036be46ee3014e5d6c64ecd5ff7cd084 -
Trigger Event:
release
-
Statement type: