Skip to main content

Changelog

Every improvement, automatically tracked from our commit history.

Subscribe via Atom feed
← Prev Page 21 of 32 Next →
February 18, 2026
minor Data

Redesign dataset creation and import experience with friendly types and import preview (v1.16.0)

Data 1.15.1 → 1.16.0 | 95a79c78
Details

Replace raw DuckDB type names (VARCHAR, INTEGER, etc.) with user-friendly

labels (Text, Number, Decimal, Yes/No, Date, Date & Time) throughout the

schema builder. Add ColumnTypeMapping model that maps between friendly

display labels and DuckDB types, handling all DuckDB type aliases.

Add import preview overlay that appears after file import or clipboard paste.

The overlay shows detected column types and a data preview (first 20 rows),

letting users adjust column names and types before finalizing. On confirm,

applies RenameColumn and AlterColumnType operations for changed columns.

On cancel, deletes the imported dataset.

Add "Paste CSV" button in the import expander, which reads CSV/TSV/PSV

content from the clipboard, imports via DuckDB auto-detect, and opens

the same import preview overlay.

File import now routes through the preview overlay instead of immediately

selecting the dataset, giving users a chance to review and adjust detected

schema before committing.

minor CalendarDataEmailFilesJournalNotesRssSnippetsWebClips

Add SQL editor intelligence and cross-plugin entity querying

Rss 1.7.1 → 1.8.0 | Data 1.14.1 → 1.15.0 | Email 1.21.5 → 1.22.0 | Files 1.8.1 → 1.9.0 | Notes 1.42.2 → 1.43.0 | Journal 1.5.3 → 1.6.0 | Calendar 1.10.4 → 1.11.0 | Snippets 1.5.2 → 1.6.0 | WebClips 1.1.1 → 1.2.0 | ee7dc749
Details

Introduces source:@PluginName syntax for querying entity data from any

plugin directly in the SQL editor. Adds a stateless SQL analysis engine

with CTE parsing, cursor-context-sensitive autocomplete, inline problem

detection (unknown sources/columns, ambiguous references), and a DuckDB

function catalog.

Entity source materialization fetches plugin data via IPluginDataSourceProvider,

creates temporary DuckDB tables, rewrites SQL to reference them, executes the

query, and cleans up. Results are cached for 30 seconds during live typing;

manual Ctrl+Enter bypasses the cache.

Eight plugins now implement IPluginDataSourceProvider: Calendar, Journal,

Notes, Email, Files, RSS, Snippets, and WebClips — joining the existing

Tasks and Contacts implementations. Each exposes its entities as tabular

data sources accessible via source:@PluginName in the query editor.

The SQL editor gains entity source coloring (teal), problem squiggles

(red errors, amber warnings), @ trigger for entity completions, and

context-aware completions for columns, functions, CTEs, and sources.

New files:

  • Services/Analysis/: SqlAnalyzer, CteParser, ContextDetector,

ProblemDetector, SchemaRegistry, DuckDbFunctions, CursorContext,

SqlAnalysisModels

  • Services/EntitySourceRegistry, EntitySourceMaterializer
  • 8 plugin DataSources partial classes

Modified files:

  • SqlPreprocessorClient: entity source regex methods
  • SqlCompletionProvider: rewritten with SqlAnalyzer integration
  • SqlSemanticColorizer: entity brush + problem squiggles
  • SqlEditorControl: @ trigger, SchemaRegistry wiring
  • QueryEditorViewModel: materializer + schema dependencies
  • QueryEditorViewModel.LiveQuery: materialization in execution pipeline
  • DataViewModel: pass-through entity source dependencies
  • DataPlugin: create and wire EntitySourceRegistry/Materializer
  • QueryEditorView: SchemaRegistry + entity source refresh wiring

Version bumps:

  • Data: 1.14.1 → 1.15.0
  • Calendar: 1.10.4 → 1.11.0
  • Journal: 1.5.3 → 1.6.0
  • Notes: 1.42.2 → 1.43.0
  • Email: 1.21.5 → 1.22.0
  • Files: 1.8.1 → 1.9.0
  • RSS: 1.7.1 → 1.8.0
  • Snippets: 1.5.2 → 1.6.0
  • WebClips: 1.1.1 → 1.2.0
minor Email

Add IMAP IDLE and inline image support (v1.21.0)

Email 1.20.0 → 1.21.0 | 21f59b02
Details

Adds real-time new message notifications via IMAP IDLE for Inbox folders.

ImapIdleService maintains persistent connections per account, re-IDLEs every

25 minutes per IMAP spec, with exponential backoff reconnect. Falls back to

polling when IDLE is not supported. EmailSyncManager integrates IDLE alongside

existing polling — IDLE triggers immediate incremental sync on CountChanged.

Adds inline image support for HTML emails. FetchBodyAsync now extracts inline

MimePart resources with ContentId and converts them to base64 data URIs.

HtmlSanitizer replaces cid: references in img src attributes with the

corresponding data URIs. InlineImages dictionary flows through the body cache

(EmailCachedBody) for offline access and is bound through HtmlMessageRenderer

to the reading pane view.

minor Email

Email v1.20.0: Conversation threading with MessageId/InReplyTo chains

Email 1.19.0 → 1.20.0 | 30551000
Details

Phase 5 of full-featured email client implementation:

  • New EmailThread model: ThreadId, Messages (sorted newest-first),

LatestMessage, Count, IsExpanded, HasUnread, Participants, Subject

properties for thread header display

  • New EmailThreadingService: groups messages into conversation threads

using a 5-phase algorithm: (1) build MessageId lookup, (2) follow

InReplyTo chains to find thread roots with cycle detection, (3) group

by root, (4) merge subject-based groups with MessageId-based groups,

(5) deduplicate and sort. Fallback to normalized subject matching

(strips Re:/Fwd:/Fw: prefixes) for messages without threading headers

  • New EmailViewModel.Threading.cs: IsThreadView toggle, Threads collection,

SelectedThread, ExpandThread/SelectThreadMessage commands, RebuildThreads

called after filter changes when thread view is enabled

  • InReplyTo promoted from transient to persisted field on EmailMessage with

JsonPropertyName("in_reply_to") and new indexed field in entity schema

for efficient thread lookups

  • ImapSyncService.MapToEmailMessage now captures Envelope.InReplyTo during

header sync so threading data is available from first sync

  • Thread view toggle added to gear menu settings
  • Threading integrates with existing filter pipeline: ApplyFilters()

automatically rebuilds threads when IsThreadView is true

minor Email

Email v1.19.0: Save sent to Sent folder, draft auto-save persistence

Email 1.18.0 → 1.19.0 | f2d9920a
Details

Phase 4 of full-featured email client implementation:

  • New ImapSyncService.Append.cs: IMAP APPEND operation for saving MimeMessages

to server folders (Sent, Drafts) with configurable flags, returns server-

assigned UID for draft replacement tracking

  • Made SmtpSendService.BuildMimeMessage public so ComposeViewModel can reuse

it for building MimeMessages to save to Sent/Drafts without duplication

  • ComposeViewModel rewritten with draft persistence: 30-second auto-save timer

saves to Drafts folder via IMAP APPEND with Draft+Seen flags, tracks UID to

replace old draft on re-save, deletes server draft after successful send

  • Save-to-Sent: after SMTP send completes, fire-and-forget APPEND to Sent

folder with Seen flag so sent messages appear on the server immediately

  • ComposeMessage model extended with DraftUid and DraftFolderPath fields

for tracking the server-side draft across save cycles

  • New OpenDraft command: when a message in the Drafts folder is selected,

opens compose overlay pre-filled with the draft content and UID tracking

so subsequent saves replace the same server draft

← Prev Page 21 of 32 Next →

Get notified about new releases