Lotus Release Notes v0.4.0

Open shared documents right inside Lotus, follow group polls at a glance, a Contacts list that says what it means, and far less waiting on your signing app.
Lotus Release Notes v0.4.0

Highlights

  • Open shared files without leaving Lotus. A document someone sends you in Chat, Groups or Mail is no longer download-only. Pick View and it opens full screen in the app: PDF, Word, spreadsheets, Markdown, text, CSV, JSON, images, video and audio. Private chat files are unlocked on your device, so the file never leaves it. Formats Lotus cannot show still download as before.

  • A PDF reader built into the app. PDFs scroll page by page, stay crisp on any screen, keep real text selection, and offer jump-to-page, zoom and keyboard paging with fit-to-width as the default. Password-protected and damaged documents get a clear screen instead of a broken frame.

  • Group polls you can actually follow. Polls now sit in the timeline at message scale, with reactions, pin and copy like any other message. A Polls button in the group header lists the ones still open with a live countdown and an X of Y voted line, and the poll itself shows who voted as clickable faces.

  • A Contacts list that says what it means. A Nostr address is no longer shown under an Email heading. Identity, email, Lightning address, website, phone and job now have their own columns that appear as the screen gets wider, addresses copy with one click, and phones get comfortable touch rows with the star and menu always visible.

  • Quick messages became a real conversation. The composer you open from a contact now shows your live conversation with that person above the message box. What you send lands as a bubble, replies arriving while it is open show up too, and a link takes you into the full Chat app.

  • Pinned messages announce themselves. When someone pins a message in a direct chat or a group, a short line appears in the conversation right away, linking to all pinned messages. Opening an old conversation does not replay past pins.

  • Much less waiting on your signing app. If you sign in with a separate signing app, Lotus was asking it to unlock the same message again on every relay delivery and every reconnect, thousands of times an hour. It now asks once per item and spreads the remaining work over a small queue, so approvals stop piling up and the app feels quicker.

  • A public home for Lotus. A new marketing page at /home walks through the product with real screenshots, in the same calm sky language as onboarding, and unfurls with its own preview card when shared.

UI/UX

  • Resizable sidebars. Grab the right edge of the Chat, Groups or Mail sidebar and drag it wider or thinner. Each app remembers its own width, and the rail now tracks your pointer instead of easing behind it.

  • Unlimited favorite channels. The three-favorite cap on group channels is gone.

  • Ask first, then act. Adding a group opens a chooser between joining and creating one. Adding a contact opens a chooser between a private Contact, kept encrypted with your account, and a public follow that every Nostr app can see.

  • Labels with colors. Labels can take one of eight curated colors, picked when you create them or from a hover popover later. Colored labels tint their tag icon in the sidebar and their chip in the table. The Labels section now starts collapsed with a count, and remembers your choice.

  • Lists that load as you scroll. Discover packs and the people list reveal a page at a time and fetch profile pictures as you scroll instead of all at once. Large screens also gain a list, two-wide or three-wide card view, remembered between visits.

  • Save anything shared with you. Images, videos and voice notes in Chat and Groups now carry a save button, including inside both image lightboxes.

  • A calmer composer. The quick composer grows with your message and its Send pill is now a round button tucked into the corner of the box.

  • Clearer “Other contacts”. The sidebar entry and the view itself now say plainly that this is your public Nostr follow list, separate from your private Contacts.

Bug Fixes

  • Fixed file uploads failing across Chat, Groups, Mail, notes and public images with a cannot reach error after one storage host started refusing encrypted files. Uploads now fall through to your other storage servers, and if every one refuses you get a real explanation pointing at Accounts > Storage.

  • Fixed pinning a message in a group being silently rejected by the group’s relay, so pins never stuck.

  • Fixed a Join group banner shown to people who were already members or admins, which came back on every reload. The banner also no longer flashes at real members while a group is still loading.

  • Fixed the poll counter in the group header counting closed polls, and gave long poll lists their own scroll instead of overflowing the screen.

  • Fixed share links on lotus.mybuho.de opening a blank page, and chat link previews returning nothing on that host.

  • Corrected the collapsed Contacts create button, which rendered as a stretched pill and drifted out of the icon column.

  • Fixed presence and favorite ordering being republished when nothing had actually changed, including on every tick of a drag.

Code Quality

  • Extracted one shared file renderer now used by Drive, Chat, Groups and Mail, so every app shows the same formats the same way from a single source.

  • Added shared building blocks for drag-to-resize panes and load-more-on-scroll, replacing separate copies in Mail, Groups and Contacts.

  • Moved file-format detection into one shared module used by both Drive thumbnails and the new viewer.

  • Added unit tests for pinned-message diffing, document freshness, the bounded work queue, group pin parsing, traffic counters and the preview app shell.

  • Made the news-feed test derive the newest release from the Release_Notes folder, so cutting a release no longer breaks it.

  • Kept local research notes and raw signer logs out of the repository.

Technical Updates

  • Self-hosted the link and share preview renderer as a small local service, dropping the Netlify dependency for lotus.mybuho.de. This also repairs the chat link unfurler on that deployment, and the deploy script now provisions the service and smoke-checks previews after every release.

  • Fixed proxied preview pages being built against a different bundle than the one the host serves, which made every script on those pages return a 404. The deploy smoke check now fails if that ever regresses.

  • Moved group pinning onto native NIP-29 pinning, using kinds 9010 and 39005, instead of a personal NIP-51 list the host relay rejects, so the relay itself now enforces admin-only pinning. Direct-message pinning is unchanged.

  • Remote signer requests now go to the relay that actually answers, plus one fallback, and fan out to the rest only if nothing comes back. An unresponsive default handshake relay was removed. Pasted bunker links are untouched.

  • Added a freshness gate in front of every encrypted document delivery and gift-wrapped message, plus a per-item retry budget, so stale, duplicate and already-decrypted deliveries never reach the signer.

  • Added relay.ditto.pub and relay.dreamith.to to the default and suggested relay lists.

  • Upgraded the spreadsheet parser to SheetJS 0.20.3, which closes known flaws in the frozen npm release, and added a document sanitizer that keeps tables, headings, code and embedded images while stripping remote ones, so a shared document cannot embed a tracking pixel.

  • Locked the HTML file preview behind a trust prompt, then rendered it with scripts disabled and all network access blocked, so a shared web page cannot phone home.

  • Taught the build to substitute the public origin inside static pages under public/, so the homepage’s preview tags carry absolute URLs, and added the rewrite that serves /home ahead of the app.

  • Added a traffic counter that reports signer work done and avoided, readable from the developer tools console with __lotusTraffic() even in production.

Contributors

Thanks to everyone who shipped this release:

Community


Write a comment