Skip to content

Releases

v0.2.0 — quick capture, professional markdown editing & vault protection

Choose a tag to compare

@rezzt-dev rezzt-dev released this 23 Sep 12:50

ADDED

  • global quick capture from the tray icon, command palette, a local shortcut and the remappable ctrl+alt+space system-wide shortcut: it opens an independent mini-window, preserves the draft when cancelled and writes directly to an Inbox/ note or the selected Kanban column without bringing the main window forward.
  • native global-shortcut backends for Windows (RegisterHotKey), Linux X11 (XGrabKey) and macOS (RegisterEventHotKey), with explicit fallback for Wayland, conflicts and unsupported platforms; plus an opt-in setting to keep Enki in the tray when the main window closes.
  • professional markdown editing through MarkdownEditing: toggle inline formatting and block markers, apply actions to multiline selections, indent and renumber lists, continue lists and quotes with enter, smart home, marker deletion, configurable automatic pairs, url-to-link pasting, and line move, duplicate, delete and expand operations, all connected to remappable shortcuts and complete undo actions.
  • syntax highlighting for fenced code blocks with a declared language using the textmate grammars and light/dark themes already shared by the file viewer, loaded in the background, cached per block and bounded by time and line count so typing never blocks.
  • obsidian-compatible callouts (> [!note], tip, warning, danger and their aliases) with theme-aware icons, titles, tones and backgrounds, plus the /aviso command so they can be inserted without memorising the syntax.
  • settings under settings > editor to choose justified or ragged text and enable or disable automatic bracket and quote closing, persisted per vault and translated into all seven supported languages.
  • reusable note templates in <vault>/.enki/templates/: each template is a markdown file with optional front matter (name, description, title) and a body with {{title}}, {{date}}, {{time}}, {{datetime}}, {{weekday}}, {{month}}, {{year}}, {{uuid}} and {{cursor}} variables, with optional format ({{date:dd/MM/yyyy}}) and offset ({{date+1d}}); anything unrecognised is left untouched in the note.
  • a "from template" flow in documents — full-view button, simplified-view action row, note grid context menu and command palette — with a picker to create the note, edit the template in an editor tab, create a new template pre-filled with the syntax, open its folder and delete it honouring "ask before deleting".
  • a "daily note template" setting under settings > editor > templates, stored per vault in <vault>/.enki/settings.json: the template decides the content and, when it declares title, the note's name too; it only applies on creation, never over the day's existing note.
  • two translated example templates (daily note and meeting) seeded the first time each vault is opened, never restored again if the user deletes them.
  • previous-day / next-day navigation in the editor header whenever the open note is a daily note, with the date spelled out to be read, a jump back to today and remappable ctrl+alt+left / ctrl+alt+right shortcuts; the target day's note is created from its template when it doesn't exist yet.
  • daily notes recognised by their file name in both directions (date to name and name to date), honouring the configured template's title while still recognising the yyyy-MM-dd notes that predate it, so a day never ends up with two daily notes.
  • a "merge with template" action in the editor header that appends only the sections the daily note is missing, at the end and without touching anything already written, listing what it will add in the tooltip beforehand and leaving a restore point in the version history.
  • a daily note consistency calendar in documents (full view, simplified view and command palette): ten calendar-aligned weeks, one cell per day, clicking a cell opens or creates that day's note, and a single descriptive figure of how many days have one.
  • a habits row inside that same calendar, read from the vault's real habits and with jumps to habits and statistics, with no streaks, points or goals of any kind.
  • local per-note version history, stored inside the vault itself (<vault>/.enki/history/, or .history/ alongside a session note, inheriting its encryption when the session is protected): automatic snapshots during autosave (throttled to one every 5 minutes, and only when the content actually changed), a "History" tab in the editor to diff line-by-line against the current version and restore, and an automatic safety snapshot before restoring or before a rename rewrites wikilinks in other notes.
  • add a "Tags" sidebar section to browse and search active tags from notes, kanban cards and polar tasks in one view, with per-module counts and multi-selection for merging.
  • allow tags to be renamed, merged and removed across all three modules without a separate store: preserve note front matter and version history, remove duplicates within each item, sync polar changes and refresh open note tabs.
  • extend the global vault graph with combined session and tag filters to explore accessible notes without creating another store or replacing the existing renderer.
  • add modes to discover orphan notes, cross-session connections and connected note groups, computed over the entire accessible vault to prevent misleading results when filtering.
  • detection of changes made to the vault outside enki (syncthing, dropbox, another editor): VaultChangeWatcher watches the folder with a FileSystemWatcher filtered to *.md, with per-path debouncing, filtering of temporary and sync-conflict files, and degradation to polling when the watcher fails or the file system does not support it.
  • a per-note on-disk stamp (NoteDiskStamp: timestamp, size and file hash) used to tell an own write from a foreign one by exact comparison rather than time windows, so autosave never produces a false conflict.
  • a pre-save check in VaultService.WriteContentChecked, independent of the watcher: if the file on disk is no longer the one that was read, the write is aborted without touching anything instead of overwriting the foreign change.
  • conflict policy in the editor: silent reload preserving caret and scroll position when there are no local changes, and a conflict dialog offering "keep mine", "load from disk" and "show differences" when there are; the discarded version is saved to the local history first under the "external conflict" trigger, so neither option destroys anything.
  • per-note autosave pause while the decision is still pending, with a header badge that reopens the dialog, and preservation of the unsaved text in the history if the tab is closed without deciding.
  • handling of external deletes and renames: a deleted note keeps its content on screen and offers to be saved as a new note; a renamed or moved one makes the tab follow its file to the new path.
  • settings > editor toggles "watch for external changes in the vault" and "reload automatically when there are no local changes", both on by default and translated into the seven supported languages; with watching off, the pre-save check still applies.
  • snooze reminders from the reminder inbox and from the notification centre, with two configurable quick durations (10 min and 1 h out of the box), "this evening", "tomorrow" and a custom value of up to seven days; a snoozed item leaves the overdue count, stays at the end of the list showing "snoozed until HH:MM" and its snooze counter, and fires again at the chosen time.
  • a dedicated snooze store in <vault>/.tasks/snoozed-reminders.json, the twin of the dismissal one: snoozing never rewrites a card's due date, a reminder's NotifyAtUtc, or a recurring reminder's series; it respects do-not-disturb by deferring the alert to the end of the window and keeps wall-clock time across daylight-saving transitions.
  • settings > notifications for the four quick snooze values (both durations and the "this evening" / "tomorrow" hours), with the menu labels following what is configured instead of fixed text.
  • export the calendar, the kanban board and a note to png and pdf, from each view's menu and from the command palette: the board comes out whole even when its columns do not fit on screen, the calendar comes out with the weekday header and without the navigation toolbar, and a long note is paginated into a4 pages.
  • an in-house pdf writer with no new dependencies (PdfImageWriter): one page per image, flate-compressed /DeviceRGB, and proportional page shrinking when the sheet exceeds the format's maximum side; writes are atomic, so a mid-way failure never leaves truncated files.
  • new-version notice: an optional check on startup (off by default, at most once every 24 h) and a manual one from settings > general, showing the version found, its release notes, "download" and "skip this version"; it only opens the release page in the browser, never downloads or runs anything, and with the setting off enki makes no network requests of its own.
  • store per-vault appearance, language, editor, calendar, statistics, navigation, shortcut and layout preferences in <vault>/.enki/settings.json, migrating the logo and custom themes from the global file when the first vault is chosen without overwriting anything already there, and keeping a settings.json.corrupt-* copy if the json arrives damaged.
  • color each calendar task by its source: red/amber/green for the base kanban columns (a color of its own for every new column) and a palette of blues, cyans, violets and magentas for polar lists, customisable from the layers panel with a color picker, hex input or a reset to automatic.
  • a settings > editor > code font setting to pick any font installed on the system for code blocks and inline code in notes and skills, the code file viewer and a skill's raw content, independent of the interface font and stored per vault, with jetbrains mono nf as the default.
  • a settings > appearance > sidebar logo...
Read more