Diver

Deeplink tooling for app teams

Build, launch, and document deeplinks — from your phone or your desk.

Type a URI or fill in its parts; Diver keeps the two in sync. Then open it where it actually has to open: this device, a booted simulator, a phone on your Wi-Fi, or any device signed in to your Diver account — and it tells you whether anything opened it.

The browser build runs today. The phone and desktop builds — the ones that receive links as well as send them — have not shipped yet.

Diver on a desktop: the URI and Send across the top, the URI's component fields and a table of typed query parameters in the middle, and a dock of reachable devices down the right.
Diver waiting on a phone: a target at the top, confirmation that the device is advertising on the local network and connected to the Diver account, and a toast reading “New link received”.

Why

A deeplink is easy to write and awkward to try.

The URI lives in a ticket, the app that must open it is on someone else's desk, and the way in is a shell command with the scheme spelled right. So it gets pasted into notes, mangled by a chat client, and retyped on a phone keyboard.

Diver is the missing step between the two: one place to compose the URI, one button to open it wherever it needs to land, and a history of every URI that ever did.

Before

xcrun simctl openurl booted "diver://shop.example.com/products/5412?sort=price"

After

Fill in :productId, pick the device, press Send.

What it does

Everything a deeplink needs on the way to a device.

Diver is one app across iOS, Android, macOS and the browser, plus two small services that hold your team's organizations, apps and deeplink templates.

A URI, from both ends

Edit the whole URI as text, or edit the scheme, host, port, path, fragment and query parameters as fields. Both directions stay in sync as you type, and the path's :variables get fields of their own.

Typed query parameters

A parameter is a string, a boolean or a list, and the editor matches: a text field, a switch, or chips you add values to. No more guessing whether the app wanted true or 1.

Send to the right device

This device, a booted simulator, a connected Android, a phone on the same Wi-Fi, or a device signed in to your account from anywhere. Diver reports what the device did with the URI rather than that it was sent.

History and favourites

The last 50 URIs this device opened, newest first — tap to re-open, long-press to edit in the builder. Star the ones you run every day. All of it stays on the device.

Your team's deeplinks

Organizations, apps and deeplink templates live in your Diver account, with roles and invitations. Import an app's routes from a build with a CI key and everyone has them.

Link files, checked

An https deeplink only opens the app if the domain serves Apple's apple-app-site-association and Android's assetlinks.json. Diver fetches both and says which of them is wrong, before you blame the code.

Screenshots

The same app, at the size of the screen it is on.

One URI, wherever you are in the app

On a window, the URI and Send sit across the top, navigation is an icon rail down the left, and reachable devices are a dock down the right — so the URI never belongs to one screen. Tabs keep several in flight at once.

  • ⌘L focuses the URI from anywhere, ⌘T opens a tab.
  • A tab opened from a template is locked to that deeplink's shape — only the blanks are yours to fill.
  • The dock's foot shows what was just sent, and what the device said about it.
Diver's device screen: a target showing the app is waiting for a URI from another device, with settings for the device's name and for whether it is discoverable on the local network and reachable from the Diver account.
The device screen — what this machine is reachable on, and who can reach it.

The deeplinks your team already wrote

Pick an organization, pick an app, and its deeplinks are there — with their parameters declared, so the builder knows which are required and which are booleans. Switch the same template between environments, or between the custom scheme and the https Universal Link that addresses the same destination.

  • Search looks at a deeplink's name, template and parameters.
  • Routes imported from a build are marked as imported.
  • The link-file check runs against the environment's own domain.
Diver's apps screen in its light theme: an organization's apps listed down the left, and the selected app's deeplinks on the right with their query parameters and a banner confirming the link files are verified.
Apps and deeplinks, in the light theme.

And the whole of it in a pocket

The phone build is the one that receives: leave it open and a URI sent from a desk opens on the handset you are holding.

Diver's URI builder on a phone: the URI in a field at the top, a full-width Send button, and the scheme, port, host and path stacked below it.
The builder, one column.
Diver waiting on a phone: a target at the top, confirmation that the device is advertising on the local network and connected to the Diver account, and a toast reading “New link received”.
Waiting for a link to arrive.
Diver's history on a phone: a list of previously opened URIs grouped by scheme, with relative times and a star on the favourites.
Everything this device opened.

Platforms

What runs where.

One codebase, four platforms. The browser can do everything except the half that receives a link — a tab has no raw sockets, no mDNS, and no way to authenticate a socket of its own. Where a feature cannot run, Diver hides it and says why.

Diver's own capability table, as the app reports it.
Feature Phone & desktop Browser
Building, launching and revisiting URIs Yes Yes
History and favourites Yes Yes SQLite compiled to WebAssembly, in the browser's own storage
Organizations, apps, deeplinks, members, CI keys Yes Yes
Sending to a device on your account Yes Yes
Sending via simctl / adb Yes No No process to run
Sending and being found over the LAN Yes No No raw sockets, no mDNS
Receiving links from your other devices Yes No A browser cannot set the header the socket authenticates with
Checking hosted link files Yes No Those files are served for Apple and Google, not for a web page
Sign in with Microsoft Yes Yes Through a popup rather than the OS browser

Download

Start in the browser. Take it with you when it ships.

The browser build is live now and needs no install. The phone and desktop builds are what add the receiving half — the local network, and being reachable from your account.

In the browser

Live

Everything except receiving. Nothing to install, and it signs in to the same account.

Open app.usediver.com Chrome, Safari, Firefox and Edge.

iOS & Android

TBD

Receives links over your account and over the local network, and opens them with the OS. Not released yet — this card gets the link the day it is.

Download for mobile Coming soon

macOS

TBD

The desktop build, with simulator and adb sends, LAN discovery, and a window that holds several URIs in tabs.

Download for desktop Coming soon