Skip to content

Releases: BobWs/flatnotes-enhanced

v1.9.0: Customisable Date Formatting – Locale & Style

Choose a tag to compare

@BobWs BobWs released this 25 Jun 09:27

New Feature: Customisable Date Formatting

You can now choose how dates are displayed throughout the app – perfect for users who prefer a specific language or date format.

What you can customise:

Setting Options
Locale System default, Dutch (nl), English (GB), English (US), German (de), French (fr), Spanish (es), Italian (it), Portuguese (pt), Swedish (sv), Norwegian (nb), Danish (da), Finnish (fi), Polish (pl), Japanese (ja), Chinese (zh-CN)
Style Short (e.g., 24/06/2026), Medium (e.g., 24 Jun 2026), Long (e.g., 24 June 2026)

Where it applies:

  • Search results
  • Archive page
  • Trash page
  • Maintenance tab timestamps
  • Any other date display in the app

How to set it up:

  1. Go to Settings → Preferences
  2. Scroll to "Date Format" section
  3. Select your preferred Locale and Style
  4. A live preview shows how dates will appear
  5. Click Save preferences

No preference selected? Dates continue to use your browser's default formatting (existing behaviour unchanged).


Installation

docker pull dockerbobw/flatnotes-enhanced:latest
docker pull dockerbobw/flatnotes-enhanced:v1.9.0

Docker Compose

image: dockerbobw/flatnotes-enhanced:latest
# or pin to this version:
# image: dockerbobw/flatnotes-enhanced:v1.9.0

🔗 Links


🙏 Thank You

Thanks to everyone using and testing Flatnotes-Enhanced – dates now display the way you prefer!

Update for better date formatting! 📅

v1.8.0: Progressive Web App (PWA) – Offline read-only access

Choose a tag to compare

@BobWs BobWs released this 21 Jun 07:35

New Feature: Offline Caching

Flatnotes-Enhanced can now be installed as a Progressive Web App (PWA) and caches notes for offline access.

What this means:

Scenario Before After
Server down or no internet ❌ Could not access notes ✅ Read notes you've opened before
Café WiFi blocking the server ❌ Nothing worked ✅ Notes load from cache
Installing as standalone app ❌ Not possible ✅ Install from browser

How it works:

· Opt-in – Enable in Settings → Preferences → "Enable offline caching (PWA)"
· Automatic caching – Notes, folders, tags, and assets are cached as you use the app
· Server reachability detection – App actively checks if your server is reachable every 15 seconds
· Offline banner – Subtle amber banner appears when offline, disappears when server is back
· Installable – On supported browsers, click the install icon in the address bar

Limitations (read-only):

· ✅ Read notes you've opened before
· ✅ Browse folders and tags
· ❌ Cannot edit notes offline
· ❌ Cannot create new notes offline
· ❌ Attachments are not cached

Technical details:

· Service worker caches API responses (NetworkFirst with 3-second timeout)
· Static assets cached permanently (CacheFirst)
· Cache size: 200 API responses, 100 assets
· Toggle can be turned off at any time (clears cache immediately)


Installation

docker pull dockerbobw/flatnotes-enhanced:latest
docker pull dockerbobw/flatnotes-enhanced:v1.8.0

Docker Compose

image: dockerbobw/flatnotes-enhanced:latest
# or pin to this version:
# image: dockerbobw/flatnotes-enhanced:v1.8.0

🔗 Links


🙏 Thank You

Thanks to everyone using and testing Flatnotes-Enhanced – you can now read your notes even when the server is unreachable.

Install and go offline! 📴

v1.7.2: Non-ASCII Characters in Usernames & Passwords

Choose a tag to compare

@BobWs BobWs released this 11 Jun 17:49

Improved: Non-ASCII Character Support

Usernames and passwords can now contain non-ASCII characters like German umlauts (ä, ö, ü, ß) and other accented characters (é, è, ç, ñ, etc.).

What was broken:

· Logins failed when passwords contained special characters (e.g., Günther123)
· The backend crashed with a TypeError when non-ASCII characters were used

What changed:

· Passwords are now properly encoded to UTF-8 before validation
· Usernames also support non-ASCII characters
· Both manual login and TOTP authentication modes work

Now works with:

· FLATNOTES_USERNAME=günther / FLATNOTES_PASSWORD=passwörd
· FLATNOTES_USERNAME=gunther / FLATNOTES_PASSWORD=$7%FP5ZCFf@tJL5E2Vüäöüßéèçñ
· Any combination of ASCII and non-ASCII characters

Technical note: The fix uses UTF-8 encoding in secrets.compare_digest() to safely compare credentials.


Installation

docker pull dockerbobw/flatnotes-enhanced:latest
docker pull dockerbobw/flatnotes-enhanced:v1.7.2

Docker Compose

image: dockerbobw/flatnotes-enhanced:latest
# or pin to this version:
# image: dockerbobw/flatnotes-enhanced:v1.7.2

🔗 Links


🙏 Thank You

Special thanks to @riker09 who reported this issue and contributed the fix – non-ASCII characters are now fully supported in credentials.

Update for better compatibility! 🔐

v1.7.1: Bug Fixes – Backup list clarity & More reliable version check

Choose a tag to compare

@BobWs BobWs released this 31 May 10:56

🐛 Bug Fixes

Fix 1: Backup & Restore – Clearer date timestamps

The backup list now provides better context for dates and times.

What changed:

Before After
2026-05-30 14:32:00 · 28.0 KB Database Last Saved: 2026-05-30 14:32:00 · 24 KB
Unclear what the timestamp meant Explicit label and file size included
No tooltip context Hover tooltips explain both filename timestamp (UTC) and last saved date (localized)

Benefits:

  • Clearer distinction between backup creation time and database save time
  • File size shown directly in the list (no extra click needed)
  • Tooltips explain timezone handling (UTC in filename, localized in display)

Fix 2: More reliable version check (Docker Hub API)

The live version check now uses Docker Hub API as the primary source, with GitHub Releases as fallback.

What changed:

Before After
GitHub API only (60 requests/hour limit) Docker Hub first (generous limits), GitHub fallback
Rate limit could cause "Offline" false positives Docker Hub rarely hits limits
Unclear which source was used UI now shows via Docker Hub or via GitHub
Failed check would blank out previous result Last known version preserved on transient errors

Benefits:

  • More reliable update detection (no more false "Offline" due to rate limits)
  • 6-hour cache shared between both sources
  • Debug info visible in UI (Checked X ago via Docker Hub)

Installation

docker pull dockerbobw/flatnotes-enhanced:latest
docker pull dockerbobw/flatnotes-enhanced:v1.7.1

Docker Compose

image: dockerbobw/flatnotes-enhanced:latest
# or pin to this version:
# image: dockerbobw/flatnotes-enhanced:v1.7.1

🔗 Links


🙏 Thank You

Thanks to everyone using and testing Flatnotes-Enhanced – clearer backups and reliable version checks make maintenance easier for everyone.

Update for a smoother experience! 🔧

v1.7.0 — Redesigned Archive Page, Maintenance & Settings Refactor

Choose a tag to compare

@BobWs BobWs released this 30 May 11:41

Redesigned Archive Page

New features Archived Page (matching Attachments Page design):

  • Search field — filters by note title and folder path with a clear (✕) button
  • Sort dropdown — four options: Last modified (default), Title A–Z, Title Z–A, Oldest first
  • Smart live subtitle — shows X of Y archived notes when a filter is active, otherwise just the total count
  • No-results state — dedicated empty state when search yields nothing, with a "Clear search" link
  • LoadingIndicator wraps the whole page

Preserved without changes:

  • Restore individual note (with confirm modal)
  • Permanently delete individual note (with confirm modal)
  • Empty Archive button (with confirm modal)
  • Refresh button with spin animation
  • Folder breadcrumb display
  • Click-to-open note navigation
  • All three ConfirmModal instances

Settings Architecture Refactor

The monolithic Settings.vue (~1800 lines) was split into dedicated sub-components for better maintainability and faster loading. Each settings tab is now its own self-contained Vue component:

  • SettingsCallouts.vue
  • SettingsAppearance.vue
  • SettingsAdvanced.vue
  • SettingsTags.vue
  • SettingsTaskIcons.vue
  • SettingsPrefs.vue
  • SettingsMaintenance.vue (new)

Settings.vue is now a thin shell responsible only for tab routing. Zero functional regression — all existing settings work identically.


New: Maintenance Tab

A dedicated Maintenance tab has been added to Settings with a clean two-column card layout.

Trash Manager

  • Displays current auto-delete configuration (via FLATNOTES_TRASH_DAYS environment variable)
  • Shows number of notes currently in trash
  • Shows timestamp of last cleanup ("Last cleaned: X days ago" or "Never")
  • "Empty trash now" button with inline confirmation
  • Configurable: delete all trash or only notes older than X days
  • Spinner feedback during operation, success/error messaging

Content Summary

  • Live count of notes, archived notes, trash items and attachments
  • Refresh button to update counts on demand

About & System Info

  • App version display
  • Database file path and size
  • Project attribution

New: Backend Maintenance API

Three new API endpoints power the Maintenance tab:

Endpoint Description
GET /api/maintenance/status Returns app version, DB info, note counts, trash config
POST /api/maintenance/trash/empty Empties trash (all or older than X days)

Last cleanup timestamp is persisted in UserSettings.extra so it survives container restarts.


Preferences Backup & Update Checks

New: Preferences Backup & Restore System

Important: Backups contain user preferences and settings only (colors, callouts, tag settings, appearance etc.) — not notes. Notes are stored as plain markdown files on the filesystem and are unaffected by backup and restore operations.

Automatic backups

  • A backup is automatically created on every app startup (once per calendar day)
  • Backups are stored at /data/.flatnotes/backups/
  • Filename format: flatnotes_backup_{label}_{YYYYMMDD_HHMMSS}.db
  • Configurable retention: keep last N backups (default 7), oldest are auto-pruned

Manual backups

  • "Backup now" button in the Maintenance tab creates an instant labeled backup
  • Backup list shows filename, size, creation date for all available backups

Restore

  • Select any backup from the list to restore
  • Safety mechanism: a pre_restore backup of the current state is automatically created before any restore operation
  • Requires typing RESTORE to confirm — prevents accidental restores
  • After successful restore, a prominent banner prompts the user to reload the page to apply restored preferences

Backup deletion

  • Individual backups can be deleted from the list with inline confirmation

New API endpoints:

Endpoint Description
GET /api/maintenance/backups List all available backups, newest first
POST /api/maintenance/backups Create a manual backup
POST /api/maintenance/backups/restore Restore from a selected backup
DELETE /api/maintenance/backups/{filename} Delete a single backup

New: Live Version & Update Check

The About section in the Maintenance tab now displays live version information with automatic update detection.

How it works

  • Installed version is read from package.json (ground truth)
  • Latest release is fetched from the GitHub Releases API: https://github.com/BobWs/flatnotes-enhanced/releases
  • Result is cached server-side for 24 hours — GitHub is never hammered on every page load
  • Falls back gracefully when offline or GitHub is unreachable

Three display states

State Display
Up to date Green "Up to date" badge + "Checked X ago"
Update available Amber "Update available" badge + link to release notes on GitHub
Offline / unreachable Grey "Offline" badge, no broken UI

Design decisions

  • Check runs server-side (not in the browser) — works even when users are behind a firewall
  • 5-second timeout on GitHub API call — never blocks the status response
  • Standard User-Agent header sent to GitHub (flatnotes-enhanced/{version})
  • No auto-update, no telemetry beyond the version number in the User-Agent header
  • Degrades gracefully in all failure scenarios

Technical Notes for Self-Hosters

New environment variable behavior
FLATNOTES_TRASH_DAYS was already supported in earlier versions but was not surfaced in the UI. The Maintenance tab now displays the configured value so users can see at a glance whether auto-cleanup is active.
Add e.g. FLATNOTES_TRASH_DAYS=60 to docker environment.

Backup storage
Backup files are stored inside the same Docker volume as your database (/data/.flatnotes/backups/). No additional volume mount is required. Backups persist across container restarts and updates.


Installation

docker pull dockerbobw/flatnotes-enhanced:latest
docker pull dockerbobw/flatnotes-enhanced:v1.7.0

Docker Compose

image: dockerbobw/flatnotes-enhanced:latest
# or pin to this version:
# image: dockerbobw/flatnotes-enhanced:v1.7.0

🔗 Links


🙏 Thank You

Thanks to everyone using and testing Flatnotes-Enhanced.

v1.6.3: Bug Fixes – Sidebar expand/collapse + Header colors/font

Choose a tag to compare

@BobWs BobWs released this 25 May 08:38

🐛 Bug Fixes

Fix 1: Expand/Collapse sidebar folders and tags

What was broken:

Issue Description
Expand All Only expanded first-level items – nested folders/tags remained collapsed
Collapse All Worked, but individual items could not be expanded again
Individual expand/collapse Stopped working after using Expand All or Collapse All
Refresh buttons Did not restore normal behavior – only a full page refresh helped

What changed:

Fix Description
Deep recursive expansion Expand All now expands all nested levels (Parent/Child/Grandchild/etc.)
Pulse-based force expand Sidebar no longer holds forceExpand permanently – items regain control after expand/collapse completes
v-show instead of v-if Children remain mounted so force signals reach all levels simultaneously
Button icon/tooltip state Now tracks last expand direction to show correct icon ( / )

What works now:

Action Expected behavior
Click Expand All All folders/tags at every level expand
Click Collapse All All folders/tags at every level collapse
Click individual chevron Toggles that single item (works before AND after using Expand/Collapse All)

Fix 2: Header colors and font (H1–H6) now respect user preferences

What was broken:

Issue Description
Colors not reverting Disabling header colors still showed custom colors
Font not reverting Headings kept the custom Quicksand font even when colors were disabled
Toggle had no effect Enabling/disabling headers in Settings did nothing visible

What changed:

Fix Description
getHeaderColor() returns null when disabled No inline color style is applied to headings
Quicksand font is now opt-in Font only applies when data-custom-headers attribute is present
Live toggle without page reload Watch on headerColors re-renders the note view instantly
hasAnyHeaderEnabled() helper Determines if any H1–H6 level is enabled

What works now:

Action Expected behavior
Disable all headers Headings revert to default theme color and default Poppins font
Disable individual heading level That specific level reverts; others keep custom colors
Re-enable headers Custom colors and Quicksand font return instantly

Installation

docker pull dockerbobw/flatnotes-enhanced:latest
docker pull dockerbobw/flatnotes-enhanced:v1.6.3

Docker Compose

image: dockerbobw/flatnotes-enhanced:latest
# or pin to this version:
# image: dockerbobw/flatnotes-enhanced:v1.6.3

🔗 Links


🙏 Thank You

Sidebar navigation is now fully reliable, and header styling finally respects your preferences.

Update for a smoother experience! 📂 🎨

v1.6.2: Consistent Default Sorting – All Notes respects your preference

Choose a tag to compare

@BobWs BobWs released this 24 May 10:26

Improved: Default Sort Consistency

All "All Notes" entry points now respect your saved sort preference from Settings → Preferences → Default note sort.

What changed:

Entry point Before After
Hamburger menu → All Notes Hardcoded to Title ✅ Respects user preference
Home page → ... (Show more) Used Docker env variable ✅ Respects user preference (with fallback)
Search page (direct) Hardcoded to Title ✅ Respects user preference (with fallback)

Fallback chain (when no user preference is set):

  1. Docker environment variable (FLATNOTES_QUICK_ACCESS_SORT) – if you have one configured
  2. App default – Title (alphabetical order)

What stays the same:

  • The Quick Access list (5 notes on Home page) still uses Docker env only – unchanged
  • Clicking the sort dropdown on the Search page still overrides everything (URL parameter takes priority)

Bug Fixes

Fixed: "App Default" option in Settings now saves correctly. Previously, selecting "App Default" would not persist after page refresh.

Fixed: The sort preference now syncs instantly when changed in Settings – no page reload needed.


Installation

docker pull dockerbobw/flatnotes-enhanced:latest
docker pull dockerbobw/flatnotes-enhanced:v1.6.2

Docker Compose

image: dockerbobw/flatnotes-enhanced:latest
# or pin to this version:
# image: dockerbobw/flatnotes-enhanced:v1.6.2

🔗 Links


🙏 Thank You

Thanks to @TechGuyAlabama who reported the inconsistent sorting behaviour – your notes now sort the way you expect, everywhere.

Update for consistent sorting! 📊

v1.6.1: Bug Fix – Title truncation in editor header

Choose a tag to compare

@BobWs BobWs released this 21 May 08:39

🐛 Bug Fix

Fixed: Long note titles were being cut off without an ellipsis (), and the folder breadcrumb competed for space with the action buttons (Pin, Archive, Trash, Edit/Save).

What changed:

The header in both view and edit mode has been restructured from one crowded row into two clean rows:

Before After
Folder breadcrumb + Title + Buttons (all in one row) Row 1: Folder breadcrumb + Buttons
Title competed for space, truncation broke Row 2: Full-width title with proper truncation ()
  • The title now has the entire width of the second row – nothing else competes for space
  • The truncate class now correctly appends when titles are too long
  • Buttons (Prev/Next, Pin, Archive, Trash, Edit/Save) always stay intact on the right side of row 1
  • Folder breadcrumb gives way when space is tight, buttons never wrap
  • A hidden placeholder keeps consistent row height even when no folder is present

Only Note.vue was changed – no other files affected.


Installation

docker pull dockerbobw/flatnotes-enhanced:latest
docker pull dockerbobw/flatnotes-enhanced:v1.6.1

Docker Compose

image: dockerbobw/flatnotes-enhanced:latest
# or pin to this version:
# image: dockerbobw/flatnotes-enhanced:v1.6.1

🔗 Links


🙏 Thank You

Thanks to @TechGuyAlabama who reported this issue – the note header is now cleaner and more reliable.

Update for a better editing experience! ✏️

v1.6.0: Note Views – Choose your preferred reading width

Choose a tag to compare

@BobWs BobWs released this 18 May 08:53

New Feature: Note Views

You can now choose how wide your notes appear on screen. Three options are available in Settings → Preferences → Default note view:

View Width Best for
Normal 999px Default – comfortable reading length
Wide 1400px Large monitors, more horizontal space
Full Screen 100% Ultrawide displays, maximum space

How it works:

  • Go to Settings → Preferences
  • Find "Default note view" dropdown
  • Select your preferred width and save
  • Changes take effect immediately – no page reload needed
  • Works for both editing and viewing notes

What stays the same:

  • All other pages (Settings, Attachments, Trash, Archive, Bookmarks, etc.) remain centered at 999px – only note pages are affected
  • Your preference is saved to the database and persists across sessions

Technical Notes

  • No backend changes – reuses existing notes_default_view field
  • Navbar and content area stay perfectly aligned in all three modes
  • Fully responsive – works on all screen sizes

Installation

docker pull dockerbobw/flatnotes-enhanced:latest
docker pull dockerbobw/flatnotes-enhanced:v1.6.0

Docker Compose

image: dockerbobw/flatnotes-enhanced:latest
# or pin to this version:
# image: dockerbobw/flatnotes-enhanced:v1.6.0

🔗 Links


🙏 Thank You

Thanks to everyone using and testing Flatnotes-Enhanced.

Choose your perfect reading width! 📖

v1.5.1: Bug Fixes – Case-insensitive attachments & Archive folder scanning

Choose a tag to compare

@BobWs BobWs released this 14 May 09:09

🐛 Bug Fixes

Fix 1: Case-insensitive attachment linking

Attachments are now matched case-insensitively. Previously, ![image](attachments/Photo.png) would fail to render if the actual file was named photo.png.

What changed:

  • Attachment lookup in the backend now tries exact match first (fast path), then falls back to a case-insensitive search
  • Delete operations use the same two-phase lookup – no more "file not found" errors when case differs
  • The Attachments page now correctly tracks usage regardless of case in markdown links
  • Frontend rendering treats attachments/ and Attachments/ the same

This affects all attachment types – images, PDFs, documents, archives, audio, video, and code files.


Fix 2: Archive folder now scanned for attachment usage

The Attachments page previously ignored notes in the _archive folder when determining if an attachment was "in use". This could lead to attachments being incorrectly marked as unused and potentially deleted.

What changed:

  • Notes in _archive are now scanned for attachment references
  • Notes in _trash remain excluded (trashed notes should not protect attachments)
  • The "In use" filter now correctly shows attachments referenced by archived notes

Installation

docker pull dockerbobw/flatnotes-enhanced:latest
docker pull dockerbobw/flatnotes-enhanced:v1.5.1

Docker Compose

image: dockerbobw/flatnotes-enhanced:latest
# or pin to this version:
# image: dockerbobw/flatnotes-enhanced:v1.5.1

🔗 Links


🙏 Thank You

Thanks to everyone using and testing Flatnotes-Enhanced – attachment handling is now more robust and reliable.

Update for better attachment management! 📎