# DeeplinkX vs whatsapp_unilink for Flutter WhatsApp links

Canonical HTML: https://p-hatan.com/deeplink-x/comparisons/whatsapp-unilink/

DeeplinkX 1.5.8. Comparison reviewed: 2026-10-21.

**Maintenance concern: `whatsapp_unilink` appears unmaintained on pub.dev. Its latest release, 2.1.0, was published on November 20, 2022 — over three years without a new published version as of October 21, 2026.** The [pub.dev release history](https://pub.dev/packages/whatsapp_unilink/versions) establishes the publication gap; it does not establish that the repository is abandoned or that existing links have stopped working.

DeeplinkX is a Flutter plugin for typed external-app actions, with native launch handling, installation checks, and configurable fallbacks. `whatsapp_unilink` is a Dart package that builds WhatsApp HTTP links. Its Flutter examples use a separate launcher such as `url_launcher` to open those links. Both can help developers prepare a phone-number chat or share text; DeeplinkX also exposes a dedicated WhatsApp username chat action. Sources: [`whatsapp_unilink` README](https://pub.dev/packages/whatsapp_unilink/versions/2.1.0) and [DeeplinkX WhatsApp guide](https://github.com/DeepLinkX/DeeplinkX/blob/6a5db97ab081d48c783bcd4bb244efe023966f72/doc/apps/whatsapp.md).

## WhatsApp feature comparison

| Capability | DeeplinkX | whatsapp_unilink 2.1.0 |
| --- | --- | --- |
| Phone-number chat with optional prefilled text | `WhatsApp.chat(phoneNumber:, message:)` | `WhatsAppUnilink(phoneNumber:, text:)` builds a link |
| Username chat with optional prefilled text | `WhatsApp.chatByUsername(username:, message:)` | No username parameter or dedicated action |
| Text sharing without a selected recipient | `WhatsApp.shareText(text:)` | Supply `text` and omit `phoneNumber` |
| Native launching | `launchAction` and `launchApp` manage native attempts | Open the HTTP link separately; the OS/browser determines handling |
| Installation check | `isAppInstalled(WhatsApp())` | Not provided |
| Store fallback | Optional `fallbackToStore: true` | Implement app/store routing separately |
| Web fallback | Action-specific HTTP fallback | Produces the HTTP link itself |
| Disable store and web fallbacks | `disableFallback: true` on launch methods | No managed native/fallback sequence |
| Phone-number formatting | Supply international digits including country code, without `+` | Removes formatting and leading zeros; does not infer a country code |
| Plain Dart or server-side link generation | Flutter plugin | No Flutter-specific dependency; provides `asUri()` and `toString()` |
| Other external apps and stores | Shared typed API across supported providers | WhatsApp link builder |

This table compares the [published competitor API](https://pub.dev/documentation/whatsapp_unilink/2.1.0/whatsapp_unilink/WhatsAppUnilink-class.html) with the [DeeplinkX implementation](https://github.com/DeepLinkX/DeeplinkX/blob/6a5db97ab081d48c783bcd4bb244efe023966f72/lib/src/apps/downloadable_apps/whatsapp.dart) and [launch routing](https://github.com/DeepLinkX/DeeplinkX/blob/6a5db97ab081d48c783bcd4bb244efe023966f72/lib/src/core/deeplink_x.dart).

## Start a WhatsApp chat by username in Flutter

Install DeeplinkX with `flutter pub add deeplink_x`, then use its typed username action in an asynchronous Flutter handler:

```dart
import 'package:deeplink_x/deeplink_x.dart';

final launched = await DeeplinkX().launchAction(
  WhatsApp.chatByUsername(
    username: 'example_user', // Replace with the recipient's username, without @.
    message: 'Hello!',
    fallbackToStore: true,
  ),
);
```

## Phone-number chats and text sharing

Use `WhatsApp.chat(phoneNumber: '1234567890', message: 'Hello!')` to target a phone number, or `WhatsApp.shareText(text: 'Hello!')` to share text without selecting a recipient in your application. Pass each action to `DeeplinkX().launchAction(...)`.

For these WhatsApp actions, DeeplinkX first attempts the native link when its installation check permits. If that fails, enabling `fallbackToStore` permits a matching store attempt. If that does not succeed, the action's web fallback is attempted. Store fallback defaults to `false`; `disableFallback: true` suppresses both store and web fallbacks. Configure native visibility and schemes using the [WhatsApp setup guide](https://github.com/DeepLinkX/DeeplinkX/blob/6a5db97ab081d48c783bcd4bb244efe023966f72/doc/apps/whatsapp.md#platform-specific-configuration). Native WhatsApp targets are Android, iOS, macOS, and Windows; web fallback is a separate path. Username availability depends on WhatsApp and the recipient’s setup; WhatsApp may ask for a username key. Supply the bare username without `@`. The recipient completes the conversation in WhatsApp.

## Which package should you choose?

Choose DeeplinkX when your Flutter workflow needs typed WhatsApp phone-number or username actions, native launch handling, installation checks, or configurable store and web fallbacks. Its shared API also suits applications that open other supported social apps, maps, and stores.

Choose `whatsapp_unilink` when your requirement is to generate a shareable WhatsApp HTTP link, especially in a plain Dart project or server. It also provides phone-number cleanup that DeeplinkX's phone chat action expects callers to handle. Account for the publication gap when reviewing your dependency choices; an older release alone does not prove incompatibility.

This page is written by the DeeplinkX maintainer. It compares documented functionality and source at the versions above. Start with the [DeeplinkX package](https://pub.dev/packages/deeplink_x) and review the [committed README comparison](https://github.com/DeepLinkX/DeeplinkX/blob/6a5db97ab081d48c783bcd4bb244efe023966f72/README.md#deeplinkx-vs-whatsapp_unilink).

