Skip to content

Releases: JamesCliffordSpratt/obsidian-habits

1.8.0

Choose a tag to compare

@github-actions github-actions released this 10 Aug 12:18

1.8.0 — Flexible schedules, reminders, and richer comments

The largest release so far. Habits can now follow the schedules people actually keep — several weekdays, or every N days — carry planned times of day, drive real notifications, and be reviewed as a table. Day comments become first-class Obsidian content.

Huge thanks to @ivorynoise, who contributed the scheduling, times, table, sorting, reminder and animation work across seven pull requests (#6, #7, #8, #12, #14, #18, #19) — the bulk of this release.

🗓️ Flexible schedules

  • Weekly habits on several weekdays. A gym habit on Mon/Wed/Fri is now one habit, one history, one streak — not three notes. Stored as weekdays: [1, 3, 5]; a single day keeps the existing weekday: form untouched.
  • Every N days. A new interval frequency for schedules that aren't weekly at all — alternate-day medication being the motivating case. Anchored to the habit's start date, so missing a day never shifts the schedule, exactly as a prescription behaves.
  • Both flow through the shared isDue(), so the dashboard, sidebar panel, streaks, heatmaps and charts pick them up everywhere at once.
  • Fixes a non-terminating streak walk that interval scheduling exposed.

⏰ Times of day and reminders

  • Optional planned times per habit, one or several — times: ["13:30", "21:30"] for twice-daily medication. Shown on the card next to the schedule and purely informational; due-ness is never affected.
  • Reminder plugin integration (off by default). Habits with planned times can maintain a marked block of - [ ] Habit (@2026-08-10 21:00) checklist lines, in today's daily note or a fixed note, which the community Reminder plugin turns into real notifications.
  • The sync runs both ways — ticking a line, including from the notification itself, logs the habit; unticking un-logs it.
  • A tick records the share of the day's goal that line represents, so ticking off a 15-minute meditation writes 15 minutes and 8 cups of water writes 8. With several planned times the goal is split between them. A larger value logged in the dashboard survives while every line stays ticked.
  • Sort by planned time, so cards follow the day's timeline instead of the alphabet.

📋 Habits overview table

  • A new habits-table code block: one row per active habit with its schedule and completed/due counts for the current week and the current plus two previous calendar months.
  • An interactive Today column logs the day without leaving the table — a Done/Not done pill for binary habits, a compact stepper for counted and timed ones.
  • Counts come from the same habitStats() as everywhere else, so due days, paused days and pre-start days are treated consistently. Group the rows or flatten them into one time-ordered list.

💬 Comments, tags, and links

  • Day comments gain #tag and [[note]] autocomplete. Tags render as chips that open a filtered search; links open the note and support hover preview.
  • Comments now live in the note body inside %%habits-log%% markers rather than in frontmatter. Obsidian only indexes tags from a note's body and its tags property, so this is what makes a tag or link belong to the day rather than to the habit as a whole — searching #fitness lands on the date, and backlinks show the dated line in context.
  • Comments are now editable directly in the habit note, and the card picks up the change.

✨ Also

  • Completion animations can be turned off, for instant, quiet logging. Perfect days are still recorded while animations are off, so re-enabling never replays a stale celebration.
  • Fixed a completed card briefly stretching every other card taller as it swooshed away.
  • New strings translated across all seven bundled languages.

⬆️ Upgrading

Nothing to do, and nothing is rewritten behind your back. Comments still in frontmatter are read exactly as before; a note moves its comments into its body the next time you edit one of them. To convert everything at once, run Move day comments into note bodies from the command palette.

Reminder writing is off by default and touches no notes until you enable it. It appends to your daily note only once that note already exists — it never creates one.

1.7.1

Choose a tag to compare

@github-actions github-actions released this 01 Aug 13:56

What's Changed

Polish for the groups feature from 1.7.0, plus a fix for the vertical layout — all from testing feedback in [#4](#4).

Fixed

  • Vertical scroll layout no longer reverts to Grid. The vertical layout measures its height cap from the first card, but the dashboard often re-renders while it isn't laid out — Obsidian hides embeds as you navigate between sections of a note, and editing a habit can reload it off-screen. Measured hidden, the card reported a height of zero, no cap was applied, and the layout quietly sprawled into an uncapped grid. It now re-measures the moment layout returns, with a CSS fallback cap as a safety net, so it can't degrade anymore.

Improved

Manage groups is now a full group editor. Everything below lives in Settings → Habits → Groups → Manage groups.

  • Reorder habits within a group. Dragging a chip inside a group now reorders it, alongside the existing drag-between-groups reassignment. Chips part to make room as you drag, so what you see is what you get on drop. The arrangement is saved as your manual order, and every group-sorted view — dashboard, side panel, and stats — follows it within each section (falling back to A–Z for habits you haven't arranged).
  • Style groups in place. Each group header gets a pencil button that expands an inline colour and icon editor: the same theme swatches and custom colour picker as the habit editor (click the selected swatch to clear it), plus Lucide icon, emoji, and clear buttons. Changes save instantly and repaint headers, chips, card lips, and any open dashboard — no save button.
  • Delete groups. A trash button on each group header removes it after a confirmation. Member habits are kept and simply become ungrouped: their notes' group frontmatter and any group-colour override are cleared, and the group's stored style and position in the group order are tidied up.
  • Style a group as you create it. Adding a new group now drops you straight into its colour and icon pickers, so creating and styling are one flow. A group given a colour or icon also persists across sessions even with no habits assigned yet.
  • The Ungrouped section has no style or delete buttons, since it isn't a real group.

Translations

New and updated strings are available in all seven languages: English, Deutsch, Español, Français, 日本語, 한국어, and 简体中文.


Huge thanks to [@rener-rannieri](https://github.com/rener-rannieri) for testing 1.7.0 across ~30 habits, deliberately trying to break the group syncing, and reporting both the vertical-layout bug and the within-group reordering idea. 💜

Full Changelog: [1.7.0...1.7.1](1.7.0...1.7.1)

1.7.0

Choose a tag to compare

@github-actions github-actions released this 25 Jul 12:26

Sorting, groups, and a smarter stats page

  • Sort your habits your way. A new Sorting section in settings offers Name (A–Z), Color, Start date, Last logged, Group, and Manual — with drag-and-drop editors for arranging cards (Manual) and group sections (Group). A separate toggle controls whether completed cards drift to the end of the queue or stay locked in place.

  • Groups. Turn on groups to organize habits into whatever your system calls them — PARA areas, identity vs outcome habits, plain categories. Each habit takes an optional group (set in the habit editor or by dragging cards between groups in the new Manage groups view), and groups can have their own color and icon. Cards wear a group lip along their top edge, sections get headers when sorting by group, and a per-habit toggle lets a card adopt its group's color — or keep its own.

Stats page follows your layout. The old stats carousel toggle is gone: carousel layout pages the stats, grid shows the full list, and vertical scroll keeps the stats compact and scrollable inside your note. Stats rows carry the same group lips as the dashboard.

Tidier settings. Everything now lives under clear General, Layout, Sorting, and Groups headings.

Everything is off by default — existing setups are untouched until you opt in. Thanks to @rener-rannieri for the suggestion (#4)!

1.6.0

Choose a tag to compare

@github-actions github-actions released this 24 Jul 18:17

New: Dashboard layout options

You can now choose how the dashboard presents your habit cards, under Settings → Habits → Dashboard layout:

  • Carousel — the classic paged view with arrows and dots. Still the default; nothing changes if you do nothing.
  • Grid — every habit visible at once, wrapping onto new rows and scrolling naturally with the note. Great when the dashboard is the main thing in the pane.
  • Vertical scroll — the same grid, capped in height so cards scroll inside the widget: mouse wheel on desktop, thumb-drag on mobile. Ideal when the dashboard sits at the top of a daily note.

Cards per view now also sets the cards per row in the grid layouts, so your existing setting carries over. Available in all seven languages.

Thanks to @willgraham345 for the suggestion (#3)!

1.5.0

Choose a tag to compare

@github-actions github-actions released this 17 Jul 11:35

What's Changed

New

  • 🌍 Japanese and Korean translations — Habits now speaks 日本語 and 한국어, following your Obsidian language setting. Every string is translated: dashboard, sidebar panel, stats, export dialog, settings, menus, and notices.

Full Changelog: 1.4.3...1.5.0

1.4.3

Choose a tag to compare

@github-actions github-actions released this 17 Jul 10:58

What's Changed

Improved

  • Settings are now discoverable through Obsidian's settings search (1.13+), via the new declarative settings API.

Internal

  • Cleared all remaining community scorecard warnings.

Full Changelog: 1.4.2...1.4.3

1.4.2

Choose a tag to compare

@github-actions github-actions released this 16 Jul 18:02

What's Changed

Internal

  • Resolved all 12 type-safety warnings flagged by the community plugin scorecard. No functional changes.

Full Changelog: 1.4.1...1.4.2

1.4.1

Choose a tag to compare

@github-actions github-actions released this 15 Jul 10:17

What's Changed

Fixed

  • Follow daily note date now works with custom date formats. A new Daily note date format setting (default YYYY-MM-DD) accepts any Moment.js format, such as YYYYMMDD — fixes #2, thanks @loxxxyk!

Full Changelog: 1.4.0...1.4.1

1.4.0

Choose a tag to compare

@github-actions github-actions released this 12 Jul 21:19

Habits 1.4.0

✨ New

AI summaries (experimental, off by default)

An optional, bring-your-own-key coach for your stats. Enable it under Settings → Habits → Experimental, point it at any OpenAI-compatible service — OpenAI, OpenRouter, Groq, Google AI Studio, or fully local servers like Ollama and LM Studio (no key needed) — and press Generate summary on any stats tab for a short review of your period: what's going well, what's slipping, and a concrete suggestion or two. Summaries can also be added to PDF reports via a per-export toggle, rendered live in the A4 preview.

Privacy by design: nothing is sent automatically — only when you press the button (or opt in per export). Only aggregate stats travel (names, rates, streaks, totals), never per-day records or comments. Keys are stored locally in your vault's plugin data, and summaries are cached so revisiting a tab never repeats a request.

Custom date range on the stats page

A third Custom tab joins Weekly and Monthly, with from/to date pickers for any range up to a year. Reversed dates are swapped automatically, and weekly/monthly goals are hidden there since they don't map onto arbitrary ranges.

Stats page carousel

A new display setting (off by default) splits the stats page's per-habit rows into pages you can flip through — same controls as the dashboard carousel, with a configurable 1–8 rows per page. It only engages when you have more habits than fit one page.

Heatmap start-date markers

The first tracked day of every habit is marked with a small play icon (hover for the start date), and days before a habit existed render as neutral dotted cells.

🐛 Fixed

  • Days before a habit's start date no longer count against it. Stats, perfect days, per-note metrics, and AI digests all now score habits only from their tracking start. This especially affected limit ("break bad habit") stats, where every pre-start day previously read as a failure and produced misleadingly low success rates — and it quietly deflated regular habits' rates too.

🌍 Translations

  • German, Spanish, French, and Simplified Chinese dictionaries are fully caught up: all strings from this release plus a backlog of untranslated strings from the weekly/monthly frequency and per-note metrics features (44 keys per language).

📝 Docs

  • README now documents the experimental features (Break bad habits, AI summaries), the custom range tab, the stats carousel, and the new settings.

Full changelog: 1.3.0...1.4.0

1.3.0

Choose a tag to compare

@github-actions github-actions released this 10 Jul 19:13

New: Break bad habits (experimental)

You can now track habits you're trying to reduce or quit — not just ones you're building. Requested in #1.

Enable it under Settings → Habits → Experimental → Break bad habits, then create a habit and set Goal to Stay under a limit:

  • Binary — avoid something entirely. The card shows Clean / Slipped boxes; days start clean, and a tap records a slip (or takes it back).
  • Repetition — stay at or under a daily count (e.g. at most 2 coffees). A limit of 0 means none at all.
  • Timed — stay under a daily number of minutes (e.g. at most 2 hours of gaming). Lower the limit over time as you cut down.

How it scores

  • Days you don't log count as staying within your limit — no daily bookkeeping required.
  • Streaks count consecutive days within the limit; going over breaks the streak.
  • A perfect day now means every build habit completed and every limit respected. A day with only break habits, all within limit, also counts.
  • Stats, heatmaps, charts and exports all understand limits: over-limit days show red, and days before a habit existed are neutral, not failures.

Why experimental?

The toggle is off by default while the design settles. It only gates creating limit habits — anything you make with it keeps working and keeps its meaning even if you switch the toggle off later, so there's no lock-in and nothing to migrate when the feature graduates.

Existing habits are completely unaffected: no data changes, no behavior changes.

Available in English, Deutsch, Español, Français and 简体中文.

Thanks to @lovelindhoni for the feature request (#1) — feedback on the experimental design is very welcome there.