---
title: "Niv 0.3.54"
description: "What changed in Niv for Mac 0.3.54, released 2026-10-10."
canonical: https://niv.md/changelog/0-3-54
language: en
last_updated: 2026-10-10
---

# Niv 0.3.54

2026-10-10

- A note's History tab finds the same overlaps as Home
- The encrypted invitation links to the encryption page
- What is and isn't encrypted, on an unlisted page
- Concurrent offline edits in an encrypted note are recorded as an overlap
- A note in an encrypted Space gets no content row and no plaintext content.touch
- A member of an encrypted Space receives its notes and folders
- A Space waiting for a member is asked again, a member let in catches up, and plaintext_left counts only unsealed values
- Every Space an enabled account owns ends up encrypted
- An emailed community invitation binds to the verified address
- Every note procedure goes through the one access door
- Only the people who can let others in ask who is waiting
- The sealed-name client forwards calls synchronously
- The encryption surfaces get their polish
- End-to-end encryption is enabled per account, at runtime
- The interpreter probe waits for stderr long enough to name a missing interpreter
- An encrypted restore says its history follows on sync, and the History list meets contrast
- A device is named after its Mac until it is renamed
- A failed copy of a pasted sealed image is tried again
- A sealed image pasted from another Space is copied into this one
- The desktop says Ajustes everywhere
- Emails speak the recipient's language
- The encrypting stage starts and resumes migrations and names the note that stopped one
- A migration retires every public upload it replaced, in confirmed chunks
- Encrypted history: the diff checks generations from the base, and Home replays incrementally
- A second agent identifier for two-instance proofs
- An encrypted Space's owner can retire the rest of its replaced public uploads
- Encrypted invitations read as held on every desktop surface
- Encrypted notes have versions, diffs, overlaps and since-your-last-visit on the desktop
- The migration re-uploads a note's public images sealed
- Sealed uploads expire sooner, abandoned ones are swept daily, and a reaped upload cannot be committed
- Notifications, emails and invitation reads carry no names in encrypted Spaces
- One migration pull at a time; a note-named stop gives the Space back
- The desktop publishes encrypted Spaces as device-built pages
- The desktop uploads and downloads sealed attachments
- The exported appTrpc has an explicit type
- Name- and content-reading features refuse encrypted Spaces
- One serialized config write per vault
- Migration reads return the sealed-metadata snapshot and tag names
- Encrypted Spaces publish by device upload
- Engine mode read from status; the opened Space name is stored
- A let-in invitee sees the Space name without restarting
- Space names, history and Home open on the device
- The server keeps sealed attachments in a private bucket
- Devices show their names, with Rename
- A device label is sealed only under the current account key
- The pt-BR encrypted pass says cifradas
- Note metadata, settings and rules are sealed on the device
- Encrypted creates use device ids and sealed names
- The socket typechecks again and clippy is clean
- The desktop seals and opens attachments
- Links are repaired on the device in encrypted Spaces
- A stopped encrypted Sync now reads as failed
- Sync now works in encrypted Spaces
- Closed encrypted notes push their changes
- The server keeps a sealed name per device
- Sealed metadata moves the clock; rules take device ids
- The desktop seals names before they reach the server
- Closed encrypted notes catch up
- The sync engine's encrypted mode
- Encrypted Spaces take device-chosen ids
- The desktop names its devices, sealed under the account key
- Encrypted Spaces store sealed objects, not rows
- An open encrypted note syncs through the relay
- Unlock says why, and the upgrade promises no time
- The desktop understands content.sealed.touch
- Overlaps and restore checks run in the editor package
- The 'Encrypting your Spaces' stage
- Names stay opaque to the server in encrypted Spaces
- The Space switcher never shows an empty emoji slot
- Version diffs and per-block authors run in the editor package
- Devices show when they were added and last seen
- The desktop understands keys.touch in the Space feed
- Key changes surface in the app
- Letting members in, one person at a time
- The desktop knows its own key fingerprint and device id
- An earlier account key signs only within the generations it was granted
- A refused recovery file is settled on disk
- The desktop half of the encrypted relay
- The server keeps Space key members, waiting lists and rotations
- The server keeps each encrypted note's log
- Removing a device calls the one server transaction
- The encryption screens present the wrap proof
- Removing a device is one server transaction
- The server verifies the wrap-auth proof
- A recovery file the server refused is deleted
- A pin remembers whether the person let that member in
- The desktop lets members in and rotates Space keys
- The desktop proves the current wrap, and removing a device rotates the account key
- The encryption screens run on the real key commands
- Removing a member closes their open sockets
- The desktop pins members' account keys
- Wrap-auth proof for rotations and wrap replacements
- Rust Space keys: seal and open encrypted updates
- Rust rotation statements and sealed device labels
- The key-change email speaks the app's words
- An encrypted note's relay client and member snapshots
- Removing a device changes the account key, and key changes say what they mean
- The desktop typechecks again with the server's key routes
- Server keys and wraps for end-to-end encryption
- The desktop key manager: keychain, unlock and signed wraps
- The encryption screens, built behind the switch
- The desktop's Rust crypto module
- One switch keeps end-to-end encryption off until it is ready
- Logged errors never carry their message to PostHog, nor query params anywhere

---

More: [Niv](https://niv.md/) · [About](https://niv.md/about) · [Contact](https://niv.md/contact) · [Privacy](https://niv.md/privacy) · [Encryption](https://niv.md/encryption) · [Terms](https://niv.md/terms) · [llms.txt](https://niv.md/llms.txt) · [Português (Brasil)](https://niv.md/pt-br/changelog/0-3-54)
