github chhoumann/quickadd 2.6.0

3 days ago

2.6.0 (2025-10-16)

🌟 Release Highlights

This is a feature-packed release with powerful new capabilities and important bug fixes:

  • 🔀 Conditional Macro Commands - Add IF/ELSE logic to macros without writing JavaScript
  • 📦 Package Export/Import - Share complete automation workflows with scripts and templates
  • 🎯 Enhanced Format Syntax - New {{FILENAMECURRENT}} token and |custom modifier for flexible inputs
  • ⚙️ Improved Input Validation - Real-time template path validation with autocomplete
  • 🔗 Better Obsidian Integration - Respects link format and default location settings
  • 🐛 Important Bug Fixes - Settings initialization, link generation, and UI improvements

Features

🔀 Conditional Macro Command Support

PR #959 | Closes #18

Add IF/ELSE logic to your macros without writing JavaScript boilerplate! This highly-requested feature enables dynamic workflows that respond to runtime data.

CleanShot.2025-10-16.at.18.38.18.mp4

Two modes available:

Variable Comparison Mode:

  • Compare macro variables using operators: equals, notEquals, lessThan, lessThanOrEqual, greaterThan, greaterThanOrEqual, contains, notContains, isTruthy, isFalsy
  • Support for text, number, and boolean value types with proper coercion
  • Each conditional has "Then" and "Else" branch editors

Script Mode:

  • Point to a JavaScript file that returns true/false
  • Full access to app, variables, quickAddApi, and params
  • Can use params.abort() to stop macro execution

Example use cases:

  • Conditional Processing: "If priority equals 'high', send notification"
  • Dynamic Workflows: "If status contains 'complete', archive the note"
  • Complex Logic: Use JavaScript for advanced conditions like checking file age
  • Nested Branching: Conditionals can contain other conditionals for complex decision trees

Demo:

CleanShot.2025-10-12.at.14.53.13.mp4

📦 Package Export/Import Workflow

PR #961 | Closes #97

Share your automation workflows between vaults or with others! Package your choices along with their scripts and templates into self-contained JSON files.

CleanShot.2025-10-16.at.18.41.37.mp4

Export Process:

  1. Open QuickAdd settings → "Export package..."
  2. Select choices to export with checkboxes
  3. Dependencies (nested choices, scripts, templates) automatically collected
  4. Choose to copy JSON or save to file
  5. Option to embed scripts/templates for fully self-contained packages

Import Process:

  1. Open QuickAdd settings → "Import package..."
  2. Paste .quickadd.json contents
  3. For each choice, decide: Import (new), Overwrite (replace), Duplicate (copy), or Skip
  4. For each asset, decide: Write, Overwrite, or Skip with customizable paths
  5. Click "Import package" - changes apply immediately

Example use cases:

  • Share Workflows: Export a book tracking macro → share JSON → others import and use
  • Vault Migration: Move entire QuickAdd setup to new vault in seconds
  • Template Distribution: Package multi-choice workflows for community
  • Backup: Export configurations for version control
  • Team Workflows: Standardize workflows across team members

🎯 {{FILENAMECURRENT}} Format Syntax

PR #954 | Closes #499

Reference the current file's name without creating a link! Complements {{LINKCURRENT}} for cases where you want the filename text without link formatting.

How it works:

  • Returns basename (without extension) of currently active file
  • Works in file names, content, capture formats, and location strings
  • Honors same required/optional behavior as {{LINKCURRENT}}
  • Shows 'current_filename' placeholder in autocomplete preview when no file is active

Example uses:

# Template file name
{{FILENAMECURRENT}} - Notes.md

# Template content
Created from: {{FILENAMECURRENT}}
Source: {{LINKCURRENT}}

# Result with active file "myfile.md"
Created from: myfile
Source: [[myfile]]

🎨 |custom Modifier for VALUE Syntax

Commit 207b0ba | Closes #461

Combine the best of both worlds: provide common suggestions while allowing custom input!

CleanShot 2025-10-16 at 18 46 45

Before: Choose between suggester (fixed options) OR free text
After: Use |custom to get both!

Status: {{VALUE:status,To Do,In Progress,Done|custom}}

Behavior:

  • Shows suggester with preset options
  • User can select from suggestions OR type completely different value
  • Case-insensitive modifier parsing
  • Cannot combine with default values

Example use cases:

  • Priority levels with preset options but allow "Critical" or "None"
  • Color themes with common choices but allow custom theme names
  • Tag selection with frequent tags but allow new tags on the fly

⚙️ Improved Input Validation and Autocomplete

Commit 0b66d43 | Closes #625

No more template path typos! Real-time validation with autocomplete makes configuration faster and more reliable.

New features:

  • Full-Width Layouts: Template and capture path inputs now span full modal width
  • Real-Time Validation: "Template not found" errors appear immediately as you type
  • Enhanced Autocomplete: Template path suggestions with highlighted matching text
  • Reusable Component: Consistent validation across template and capture builders

Benefits:

  • Catch typos immediately without testing
  • See suggestions as you type
  • Long paths are fully visible
  • Consistent UX matching folder path inputs

🔤 Pre-populate Default Values in Input Fields

Commit db76b9d

Default values are now visible in input fields instead of hidden until submission!

How it works:

  • {{VALUE:author|Anonymous}} → Input field shows "Anonymous" (editable)
  • {{VALUE:status,To Do,In Progress,Done|To Do}} → "To Do" appears first in suggester
  • Shows "Default: value" as placeholder hint in suggesters

Benefits:

  • See what the default will be before submitting
  • Press Enter to quickly accept defaults
  • Better discoverability of default values
  • Faster workflows for common scenarios

📝 Additional Features

Add toggle for input cancellation notices (aeb0002)

  • Control whether cancellation notices appear when aborting macros
  • Reduces noise for users who frequently cancel operations

Bug Fixes

🔗 Respect Obsidian 'New Link Format' Setting

PR #958 | Closes #363

What was broken:
QuickAdd ignored Obsidian's "New link format" setting (relative/shortest/markdown vs wiki), always using vault-absolute paths.

What's fixed:

  • Append-link operations now respect link format setting
  • {{LINKCURRENT}} in captures generates proper relative links
  • File suggester uses destination context instead of active file context
  • Multi-level relative navigation (../../) works consistently
  • Handles cases where destination file doesn't exist yet

Impact: Users who configure relative/shortest path links now see correct formatting everywhere in QuickAdd.


🗂️ Respect Obsidian's Default Location for New Notes

PR #951 | Closes #613

What was broken:
When 'Create in folder' was disabled in template choices, files were always created in vault root, ignoring Obsidian's global "Default location for new notes" setting.

What's fixed:
Uses app.fileManager.getNewFileParent() to determine correct folder, respecting Obsidian's default location settings (vault root, same folder as current file, or specific folder).

Impact: Template choices now match Obsidian's native file creation behavior.


⚡ Initialize User Script Default Values Before Execution

PR #956 | Closes #262

What was broken:
User script settings default values weren't initialized unless you explicitly opened the settings modal first. Scripts received empty settings objects even when defaults were defined.

What's fixed:

  • Created initializeUserScriptSettings() utility that populates default values before script execution
  • Default values now work immediately without opening settings modal
  • Consistent behavior across all user scripts

Impact: Settings work out-of-the-box with no manual initialization required.


📝 Restore TITLE Behavior When FIELD:title is Used

PR #967 | Closes #966

What was broken:
Using {{FIELD:title}} in a template interfered with {{TITLE}}, causing both to show the filename instead of {{FIELD:title}} accessing the YAML frontmatter title field.

What's fixed:

  • Prevented FIELD-derived specifiers from sharing the global title slot
  • {{TITLE}} correctly represents the filename
  • {{FIELD:title}} correctly accesses YAML title field
  • Both can be used together without conflicts

🔧 Respect Macro Member Access

PR #963

What was broken:
Executing specific functions using {{MACRO:X::func}} syntax didn't work - macros ran the default entry point instead.

What's fixed:

  • Macro member access now runs requested function directly
  • Settings initialized and variables synced when using member access
  • No unexpected entry point prompts

Impact: {{MACRO:ZZZ::f}} correctly calls function f and uses its return value.


🔄 Nested Choice Reordering Not Persisting

PR #953 | Closes #142

What was broken:
Reordering choices inside Multi/folder choices updated the UI but didn't persist after restarting Obsidian.

What's fixed:
Added proper event bubbling from nested ChoiceLists to ChoiceView where saveChoices() persists changes.

Impact: Nested choice reordering now persists correctly across plugin reloads.


🤖 Improve AI Model Parameter Handling

PR #949 | Closes #674

What was broken:

  • Passing model as string (e.g., "gpt-4") didn't work despite documentation showing this format
  • Confusing error: "Model 'undefined' not found in any provider"
  • Only {name: "gpt-4"} object format worked

What's fixed:

  • Accept model parameter as both string and {name: string} object
  • Consistent validation via getModelByName()
  • Better error messages guiding users to configure providers
  • Updated documentation with correct examples

🎨 Additional Bug Fixes

Standardize multi-line input font size across themes (#955) | Closes #270

  • Fixed inconsistent font sizing in multi-line input boxes across different Obsidian themes
  • Added explicit 16px font size for consistent experience

Keep custom suggestions last (#965)

  • Custom input entries now consistently appear after fuzzy-ranked suggestions
  • More predictable suggestion ordering

Correct broken documentation link (#948)

  • Fixed 404 error in Readwise example documentation
  • Updated link path to match actual file structure

📚 Documentation Updates

Updated documentation:

  • NEW: Packages.md - Complete guide to export/import workflow
  • Updated: MacroChoice.md - Conditional command documentation
  • Updated: FormatSyntax.md - New {{FILENAMECURRENT}} token and |custom modifier
  • Updated: QuickAddAPI.md - Corrected AI model parameter examples
  • Updated: Example documentation - Fixed broken links

🙏 Thank You

Special thanks to everyone who:

  • Reported issues and provided detailed feedback
  • Waited patiently for issue #18 (4+ years!) - it's finally here!
  • Contributed ideas and feature requests
  • Continue to use and support QuickAdd

Your feedback drives QuickAdd's development!


Full Changelog

Features:

  • add {{FILENAMECURRENT}} format syntax (#954) (f66ada5), closes #499
  • add |custom modifier for VALUE syntax to allow custom input (207b0ba), closes #461
  • add conditional macro command support (#959) (4e0fc1e)
  • add toggle for input cancellation notices (aeb0002)
  • improved input validation and autocomplete with full-width layouts (0b66d43), closes #625
  • package export/import workflow (#97) (#961) (80da44b)
  • pre-populate default values in input fields (db76b9d)

Bug Fixes:

  • correct broken documentation link (#948) (1ac3f2b)
  • improve AI model parameter handling and validation (#949) (dbc74a7), closes #674
  • initialize user script default values before execution (#956) (3017875), closes #262
  • keep custom suggestions last (#965) (3ca5eef)
  • nested choice reordering not persisting (#953) (acee380), closes #142
  • respect macro member access (#963) (a0b77fe)
  • respect Obsidian 'New link format' setting when appending links (#958) (9368ef0), closes #363
  • respect Obsidian's default location for new notes (#951) (c096a2d), closes #613
  • restore TITLE behavior when FIELD:title is used (#967) (d89bc7d), closes #966
  • standardize multi-line input font size across themes (#955) (bda1dad), closes #270

Don't miss a new quickadd release

NewReleases is sending notifications on new releases.