- Apple Silicon Mac running macOS 12 or later.
- Xcode Command Line Tools.
- Rustup. The repository pins Rust 1.77.1 and the
aarch64-apple-darwintarget inrust-toolchain.toml. - The Rustfmt and Clippy components for the pinned toolchain.
- GitHub CLI for the clone command shown in the main README.
Deno, Node.js, Svelte, and a web-view toolchain are not required for the native application.
Install the verification components after cloning:
rustup component add rustfmt clippy --toolchain 1.77.1-aarch64-apple-darwincargo test --locked --manifest-path native/Cargo.toml
cargo clippy --locked --manifest-path native/Cargo.toml --all-targets -- -D warnings
cargo fmt --manifest-path native/Cargo.toml --checkThese commands exercise native unit tests, report Clippy findings, and verify Rust formatting.
./scripts/package-rust.shThe packaging script:
- Builds the locked release binary for Apple Silicon with a macOS 12 deployment target and verifies the Mach-O metadata.
- Assembles
dist/Async Link.app. - Generates the app icon and copies the native
Info.plistand resources. - Applies the identity in
ASYNC_LINK_CODESIGN_IDENTITY, or an ad-hoc signature when the variable is unset. - Verifies the property list and code signature.
The result can be launched directly from dist/Async Link.app for testing.
./scripts/install-rust.shThe install script packages the current checkout, stops a running Async Link
instance, installs /Applications/Async Link.app, registers it with
LaunchServices, and attempts to set it as the default handler for supported URL
schemes. When a code-signing identity is available in the login keychain, the
script uses it automatically so macOS Accessibility access survives application
updates. Set ASYNC_LINK_CODESIGN_IDENTITY to select a specific identity. The
script falls back to ad-hoc signing when no identity is available.
macOS can reject a programmatic default-browser change. When that happens, select Async Link using the default web browser control in System Settings.
The script records the previous handler status in
~/.async/link/rollback.json. It also verifies that an existing
~/.async/link/settings.json remains unchanged during installation.
After installation:
- Open Async Link from Spotlight and confirm that Settings appears.
- Select Make Default, or choose Async Link in System Settings.
- Open a web link from another application and confirm that only the picker appears.
- Select a browser choice and confirm that it receives the link.
- Test
Escape, the close button, the cog button, and a keyboard shortcut. - Repeat on each display and on another Space.
pkill -x "Async Link" 2>/dev/null || true
rm -rf "/Applications/Async Link.app"Choose another default browser before removal. User settings remain in
~/.async/link/ so a later installation can reuse them.