Move the star suggestion from the footer to immediately after the header
for better visibility. Also make "GitHub" text a clickable link to the
repository.
Add documentation for the new default value feature in custom user
fields, including the different input formats for each field type and
where defaults are applied during task creation.
Add translations for 3 new keys in all 7 locales (de, es, fr, ja, pt,
ru, zh) for the custom user field default value feature:
- settings.taskProperties.customUserFields.fields.defaultValue
- settings.taskProperties.customUserFields.placeholders.defaultValue
- settings.taskProperties.customUserFields.placeholders.defaultValueList
Move task creation defaults application logic from individual callers
into TaskService.createTask() to eliminate code duplication.
Changes:
- Add applyDefaults option to TaskService.createTask() (default: true)
- Create private applyTaskCreationDefaults() method in TaskService
that handles all defaults: due, scheduled, contexts, projects, tags,
time estimate, recurrence, reminders, and user field defaults
- Update TaskCreationModal to pass applyDefaults: false since defaults
are already applied to form fields during initialization
- Update ICSNoteService to pass applyDefaults: false since calendar
events have their own data and shouldn't receive defaults
- Remove duplicate applyTaskCreationDefaults() from TasksController
and SystemController
- Simplify InstantTaskConvertService and TaskSelectorWithCreateModal
to only handle NLP-parsed user fields, letting TaskService apply
defaults for unparsed fields
- Update test mocks for TaskService to include calculateDefaultDate
This refactor reduces code duplication and ensures consistent default
application across all task creation paths.
Add ability to set default values for custom user fields that are
automatically applied when creating new tasks.
- Add defaultValue property to UserMappedField interface
- Add type-appropriate default value inputs in settings UI:
- Boolean: toggle
- Number: number input
- Date: dropdown with presets (None/Today/Tomorrow/Next Week)
- Text: text input
- List: comma-separated text input
- Apply defaults in all task creation paths:
- TaskCreationModal (modal UI)
- InstantTaskConvertService (inline task conversion)
- TasksController (REST API)
- SystemController (NLP API)
- TaskSelectorWithCreateModal (create or open command)
- Fix settings cards collapsing on value change by updating DOM
directly instead of re-rendering
Add new "Convert current note to task" command that opens the task edit
modal pre-populated with the note's existing frontmatter and body content.
The command adds required task properties to convert a regular note into
a TaskNote in-place.
Thanks to @GardarikanetS and @diegomarzaa for suggesting.
- Add translations for new "Convert current note to task" command
- Rename "Convert task to TaskNote" to "Convert checkbox task to TaskNote" for clarity
- Fix calendar event text being invisible in light mode when using
default priority colors (CSS variables like var(--color-accent))
- hexToRgba() now handles CSS variables gracefully
- Events use theme-appropriate text colors when border is a CSS variable
- Fix calendar not updating immediately after completing/skipping
recurring task instances via context menu
- Context menu actions now read fresh data from Obsidian's metadata
cache instead of Bases' potentially stale cache
- Added refreshCalendarWithFreshData() method for immediate updates
- Simplified onDataUpdated() and handleTaskUpdate() to use full render()
with 5-second debounce for background updates
Use Obsidian's .is-mobile class to properly detect mobile devices
instead of relying solely on viewport width. The save button's
margin-left: auto now only applies on desktop.
- Add v3 to v4 migration guide with Bases setup instructions
- Expand core-concepts.md with YAML structure, property types, and methodology examples
- Streamline index.md to be a concise landing page with quickstart
- Remove developer-focused timezone docs (TIMEZONE_HANDLING_*.md)
- Update releases.md to show v4.x as current
- Fix broken relative links in features.md
- Reduce repetition across docs by centralizing Bases info in core-concepts.md
- Consolidate task-management.md recurring tasks and reminders sections
- Simplify features/integrations.md and features/calendar-integration.md
- Reduce task-defaults.md Default Reminders section from 227 to 24 lines
- Add v4/Bases troubleshooting and OAuth calendar troubleshooting sections
- Update troubleshooting.md with current settings paths and GitHub link
- Update calendar-setup.md with Azure manifest redirect URI instructions
- Move "Folder for converted tasks" from Features to General > Task Storage
- Setting now appears conditionally when instant convert is enabled
- Update description to clarify that empty = use default tasks folder
- Update placeholder to show actual default {{currentNotePath}}
- Update documentation for the reorganized setting
- Override onDataUpdated in CalendarView for lighter updates (just refetch
events instead of full re-render)
- Override handleTaskUpdate to use same debounce timer
- 5-second debounce outlasts Obsidian's ~2-second save interval, ensuring
calendar only updates after user stops typing
- Lazy-load computed file properties (backlinks, links, etc.) during render
instead of extracting upfront for all items. Reduces extractDataItems
from ~4s to ~5-10ms for 6000+ tasks.
- Only visible items trigger expensive getValue() calls, leveraging
virtualization (20-50 items vs 6000+).
- Add 500ms debounce to onDataUpdated to prevent UI freezes during typing.
- Add visibility checks to skip rendering hidden/disconnected views.
- Debounce metadata change handlers in editor decorations.
- Use metadataCache for timeblock generation instead of file reads.
- Add date range filtering for calendar events.
- Preserve file.* prefix in PropertyMappingService to distinguish
file.backlinks from note.backlinks.
- Fix CalendarView overwriting basesData (breaking lazy property access).
Replace promotional phrasing with clear, functional descriptions:
- inlineTasks: focus on what settings control
- nlp: describe the parsing functionality
- pomodoro: describe configuration purpose
- migration: clarify RRULE usage, use "complex" instead of "powerful"
- Add recurrenceAnchor.name and recurrenceAnchor.description to all locales
- Update excludedFolders.description to accurately reflect its usage
(task indexing and project suggestions, not just "Notes tab")
- Add recurrence_anchor property to Field Mapping settings UI (#1319)
- Add skipped_instances property to Field Mapping settings UI (#1319)
- Fix inline task conversion deleting text when title exceeds filename limits (#1310)
- Overflow text is preserved in task note body
- Truncation respects word boundaries
The filter enabling logic in FileSuggestHelper required both propertyKey
AND propertyValue to be truthy. Since empty string is falsy in JS, setting
only propertyKey (to check property existence) disabled the filter entirely.
Refactored to use shared getProjectPropertyFilter() which correctly enables
the filter when propertyKey.length > 0, matching the Modal path behavior.
Replace the default Bases "New" button with a TaskNotes button that
opens the task creation modal when clicked. The button is injected
into the Bases toolbar and visibility is toggled via CSS based on
whether a TaskNotes view is active.
- Add setupNewTaskButton() to BasesViewBase for toolbar injection
- Use tasknotes-view-active class to toggle button visibility
- Refactor CalendarView to call super.setupContainer() for consistency
- Hide native "New" button when TaskNotes view is active
- Move property key, default value, and NLP trigger settings into unified
property cards in the Task Properties tab
- Remove Defaults tab entirely (body template moved to Features tab)
- Move title/filename settings from Appearance tab into Title property card
- Move project autosuggest settings from Appearance tab into Projects card
- Add collapsible sections for status/priority values, autosuggest filters,
and display customization
- Add onCollapseChange callback to CardComponent for preserving collapse state
- Add "Feature Properties" section for pomodoro and calendar sync properties
- Improve styling for default project chips and remove button shadows
- Add right-aligned inputs in card components
- Type to search through all available Lucide icons
- Shows icon preview alongside each suggestion
- Live preview of selected icon next to the input field
Base views were using raw `new Date()` for targetDate, which caused
formatDateForStorage() to extract the wrong calendar day for users in
negative UTC offset timezones (e.g., PST/PDT) after UTC midnight.
Now uses createUTCDateFromLocalCalendarDate() to preserve the user's
local calendar day when recording complete_instances.
Embedded tutorial video in calendar setup documentation to help users
configure Google Calendar OAuth credentials.
Thanks to @antoneheyward for the tutorial.
Previously, custom status icons only displayed in task cards. Now they
also appear in the status submenu of task context menus, batch context
menus, and task creation/edit modals.
Add user-configurable options for controlling how events display and
stack in the calendar view:
- slotEventOverlap: toggle visual overlap of timed events
- eventMaxStack: limit stacked events in week/day view
- dayMaxEvents: limit events per day in month view
- dayMaxEventRows: limit event rows per day in month view
Also includes dark mode styling fixes for the timeGrid more-link element
and translations for all supported locales.
User fields:
- New custom fields are now automatically added to modal configuration
- Deleting a field removes it from modal configuration
- Updating display name syncs to modal configuration
Link rendering in custom properties:
- Extract raw values from Bases Value objects for proper link detection
- Restore wikilink format for internal links from Bases API
- Handle links in list-type properties
Add optional Lucide icon configuration for task statuses, allowing
shape-based status differentiation alongside color coding.
- Add icon field to StatusConfig type
- Render Lucide icons via setIcon() when icon is configured
- Add CSS for icon-based status indicators with theme color support
- Add icon input field to status settings UI
- Add translations for all 8 locales (en, de, es, fr, ja, pt, ru, zh)
Users can configure icons per status in Settings → Task Properties by
entering a Lucide icon name (e.g., check, circle, clock). Icons inherit
the status color and improve accessibility for colorblind users.
- (#904) Add visual highlighting for overdue/past dates on task cards
- (#1128) Allow slashes in NLP context names for hierarchical contexts
- (#1151) Increase mini calendar heatmap color intensity for better visibility
- (#1164) Add priorityWeight formula to default Bases templates
- (#1170) Fix dateCreated/dateModified using custom property names in ICS notes
- (#1171) Fix calendar event toggles not responding to changes after initial load
- (#1198) Fix project links resolving relative to wrong file in Bases views
Add comprehensive documentation for frontmatter property types to help
users understand expected data formats when creating tasks via templates
or manual editing.
- Add formula properties to Task List sub-grouping dropdown
- Add formula properties to Kanban swimlane dropdown
- Update buildPathToPropsMap() to include formula results from Bases
- Update getPropertyValue() to handle formula.* property IDs
- Update valueToString() to handle Bases Value objects (NullValue, ListValue, etc.)
- Add drag-and-drop check for formula-based columns/swimlanes with toast notification
(formulas are computed values and cannot be directly modified)
Add fallback to plugin.app when this.app is not yet set by Bases,
preventing "Cannot read properties of undefined (reading 'app')"
errors during initialization.
- Refactor close() to be synchronous, matching Obsidian's modal lifecycle
- Add forceClose() method to bypass confirmation when appropriate
- Add third "Keep Editing" button to return to modal without closing
- Handle save failures gracefully (modal stays open if save fails)
- Add re-entrancy protection to prevent issues from rapid clicks
- Add i18n key for "Keep Editing" button
- Translate all missing keys for 7 locales (84 translations total)
- Update tests to match new synchronous close() behavior
- Add release notes entry crediting @renatomen and @0-BSCode
- Use Unicode-aware regex patterns (\p{L}\p{N}\p{M}) for tags, contexts,
projects, and user fields to support non-ASCII characters (accented
letters, Cyrillic, CJK scripts)
- Fix project preview in task creation modal wrapping wikilinks in extra
brackets (showing [[[[Project]]]] instead of +[[Project]])
- Make priority cards draggable in settings to allow reordering
- Sort priorities by weight instead of alphabetically
- New priorities now get max weight + 1 instead of fixed weight 1
Override onDataUpdated() and debouncedRefresh() in KanbanView to save
and restore column scroll positions during re-renders. Implements
getEphemeralState/setEphemeralState to capture scroll positions for
both virtual scrolling columns and regular columns, including swimlane
cells.