Skip to content

Releases: joyahmed/zetta-com

Zetta Com v1.4.0

Choose a tag to compare

@github-actions github-actions released this 10 Aug 21:54

A microphone the machine has and the app does not

1.3.0 taught the app to notice a capture stream that opens and is then never
called, and to rebuild when it happens. That fix could leave you worse off than
the fault it was for.

If the rebuild raced the device being released, no capture stream got built at
all — and nothing could recover from there. With no stream there is no callback
to watch, and the device check compares device names, which had not changed.
The app sat in listen-only until it was restarted, which is the same
"restart it and it works" shape as the original bug, only self-inflicted.

Now, when there is no capture stream but the machine does have a microphone, it
tries to open one every fifteen seconds. That happens on its own, without
touching playback — which matters, because on a machine whose microphone is
blocked in Windows privacy settings the retry will never succeed, and cutting
the audio every few seconds to keep trying would be worse than the problem.
Failing costs a line in the log and nothing else.

Two downloads fewer

Five files here instead of seven.

No more MSI. The firewall rule is added by an NSIS installer hook and the
MSI had no equivalent, so it produced an install that looked identical to the
working one and then left you with Windows' own firewall prompt — and
cancelling that writes a silent block rule that outranks everything after it.
That is the exact failure this application was written to remove, and shipping
a download that walked people into it was a mistake. Use
Zetta.Com_1.4.0_x64-setup.exe.

No more AppImage. It was 79 MB against the 4 MB of the .deb beside it,
because an AppImage has to carry WebKitGTK and GStreamer for a machine that has
neither, where the .deb and .rpm depend on what the distribution already
ships. Nothing could shrink that — carrying the engine is the format's whole
bargain. Debian, Ubuntu, Fedora and RHEL are covered by the packages; anything
else builds from source in two commands.

Updating

1.4.0, 1.3.x and 1.2.0 all work together. The wire format is unchanged, so
machines can be updated one at a time, in any order, with nothing going quiet in
between. Machines on 1.0.0 still cannot hear anybody and need updating.

If you are coming from 1.2.0 or earlier, the 1.3.0
notes
are the ones
that matter — voice no longer needs a logout after installing, there is a log at
%APPDATA%\com.joy.zetta-com\zetta-com.log, and the roster says which build
each machine is on.

macOS is still unsigned: move the app to Applications and run
xattr -cr "/Applications/Zetta Com.app", then enable
System Settings → Privacy & Security → Local Network.

Zetta Com v1.3.1

Choose a tag to compare

@github-actions github-actions released this 10 Aug 20:48

A cosmetic fix. If you are already on 1.3.0 there is nothing here worth
reinstalling for
— the application is byte-for-byte the same work, and only
the installer changed.

The installer carries the app icon

Every setup.exe up to now showed the stock NSIS icon, which is the first
impression the app makes — sitting in a Downloads folder before anyone has seen
the application at all.

Tauri only sets the installer and uninstaller icons when the configuration names
a file, and it named none, so the template left both empty and NSIS used its
default. They now point at the same icon the app itself uses, at six sizes from
16px to 256px, so it stays sharp wherever Explorer draws it.

The .msi is unchanged: Windows Installer packages always show the system
installer icon and there is no way to override it.

Everything from 1.3.0 is still here

If you are coming from 1.2.0 or earlier, the 1.3.0
notes
are the ones
to read — a microphone that opened dead is noticed and rebuilt instead of
staying silent until the machine is logged out of and back in, there is a log at
%APPDATA%\com.joy.zetta-com\zetta-com.log, and the roster says which build
each machine is on.

1.3.1, 1.3.0 and 1.2.0 all work together. The wire format is unchanged, so
machines can be updated one at a time in any order. Machines on 1.0.0 still
cannot hear anybody and need updating.

Zetta Com v1.3.0

Choose a tag to compare

@github-actions github-actions released this 10 Aug 19:49

A microphone that opened dead stayed dead

After installing, voice did not work until the machine was logged out of and
back in. That is fixed, and it is the reason to take this build.

A capture stream can open, report no error, and never be called once — which is
what starting before the audio endpoints are ready looks like from inside the
app. Nothing noticed it. The device name had not changed, so the device poll was
satisfied; playback had its own liveness check and was fine; and the only
capture counters advance solely while the talk key is held, so a dead microphone
and a quiet room were the same two zeros. The app went on believing it had a
microphone, everyone else heard silence when you pressed the key, and the state
lasted as long as the process — which is why logging out looked like the remedy.

Capture now has the pulse playback already had. Three seconds without a callback
rebuilds the pipeline: twice at that speed, then once a minute for as long as it
takes. It never gives up, because a rebuild costs about a second of playback and
neither extreme is acceptable — retrying every few seconds forever would trade
not being able to talk for not being able to listen.

There is a log now

Release builds run without a console, which on Windows means the process has no
standard error at all — so every diagnostic the app produced, naming exactly
which device failed and why, was written to a handle that went nowhere. That is
why the fault above took two attempts to find.

Everything now goes to:

%APPDATA%\com.joy.zetta-com\zetta-com.log

It sits beside your settings, never leaves the machine, and is dropped and
started again once it passes a megabyte. The once-a-second line leads with
mic — capture callbacks in the last second. That is the first number to read
when somebody cannot hear you.
Zero there, with a device named in the lines
above it, means the microphone stream is open and dead.

Which build everyone is on

Each machine puts its version on the wire, and the roster names anyone running
something different from you.

This is for keeping a rollout straight, not for finding faults, and it is worth
being exact about the difference: a machine too old to talk to you at all cannot
tell you its version either, because its packets are rejected before anything in
them is read. It also has nothing to say about a network of 1.2.0 machines,
which do not send a version. It starts being useful from this release onwards.

Nothing here asks the internet. The app makes no outside calls, in this version
or any other — it only knows what the machines on your own network have said.

Updating a network that is already running

1.3.0 and 1.2.0 work together. The wire format is unchanged and the version
packet is a kind older builds ignore, so machines can be updated one at a time,
in any order, with nothing going quiet in between.

The microphone fix is per machine. A PC still on 1.2.0 keeps the fault until you
get to it.

Machines on 1.0.0 still cannot hear anybody, as with 1.2.0: the wire format
changed at 1.1.0 and an older build rejects every packet from a newer one
without reporting it. Those need updating before they are part of the room
again.

Installing

WindowsZetta.Com_1.3.0_x64-setup.exe. It asks for administrator so it
can add the firewall rule for you.

macOS — Apple silicon, and unsigned, so Gatekeeper will call it damaged. It
is not. Move it to Applications and clear the quarantine flag:

xattr -cr "/Applications/Zetta Com.app"

Then turn on System Settings → Privacy & Security → Local Network. Clearing
quarantine can mean that prompt never appears, and without the permission the
app looks like it is running perfectly while hearing nobody at all.

Linux.deb, .rpm or the AppImage.

Zetta Com v1.2.0

Choose a tag to compare

@github-actions github-actions released this 09 Aug 18:34

v1.1.0 was never published, so this release carries its work too. If you are on v1.0.0, everything below is new to you.

⚠️ Everyone must update together

The wire format version moved to 2 in v1.1.0. A v1.2.0 build cannot hear a v1.0.0 build, and will not tell you why — it looks exactly like a quiet network. Update every machine before testing.

Start with Windows

The app can now add itself to your login, off by default, in Settings → Startup. It comes up in the tray without opening a window. An intercom that has to be launched is not listening when somebody calls, and the caller gets a silence that looks like being ignored.

It waits ten seconds before binding, and only on a login start. Not for the socket — that binds 0.0.0.0 and succeeds with no network at all, which is why starting too early fails silently. What is early is audio: the device is chosen once and never re-polled, so a headset that enumerates late is missed for the whole session. Set the wait to 0 on a wired PC with built-in audio.

One key to the tray and back

Ctrl+Alt+T now toggles instead of only revealing. Pressed from another application it raises the window even if it was already visible behind something, because the press means "bring it here"; pressed while you are looking at it, it goes away. A left click on the tray icon does the same round trip.

Rooms

A shared passphrase seals every packet with ChaCha20-Poly1305. Machines on different passphrases cannot hear each other. A short room code is shown alongside it so a mistyped passphrase looks like a mistyped passphrase, rather than like a dead network.

Audio and keys

Choose your microphone and speakers by name — the Windows default is regularly a webcam mic or something a meeting app left behind, and that failure is silent. 44.1 kHz devices work instead of being refused. Every shortcut is rebindable by pressing the keys you want. The roster order is yours to set, and it decides which PC each Ctrl+n reaches.

Fixes

Notifications fire when the window is in the tray, are captioned "Zetta Com" rather than "Windows PowerShell", and chime for a message you are not looking at. A 12-hour clock no longer wraps every message onto two lines. A long PC name has room in the title bar. The window has its own rounded corners and title bar.


Windows SmartScreen will warn on the installer and macOS will call the app damaged: neither build is code-signed yet. On macOS, xattr -cr "/Applications/Zetta Com.app" clears it.

Intel macOS is not built — GitHub has stopped scheduling the runner. Apple silicon only.

Zetta Com v1.0.0

Choose a tag to compare

@github-actions github-actions released this 09 Aug 15:44

The first release. A LAN intercom: hold a key and the people you choose hear you — one person or the whole room. No internet, no accounts, no server.

Windows — run the x64-setup.exe. It asks for administrator because it adds its own firewall rule, so there is no first-start prompt to get wrong.

macOS — Apple silicon only, and unsigned, so macOS will call it "damaged". It is not. Move it to /Applications, then xattr -cr "/Applications/Zetta Com.app". Then turn on System Settings → Privacy & Security → Local Network, because clearing quarantine can mean the prompt never appears — and without it the app runs, advertises, and hears nobody.

Linux.deb, .AppImage or .rpm.

Shortcuts: hold F8 to talk to whoever is selected, Ctrl+1…9 for a specific PC, Ctrl+0 for everyone. F9 starts and stops, F1 lists every key including any that failed to register.

There is no encryption. Anyone who can capture packets on the network can reconstruct a conversation. Run it on a LAN you control.