direct_link is a Flutter package for extracting direct media links and basic metadata from supported public page URLs.
Use it when you need to build a downloader, media preview, or media utility app that can resolve a shared social/video URL into playable or downloadable links.
- Extract direct media links from supported websites.
- Return media metadata such as title, thumbnail, and duration when available.
- Return multiple qualities or formats when the source provides them.
- Simple null-safe API with a single
checkmethod.
- YouTube
- Twitter/X
- Dailymotion
- Vimeo
- VK
- SoundCloud
- TikTok
- Threads
Support depends on the upstream website response and the extraction service used internally. A supported website can still return null when the URL is private, removed, region-blocked, unsupported by the upstream service, or temporarily unavailable.
This package currently depends on Flutter and flutter_inappwebview, so it is intended for Flutter apps.
Add direct_link to your Flutter project's pubspec.yaml:
dependencies:
direct_link: ^0.3.3Then run:
flutter pub getImport the package:
import 'package:direct_link/direct_link.dart';Create a DirectLink instance and call check with a supported page URL:
final directLink = DirectLink();
final data = await directLink.check(
'https://www.youtube.com/watch?v=kzOO_uplPdk',
);
if (data == null) {
// No media link was found, or the upstream service could not resolve it.
return;
}
print(data.title);
print(data.thumbnail);
print(data.duration);
for (final link in data.links ?? []) {
print(link.quality);
print(link.type);
print(link.link);
}Future<SiteModel?> check(String url, {double? timeoutInterval});Resolves a supported public page URL into a SiteModel.
Returns null when no media link can be extracted.
class SiteModel {
final String? title;
final String? thumbnail;
final String? duration;
final List<Link>? links;
}class Link {
final String quality;
final String link;
final String? type;
}- This package resolves public media URLs only.
- Private, deleted, age-restricted, login-required, or region-blocked content may not resolve.
- Website markup and upstream extraction behavior can change without notice.
- The returned link list and quality labels depend on the source website and upstream service response.
- Network-based social website checks are integration tests and are not run by default.
Run deterministic unit tests:
flutter testRun real-site integration tests explicitly:
flutter test integration_test/social_test.dartIntegration tests depend on live third-party websites and may fail because of network issues, rate limits, region restrictions, or upstream website changes.
Issues and pull requests are welcome.
- Report bugs on the issue tracker.
- Include a reproducible URL when reporting extraction failures.
- Keep unit tests deterministic. Put live website checks in
integration_test/.
This package is released under the MIT License.
