MarkDay
A local-first daily work logger with rich Markdown editing, calendar navigation, search, and math support. All data stays on your machine — no cloud, no accounts.
Features
| Feature | Details |
|---|---|
| Markdown editor | Auto-continuing lists, smart indent/unindent, toolbar shortcuts |
| Calendar | Sidebar mini-calendar, dots on days with entries, year/month nav |
| Dark / Light themes | Toggle with one click; persisted in localStorage |
| Search | Full-text search across all years with highlighted snippets |
| Preview | On-demand split-pane preview with math (KaTeX) and syntax highlighting |
| Math | KaTeX — inline $...$ and display $$...$$ |
| Keyboard shortcuts | VS Code–style: Ctrl+B/I/S/P/F/D, Alt+↑↓, Tab indent, list continuation |
| Local storage | One Markdown file per year at ~/.markday/YYYY.md |
Installation
pip install .
Or for development (editable install):
pip install -e .
Usage
markday # start on default port 5500, open browser
markday --port 8080 # custom port
markday --no-browser # don't auto-open browser
markday --debug # Flask debug mode
Set the data directory via environment variable:
MARKDAY_DIR=/path/to/notes markday
Data format
Entries are stored as plain Markdown in ~/.markday/YYYY.md:
# Mark Day 2026
## 2026-05-28
- Implemented FNO baseline on Burgers' equation
- Compared modes=12 vs modes=24: higher modes overfit on small dataset
## 2026-05-29
### Meetings
- Sync with team on neural operator paper
### TODO
- [ ] Run ablation on FiLM conditioning strength
- [x] Fix memory leak in DataLoader
Because the format is plain Markdown, you can edit files directly in any editor, commit them to git, grep them, or process them with any Markdown tool.
Keyboard shortcuts
| Shortcut | Action |
|---|---|
Ctrl+S |
Save |
Ctrl+B |
Bold |
Ctrl+I |
Italic |
Ctrl+P |
Toggle preview |
Ctrl+F |
Focus search |
Ctrl+/ |
Toggle HTML comment on line |
Ctrl+D |
Duplicate line |
Alt+↑ / Alt+↓ |
Move line up/down |
Ctrl+] / Ctrl+[ |
Indent / Unindent |
Tab / Shift+Tab |
Indent / Unindent (2 spaces) |
Enter |
Smart list continuation |
Ctrl+Home / Ctrl+End |
Jump to top / bottom |
Esc |
Close modals |
Math examples
Inline: $E = mc^2$
Display:
$$
\int_0^\infty e^{-x^2} dx = \frac{\sqrt{\pi}}{2}
$$
Neural operator notation:
$$
\mathcal{G}_\theta : \mathcal{A} \to \mathcal{U}, \quad u = \mathcal{G}_\theta(a)
$$
Requirements
- Python ≥ 3.10
- Flask ≥ 3.0
- markdown ≥ 3.6
- pygments ≥ 2.17
All other dependencies (CodeMirror, KaTeX, highlight.js) are loaded from CDN.
Metadata
Release files for markday 0.1.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 | Provenance | Actions |
|---|---|---|---|---|
| markday-0.1.0.tar.gz | 15.3 kB | Without provenance | Details for markday-0.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| markday-0.1.0-py3-none-any.whl | Python 3 | none | any | Details for markday-0.1.0-py3-none-any.whl |
Total release size: 31.7 kB
Release files / markday-0.1.0.tar.gz
| Download URL | markday-0.1.0.tar.gz |
|---|---|
| Size | 15.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
53f36ccf81518fe7c93498516d08fc5e8607404acc6d64924cac974adbd0840c
|
|
BLAKE2b-256 checksum How to use checksums |
28c789496c2babfbd595fe8acfff4257c95089fbb1765e781862e350dc7ebdd2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.6
|
Release files / markday-0.1.0-py3-none-any.whl
| Download URL | markday-0.1.0-py3-none-any.whl |
|---|---|
| Size | 16.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cd43c2fc974923225c1c5442ba785722fb6cbc2426198e67abfffb3e6d293eec
|
|
BLAKE2b-256 checksum How to use checksums |
7f72eaabc868fd9fcc4f735a94e632ba2f63194936726e4f92e06408d6138f3b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.6
|
Security for markday 0.1.0
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.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.