No servers. No sign-ups. Just open and write.
π± Installable PWA β’ πͺΆ Lightweight β’ π΄ Works Offline β’ π Privacy-First
Your notes never leave your browser. ZenMark stores everything locally in IndexedDB. Once loaded, it works even if you turn off your internet!
flowchart TD
subgraph User["π€ User"]
A[Open ZenMark]
end
subgraph App["π Browser App"]
B[React App Loads]
C{First Visit?}
D[Service Worker Installs]
E[Load from Cache]
end
subgraph Features["β¨ Features"]
F[π Create/Edit Notes]
G[π Use Templates]
H[π Search Notes]
I[π Pin Important]
J[π Toggle Theme]
end
subgraph Storage["πΎ Local Storage"]
K[(IndexedDB)]
L[Auto-Save]
end
subgraph Export["π€ Export Options"]
M[Download .md]
N[Backup JSON]
O[Print Note]
end
A --> B
B --> C
C -->|Yes| D
C -->|No| E
D --> F
E --> F
F --> L
L --> K
F --> G
F --> H
F --> I
F --> J
F --> M
F --> N
F --> O
style A fill:#3b82f6,color:#fff
style K fill:#22c55e,color:#fff
style D fill:#f59e0b,color:#fff
| Feature | Description |
|---|---|
| π Full Markdown Support | Headers, lists, tables, code blocks, and more |
| ποΈ Live Preview | Real-time rendering with split view |
| π Secure Sharing | Share notes via end-to-end encrypted links |
| π E2E Encrypted | Shared notes encrypted in browser, only link holders can read |
| π¨ Syntax Highlighting | 60+ languages with copy button |
| π Pin Notes | Keep important notes at the top |
| π Light & Dark Themes | Toggle with Alt+T |
| π Note Templates | 6 templates: blank, meeting, todo, journal, project, code |
| β±οΈ Reading Time | Estimated reading time based on word count |
| π Duplicate Notes | Create copies of existing notes |
| π― Focus Mode | Distraction-free writing (hide sidebar) |
| π¨οΈ Print Notes | Print formatted markdown |
| β¨οΈ Keyboard Shortcuts | Ctrl+S save, Alt+N new note, Ctrl+B bold |
| π₯ Import Files | Import .md and .txt files |
| π€ Export & Backup | Download notes or backup all as JSON |
| πΎ Local Storage | All data stored in IndexedDB - no server needed |
| π± PWA Support | Install as app on mobile/desktop |
Live Demo: https://zenmark.site
| Shortcut | Action |
|---|---|
Ctrl + S |
Save note |
Alt + N |
Create new note |
Alt + T |
Toggle light/dark theme |
Ctrl + B |
Bold text |
Ctrl + I |
Italic text |
Ctrl + K |
Insert link |
Ctrl + `` |
Inline code |
Ctrl + Shift + C |
Code block |
Ctrl + Shift + S |
|
Ctrl + H |
## Heading |
Ctrl + Shift + Q |
> Blockquote |
Ctrl + Shift + L |
- List item |
flowchart LR
A[Click + Button] --> B{Select Template}
B --> C[π Blank Note]
B --> D[π Meeting Notes]
B --> E[β
To-Do List]
B --> F[π Daily Journal]
B --> G[π Project Doc]
B --> H[π» Code Snippet]
style A fill:#3b82f6,color:#fff
style C fill:#6366f1,color:#fff
style D fill:#8b5cf6,color:#fff
style E fill:#a855f7,color:#fff
style F fill:#d946ef,color:#fff
style G fill:#ec4899,color:#fff
style H fill:#f43f5e,color:#fff
Share notes with anyone via encrypted links. Your note content is encrypted in your browser before being stored, and only the link holder can decrypt it.
flowchart LR
A[Click Share] --> B[Encrypt in Browser]
B --> C[Upload Encrypted]
C --> D[Get Short Link]
D --> E[Share Link]
E --> F[Recipient Opens]
F --> G[Decrypt in Browser]
G --> H[Read Note]
style A fill:#3b82f6,color:#fff
style B fill:#22c55e,color:#fff
style G fill:#22c55e,color:#fff
style H fill:#8b5cf6,color:#fff
How it works:
- π AES-256-GCM encryption β Military-grade encryption
- π Key in URL fragment β Decryption key never sent to any server
- β° Expiration options β 5 min to never
- ποΈ Read-only β Recipients can view, download, or save to their notes
flowchart LR
subgraph Frontend
A[React 19] --> B[Vite]
end
subgraph Styling
C[Vanilla CSS] --> D[Light/Dark Themes]
end
subgraph Markdown
E[react-markdown] --> F[remark-gfm]
F --> G[Prism Syntax]
end
subgraph Storage
H[IndexedDB] --> I[idb library]
end
subgraph PWA
J[vite-plugin-pwa] --> K[Service Worker]
end
- Frontend: React 19 + Vite
- Styling: Vanilla CSS with light/dark themes
- Markdown: react-markdown + remark-gfm
- Code Highlighting: react-syntax-highlighter (Prism)
- Storage: IndexedDB (via idb)
- PWA: vite-plugin-pwa
- Icons: lucide-react
# Clone the repository
git clone https://github.com/n4itr0-07/ZenMark.git
cd ZenMark
# Install dependencies
npm install
# Start development server
npm run dev# Build the image
docker build -t zenmark .
# Run the container
docker run -d -p 8080:80 zenmark
# Open http://localhost:8080# Start the application
docker-compose up -d
# Stop the application
docker-compose down
# Rebuild and start
docker-compose up -d --buildZenMark/
βββ src/
β βββ components/ # React components
β β βββ Editor.jsx # Main editor with preview
β β βββ Sidebar.jsx # Notes list & navigation
β β βββ AboutPage.jsx # About page
β β βββ Modal.jsx # Reusable modal
β βββ lib/
β β βββ storage.js # IndexedDB operations + templates
β βββ styles/ # CSS files
β βββ App.jsx
β βββ main.jsx
βββ public/ # Static assets & PWA icons
βββ Dockerfile # Multi-stage Docker build
βββ .github/workflows/ # CI/CD pipelines
Contributions are welcome! Here's how you can help:
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
Made with β€οΈ by n4itr0-07
β Star this repo if you find it useful!