Line is a fast, quiet, local-first journaling app.
Every thought is a line. No friction, no clutter, no backend.
- 💾 Local-first (IndexedDB)
- 🧭 Keyboard-focused
- ✏️ One line = one thought
- 🌗 Light & dark themes
- 📤 Export to Markdown / JSON
- 📱 Installable PWA (offline-ready)
- 🧩 Modular architecture (domain / infra / UI / app)
Line is built for clarity and continuity: open it, type a line, close it.
Nothing else.
Start a new line…— a focused input for capturing the moment- Existing entries are edited inline
- Press Enter to save
- Press Shift+Enter for a newline
- Delete the content → press Backspace to remove the entry
- Entries are automatically grouped by day
- Most recent at the top
- Timestamps appear on hover / focus
- Stored locally in the browser using IndexedDB
- No account, no cloud, no tracking
- Markdown export (clean, human-readable)
- JSON backup (full dataset, reimportable)
- Installable on desktop and mobile
- Works offline after first load
- Optionally runs fullscreen (standalone)
Line follows a layered, maintainable architecture:
src/
app/ → controllers, coordination logic
domain/ → pure business logic (Entry, JournalView)
infra/ → persistence (IndexedDB)
ui/ → DOM rendering & behavior
utils/ → small helpers
CSS is split into tokens, base, layout, components, and themes.
Line requires an HTTP context (PWA + service worker):
npx serve .
# or
deno task startThen open:
http://localhost:8000
(or whatever port your dev server uses)
index.html
tokens.css
base.css
layout.css
components.css
theme-light.css
theme-dark.css
manifest.webmanifest
sw.js
src/
app/
domain/
infra/
ui/
utils/
icons/
| Action | Shortcut |
|---|---|
| Create / update a line | Enter |
| Newline inside entry | Shift+Enter |
| Delete empty entry | Backspace |
Line keeps all data locally in IndexedDB.
Deleting browser data or uninstalling the PWA may remove entries.
For long-term retention, use the Export JSON feature.
MIT License.
Line is a small, evolving personal tool — stable enough for daily use,
simple enough to extend.