Open-source project
LinkSheet/LinkSheet avatar
LinkSheet/LinkSheet

LinkSheet: restoring Android's pre-12 link chooser as a standalone app

Link handling for modern Android

2,125 stars53 forksKotlinNOASSERTION

At a glance

What is it?
LinkSheet reimplements the link-chooser behavior that Android 12 removed, showing a bottom sheet picker whenever you tap a link so you can route it manually instead of accepting Android's verified-app routing. It requires Obtainium for installation and has no Play Store or F-Droid listing.
Who is it for?
LinkSheet works best for Android 12+ users who want per-link app selection rather than Android's automatic verified-app routing. Avoid it if your workflow requires a pinnable app install: the Obtainium-only distribution delivers new builds automatically, and there is no numbered artifact to anchor to if something breaks.
Can I use it commercially?
Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
Is it still maintained?
Yes. The repository last received commits 8 days ago.
What is it written in?
Mainly Kotlin, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 6, 2026, and from our analysis. They are not legal advice.

Editorial analysis

What Android 12 changed about link handling

Before Android 12, tapping a link that matched multiple apps would surface a chooser dialog, and users picked the destination each time. Android 12 replaced that with verified app links: apps that claim ownership of a domain through Digital Asset Links get that traffic routed directly, skipping any picker. Installing Chrome and Twitter on the same device means Twitter links go to Twitter without asking, even if you would prefer to open them in a browser.

That removal is the reason LinkSheet exists. It sits in the link handling chain and intercepts taps before Android routes them, then shows its own chooser sheet regardless of which apps have claimed domain verification. The outcome is a per-link decision on every tap, with the option to set persistent rules so that frequently used paths do not require a choice every time.

Bottom sheet controls and the host-rule layer

When LinkSheet intercepts a link, it presents a bottom sheet listing the apps capable of handling that URL. 3 settings shape how that sheet behaves: single-tap mode skips the confirm gesture and opens the app with 1 press, a grid layout replaces the default list, and an option to always show package names surfaces the full app identifier next to the label.

A second tier goes beyond per-tap choices. Assign a preferred app to a domain, and tapping any link for that host skips the chooser and opens the assigned app immediately, with no picker involved. Browser control adds another dimension: 4 filter modes are available, covering always listing all installed browsers, limiting to native apps only, locking in a single browser, or restricting to a whitelisted set.

The sorting algorithm adapts to behavior over time. Usage statistics and a last-app-used history per host feed into the ordering, so apps you pick frequently for a given domain rise toward the top of the list without manual reordering.

2 utility buttons sit in the bottom sheet beyond the app picker itself: one copies the current URL to the clipboard, and another sends a Share To intent so the link can be passed directly to a different app without opening it first.

Installing LinkSheet through Obtainium from the nightly repository

LinkSheet has no listing on Google Play or F-Droid. The documented install path goes through Obtainium, a third-party app manager that tracks APK sources on GitHub and handles automatic updates. The README provides a deep link that opens Obtainium already configured to follow the nightly repository at https://github.com/LinkSheet/nightly under the app ID fe.linksheet.nightly, so adding the source requires tapping one link rather than entering details manually.

Automated nightly builds replace what would be a formal numbered iteration. The README frames this as a deliberate trade between development speed and predictability, and notes the approach tends to introduce few disruptions in practice. That characterization comes from the maintainer rather than from external observation.

One distribution path visible in the README is no longer available. The IzzyOnDroid badge in the badge row appears with strikethrough, and the corresponding download button in the download section is commented out. That F-Droid-compatible repository previously carried LinkSheet but does not any longer. The README gives no reason for the removal. Obtainium from the nightly repository is the only documented install path at this point.

ClearURLs, FastForward, and LibRedirect as experimental URL transforms

Three integrations can modify a URL before LinkSheet passes it to the chosen app. All three are marked experimental, and each routes bug reports to its own repository under the 1fexd organization on GitHub rather than to the main LinkSheet tracker.

ClearURLs strips tracking parameters from URLs. FastForward extracts the real destination from redirect parameters, cutting through shortened or affiliate links. LibRedirect swaps the destination to a non-proprietary frontend, so a YouTube link can be sent to an alternative viewer instead.

A mismatch in the feature list is worth noting. The README spells the second integration as FastFoward in the bullet text, omitting the second r in Forward, while the link in that same bullet points correctly to the FastForwardTeam/FastForward project on GitHub. The text label and the URL target do not agree. Each of the three integrations ships as a separate library, and the README treats them as independent components rather than as a bundled suite.

Pro redirect resolution goes through a Supabase API with a stated no-log policy

Redirect resolution is a Pro feature with two modes: run locally on the device, or send the request to an API the developer hosts on Supabase. The README states the API logs nothing except the timestamp of the request. Supabase's own privacy policy is linked in the README alongside the Pro description, though without an explanation of how that policy applies to this specific endpoint.

Pro access is tied to donations. Any donation of 5 euros or more qualifies for Pro status, which also includes priority consideration for feature requests and bug fixes. Donation links go to buymeacoffee.com and coindrop.to.

The privacy claim is narrow but specific: only timestamps, no request content. There is no link to the API's source code or a third-party audit. Whether you rely on the local mode or the hosted API is a choice the feature explicitly offers, and local mode avoids the external call entirely if you prefer not to depend on the Supabase endpoint.

When Android's verified-link claims override the LinkSheet chooser

Apps that implement domain verification for their own URLs can receive those links directly from Android, bypassing LinkSheet entirely. This is not a bug in LinkSheet but a constraint of how the Android OS routes verified links at the system level.

LinkSheet includes a feature specifically to address this: a screen that lists all apps on the device with active verified-link claims, so you can disable those claims and let LinkSheet intercept the traffic instead. That screen needs revisiting after any app update that adds new verified domains, since new claims are set automatically at install time.

Android's own pre-12 behavior is the clearest alternative comparison. On a device that has not been updated past Android 11, or on a custom ROM that restores the old chooser, the system itself provides per-link picking without a third-party app. LinkSheet exists because standard Android 12 and newer removed that system option without providing a settings toggle to bring it back. A PRIVACY.md file exists at the repository root for users who want to review the app's stated data practices before installing.

Translations via Weblate and what the repository layout holds

All languages except English are maintained by contributors through Weblate at hosted.weblate.org/projects/linksheet. The README notes this explicitly, framing non-English text as community-maintained rather than authored by the project.

Two separate files at the repository root govern redistribution. Application code falls under a custom LPL (documented in LICENSE), while all strings.xml and plural.xml files use GPL-3.0 (documented in LICENSE_STRINGS). Anyone who forks the app and ships a modified build must read both files, since code modifications and string modifications carry different obligations under their respective documents.

The top-level directory also includes a PRIVACY.md, a buildSrc folder holding the build tooling, and an integration directory alongside the main app module. The primary language is Kotlin, and the build system is Gradle.

Editorial conclusion

LinkSheet works best for Android 12+ users who want per-link app selection rather than Android's automatic verified-app routing. Avoid it if your workflow requires a pinnable app install: the Obtainium-only distribution delivers new builds automatically, and there is no numbered artifact to anchor to if something breaks. Before depending on it, disable the verified-link claims for the apps you want to intercept using LinkSheet's built-in listing, and check PRIVACY.md in the repository root for data handling specifics.

Frequently asked questions

What does LinkSheet do on Android 12?

LinkSheet intercepts link taps and shows a bottom sheet picker, letting you choose which app opens the link each time. It bypasses Android's verified-app routing, which on Android 12 and above would otherwise send the link directly to a designated app without showing a chooser.

How do I install LinkSheet?

The README directs installation through Obtainium, a third-party app manager. It provides a redirect link preconfigured for the nightly repository at https://github.com/LinkSheet/nightly with the app ID fe.linksheet.nightly. LinkSheet is not available on Google Play or F-Droid.

Is LinkSheet free?

The core app is free. Pro features, including redirect resolution via the hosted API, require a donation of 5 euros or more.

Can LinkSheet intercept all links on Android 12?

Not automatically. Apps with active verified-link claims for a domain can still receive those links directly from Android. LinkSheet includes a screen listing apps with verified claims so you can disable them manually, after which LinkSheet can intercept that traffic.

Does LinkSheet track any data?

The README states the Supabase-hosted redirect API logs only timestamps, not request content. A PRIVACY.md file is in the repository root. Local redirect resolution mode does not send requests to the external API at all.

Official sources

  1. Issues
  2. LinkSheet/LinkSheet on GitHub
  3. README
  4. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/linksheet-linksheet.svg)](https://hysenlabs.com/projects/linksheet-linksheet)