guides · how-to

Which versions work together

Hosts and clients on the same line connect and pair, whatever their exact numbers. What a line is, what a break looks like, and when you can leave a machine alone.

Every NearZero version has three numbers, such as 0.9.4. Its line is the leftmost number that is not zero: 0.9 today. After 1.0 the line is the first number on its own: 1, then 2.

The line is the only part you need to compare:

Hosts and clients on the same line connect and pair. Within a line, a feature one side lacks turns itself off.

So host 0.9.4 and client 0.9.1 work together. A host on 0.9 and a client on 0.10 do not: they refuse to connect or pair rather than misbehave halfway through a session.

Today:

Hosts and clientsRendezvous
0.90.9

The left column is a host and client line. The right column is the one rendezvous line it works with. If you don’t run your own rendezvous, only the left column matters to you.

Why the numbers differ between products

Each product has its own version and is released on its own: the Windows host, the macOS host, the Windows, macOS and iOS clients, and the rendezvous. A fix that lives entirely in the Windows client produces a new client and no new host, because rebuilding the host would produce the same program under a different number. So your machines drift apart in number over time, on purpose.

The download page shows each product at its own version for the same reason. They are not supposed to match. Within a line, the difference costs you nothing.

Within a line: features turn themselves off

When one side has a feature the other lacks, the newer side notices, turns that feature off, and tells you which one. “Host is too old for screen hiding” is the shape of it. Your session still runs. Update the older side when you want the feature back, not to keep working.

Between lines: a break

Some changes cannot be turned off one feature at a time, because they change what an unchanged message means. When the keyboard became positional, a keystroke that had always meant one letter started resolving through the host’s keyboard layout instead of the client’s. A mismatched pair would not fail there; it would type the wrong characters. Refusing to connect is the better outcome.

A change like that is a break. It moves every host and every client to the next line together, including a product whose code did not change, so that “same line connects” stays true. Machines on different lines refuse each other at connect; nothing misbehaves halfway through a session.

The release notes of the new line say so at the top, along with anything else you have to do. To recover, update whichever machine is on the older line. If a release’s notes do not open with a break, your existing pairings and peers keep working.

The rendezvous has its own line

If you self-host a rendezvous, it is the one component with no room for difference. Its wire is compared exactly at Hello, when a device first connects, and a mismatch closes the connection with a clear error rather than degrading.

That is why it has a line of its own, and why each host and client line works with exactly one rendezvous line, as the table above shows.

That is a deliberate trade: a rendezvous only ever talks to software you deployed yourself, so moving in lockstep costs little, and a silent mismatch would cost a great deal.

Checking what you have

Every product shows its version and the commit it was built from, such as 0.9.0 (3eb3a7f). A build that says modified in the brackets was made from a tree with uncommitted changes: a test build, not a release.

Compare the lines. The rest of the number names a build; when you report a problem, give all of it, commit included.