Audio Player interface with an example title.
Audio Player interface with an example title.
← All native guides

Xodera Plugins · Bubble Native

Xodera Audio Player Native

Add a clear audio player to lessons, voice messages or product records. Let people listen, change speed and continue from their saved place.

Public beta guides · Haptics instructions are in its Bubble listing

Public beta offer: free Bubble install · 7-day card trial, then US$1.50/month per plugin/project.

Documentation reviewed 6 November 2026

Practical examples

Voice notes inside a support conversation

A plain file link sends users away from the conversation and makes long replies hard to review.

`source_url = Selected Message’s audio URL`; `title = Selected Message’s sender label`; `subtitle = Selected Message’s timestamp`.

Place the player in the selected-message detail. Let the user Play/Pause, Seek to a useful point and Set speed. Bind `is_active` to the open conversation.

Use `is_playing`, `current_time` and `duration` to show progress. Keep the Message ID in your app so a late event cannot update a different conversation.

On `player_error`, show `error_code` and offer Reload source; preserve the message and never mark it listened to after an error.

Playback only. Your app saves listening progress.

Resume a language lesson at the saved position

Learners need to replay a difficult passage instead of restarting the whole lesson.

`source_url = Current Lesson’s audio URL`; `title = Current Lesson’s name`; the last position belongs to that learner and lesson in your database.

After `ready` for the current lesson, Seek to the saved seconds and wait for the user to Play. Use Set speed for slower listening. Save progress with your own app workflow.

Read `current_time` and `duration`. On `playback_ended`, your app may record a listening milestone for the current Lesson.

If the source changed, discard the old position until that lesson is loaded. Do not treat listening completion as proof that the learner understood or passed a test.

Playback only. Your app saves listening progress.

Review an audio attachment with timestamped comments

Editors or trainers need to jump from a comment to the relevant moment in a recording.

`source_url = Selected Review’s recording URL`; each app-owned Comment stores its own seconds value; optional `waveform_peaks_json` contains real peaks for that same recording.

Click a Comment → Seek to its seconds → Play. On source change, replace or clear the peaks and bind the selected Review again.

Display `current_time` beside your comment composer. `waveform_available` tells your UI whether actual supplied peaks are available.

Clamp or reject stale timestamps against the current duration in your app. When no real peaks exist, show the ordinary progress control rather than invented audio analysis.

Playback only. Your app saves listening progress.

What works now

Public beta. Use the documented controls and actions; test supported formats, permissions and device behavior in your own native app. Browser preview does not validate native device output.

Build the workflow

Use the available beta actions below and test the result on your target devices.

These examples use app records such as Lesson, Message and Order. Replace them with your own data types and element names. Example media addresses must be replaced with your own files.

  1. Add the audio element. Set source_url = Selected Message's audio_url, title = Selected Message's sender_label and subtitle = Selected Message's date_label.

  2. If you have real waveform data for this recording, pass it in waveform_peaks_json. Otherwise leave it empty.

  3. When ready occurs, use Seek with the saved number of seconds if needed. Let the user press Play. Use Pause, Seek and Set speed for the player buttons.

  4. Show current_time and duration. On playback_ended, save listening progress for the selected message or lesson. Set is_active to whether this view is open.

Workflow diagram — not an app screenshot · SVG

Configure once

Create or choose your Bubble app project in BestPlugins → Dashboard → Plugins. Choose Xodera Audio Player Native, copy its key, then open Bubble → Plugins → Xodera Audio Player Native and paste it into licensing_api_key. Save once; then use the actions below. Each plugin in each project has its own key.

Use a direct audio-file address that the app can open. Playing audio does not require microphone or camera access.

Configure once
  1. Create or choose your Bubble app project at BestPlugins → Dashboard → Plugins.
  2. Choose this plugin and copy its project key.
  3. Open Bubble → Plugins → this plugin. Paste its project key into licensing_api_key and save.
  4. Add the element, choose your app data and build the workflow below.
  5. In the dashboard, review and confirm the 7-day card trial for this plugin. It then costs US$1.50/month per app project, including development and production. Cancel before the trial ends to avoid the first charge.
Installation and subscription

For Audio Player, Video Player, Photo Editor, Audio Recorder, Files Kit and Haptics: free Bubble installation, a 7-day trial with a card, then US$1.50 per month per plugin and app project. Development and production are included, with no operation cap. File-size and feature limits still apply. Review billing and cancellation before confirming. Other plugins remain unavailable for purchase.

Save the result in your app

Example ListeningProgress: owner = Current User, lesson = Selected Lesson, seconds = Audio Player's current_time, duration = Audio Player's duration. Save when the user pauses or leaves the lesson, rather than on every screen update.

Failure, cancel and recovery

On player_error, show error_code and offer Reload source. Keep the message or lesson record. When a different recording is selected, load its own saved position. Returning to the view does not start playback automatically.

Capabilities and limits

Playback speeds: 1, 1.5 and 2. Volume: 0–1. Waveform data: 2–2048 values between 0 and 1. Supported audio formats depend on the device. The player does not record, transcribe or permanently save audio for offline use. Background and lock-screen playback are not guaranteed.

Settings, actions and results

Use these names in Bubble. Planned features are marked separately.

Available beta settings

Element settings

source_url · textwaveform_peaks_json · texttitle · textsubtitle · textplayback_rate · numbervolume · numberloop · yes_nois_active · yes_nodisabled · yes_noui_text_json · textlanguage · text

States

player_status · textis_playing · yes_nois_loaded · yes_nois_buffering · yes_nocurrent_time · numberduration · numberprogress · numberplayback_rate · numbervolume · numberis_looping · yes_nowaveform_available · yes_nowaveform_status · texterror_code · text

Events

readyplayback_startedplayback_pausedplayback_endedseek_completedrate_changedplayer_error

Actions and their inputs

PlayPauseToggleStopSeekSet speedSet volumeReload source
Element settings · 11
source_urltext · Default: ""
Example valuehttps://bestplugins.online/native-samples/lesson.mp3
Example Bubble expressionSelected Message's audio_url
Address of the selected audio, video or image file. Use a file type this plugin supports.
waveform_peaks_jsontext · Default: ""
Example value[0.1,0.4,0.2,0.7]
Example Bubble expressionSelected Message's waveform_peaks_json
Real normalized amplitude values for this recording; leave empty if unavailable.
titletext · Default: ""
Example valueLesson 4 — review
Example Bubble expressionSelected Lesson's name
Visible app text; empty uses built-in localized copy where supported. No credentials.
subtitletext · Default: ""
Example valueTeacher · today
Example Bubble expressionSelected Message's sender_label
Visible app text; empty uses built-in localized copy where supported. No credentials.
playback_ratenumber · Default: 1
Example value1.5
Example Bubble expressionCurrent User's listening_speed
Use the current business record’s value; validate it against the limits below.
volumenumber · Default: 1
Example value0.8
Example Bubble expressionVolume Slider's value
Use the current business record’s value; validate it against the limits below.
loopyes_no · Default: false
Example valueno
Example Bubble expressionSelected Lesson's repeat_enabled
Use the current business record’s value; validate it against the limits below.
is_activeyes_no · Default: true
Example valueyes
Example Bubble expressionGuideHost's view_is_active (your yes/no custom state)
Set yes while this view is open. Set no when leaving, so playback or current work can stop.
disabledyes_no · Default: false
Example valueno
Example Bubble expressionGuideHost's is_busy (your yes/no custom state)
Disable the element while your app is busy or this action is unavailable.
ui_text_jsontext · Default: ""
Example value{}
Example Bubble expressionApp Settings' player_labels_json (supported keys only)
Optional JSON with supported button labels. Leave empty to use the built-in text.
languagetext · Default: "auto"
Example valueuk
Example Bubble expressionCurrent User's preferred_language
Set language=auto to follow a supported device or browser language. Enter a supported language code to choose it explicitly.
Actions and their inputs · 8
Play

No action parameters

Pause

No action parameters

Toggle

No action parameters

Stop

No action parameters

Seek
secondsnumber · Default: —
Example value12
Example Bubble expressionSelected Comment's seconds
Use the current business record’s value; validate it against the limits below.
Set speed
ratenumber · Default: —
Example value1.5
Example Bubble expressionSpeed Dropdown's value
Use the current business record’s value; validate it against the limits below.
Set volume
volumenumber · Default: —
Example value0.8
Example Bubble expressionVolume Slider's value
Use the current business record’s value; validate it against the limits below.
Reload source

No action parameters

States and events

States

player_status · text

Current result of this action. Use the matching completion event before saving success.

is_playing · yes_no

Current value for the selected item. Read it after the related event.

is_loaded · yes_no

Current value for the selected item. Read it after the related event.

is_buffering · yes_no

Current value for the selected item. Read it after the related event.

current_time · number

Current value for the selected item. Read it after the related event.

duration · number

Current value for the selected item. Read it after the related event.

progress · number

Current value for the selected item. Read it after the related event.

playback_rate · number

Current value for the selected item. Read it after the related event.

volume · number

Current value for the selected item. Read it after the related event.

is_looping · yes_no

Current value for the selected item. Read it after the related event.

waveform_available · yes_no

Current value for the selected item. Read it after the related event.

waveform_status · text

Current result of this action. Use the matching completion event before saving success.

error_code · text

Error information for the last action. Show a helpful message and offer the relevant retry.

Events

ready

When this event occurs, read the related states from the same element.

playback_started

When this event occurs, read the related states from the same element.

playback_paused

When this event occurs, read the related states from the same element.

playback_ended

When this event occurs, read the related states from the same element.

seek_completed

When this event occurs, read the related states from the same element.

rate_changed

When this event occurs, read the related states from the same element.

player_error

When this event occurs, read the related states from the same element.

Questions developers ask

Does it create the waveform?

No. Supply real normalized peaks for that source; ordinary progress works without them.

How does the subscription work?

For Audio Player, Video Player, Photo Editor, Audio Recorder, Files Kit and Haptics: free Bubble installation, a 7-day trial with a card, then US$1.50 per month per plugin and app project. Development and production are included, with no operation cap. File-size and feature limits still apply. Review billing and cancellation before confirming. Other plugins remain unavailable for purchase.

More product examples
Xodera Audio Player Native — Earlier product example; appearance may differ in the current beta.
Earlier product example; appearance may differ in the current beta.

Related guides

For help, tell us which plugin and device you use, the action you tried and what happened. Use an example without personal data. Never share your key or private files.