Repository navigation
Releases: ok/mirall
Release list
v1.12.0
Back up Mirall and restore your whole account on a new computer, see who
already has the files you share, and see what takes up Mirall's storage.
Plus a large set of security fixes that keep people outside a space away
from your data, your computer and your downloads.
Added
- Back up Mirall. Settings → Backup keeps an encrypted backup on another
drive, a network folder or a folder that syncs to the cloud, locked with a
passphrase only you know. It runs on its own. - Restore from a backup on a new computer. Choose "Restore from a
backup" on the welcome screen. Mirall opens right away and holds changes
until someone you share with confirms nothing newer exists. - See who has the files you share. Each shared file shows how many
members have it, and who has it, has an older version or doesn't yet. - Choose which desktop notifications you get. New alerts for join
requests, newly shared files and a member receiving your file, with a burst
from one person combined into one. - About Mirall has its own page under Profile, with the update status,
a check for updates, and links to the privacy policy, legal notice and
license. - See what takes up Mirall's storage. Settings → Storage breaks it down
by space, file index, Activity Log, downloads, the installed version and app
updates, and "Free up" clears what can go. - The Activity Log shows your relay at work: when a relayed member is
connected directly again, and every change to your relay settings.
Changed
- Windows 10 version 1903 or later is now required. On 1809, Windows
kept Mirall's data in a private copy Mirall couldn't read. - Long file and folder names keep their ending. A name too long for
its row is shortened in the middle, so the part that tells similar files
apart stays visible instead of being cut just before the extension.
Fixed
- A mirrored folder no longer deletes files it didn't put there. When
the owner deleted a file, your mirror removed whatever sat at that path,
even your own file. A mirror folder you delete now stays deleted. - Mirall no longer stops when your computer's secure storage can't open
your identity. You can restore from your backup, try again, or start
fresh; the old data is set aside, not deleted. - Mirall no longer mistakes ordinary folders for cloud-synced ones. A
folder whose path merely contained a word like "sandbox", "Inbox" or
"Megan" was taken for a Box or Mega folder and couldn't be shared or
mirrored. - The window no longer goes blank on a list that only just needs
scrolling. - A download that can't be written now says why instead of retrying as
if the sender were offline. - A finished download no longer starts over when the disk briefly
returns too little data while Mirall checks the file. - Sharing several files at once now lists all of them right away, for
you and for everyone in the space. Files waiting their turn show as "Queued"
and are no longer lost if you quit before they start. - App Storage no longer grows every time Mirall starts. An unused
internal log is removed once when you update. - Old app updates no longer pile up. Mirall keeps only the current one.
- Leftover records are cleared when you leave a space or a share you
mirror is deleted, and downloads that failed for good over 30 days ago are
forgotten. - No more "request denied" notice for a space you didn't ask to join.
Security
- You can no longer mirror into a folder that starts programs or holds
keys, such as a startup folder or~/.ssh, where the owner's files could
run when you log in or replace your keys. - A download no longer writes through a link or over a file that
appears where it is being saved. - People outside a space can no longer read your profile or file
lists. Mirall sends them only to admitted members. - On Windows, your Mirall data folder is readable only by you.
- People outside a space can no longer fill your disk, restart your
downloads or get around your download speed limit. - A planted join request can no longer freeze a space's member list.
- A member can no longer exhaust Mirall's memory while you download
from them. - A malformed message can no longer cut a device off.
Full Changelog: v1.11.2...v1.12.0
v1.11.2
A bug-fix release. Closes security gaps and finishes two one-time cleanups
that stalled or never ran on older profiles.
Fixed
- The shared-folder index is now encrypted at rest on every profile. On
profiles whose index had been compacted, the one-time move to the encrypted
index failed on every start and left the previous, unencrypted copy in place. - Mirall frees storage left behind by older versions. Profiles that
mirrored a folder before 1.10 could hold hundreds of megabytes of identical
copies of the same folder record. The extra copies are removed once, the
next time Mirall starts. Your folders and settings are unaffected.
Security
- Only verified members can affect a space's members and downloads.
Someone outside a space who knew its network address could stall your
downloads or send messages that changed who appeared to be a member.
Mirall now takes these only from members it has verified. - You can see whether the person who invited you has been verified.
While your invite is pending, they are marked "Unverified" until Mirall
confirms they belong to the space. - The installed app can no longer be started in a debugging mode or
with modified files.
Full Changelog: v1.11.1...v1.11.2
v1.11.1
A bug-fix release. Relay changes now take effect straight away, mirrored folders
keep your edits and pauses in view, and downloads recover on their own after a full disk,
a missing drive or a read-only folder. When something does go wrong,
Mirall now tells you instead of failing quietly.
Fixed
- Turning off "Prefer the relay for every connection" now takes effect
straight away. Connections already going through the relay stayed on it
until you restarted Mirall. They now switch to a direct connection where one
works, after any transfer in progress finishes. - Replacing your relay moves existing connections to the new one.
Connections made through the old relay kept using it, with no notice. - With your relay turned off, another member's relay is no longer shown as
yours. Network Status and the Activity Log called it "your relay", and
every change to your relay settings reconnected it, only for it to come
straight back. Relay settings now name the members whose own relay still
connects you, since turning yours off does not end theirs. - Notices that wait for you no longer disappear when others arrive. A
notice that stays until you act on it — someone asking to join your space,
a declined request, being offline, or a missing download folder — could be
pushed off the screen by a few newer notices in a row. It now stays until
you close it or it no longer applies. - Downloads into a folder Mirall can't write to no longer retry
endlessly. A download into a read-only folder or drive used to fail again
every time the sharer reconnected. It now shows "Permission denied" until
you fix the folder; then it resumes on its own, or you can press Retry. - A download stopped by a full disk or a missing drive picks up again by
itself. Freeing space, reconnecting the drive or choosing another download
folder for the space did nothing until you pressed Retry. The download now
resumes on its own while the sharer is online. A download that stopped on a
full disk before this update still needs one Retry. - A partly downloaded file keeps its Discard button when the sharer goes
offline. If the sharer edited the file and went offline before Mirall had
re-checked it, the row read "Not available" with no actions, and the partial
download stayed on disk. It now reads "Owner offline" with Discard Partial,
like files in a folder. - Files two people share under the same name no longer borrow each
other's status. Your paused download of one person's copy also showed on
the other person's copy, with its own Resume and Discard. - One damaged folder share no longer stops your other shares from being
served after a restart. Everyone could still see the files, but their
downloads stalled. - A file you edit inside a mirrored folder is marked "Edited locally".
An edit that didn't change the file's size still showed as synced, with a
"content hash matches" badge that nothing had actually checked. Edited
files now say so, and explain that the shared version will be restored and
your edit kept as a conflicted copy. - An edit inside a mirrored folder is undone promptly. Mirall promises
to restore the owner's version, but it could take up to five minutes. It
now notices within seconds. A file you delete from a mirror comes back the
same way. - A mirror you pause stays paused. Pausing one while it was still
scanning could leave it running but showing "Active", and it could start
itself again later. Moving a mirror's folder while it was working could
also leave stray duplicate copies behind. - A file deleted from a mirror while the owner was offline is restored
when they come back, instead of staying missing. - A file you are still indexing no longer hides the people waiting for
it. Mirall lists a large file or folder before it has finished indexing
it, and anyone who clicks it waits — but nothing on your side showed that,
in exactly the window where quitting strands them. The row now shows their
avatars and "N waiting" while it indexes. - A burst of download problems is now one notification, not one per
file. A folder downloading into a full disk, a read-only folder or a
missing download folder raised a separate system notification for every
file in it, and completed or paused folder downloads did the same. Mirall
now sends a single notification that counts the files. - Denying someone who has already been approved says what happened. The
button silently cleared the request, leaving you to believe you had removed
someone who still had access. It now tells you they have already been
approved. - Joining a space no longer stalls on members who are offline. Each
unreachable member was checked in turn, adding several seconds each, so a
space with a few offline members could leave you waiting. They are now
checked at once. - The Activity Log stops losing entries. Someone joining, "downloaded
from you", a withdrawn approval and a join request could all go missing if
Mirall couldn't write the entry on the first try. Entries are now retried,
and entries still being written when you quit are finished first. - Starting to use a relay from an invite no longer reloads the window.
Pressing Reconnect now after adding or replacing a relay with an invite
reloaded the whole of Mirall's window. It now reconnects while you stay
where you are. - Failed actions now say so. If saving your profile, deleting the
Activity Log or turning on detailed logging didn't work, Mirall could stay
stuck on "Saving…", close the dialog as if it had worked, or say logging was
on when it wasn't. Copy buttons could also say "Copied!" when nothing was
copied, and picking a picture Mirall couldn't read as your avatar did
nothing. Mirall now tells you what went wrong and lets you try again. - Settings no longer show a change that wasn't saved. The theme,
language, zoom, tray, login, notification and Activity Log switches were
set without checking the result, so a refused save left the switch showing
the new value. They now revert and tell you. - Deleting a folder share that fails keeps the dialog open instead of
closing as though the folder were gone. - Reconnecting too soon says so. Pressing Reconnect within the
cool-down quietly did nothing, and made a pending relay change look
applied. It now explains, and keeps the change pending. - A transfer limit that can't take effect until restart says so,
instead of showing the new limit while Mirall kept using the old one.
Full Changelog: v1.11.0...v1.11.1
v1.11.0
A space that never syncs can now be carried by a relay and mirrors tell you
honestly when the owner is gone. Plus a large batch of fixes to overall reliability,
sync safety, dialogs and the log.
Highlights
- Connect through a relay when the network blocks a direct link. Some
networks — office Wi-Fi, a hotel, a mobile carrier — keep two devices
from reaching each other, and a space simply never syncs. Settings now
takes one relay, added with a key or with an invite from whoever runs
it, and tested the moment you add it. Your files stay encrypted end to
end; the relay only forwards them. Anyone you share with who has no
relay of their own uses yours. - See who you are reaching through a relay. Network Status gains a
Relay row and a section grouped by relay: the masked key, whether it is
yours or the one that person brought, and the people being carried
through it. The Activity Log records each of those connections as its
own entry. - A warning before mirroring a folder that will list short. The
mirror preview now shows the file count and warns when the owner's
folder exceeds the share limit, while still letting you confirm. - A distinct "owner offline" status for mirrors. A mirror that cannot
reach the owner's listing now shows an "owner offline" pill and a
"waiting for owner" label instead of pretending to be synced or
syncing. - Diagnostics and Advanced details are screens of their own. Network
status ended in a disclosure that appended six sections and 23 rows
below the fold; both now sit in a Troubleshooting group and open
properly. - Network status and network settings link to each other, the way the
Activity Log and its settings already did, so changing a limit or a
relay no longer means backing out through two screens to see what it
did.
Also fixed
- A local edit is never overwritten because of an unrelated manual
download. A manual download of the same file could vouch for the
mirrored copy, so an edit matching it was replaced with no conflicted
copy. - A restored or same-size replaced file is re-verified. Mirror
verification trusted file age, so any restore that preserved
timestamps passed as verified forever. Files are now fingerprinted. - A pre-mount preview no longer claims a clean destination for a file
it is about to download beside your own. - Names with non-Latin characters are no longer dropped. Files and
folders containing ł, Cyrillic, CJK or emoji could vanish from
listings and scans. - Files being prepared at the same time show as separate rows instead
of collapsing into one row that claimed the others as co-sharers. - Mirrors stop spinning against an offline or failing owner. No more
endless "Preparing…" badges; a full volume or a deleted mount root is
caught before fetching; a file whose holders keep failing its hash
gets a bounded retry budget; an offline mirror still adopts what is
already on disk instead of reporting "syncing" for the whole outage. - A folder whose source disappears and returns clears "source missing"
again. It could stay latched until you pressed Resume. - Joining with a large avatar no longer stalls silently. Avatars over
the frame budget are clamped before they ride in the join request. - A denied joiner who knocks again is denied again. The deny could be
lost in a race and the owner's banner kept resurfacing. - Leaving a space forgets the peer's signer key. A stale key could
seal membership grants the joiner could not open. - A readmitted member is announced under their real name instead of
"Unknown". - Failed remove and leave dialogs recover. A rejected removal left
the dialog stuck, and a failed leave navigated you away from a space
you were still in. - A failed space creation is reported instead of silently resetting
the dialog. - Every modal shares one Enter/Escape contract. Enter no longer
double-submits or silently cancels, and destructive confirms rest on
Cancel. - Field errors are tied to their fields in Edit Space, Edit Folder
and the path picker, so screen readers can find the explanation. - Retried errors collapse into one banner instead of stacking
identical toasts. - Zoom from the View menu is remembered, and the Appearance zoom
tiles mark the nearest preset instead of none.
Full Changelog: v1.10.1...v1.11.0
v1.10.1
Mostly about not losing your files: three ways Mirall could delete or
overwrite something you had are closed. Errors now explain themselves
properly, and a folder that gets stuck picks itself back up.
Fixed
- Your edits inside a mirrored folder are kept. Changing a file in a
folder you mirror used to overwrite your version without warning.
Mirall now saves it beside the owner's as a "conflicted copy". - A folder that seems to have lost its files no longer deletes yours.
An incomplete file list from the owner could remove hundreds of files
from your disk. A single pass may now never delete more than half of
what you hold. - A file shared from a network drive notices your edits again. Files
on a mounted network volume went on serving their old contents to
everyone, with no error and no sign anything was wrong. - Error messages say what went wrong, in your language. Different
problems shared one misleading message, and some appeared in English
whichever language you use. Every error now has its own wording in all
five. - Two actions that failed silently. Creating an invite could leave
the button stuck on "Creating…" or hand you no link and no reason, and
revealing a shared folder that has moved blamed a missing file
instead. - The Activity Log covers shared folders, and gets its details right.
Downloads from a shared folder were missing from it entirely, the
"granted access" entry named nobody, and its file sizes read too low. - Mirall tells you when it can't read a folder on your disk. A
permission problem, a full disk or a folder that has moved now shows
on the folder itself — for its owner and for everyone mirroring it —
and clears as soon as you fix the cause. - A folder download that stalls now says so. The progress bar simply
stopped moving before, with no notification; only files shared on
their own ever raised one. - A space that freezes picks itself back up. With members Mirall
couldn't reach, the member list, join requests and folder list could
all stop updating. It now notices and restarts just the part that
stopped. - Quitting mid-task no longer leaves a folder broken. Closing Mirall
while a shared folder was being created left one others could see but
you couldn't remove; closing it while moving a mirrored folder made
every member download the whole thing again. - No screen invents a number it failed to read. A failed read showed
"0 files", or the default speed limit, instead of saying it couldn't
load — and a speed limit that didn't save was never put back. - Three mirroring annoyances. A file saved under a second name was
listed as missing, a change arriving during a folder's first scan was
ignored until the next check, and downloading a file already on its
way did nothing at all. - Lighter while running, cleaner on quit. Mirrored folders no longer
start an unlimited number of downloads at once, spaces stop rebuilding
their member list on unrelated traffic, and background work now stops
when you do. - Easier to read, and to hear. The path under a folder was too faint
to read in both themes, Storage settings showed "Calculating storage…"
where a path belongs, and a file's status is now announced together
with its name.
Security
- Mirall's internal parts check what they send each other. Messages
between the window, the background process and the app's core could be
corrupted without anything noticing, unknown commands were ignored
rather than refused, and an unused internal route could set a watcher
on any folder on your disk.
Full Changelog: v1.10.0...v1.10.1
v.1.10.0
This release rebuilds the folder screen — one screen now, for the folders you share and the
ones you mirror — and brings reliability and performance fixes across sharing, syncing and
transfers. Spaces made before v1.7.0 are no longer supported.
Highlights
- One folder screen, whether you share the folder or mirror it — the two used to show
different things in different places. They are now the same screen, with the same tiles,
the same file list, and the same buttons where you left them; only what you are allowed
to do changes with your role. - See who has the folder, and how each of them is doing — a People tile names the owner and
everyone mirroring the folder, with a ring around each face for in sync, still syncing, or
paused, and the same thing spelled out in text beside it. Until now only a folder's owner
could see any of this; now everyone does. - The folder itself, at a glance — its size, how many files, how many of them are on your
device, and a badge for what it is doing right now: up to date, adding, syncing, paused,
missing, or browse-only. - One band tells you what the folder is doing — adding files, syncing, paused, owner
offline, source missing. It says which, counts down what is left, and carries the one
button that helps: Pause, Resume or Locate. - Filter a long folder — a box above the file list narrows it as you type, says how many of
the total matched, and clears in one click. It stays put while the folder works, so what
you typed is never pushed off the screen. - Rename a folder you share — Edit Folder, in the header menu, gives it a new name for
everyone who has it, while the folder on your own disk keeps the name you gave it there. - Keep a mirrored folder somewhere else on your disk — Edit Folder on a folder you mirror
moves it, onto another drive, say. Files already at the new location are recognised and
not downloaded a second time; only what is missing is fetched.
Changed
- Free up space is gone; Mirall keeps its own storage in order — the action had little left
to reclaim, and it could remove a file list it should have kept. What it did that still
mattered happens on its own now: a member who leaves takes their leftovers with them, and
Mirall tidies up as it starts. The Storage screen still shows what is using space. - Spaces made before v1.7.0 are no longer supported — every space Mirall creates or joins is
encrypted now, and a space older than that release cannot be upgraded to it. Such a space
is marked unsupported rather than left half-working: it stays visible, but you cannot share
into it or invite anyone to it.
Also fixed
- Some added files, renames and edits could go missing or double up — a file added during an
index, one the watcher missed, a rename that only changed case, and an edit that kept the
file's size and date were each dropped, duplicated, or held back until the next six-hourly
pass. - A file you add while a big folder is indexing no longer waits for it — each space hashes
its own queue, smallest files first, so a file you drop in starts at once even while an
index is running. - A space or file list that came up empty now loads — members you share many spaces with
could be cut off after a reconnect, and a few offline members could stop the file list
loading at all. Lists no longer flash "nothing shared yet" on the way in. - What a folder is still adding is reported properly, on both sides — your own view could
stay empty for minutes on a large file, and members saw only the two or three files being
hashed at that moment. A folder now names all the files and bytes it still has to read, on
both screens; indexing is no longer counted or labelled as a download, and the bar no
longer sits at full as though the file had finished. - An action cut short leaves less behind, and a stall gets noticed — a cancelled or finished
transfer could come back to life, a file could sit on "Adding" for good, unsharing could
leave the share offered, and the disk space a space you had left went on using was never
reclaimed. An error behind the scenes could leave Mirall quietly stuck with everything
still on screen, and a folder you mirror could stop syncing until the next restart. Both
are now spotted and picked back up on their own. - Mirall asks less of your computer during transfers and in big folders — sending a file and
keeping a mirrored folder in sync did work that grew with the folder, a reconnect started
every waiting download at once, a running transfer redrew the whole list every second, and
opening a large folder read the same records thousands of times. All are bounded now, and
your own downloads go first. - A session left running for days no longer gets heavier — what Mirall held on to for the
members it had met and the files it was serving kept growing, so a long session ended up
slower than a fresh start.
Full Changelog: v1.9.0...v1.10.0
v1.9.0
This release adds a network status that tells you when your own connection is the problem,
records connection trouble in the Activity Log, and puts every screen within reach of the
keyboard. It also brings Mirall's new brand: a refined logo and a redrawn app icon.
Highlights
- Mirall now tells you when your network is the problem — it used to call a connection
healthy on any network that let it out, so a machine nobody could reach still looked
fine. It now judges whether people can actually reach you, says so when they can't, and
offers a page with what to try. - The Activity Log records connection problems — a new Network filter keeps when this
device went offline, when Mirall couldn't reach anyone, and when members dropped out or
came back, so the log explains a quiet stretch instead of falling silent through it. - Every screen can be reached from the keyboard — Profile and the Activity Log have
shortcuts of their own, and Network status, the Settings pages, What's new and Send
feedback are in the command palette (⌘K / Ctrl-K). - The empty screens explain how Mirall works — the spaces list, an empty space, and the
wait for approval each carry a card that says what happens next and links to the
documentation.
Also fixed
- Downloads survive a peer's upload cap — a transfer from a limited peer could stop with
the file shown as paused, and Resume moved it only a little further. A capped peer now
says it is still there, and interrupted downloads retry on their own. - A download says when its folder is gone — a deleted, renamed, or ejected download folder
produced a generic "Transfer failed", and a deleted folder was quietly recreated
mid-download. Mirall now names the folder as the problem, offers to change it, and stops
retrying. - Clearing the Activity Log frees its disk space — clearing emptied the log from view but
left every entry on disk, so the store came out larger than before. It is now cleared
properly and the space comes back, with your retention setting kept. - Speed limits are shared out fairly — with a bandwidth cap set, a transfer that started
while nothing else was running could take more than its share and stall a transfer
running alongside it. Both now draw from the cap evenly.
Full Changelog: v1.8.0...v1.9.0
v1.8.0
This release adds an on-device Activity Log, bandwidth limits for transfers, and a
download folder per space, and tidies up how your profile and settings are arranged.
Highlights
- A record of what happened in your spaces — who joined, left, or was approved, and what
was shared and downloaded. Kept on your device only, and open from your Profile page,
where you can search it or narrow it by space, person, or date. - Limit how much bandwidth Mirall uses — cap download and upload speed on the new Network
page in Settings. Pick a preset, type your own figure, or leave it unlimited; a change
applies straight away, including to transfers already running. - Only file transfers are capped, so your spaces and members keep syncing normally even at
a low limit. - A download folder of its own for each space — set Download Folder in Edit Space. Spaces
you leave alone keep using the folder from Settings → Storage, and files you already
downloaded aren't moved. - A tidier way around your profile and settings — Account is now Profile, grouped into
"This device" for your connection, identity protection, and the Activity Log, and "App"
for your version, What's New, shortcuts, docs, and feedback. About moved here out of
Settings, which now holds your preferences only. - Full control over the Activity Log — Settings → Activity Log turns recording off, sets
how long events are kept, or clears the log outright.
Also fixed
A shared folder that briefly vanished and came back — an external drive reconnecting, a
network share remounting — no longer stays flagged as "source missing".
Full Changelog: v1.7.1...v1.8.0
v1.7.1
Fixed
- Resolves the issue where when the person who created a space left it, the space quietly froze for everyone else
- Resolves the issue where Invite links would quit the app on Windows and Linux instead of launching it and joining the space
Full Changelog: v1.7.0...v1.7.1
v1.7.0
This release adds approval-based space membership, is a major security hardening update, and changes how sharing works: your files are now served directly from the originals on your computer, with no second copy. Existing installs upgrade and migrate automatically — your identity and spaces are preserved.
Highlights
- Share straight from your files — no more private second copy; sharing no longer doubles disk usage, and in-place edits are picked up automatically.
- Approve who joins your spaces — joining is now a request an existing member approves (or flip on auto-approve for the old open behaviour).
- Full transfer control — pause, resume, and stop downloads; they resume on their own when the owner is back; each finished file gets a "verified" badge.
- Richer transfer insight — live speed, a steady time-remaining estimate, who's downloading from you, and the owner's live preparation progress.
- See who's mirroring a folder you shared, with live per-person state (synced / syncing / paused), accurate even while they're offline.
- Browse shared folders as a collapsible tree — per-folder file counts, sizes, and download progress, with Expand/Collapse all.
- Native Mac builds per processor — separate Intel and Apple Silicon downloads. Plus Quit Mirall (Ctrl+Q) in the File menu on Windows/Linux.
Security
- Local app data encrypted at rest, tied to your identity — copying Mirall's data folder no longer exposes your spaces, folders, or downloads.
- Identity key wrapped in your OS keychain, plaintext removed from storage.
- Space contents gated by a per-space key handed out only on approval — reaching a space is no longer the same as reading it.
- Hardened against abusive peers — connection rate limits, size caps, a peer firewall, and rejection of oversized avatars/names.
Also fixed
Path-traversal in shared paths, mirrors never overwriting your files, membership lists staying in sync, leaves surviving a mid-quit, catch-up on flaky connections without a restart, and more.▎
Full changelog: see CHANGELOG.md.