6.3 KiB
Features
Target experience
- one row per month
- horizontal scrolling across the full yearly grid
- weekday headers aligned with each date column
- sticky month labels on the left
- a clean, elegant layout that feels at home in Obsidian
- fast event creation directly from the calendar
- beautiful, highly visible multi-day event bars
Calendar layout
- Yearly horizontal linear calendar with one row per month
- Dates arranged horizontally across each month row
- Weekday headers repeating across the top and aligned to date positions
- Sticky year header and sticky month column
- 96vh layout for an immersive full-page view
- Horizontal scrolling for the grid
- Today highlight so the current date stands out immediately
- Light and dark theme support using Obsidian theme variables
- Customizable motto shown in the view
- Year navigation to move backward and forward across years
Event creation
- Click a date cell to open a popup and create an event
- Click-drag across cells to create a multi-day selection
- Start and end dates editable in the popup
- Free-text event type with lightweight suggestions like
appointment,call,meal, ormeeting - Participants list captured directly in the popup, one per line
- Native OS color picker when available, with a curated palette fallback
- Single-day and multi-day events rendered directly on the grid
- Cross-week, cross-month, and cross-row continuity for longer events
- Multiple events per day displayed cleanly without turning the grid into soup
- Edit and delete existing events from the same popup
Storage model
- Events stored as Markdown notes inside the vault
- one event note per event, using YAML frontmatter metadata
- event notes remain searchable, linkable, and portable
- configurable events folder path in plugin settings
Example event note shape:
---
uid: abc123
event: true
allDay: true
title: Birthday party
start: 2026-04-20
end: 2026-04-22
color: "#e74c3c"
type: appointment
participants:
- "[[Alice]]"
- "[[Bob]]"
---
Optional notes about the event...
Event frontmatter
uid: stable internal event idevent: trueorlindar-event: true: explicit marker for Lindar event notesallDay: true: current storage mode for yearly bar renderingtitle: visible label in the calendarstart: start date inYYYY-MM-DD(also accepts legacydate)end: inclusive end date inYYYY-MM-DD(also accepts legacyendDate)color: event bar colortype: optional category name matching a category defined in settingsparticipants: optional YAML list — each participant auto-wrapped as[[wikilink]]on save, brackets stripped for clean display in modal- note body: optional description/details
type stays intentionally free-form. Use values like:
appointmentcallmealmeetingtraveldeadline
...or any label matching your own workflow.
Existing older event notes without event, type, or participants remain compatible.
Categories
Categories let you label events by type and auto-assign a default color.
When you pick a category in the event creation modal, the Color picker auto-fills with that category's color. You can still override the color per-event — the category color is a default, not a constraint.
Categories are managed in Settings → Community plugins → Lindar, after the horizontal divider:
- Add — click + Add category, enter a name, pick a color.
- Reorder — ↑ and ↓ buttons per row.
- Enable/disable — toggle off hides the category from the modal's type dropdown.
- Delete — trash icon. Irreversible.
All changes save immediately.
See docs/options.md for the full seed list and UI reference.
Task bars
Task checkboxes from any vault note can appear as bordered outline bars in the calendar.
Line format
- [ ] Title #tag 📅 YYYY-MM-DD `#hex`
How it works
- Lindar scans every
.mdfile for unchecked task lines (- [ ]). - Lines must contain the configured task tag (default
#lindar) and at least one Tasks-plugin-compatible emoji date. - Date priority:
📅|📆|🗓(due) →⏳|⌛(scheduled) →🛫(start). - Optional
`#hexcode`at end of line sets the bar color (default#4f46e5). - Multiple tasks on the same day stack into separate lanes.
Example
- [ ] Buy groceries #lindar 📅 2026-07-03 `#e11d48`
- [ ] Call dentist #lindar ⏳ 2026-07-05
- [ ] Plan trip #lindar 🛫 2026-08-01 `#0891b2`
Interaction
- Click a task bar → opens the source note with the cursor placed on that task line.
- Vault changes (create/modify/delete) trigger a debounced re-scan (2 s).
Settings
| Setting | Default | Description |
|---|---|---|
| Task tag | #lindar |
Tag filter for task lines |
Task creation
Lindar provides two ways to create a task line directly in any note:
- Type
/at line start → EditorSuggest popup "Lindar: Create task" → select to open the task modal - Command Palette:
Lindar: Create task at cursor
Modal fields
| Field | Detail |
|---|---|
| Title | Text input, required |
| START | Optional date + time picker (--:-- = no time) |
| DUE | Optional date + time picker (--:-- = no time) |
| Color | Native OS color picker |
| Tag | Auto-applied from settings (default #lindar), not shown |
Output format
- [ ] Title 🛫 YYYY-MM-DD HH:mm 📅 YYYY-MM-DD HH:mm `#hex` #tag
- Time, start, due, and color omitted when unset.
- Tag always appended from settings.
- Inserted on the current line if empty, or the next empty line; appended at EOF if none found.
Line format reference
See the Task bars section above for the full syntax reference.
Compatibility notes
- Older event notes continue loading even if they only have legacy fields.
event: falseis treated as a deliberate opt-out and will not be loaded.participantscan be stored as a YAML list; empty values are ignored.date/endDatelegacy fields still read as fallbacks ifstart/endare absent.
Technical direction
- TypeScript
- esbuild
- npm
- Obsidian Plugin API
- modular source structure under
src/ - pure Obsidian/DOM UI approach rather than a heavy web framework