Changelog
User-visible changes to eigen, newest first.
[0.0.6] - 2026-06-25
Activity & history release. A per-file activity timeline with file and folder watching, copy/move/duplicate across drives, attachments on comment cards, a big spreadsheet import-fidelity pass, a filled-out help center, and a visual refresh, plus data-loss hardening for remote storage.
Added
- File activity & history — every file in Drive now keeps a timeline of what happened to it (created, uploaded, edited, renamed, moved, copied, commented) and who did it, shown in a Recent Activity panel on the file's details; collaborative-document edits and comments are attributed to the people who made them
- File & folder watching — watch any file or folder to be notified when it changes; watching a folder cascades to everything inside it, a new Watched view lists everything you are watching, and bursts of changes are coalesced into a single notification
- Copy, move & duplicate — right-click a file or folder (or a multi-selection) in Drive to Move to…, Copy to…, or Duplicate; copy works anywhere, including across mounts and into team drives, while move stays within a drive; folders copy recursively and collaborative documents copy as independent, fully working documents
- Comment attachments — attach files to comment cards in Docs, Slides, Sheets, and Stickies, and to chat; paste or drag-and-drop files straight into the card form or the chat input
- Sheets — XLSX import now preserves much more: hyperlinks, data-validation rules, conditional formatting, autofilters, hidden rows and columns, and frozen panes; these survive a round-trip back out to XLSX export
- Sheets — a formatting toolbar with font family, size, bold, and italic; number formatting gains Google-style custom-format dialogs for dates, numbers, and currency, and the Format → Number menu matches Google's structure
- Sheets — the column filter menu can now filter by condition (text contains, greater than, and so on), not just by selecting values
- Stickies — resolve a card, and reopen it later; resolved cards show a check
- Slides — right-click a slide object for a context menu of its actions
- Help center — the Eigen Support help center now has 120 articles, searchable from the command palette through a new Help scope as well as on the site
- Drive — files are served with HTTP range support, so video and audio scrub instantly in the preview and interrupted downloads can resume
- Marketing site — a new
/licensespage lists the open-source software Eigen is built on
Changed
- Visual refresh — a redesigned app switcher (a grid of large, app-coloured icons with names), a
lighter font-weight scale across the apps, Drive file icons tinted by app, an animated
eigen|app>wordmark on the landing page and Space home, and a topbar that can switch between app-coloured and neutral chrome; toolbar titles are lighter, toolbar borders fade in on scroll, and the Drive, Trash, and Calendar layouts were tidied up - Landing page — the marketing landing page is prerendered, so it paints instantly and is friendlier to search engines; signed-in visitors are sent straight into the app
- Sheets — inserting or deleting rows and columns no longer ships the whole sheet, keeping large sheets responsive
Fixed
- Mail — deleting a Trash email from the detail toolbar now asks for confirmation and then permanently deletes, instead of silently doing nothing
- Mail — HTML emails authored for a light background render on a light canvas in dark mode so they stay readable; unread senders are bolder; and a failed mailbox load shows an error state instead of an empty "no emails" message
- Drive — the preview's next/previous arrows work again for files opened from the Shared and file-type views
- Slides — on medium-width screens the editing controls (undo/redo and add slide/text/image) stay reachable through an Edit menu instead of disappearing
- Sheets — imported dates render through their number format, an unknown filter condition matches every row instead of hiding them all, and cell focus returns when a context menu closes
- Accessibility — icon-only buttons now have accessible names and keyboard paths, and tall popovers and menus clamp to the viewport and scroll instead of clipping
- Reliability — uploads to S3-compatible storage are now write-behind, so a slow or failing storage backend becomes background retry instead of a hung or failed request, with no loss of durability; crash-recovered databases are re-synced and a stored document is never overwritten with an empty or invalid working copy (continuing the storage-incident hardening from 0.0.5)
Security
- Drive — a team's mount list is no longer readable by non-members
- Drive — files served inline carry
nosniffand a sandbox CSP, closing a stored-XSS vector for uploaded HTML and SVG - Auth — guest one-time codes are consumed atomically so one code cannot create two sessions; sign-in and 2FA are rate-limited to 10 per minute per IP
- Abuse — rate limiting is keyed on the real client IP behind the reverse proxy (with avatar fetches exempt), fixing a server-wide lockout
- Calendar — cancelled events are excluded from free/busy, and replayed iMIP invitations (a stale sequence number) are ignored
- Sheets — hyperlink navigation is hardened with an allowed-scheme list,
noopener, and ReDoS-safe parsing
[0.0.5] - 2026-06-04
Version history release. Automatic, restorable version snapshots for every collaborative app and chat, new slide-editing tools (rotate, Alt-drag duplicate, align & distribute), a spreadsheet visual refresh, and storage, preview, and kanban-board performance work.
Added
- Version history — Docs, Sheets, Slides, Stickies, and Chat now keep automatic version snapshots. A "Version history" entry in the File menu lets you browse earlier versions and restore any of them. For collaborative documents the restore applies live — everyone with the document open converges to the restored content immediately, with no reload. Retention follows an hourly/daily/weekly/monthly model, keeping fine-grained recent history while thinning older snapshots
- Slides — rotate objects with a dedicated rotate handle (hold Shift to snap to common angles, with a live angle readout); resizing is now rotation-aware
- Slides — hold Alt and drag an object to drop a duplicate
- Slides — a new Arrange section in the properties sidebar aligns and distributes the selected objects
- Admin — when a configured S3 bucket has object versioning disabled or suspended, the storage settings (setup wizard, server settings, and per-team mount create/edit) show a warning recommending you enable versioning and a noncurrent-version lifecycle policy
Changed
- Drive — folders and document containers now report their real size instead of always showing 0; sizes are computed on demand, cached, and invalidated up the tree on writes
- Sheets — visual refresh of the formula bar, column/row headers, the area around the grid, and the bottom bar: theme colors throughout, an accent-tinted header highlight, and a single compact bar combining the sheet tabs with the Count/Sum/Average selection stats. The all-sheets switcher now shows a clear colour dot for colour-tagged sheets
- Slides, Stickies, Sheets — canvas and toolbar styling aligned with Docs (rounded canvas corners, consistent toolbar height)
- Stickies — large boards stay smooth: cards are memoized and reused across updates, so editing one card no longer re-renders the whole board
- Previews — document, sheet, and slide previews appear instantly from the last cached version and refresh in the background, instead of blocking on regeneration the first time you view them after an edit
- Storage — collaborative-document snapshots and updates are zstd-compressed on disk, reducing the on-disk growth of Yjs documents
Fixed
- Sheets — a formula referencing a cell in another sheet now refreshes correctly even when that row has not been loaded into the grid yet
- Calendar — attendee email addresses are validated when added to an event
- Reliability — hardened collab- and chat-document storage (atomic backing-file creation; sync failures are no longer silent) to reduce the risk of data loss, following a storage incident investigation
[0.0.4] - 2026-05-28
Search release. A Mod+K command palette with full-text search across Drive and mail, native spreadsheet scrolling, a big spreadsheet-open speedup, compact file previews, and rich-text sticky cards.
Added
- Command palette — press
Mod+K(or the topbar search pill) anywhere to search files, mail, and contacts, jump between apps, create documents, and act on the current selection (open, share, rename, download, mail to…); smart suggestions turn a typed email/URL or a matched contact name into a one-press "Send mail to…" action - Search — full-text search across Drive files and mail, scoped per kind (
file:,mail:, or the Tab scope chip); mail search filters by mailbox and byfrom:/to:, excluding trash and spam by default - Stickies — card descriptions are now rich text with checkable task lists; toggling a checkbox on a board card or in the card dialog persists, and cards show a task-progress strip
- Support — new searchable Eigen Support help center on the marketing site, including a WebDAV drive-mount guide
- Drive — "Mail to…" in the item context menu opens a mail composer with the file attached
Changed
- Sheets — spreadsheet scrolling is now native: wheel, trackpad, keyboard, touch, and the browser scrollbar all work directly, replacing the old wheel-hijack and thin custom scrollbars; overscroll bounce is suppressed so the grid no longer tears at the edges
- Sheets — opening a large imported spreadsheet is dramatically faster (a 16-sheet xlsx that took ~60s now paints in a couple of seconds); the collab snapshot is also compressed on the wire, so opening big sheets over a remote connection is much quicker
- Previews — in-app quick-look previews are capped for large files (sheets show the first sheet, slides the first 8, documents the first 20 blocks) with an "open to see everything" marker; downloads and exports stay complete. Text previews cache longer and stale preview files are pruned
Fixed
- Sheets (XLSX import) — files with rich-text hyperlink cells (e.g. Google Sheets exports) no longer fail to import with a spurious "not a valid xlsx file" error
- Sheets — a bare reference to an empty cell (e.g.
='Sheet'!B13) now evaluates to0instead oftrue - Calendar & UI — month and weekday names render in English instead of leaking the browser's locale (e.g. Dutch) in the otherwise English-only UI
- Space — the 2FA setup QR code renders again instead of crashing the setup step
- Setup — the first-run wizard is re-runnable after a partial failure instead of getting stuck on "user already exists"
- Admin — team and member action errors show the real message instead of
[object Object] - Sidebar — long chat and folder names truncate with an ellipsis instead of forcing a horizontal scrollbar
[0.0.3] - 2026-05-18
Quality release. Video thumbnails, optimistic image insert across collab apps, unified comments model, redesigned drive properties panel, shared sidebar across drive + eigendoc apps, and a deep refactor of the sheets engine.
Added
- Drive — server-side video thumbnail generation: uploaded
video/*files get a 512px WebP still (1s fast-seek, fallback 0s) anddurationonpath.details. ffmpeg ships in the docker image; absence is graceful (no thumbnail, no errors) - Docs, Slides, Sheets — optimistic image placeholders: dropped/pasted images render instantly from a local blob URL and swap to the server URL once upload settles; zombie pending cleanup on tab crash
- Slides — direction-based marquee selection (contain when dragged right, intersect when dragged left), matching standard design-tool behaviour
- Slides — hold Alt to scale objects from center; Shift to constrain aspect ratio during resize
- Slides — unified
BackgroundFilltype covers solid colors and gradients for slide and text-block backgrounds; sharedBackgroundFillBlockproperties panel with brand-color default, color carry-over between fill modes, and tabbed segmented control - Slides — gradient backgrounds in server-side PDF export (oklab interpolation; plain-color fallback under WeasyPrint)
- Comments — unified model across Docs, Slides, Sheets, Stickies via a shared
CommentCardY.Doc card (createdBy,createdAt,color); drive-attachment flow on the paperclip button - Drive — redesigned properties panel: tabbed segmented control, unified item context menu
across list and preview rows, shared
DriveItemMenuItems - Drive + EigenDoc apps — unified
AppSidebarwith per-app accent colors, uppercase section labels, and cross-app navigation - Toolbars — shared
DocumentShareClustersharing badge and sharedUndoRedoButtons/useYjsUndoStateused in Slides and Stickies - Stickies — newly added cards scroll into view; board cards have a minimum height matching the production look
- Admin — alphabetical letter dividers in members, guests, and orphans lists via shared
AlphabeticalList
Changed
- Sheets — engine renamed from
fortune-sheettosheet; internal field names migrated fromluckysheet_*snake_case to camelCase (ctx.sheets,filterRange,setEditingCell, etc.); jQuery snippets and upstream port stubs removed - Sheets — comments sidebar is now a flex sibling of the canvas, not a z-index overlay
- Drive — frontend URLs are runtime-resolved via a split
EIGEN_STATIC_BINDvariable, fixing deployments where the API and static frontend share an origin - Drive previews — document and slide thumbnails scale by intrinsic width; plaintext/code thumbnails render on the A4 page layout
- Mail — settings split into a dedicated section in the App settings sidebar
- Performance — images decode off the main thread for smoother rendering across apps
- Slides — drag-snapping skips
setStatewhen the snapped rect is unchanged
Fixed
- Drive — pending blob URLs no longer swap out before the server URL preloads, eliminating a flash of broken image
- Drive — missing collab documents throw
ApiError(404)instead of returning silently - Drive — internal metadata fields no longer leak into the details display
- Mail — email-address validation rejects malformed addresses inside angle brackets
(e.g.
<foo@>) - Comments —
CardDialogno longer auto-opens after comment creation in Docs, Slides, and Sheets - Comments — restored
h-[50vh]onCommentThread; "View comment" actions consistently use theMessageSquareicon; URL re-navigation and pre-sync card visibility fixed in Docs - Comments —
CHAT_COMMENT_INDEX_UPDATEDbroadcast when a comment row is seeded, so other clients see new comments without reload - Slides —
isSameFilltreatsnullandundefinedas equivalent, preventing spurious dirty-state on background fills - Slides — "Apply to" select and "Apply" button align in height in the background properties panel
- Admin — Shift+Arrow extends selection in the members list
- Chat — edit and delete throw
ApiErroron failure instead of returning a success flag - Home — two-phase destruct avoids a double-close race on sheet teardown
[0.0.2] - 2026-05-11
Maintenance release. Email-notification flows, guest-access controls, XLSX import, security hardening, and a major spreadsheet quality pass.
Added
- Sheets — XLSX import: open an
.xlsxfile in Drive to convert it into an Eigen sheet, preserving cell values, number formats, formulas, merged cells, borders, fonts, and column/ row sizes - Mail — autolink bare
http(s)://URLs in received message bodies - Admin → Email notifications — four toggles controlling outbound mail: calendar invitations to attendees, file ACL additions, file access requests, and shared-file collaborators
- Admin → Guest access — open-signup toggle and inactivity-days threshold (defaults: open-signup on, cleanup after 7 days of inactivity)
- Drive — email shared-file collaborators via a composer pre-populated with the user's email signature (uses the same LightEditor that powers chat)
- Drive — outbound notifications on access requests, ACL additions, and shares (gated by the new admin toggles)
- Calendar — email Eigen-user attendees on invite, gated by the calendar-invite toggle
- User — owner-info popover on user and team avatars
Changed
- Spreadsheet edits made before auto-flush survive page reload. The backend replays pending ops on read (and on XLSX export), so a freshly typed cell value is preserved if you reload before the next auto-flush
- Calendar wire format — server timestamps travel as native
Dateend-to-end via Eden Treaty's reviver (previously Unix-second integers) - Mail — share, access-request, attachment, and collaborator emails share a single HTML shell with unified chip styling across mail, chat, and drive
- Mail — duplicate new-mail notifications are deduped via a stable tag
- UI popovers — edge-collision padding and dynamic max-height so they no longer clip at the viewport edge
Fixed
- Spreadsheet paste — slash-direction border paste across multi-tile copies no longer crashes
- Spreadsheet row/col ops — read-only ranges and malformed ops surface clear errors instead of corrupting sheet state
- Dialogs — pointer events that start inside a dialog and end outside no longer dismiss it (e.g. selecting text that overshoots the edge)
- LightEditor — trims trailing empty paragraphs before save (chat, mail, drive composers)
- Welcome/invite email headers — encode UTF-8 correctly (RFC 2047)
- Shared-document emails — plain-text fallback now includes the document URL
- Postfix — DKIM signs mail relayed from the docker bridge network interface
- Postfix — per-recipient delivery limit set to 1 for the Eigen pipe
- Guest cleanup — skips when initial setup is incomplete; reconciles on every login to repair session/user drift; OTP request race fixed
- About dialog —
builtAtrenders in a localized format
Security
- Mail templates — user-provided tokens in welcome/invite emails are HTML-escaped
- Guest OTP requests — rate-limited (3 per email per hour, 10 per IP per hour) via an in-memory limiter
- Mail body links — open in a new tab with
rel="noopener noreferrer"
[0.0.1] - 2026-05-03
First public release. Self-hostable workspace with email, file storage, documents, spreadsheets, presentations, kanban boards, calendar, contacts, and real-time chat — all sharing one API, one auth system, and one UI.
Apps
- Mail — webmail with full mailbox management; Maildir++ on disk, IMAP via Dovecot
- Drive — files with folders, sharing, ACL, thumbnails, previews; local, flat-key, and S3 backends
- Docs — collaborative document editor (Tiptap + Yjs); export to DOCX, PDF, and HTML
- Sheets — collaborative spreadsheets with op-level Yjs sync (forked fortune-sheet engine)
- Slides — collaborative presentations on a 1920×1080 pixel canvas with presentation mode
- Stickies — collaborative kanban boards with per-card embedded chat threads
- Calendar — recurring events (RFC 5545 RRULE), invitations with RSVP, shared and team calendars
- Contacts — contact management with avatars
- Chat — real-time chat with 80+ slash commands; rooms live inside Drive (inheriting ACL) and embed inside docs and kanban cards as comment threads
- Space — personal account settings, profile, and preferences
- Admin — organization, team, member, role, quota, and server-wide settings administration; first-run setup wizard
Protocols
- IMAP via Dovecot (Maildir++ co-existing with the web UI on the same filesystem)
- CalDAV server with discovery, sync-collection, RRULE — tested with Thunderbird
- WebDAV server (RFC 4918 Class 1+2) for Drive mounts
- SMTP submission on ports 587/465 with DKIM signing; Postfix handles inbound and outbound
Auth
- Email/password with optional TOTP 2FA
- App passwords for protocol access (IMAP/CalDAV/WebDAV)
- Organizations with teams and role-based admin
- Guest access for shared resources
Deployment
- Docker Compose stack with optional
edge(Caddy) andmail(Postfix/Dovecot/Unbound) profiles — opt out of either when the host already runs its own webserver or mail server bun run setup— interactive 4-question setup writing.env.production- Automatic HTTPS via Caddy, automatic DKIM key generation
- Backup script and auto-migrating update script
- Mail-domain split: address suffix (
MAIL_DOMAIN) decoupled from web hostname (DOMAIN)