FLOPPY: Plugin for localStorage, sessionStorage, IndexedDB storage, List Creation/Manipulation, Iteration, and More! Now with even more video docs!

Although, I guess I should note: Apparently you can now do “unique ID is in” some list (as of early December). I’d be interested to know if there’s any performance difference in your use case, @tylerboodman. (Announcement about that here.)

I’ll test it later today (Personal plan)

Okay so on my test app both the Rehydrate action and the “is in” search are finishing 500 items in under a second (no data creation in this time just purely matching UIDs to Things)… I have no idea if Bubble is caching things while I’m testing back and forth, but even the first time was like a second or two

In my actual app with real world data, I’m making 908 things in 50 item chunks (recursive creating, rehydrating). Rehydrating method take 62s, and “is in” taking 45s. Times are total time including Data API creation, Rehydrate/is in search, etc.

It might be not scientific the way I’m doing it but just dropping in Rehydrate and testing a few times, then dropping in the “is in” instead getting the same results every time :thinking:

Maybe if Bubble capacity logs weren’t literal :poop: I could tell if one was just doing it faster and using more capacity

1 Like

@tylerboodman it would make sense that using the plugin is a little slower than the native Search expression, what with spin-up time and such. But hey at least you have multiple options for doing this type of thing!

(Edit: Oh, and yeah understanding the “capacity” impact of one versus the other is probably pretty much impossible.)

1 Like

Hi Keith

Been using floppy for 3 days now so still very much a newbie, so excuse silly quesitons. I am trying to create an HTML Table from a datatype which consists of five columns (one text field and 4 calculated fields. I have a button which runs a workflow, this has five steps in it, each one stores a different value and key (one for each column). If I load this and look at the data in chrome developer I can see all the keys and values. My questions are:

  1. Is it OK using this workflow and storing individual keys and values or do I need a different floppy for each single key?
  2. If yes, how do I read each key value? So far I have only been able to read the first one, which makes me suspect I need individual floppies for column.
    Thanks in Advance

Hello @keith ,

I have a last technical constraint that I can’t solve.

I’m using your parallels plugin to transform a date range list and it works perfectly well.

However, another type of data was attached to this date range list (before modification by parallels) and it is impossible for me to retrieve these elements.

To explain.

I have a list of events. In this data type “event” I have a filed “date range” and a field “technician”.

So a date range corresponds to a certain technician.

Thanks to your parallels plugin I can modify a date range list coming from a list of events. But unfortunately once transformed with parallels, I can’t find any way to link this new transformed date range list with the list of technicians belonging to the initial date range list.

I tried several things with List Shifter, I just bought your floppy plugin to try to add directly a “Range2” data list in my “Event” datatype. Or “Range2” would be the transformed date range list from Parallels. Then do a “do a search events” with Range2 as a filter. But i cant use the Add RAM List Value(s) action because this is not same data type between event and date range.

Do you have an idea how i can achieve this ?

With floppy or ListShifter ? (I need to be able to link the new date ranges created with Parallels and the technicians belonging to the old date ranges).

Thanks in advance,

Hey @Dimo, well your question is pretty complex (in Bubble). When you fetch a list of Events and each Event has a Technician and also a Date Range (a field of date range type), yes, when you compose: Some_List_of_Event's Date Range that’s going to yield you only a list of date ranges.

But that list of date ranges (and any transformed list of date ranges based off of it) still corresponds to Some_List_of_Events, via their indices (as long as you didn’t sort them or something).

So the first transformed date range in the list belongs to Some_List_of_Events: item #1. And the Technician associated with the first transformed is Some_List_of_Events: item #1's Technician.

For example, if we were to display these things in a repeating group, we might set the Repeating Group’s source to Some_List_of_Events. And then, in each cell, if we wanted to display the Technician, that’s just Current Cell's Technician's Whatever. And then, if we wanted to show not the original date range but the transformed date range, we would display Transformed_Date_Ranges:item #Current Cell's index.... (Where Transformed_Date_Ranges is your list of transformed date ranges from Parallels.)

Now, this sort of visual correspondence may not be what you’re hoping to achieve.

If so, that means that what you really wanted to do was recurse over the original Events and transform their date ranges, updating each individual date range field on the Event. In Bubble the best way to do that is to do the transformation when you first acquire the date range.

But I suspect what you’re doing is just some visual formatting (which I suggest how to do in an RG above), yeah?

Morning Keith
I am trying to access data which is stored in an indexedDB Database and datastores, from this I want to feed it into a Tabulator plugin. The only way I have been able to access the data so far is by retreiving storage values. Is there anywa to directly address a specific database and datastore? I’ve tried various methods but no success so far


Hey @daverowe1167 I’m not sure I understand your question. Floppy/Floppy Reader can read values of course that it has written to some specific IndexedDB database, datastore (specified down at the bottom of the main Floppy interface) and key name (specified near the top of the main interface).

Perhaps you can be a little more specific about the problem you’re facing?

Hi Keith
I think I’ve managed to work it out now, just me being dumb, thanks🙂


1 Like

Hey @daverowe1167 - there are no dumb questions (MOSTLEE… mostlee)… Glad you got it sorted, but let me know if you hit other issues.

Hey Keith! I had a question about the drag and drop sortable RG.

I’m having trouble getting the repeating group to show the correct order post-sorting. That is, when I drag and drop a group, the repeating group updates, but it displays a different order than what was originally dropped. I’ve attached an example below. Both the repeating group and text beneath it have the data source Floppy’s RAM List. As you can see, the repeating group renders a different order than the text underneath, despite sharing the same source (the text is what I’m expecting; the repeating group is not).

Floppy Drag and Drop

I think I’ve set it up correctly but correct me if I’m wrong. I have one Floppy element on the page:

I also have two actions:

  1. When Floppy is Initialized, Store Keys on Floppy (which are values from the database).
  2. When Floppy Updated Ram List Value Via Drag/Drop, Store Keys on Floppy (where the list value is This Floppy’s RAM List Values).

The data source for my repeating group (and the example text underneath) are the Floppy’s RAM List Values. Do you know how I could fix this?

As an aside, I played around with the SortableJS library for most of the afternoon in Bubble and ran into a similar issue when I tried to save to the value to the database.

In the sortable instance, I added an onEnd function which sorted the list of things based on the drag/drop action, published the state of the sorted list, and triggered an event. Back in my workflows, when the event was triggered, I’d make changes to a thing and set the list to my plugin’s exposed state “Sorted List”.

When a user drag and dropped a group, SortableJS would update the DOM (and thus the repeating group). However, when the event was triggered and the thing updated in my database, the repeating group would update again, as it’s data source was the thing I updated in the database. So the database reflected the correct order every time - but the repeating group would update twice and show a different (incorrect) order than the database. Not sure if it’s a related issue or not.

So @ladd0393 if Floppy seems to drag and drop your items properly (the new responsive engine is a bitch to support), then you’re probably just not quite grokking my API for how this works. Rather than reading your message without context, perhaps you can invite me to your editor and I can tell you what’s going wrong.

I appreciate detailed issue reports but in Bubble it’s easiest just to give access to the editor so I can really see what’s going on. PM me any deets.

1 Like

Hey @keith amazing work with this plugin! Might be a dumb question, but I’ll ask anyways. Will localstorage functionality still work the same wrapped into a native app with someone like BDK??

Appreciate the help!

1 Like

@DanielShakibaie It works with any wrapped browsers.


Thanks John :pray:

1 Like

New kind-sorta-Floppy video: Not specifically about Floppy, but in this “live Bubbling” video I use a few Floppy elements for their RAM Scalar and RAM List states. The topic is finding users with shared “favorites”.

People that like to spend romantic evenings with their special someone watching me do stuff in Bubble (I’m looking at you @mikeloc) might enjoy it:


UPDATE TIME (:dragon_face:/:droplet:): I just pushed Floppy version 1.9.18 which fixes several bugs in the sortable drag/drop repeating group “advanced” feature in the Floppy element. Initially released as “experimental”, I believe the latest version is much less experimental than before.

(Shoutout to Floppy user @ladd0393, who built a very helpful demonstration app that really helped in debugging these issues!)

Specific fixes:

  • Changes to the way that RG elements in the new responsive engine are identified. This fixes a bug whereby this feature used in a reusable element (and other instances) would cause the RG to be drag/drop sortable once, but not sortable again after Floppy’s RAM List was changed.
  • Fixes a bug where the initial state of the RG elements was not properly initialized. This could have affected both old and new responsive scenarios.

Anyway, if you played with the Sortable Drag/Drop feature in the past and it didn’t work for you, give it a go in the latest version. As always, let me know any issues you find here in the Floppy thread!

(Dragon drop… get it?)


Question about using Floppy stepping to change thing values based on the next floppy item.
Does anyone know how I can refer to a value for the previous or next floppy item? I realise I am doing it totally wrong:
What I am trying to do is to add the unique ID of a the next item in a floppy list to the stepped item so I can create a dependency. The floppy already takes a list of tasks and reverses the order. Any help is appreciated.