Skip to content

Platforms ​

Supported targets, delivery tiers and their consequences.

1. Support matrix ​

PlatformMinimumArchitecturesStatus
Linuxglibc 2.31, kernel 5.4x86_64, aarch64Supported
macOS13 Venturax86_64, aarch64Supported
Windows10 21H2x86_64, aarch64Supported
BSDFreeBSD 13, OpenBSD 7x86_64Later, CLI only, no support commitment
WSL 2Currentx86_64Best effort, unsupported
Android, iOSOut of scope

Reasoning, not preference:

  • Windows 10 21H2 is the floor for unpackaged toast notifications with an AppUserModelID
  • macOS 13 is the floor for the notification API generation the notifier bundle uses, and it is old enough that no supported Mac is excluded
  • glibc 2.31 covers Debian 11, Ubuntu 20.04 and RHEL 9, which is what a static-friendly CLI reasonably claims

2. Toolchain ​

ItemValue
MSRVRust 1.85, required by edition 2024
Pinned toolchain in CIThe stable channel at build time, plus one job on the MSRV
Edition2024

3. Filesystems ​

FilesystemIdentityAttributesNotes
ext4, xfs, btrfsdevice and inodeuser.*btrfs subvolumes report distinct device ids
APFS, HFS+device and inodecom.*
NTFS, ReFSvolume serial and file idstream, pending decision
exFAT, FAT32volume serial and file idnoneIdentity works on Windows; attributes are lost
Network sharesunreliableunreliableSee docs/reference/watch.md §9

Nothing in the product requires an attribute or a stream. Identity is the mechanism of record, and it works on every filesystem in the table that reports a stable identifier.

4. Path handling ​

ItemRule
LengthLong path awareness is enabled in the Windows manifest, and paths are passed with the \\?\ prefix where the API requires it
EncodingPaths are handled in the platform's native form; no lossy conversion outside diagnostics
Case sensitivityDetected by probing at startup, not assumed per platform. Extension comparison is case-insensitive regardless
Unicode normalisationNot performed. macOS reports NFD, and the product compares bytes rather than normalising
Reserved namesWindows device names are rejected as output names rather than producing an unusable file

5. Delivery tiers ​

Two delivery tiers are defined, and they differ in what they install. Pre-release installer routes sit outside them.

TierHowContainsSupported
Sourcecargo install --git, or a Homebrew source formulaThe CLI binary onlyAs a workaround, for people who build their own
InstalledPlatform installer, signedCLI, daemon, notifier bundle, URI scheme registration, service definition. No external tool binariesYes

cargo install is CLI only and a workaround. The binary can run the daemon in the foreground and retype watch registrations persist, but it cannot install a user service, register a URI scheme on macOS, or create a Start-menu shortcut on Windows. The documentation states this rather than implying feature parity.

Linux, macOS and Windows have pre-release installers.

Linux and macOS:

sh
curl -fsSL https://retype.name/install.sh | bash

Windows, in PowerShell:

powershell
irm https://retype.name/install.ps1 | iex

They download the release archive for the host architecture, check its SHA-256 against the release checksums, and install the CLI, daemon and shared release assets under ~/.local on Unix or %LOCALAPPDATA%\Programs\retype on Windows. The Windows installer adds its bin directory to the user PATH. Running either again updates the installation. They are not the installed tier: they do not register a URI scheme, install a user service or ship the notifier, and the archives are not code-signed. They exist so an alpha build can be installed without a Rust toolchain.

What the installed-tier installer does, per platform:

PlatformActions
LinuxBinary, notifier desktop entry, retype:// via xdg-mime, systemd user unit (not enabled)
macOSApp bundle containing the CLI and the notifier, LSBackgroundOnly agent, launchd user agent, scheme registered in the bundle
WindowsBinary, Start-menu shortcut carrying the AppUserModelID, registry entries for retype://, optional startup entry

None of these actions is performed implicitly by running the binary.

5.1 Tool acquisition ​

External tools are not part of the installer. Acquisition differs by interface: the CLI does not manage tools, while the GUI does.

A CLI user installs tools with the platform's package manager or by hand, then leaves them on PATH or pins an absolute path in configuration. A source build has no other route. The GUI manages a signed set for users who may not know what the tools are, may not know what a package manager is, or may not want to bother.

PlatformCLIGUI
LinuxDistribution packages, then PATHManaged set when the user asks for it
macOSHomebrew or the system, then PATHManaged set as a fallback when neither has the tool
WindowsA manual install, then PATHManaged set offered during setup or first use, with an explicit prompt

The managed set is a per-user directory described by a signed distribution list, docs/advanced/converters.md §2. The CLI and daemon resolve it before PATH when the GUI has installed it, but never install, update or verify it. An offline pack is the same artifacts and manifest on disk, for machines with no network or a controlled one. No conversion downloads anything; acquisition is an explicit GUI action or an installer prompt.

A system tool is supported but not pinned. Its version and build fingerprint are recorded, and a fidelity claim that was earned against a different build is reported as unverified, docs/advanced/fidelity.md.

6. Signing ​

PlatformRequirementWhen
macOSDeveloper ID, hardened runtime, notarisation for every distributed binaryBefore the first published binary
WindowsAzure Trusted Signing or an equivalent certificate; SmartScreen reputation accrues to the publisher identityBefore the first published binary
LinuxDetached signatures and checksums; no central authorityWith the first non-preview release artifact
Toolchain, WindowsAuthenticode with a secure timestamp on every artifactWith the first managed artifact
Toolchain, macOSDeveloper ID, hardened runtime, and a notarised archive containing the signed Mach-O filesWith the first managed artifact
Toolchain, LinuxDetached minisign or Sigstore signature, beside the checksumWith the first managed artifact

Publisher identity is fixed: Lapilli Works LLC. The GUI is com.lapilliworks.retype, the CLI is com.lapilliworks.retype.cli, and a standalone notifier is com.lapilliworks.retype.notifier. The display name is retype. Reputation is bound to the publisher identity, so it is never changed casually.

The pre-release installers are not published binaries in the signing sense. Their releases publish SHA-256 checksums and GitHub build attestations. The installers reject a corrupted download, and the attestation can be checked out of band, but neither authenticates the publisher the way a platform signature does. The installed tier remains gated on the signatures in the table above.

The distribution manifest has its own Ed25519 key, kept offline and separate from the platform code-signing certificate. Its public key is embedded in the GUI that manages the set. Rotation dual-signs one release, so an old client accepts the new key before it is the only key.

7. Notifications and scheme registration ​

Capability per platform:

PlatformActionsOwner
Linuxlibnotify actionsDaemon
WindowsToast without buttons now; protocol activation and the signed notifier laterDaemon, with an AppUserModelID registered under the user's hive
macOSUser Notifications with categories; osascript plain fallback nowNotifier bundle

The daemon owns retype:// and OS notifications. The GUI does not register either; it is a frontend to the daemon. When the daemon is not running, the scheme handler performs undo in-process where possible, and otherwise reports that the daemon is unavailable.

8. Out of scope ​

TargetWhy
32-bit x86No population, and doubling the build matrix for nothing
macOS 12 and olderWell below current support, and fragments the notification code
Windows 8.1 and olderNo modern toast API
Android, iOSNo rename surface to hang the product on
Network filesystemsNot supported yet; see Watch scope §9
Fonts, 3D, CAD formatsNot formats this product converts