Forum Academy Marketplace Showcase Pricing Features

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

At this point I’d just say “try it”. It doesn’t really cost anything to try Floppy. Of course if you’re the serious type, you could buy Floppy and have it in your project forever for just 12 bucks. Even if it doesn’t work for you, surely I’ve provided more value than that in snarky comments and entertaining videos and that’s worth the price of admission.


Lol. I love the bonus features you provide.

1 Like

A couple of quick notes on Floppy: While working on the next update to Floppy, there are a couple of things I realized about the current (1.8.27) version of the Floppy element:

  1. I did something slightly derpy in recent versions that makes sequential RAM List actions behave in a not-exactly-synchronous way with respect to subsequent Floppy actions. This is probably not impacting anyone in a meaningful way, but it’ll be fixed in the next version. (The design intent with Floppy is that RAM List actions in a single workflow are synchronous with respect to each other. This became rather more complicated to achieve when I added IndexedDB support, which is natively asynchronous, unlike sessionStorage and localStorage.)

  2. Related to #1, above, I realized that it would be useful to have a set of Events that could be fired to enforce synchronicity and that’s the main feature coming in the next update. The Floppy element will have a new Action called “Sync Trigger” that fires an Event called “Sync Trigger [A, B, C, D, E, or F]” that can be used to trigger some other workflow once some specific Floppy action is truly complete. (Floppy already fires “complete” events when its actions complete [such as, “Floppy’s RAM List Updated”], but these are non-specific and fire anytime any such action completes. The Sync Triggers provide a way to get more granular with that. (More on this below.)

  3. There’s a bug in the default datastore value for Floppy elements that use IndexedDB and you haven’t explicitly set a datastore name. The default value is supposed to be “keyvaluepairs”, but instead it is being written as “undefined”. This is fixed in the next update.

With respect to synchronous actions: Consider that you have some workflow wherein you are constructing a list in Floppy’s RAM List, via one or more “RAM List” actions. And then, you want to do something like Create or Make a Change to some Thing once that list is assembled.

At present, this can be hard to achieve, because any “Create a New Thing” or “Make Changes to a Thing” action within that workflow will have no regard for the previous RAM List actions and simply execute before the new RAM List is actually constructed or modified. Sync Triggers give you an easy way ensure that the Create/Make Changes (or any other action) are only executed after your Floppy-related actions are complete.

(This is a general problem that I know vexes many Bubblers, but “help is on the way”.)

In conjunction with that next release, I’ll also be doing a video about this issue in general and how Floppy can be used to help solve it. And that video will also help explain more precisely what I mean when I talk about the extent to which Floppy actions are synchronous with each other and with other, non-Floppy actions.


ARE YOU FEELING EXPERIMENTAL? I just published two updates to Floppy. Version 1.8.29 is just a clone of version 1.827 (the latest “stable” version of Floppy). HOWEVER, the version just before that, 1.8.28 contains a DEBUG version of the Floppy Element, which adds the “Sync Trigger” features mentioned in my previous thread reply.

That 1.8.28 version isn’t well tested yet, and I consider it a beta for a future release. It has the new “Sync Trigger” action as well as a “Sync Trigger” option in most Floppy actions. If this type of thing is of interest to you, feel free to give it a whirl and report any bugs, crashes, or anomalies that you find here in the thread. (If you’re trying to use Floppy in a production app, you shouldn’t push any updates using 1.8.28 to Live.)

If you’re a smart cookie and experimental/smart/adventurous Bubbler, you probably have multiple Bubble projects, including one or two “test” type apps. Floppy subscribers/owners who want to play around with this and future experimental features are invited to private message me with the name of their additional test apps that they’d like me to enable for Floppy.

(Although, if you’re feeling generous, you can always just sub/buy a copy inside your test app and I will tip my :tophat: to you.)


Hello @keith

I am trying to use your plugin and I have 2 questions :

  • If I use store key action to store list value can I use SHIFT: Move RAM List Item action ? It doesn’t seem to work on my side but I may have a wrong set up

  • Let’s say I have a RG with 10 elements

Element 1 - Order 1
Element 2 - Order 2
Element 3 - Order 3
Element 4 - Order 4
Element 5 - Order 5
Element 6 - Order 6
Element 7 - Order 7
Element 8 - Order 8
Element 9 - Order 9
Element 10 - Order 10

When my user change order value of an element I would like to update others elements order value.

Example, I change element 2 with order 5 , I would like to keep element 1 with order 1, element 3 = order 2 , element 4 = order 3, element 5 = order 4 and element 2 = order 5

Is this possible with your plugin ?

Thanks in advance

Thanks again for this amazing plugin. I don’t see anything so far about working with date ranges. When I set the floppy to type date range and enter a list to step, I can’t get Floppy to accept it.


I wonder if there is something I am missing.

Ultimately, what I want to do is to integrate a list of dates between a range in Floppy. I usually use another plugin for that but in this case I need to do it in the workflow only since I am trying to process workflows based on an imported csv.

I am so not sure that nested floppys work. I am taking the csv and iterating each entry using floppy and for each entry there is another workflow to create a thing for each date within the date range.

Any help would be appreciated.

There is a bit of a bug with Floppy and date ranges (an empty date range is not understood correctly, but this is more Bubble than Floppy), however, what you’re running into @TekaTeki is that your expression isn’t what the input expects. Check the Issue Checker for details.

(Aside: You can’t just show a cropped input like this and expect a helpful response. What input IS that, what are you actually trying to do? We need to see more to help.) You’re probably just trying to send a scalar where a list is expected.

Psst… Floppy is currently on sale: Black Friday 2022 🦃 Sale: Calendar Grid Pro, Parallels, Floppy on Sale through Nov 27, 2022

And I know I keep threatening to increase the price, but that WILL happen. Don’t just sit on this promotion.

1 Like

ah, yes, sorry - I was way to cropy :slight_smile: I will play with the scalar approach… thanks.

Hey @keith first time I’ve taken Floppy out for a spin and decided I’d start simple and use it to sort a list of staff by various fields (eg first name, surname etc). Instead of up and down buttons, I had the row header act as the sort button and used a second text type floppy in place of a custom state to see if the list needed to be reverse sorted (click First Name once it sorts ascending, click a second time it sorts descending - lots of fun!)

I built the Repeating Group up addressing the Floppy Ram list but it originally was a search that contained things that have a relationship to the original thing type. In my case I was listing staff and showing their depot (Staff’s Depot’s DepotName) I can show them in the RG but im not sure if its possible to address them as a sortable thing? I’d like to be able to also sort staff by their depot.

Is there a way to account for related things in the sort at all?

Hope I’ve made sense

PS British Racing Green is the best color

Cheers, john

1 Like

There’s no extra Sort function in Floppy, though you could use List Shifter’s Shifter’s SORT action to sort a list by some descendant (e.g., you can sort by Thing’s ThingField’s Field). This is a little bit overkill, so in future I’ll probably add a Sort element or action to do this. (Aside I’m very tired of the current limitations of the client side Actions API, because there’s just no good reason to have to add an element just to do some simple action but that’s how Bubble is right now. @bubble c’mon and give us client side Actions that can return data, already.)


BTW, I will endeavor to get proper publishing of empty date ranges into the next update. (Little Bubble inconsistencies like this are quite frustrating. This isn’t what @TekaTeki was running into, but i think what happens is if we are presented with some date range that is empty, .get() gives us an empty array, [], but publishState() does not like this and probably either expects null or maybe [null, null] instead of []).

1 Like

I should have added, @johnnyweb, that there is one “mapped sort” available in Floppy – via the “Count Fields/Sort” action – but it only works for numeric lists.

cheers @keith Have snagged list shifter to see if that helps. Also noticed the sorting on empty dates was problematic as you’ve mentioned above.

I’ve got a few videos to watch first to get into the game as I grabbed parallels for some large list date manipulation as well :tv:

1 Like

Hey @johnnyweb - thanks for your support! BTW, earlier I was talking about date ranges, and the way they are published. So, I’m curious about what you meant by:

did you mean “date ranges”?

I meant like this, where I can sort on numeric or text fields but a blank field is just ignored and never makes it it to the top of a sort (ie Null is a valid value just can’t sort on it)
Recording #19

Thanks for all the videos they are super useful as a learning tool on bubbling as well as the plugins themselves :smiley:

1 Like

Oh, yeah @johnnyweb. This is just true of sorting in general. If we have some empty value there is no comparison to be made between that value and the others. Null is neither less than nor greater than any of the populated values in the array. So where does it go? The only thing we can do is decide “is null greater than all other values, or is null less than all other values” and send it to either the top or bottom of the sorted array.

In List Shifter (and in Bubble itself), empty values fall to the bottom of the array, as this is the default behavior of the Array.sort() method (as described in MDN here):

The sort() method preserves empty slots. If the source array is sparse, the empty slots are moved to the end of the array, and always come after all the undefined .

1 Like

Have you considered putting some dummy value in date filed like 01/01/2000 whenever the input is missing from user. While displaying you can show them as blank.


Can anyone help me understand what Floppy can do to accomplish the following:

  1. User uploads a CSV to the Task Assignment things, which have Start and End Dates. This part doesn’t involve Floppy.
  2. Floppy iterates a list of dates between the Start and End Date for each Task Assignment thing from (1).
  3. Floppy creates a thing for each date in the range from (2) in the DATE type.

I assume this means that (2) will step through each thing from the CSV import, but am then getting lost with how to iterate the dates. Once the dates are iterated in (2) I assume that I can step that list to make the dates. This would require some sort of nesting of Floppys I suppose.

Any help is appreciated.

:boom:UPDATE TIME! :boom: Just published Floppy version 1.9.0 which includes new features and bug fixes.

First and foremost, this release updates the Floppy element documentation to be more correct/clear about how and in what way the various Floppy actions are synchronous with respect to other workflow actions. A new “Sync Trigger” action and Sync Trigger section in most of the other Floppy actions allows for more fine-grained control in triggering subsequent workflows via a set of new events (Sync Trigger A through G). Workflows triggered by those events also generate a new event (Sync A through G Workflow Complete) so you can do something only after the triggered workflow is complete. A video on this to come.

This version also fixes a bug in Floppy and Floppy Reader whereby lists of range data types (e.g., date ranges and numeric ranges) would fail to publish if they contained empty values.

Floppy Expression Watcher has a new “long text” field that you can use (instead of the short input field) for the Scalar Expression. This is useful if you want to use Floppy Expression Watcher as a custom state for long text values (you know, like the sort you’d put in a text element). For a quick explanation of what this feature is useful for, see this forum reply.

There’s also a mysterious new element called “Floppy Hacker” – which is still sort of a work-in-progress. At the moment it exposes the unique ID for the Bubble Session ID (which might be useful in certain cases). It also has an Action that allows you to generate a Bubble style UUID (unique ID) – in fact, it uses the same function that Bubble uses internally to generate such UUID’s. Going forward, there may be other weird and possibly useful features incorporated. (The general idea with this guy is to expose some of the more interesting info and functions that Bubble exposes on the window.)

If you’re not familiar with Floppy yet, see the initial post and following video demos/explorations in this thread. The Floppy plugin page is here: Floppy: localStorage, Lists & more! Plugin | Bubble