MARKETPLACE
PLUGINS
MOBILE FILE DOWNLOADER
Mobile File Downloader logo

Mobile File Downloader

Published June 2026
   •    Updated today

Plugin details

Save any file from your Bubble native mobile app to the user’s device (gallery, iOS share sheet or Android Downloads folder).
Make images and videos go to the iOS Photos or Android Gallery, and documents and other files go through the native iOS share sheet or land in the Android Downloads folder. Permissions are handled automatically across iOS 11+ and Android 6+. Error messages are translated in twelve languages.

/!\ This plugin only works in native apps /!\


See in Demo App · See in Bubble Editor · Full user documentation


Choose where to save files

Photo gallery. Saves to iOS Photos or Android Gallery. The user finds the file in the same place as photos they took themselves; standard share, edit, and delete affordances all work. The plugin requests the photo library permission the first time it is needed and remembers the decision. Recommended for PNG, JPEG, GIF, WebP, MP4, MOV…

Device files. On iOS, opens the native document previewer with the system Share button (“Save to Files”, AirDrop, WhatsApp, Gmail, Print, and every share target the user has installed). On Android, the file is copied to the public Downloads or Documents folder. Recommended for PDF, CSV, XLSX, and any document type.

Optional native notifications during downloads

You can enable OS-native notifications when a download starts (“Downloading invoice.pdf…”) and when it ends (“Saved” or “Download failed”). Same behavior on iOS and Android. The notification permission is requested in context, the first time the user triggers a download with notifications enabled; if they decline, downloads still work, just without the notification feedback. Opt-in by design.

Three ways to source a file

Public HTTPS URLs. Any image hosted on the open web, any file served by a third-party API.

Bubble database File and Image fields. Bubble stores these as protocol-relative URLs (starting with // instead of https://). The plugin detects and normalizes these automatically; you can wire any Bubble File or Image directly into the Source URL field.

Base64 content. For files generated on the fly (PDF receipts built in a workflow, signed certificates, screenshots taken via another plugin), pass the base64 string directly. The plugin decodes and writes the file in a single step.

Features included

Multiple downloads at once. A Download Multiple Files action takes a list of URLs and downloads each one.
On Android and on iOS with the gallery destination, each file emits its own events and lands as an individual file in the destination. On iOS with the device-files destination, the plugin bundles every successful download of the batch into a single ZIP archive and presents one share sheet for the archive; the user taps “Save to Files” once and extracts the ZIP natively in Files.app with a single tap. This is the cleanest UX iOS allows for multi-file downloads to user storage.

Per-download cancel. A Cancel Download action stops a single in-flight transfer cleanly. A Cancel All Downloads action stops everything; useful when the user navigates away or signs out.

Native progress events. Fires “Download started”, “Download progress”, “Download complete”, “Download error”, and “Cancelled” so you can build any UX. Three exposed states track in-flight downloads (Is Downloading, Active Downloads Count, Current Progress); four track results (Last File ID, Last File URI, Last File Size, Last File MIME Type); two track failures (Last Error Code, Last Error Message).

Automatic permissions. iOS and Android use different permission models, with breaking changes at almost every OS version. The plugin handles iOS 11+ photo library permissions, Android 6 to 9 storage permissions, Android 10 to 12 scoped storage, Android 13+ granular media permissions, in one consistent API. You won’t need any “Request permission” action in your workflows.

Custom headers. Pass any header the source requires: Authorization tokens, signed-URL parameters, content negotiation. JSON object in, headers out.

Size limit and timeout. Set a per-element maximum file size (in MB) and a default timeout (in seconds). Oversized or hanging downloads fail cleanly with a translated error.

Multilingual error messages. English, French, Spanish, German, Italian, Brazilian Portuguese, European Portuguese, Dutch, Polish, Japanese, Korean, Simplified Chinese. Language is detected automatically from the device locale; English fallback for any other language. Override any message via a JSON field on the element.

Documentation and AI support

We built the documentation we wish every plugin had.
A full user guide covers every field, every state, every workflow recipe, and a complete troubleshooting section.

Plus, the plugin ships with a context document designed to be pasted into any LLM. Once pasted, your AI assistant knows every field, every state, every event, every strategy, and the most common configuration patterns of the plugin. It can write your Bubble dynamic expressions, diagnose a misbehaving download, and suggest the right configuration for your specific use case, without you having to dig through documentation yourself.
You can download it from the user documentation.

——————————————————————
[size=5/!\ This plugin only works in native apps /!\[/size]

It won’t work for web apps or WebView-wrapped apps (BDK, Natively and similar wrappers do not use the React Native runtime the plugin relies on).
——————————————————————

Try risk-free

The monthly subscription is prorated by the day. Try the plugin for a few days; if it is not the right fit, cancel and pay only for the days you used.

$39

One time  •  Or  $7/mo

stars   •   0 ratings
0 installs  
This plugin does not collect or track your personal data.

Platform

Native mobile

Contributor details

BetterNotCode logo
BetterNotCode
Joined 2020   •   6 Plugins
View contributor profile

Instructions

Quick Start
1. Add a Download Manager element anywhere on the page that needs downloads. It is invisible at runtime; size and position do not matter.

2. Enable Photo Library access (only if you use the ‘gallery’ destination). In your Bubble editor: Settings -> Native Mobile -> Device Permissions. Toggle ‘Photo library access’ on and fill the iOS usage description explaining why your app needs that permission (useful to prevent your app from being rejected by the stores).

3. On any button click workflow, add the action ‘Download file’ on your ‘Download Manager’ element. Fill ‘Source URL’ with the file’s URL (or with any Bubble Image / File’s URL), pick a Destination (‘gallery’ for photos and videos, ‘files’ for everything else).

4. (Optional) Handle the events. Listen to ‘On download complete’ to show a confirmation or navigate. Listen to ‘On download error’ to react to a failure code by reading last_error_code.

Types

This plugin can be found under the following types:
Element   •   Event   •   Action

Categories

This plugin can be found under the following categories:
Image   •   Media   •   PDF   •   Productivity   •   Ecommerce   •   Visual Elements

Resources

Support contact
Documentation
Tutorial

Rating and reviews

No reviews yet

This plugin has not received any reviews.
Bubble