Configurable local/offline only mode

a user configurable offline mode isn’t too hard to do , i’d say a medium-size project consisting of two parts:

  1. some kind of ui where a user toggles that they want to work offline, the app acts like it’s offline (easy)
  2. port the app to using indexdb instead of localstorage. the problem with localstorage is that it’s volatile (browsers can wipe it away whenever they want, like if it gets too big) so currently you need a server record as a source of truth. Because all localstorage operations happen through a single file (cache.js) building an indexdb shim may be medium or hard work (I haven’t really investigated). This part is very ripe for open source contributions tho

But if you want some only spaces to sync , and some specific spaces to be offline only, that would make step #1 a fair bit more complicated

connected to IndexedDB for storing local data - #9 by pirijan

requested from Discord

general theory is that privacy focused users would be interested in using the app if it had this feature

1 Like

I would use offline mode so that I could use Kinopio with all of my work stuff. That would make me a lot more comfortable knowing that none of my cards are leaving my computer.

Right now, I am careful not to put any proprietary information there.

If it’s complicated to implement this (as you alluded to), perhaps a user could create a separate account for work that is offline only.

The ui is surmountable , but before I was under the impression that indexdb was non volatile? Eg you could store things to it and be reasonably guaranteed it’d still be there, unlike local storage. Apparently this isn’t true though so I’m not sure if there’s a web technology I can use for this

1 Like

Apologies for the perhaps dumb question, not at all a technical person, but could it be possible just to regularly save from the local storage or the indexdb to somewhere else? It sounded from the other thread like that wouldn’t create a performance bottleneck. I’m probably missing something elemental here, please disregard if so.

1 Like

Curious also if you know or could easily find out how Roam Research handles this? They warn users that local info can be wiped out and you have to save it frequently. And they claim local only is possible for specific graphs. Also please disregard if this is barking up the wrong tree. I appreciate how responsive and engaged you are - and super appreciative of the app you have built!

2 Likes

I have my suspicions, but could you let me know where roam says that?. For a website running in a browser there is no other place to save data to. If however the app is running in electron , you can access the file system and save there. But this requires writing a file system access layer that can Only work on the downloaded desktop apps, which sounds like a lot of work for a small percentage of clients.

From your description is sounds like roam requires you to manually save/backup your data, but actually works off of indexdb, if so it’s fundamentally no different than exporting a backup of all your spaces in Kinopio periodically?

So if you’re okay with data being periodically wiped by the browser , I can take a roam like path and say hey don’t forget to export your spaces periodically. Again if there’s any roam docs on this , let me know

Hi! When I went to look for the place I had read this, I was not able to find it documentation from the Roam team. However, when you try to create a locally hosted graph using their app (installed on device) you get a pop up window that says: “Local graphs are saved on your browser storage and accessible only from this browser. You should frequently backup a Local Graph using the export functionality. Please choose a unique name. That will be the permanent storage name for your Roam graph”

I was also able to surface this reddit thread where the point is made but not by someone on the RR team : https://www.reddit.com/r/RoamResearch/comments/orwm4l/comment/h6l5qvn/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button

1 Like

To your other point, from my perspective I’d be very happy with an option where I just export spaces after every session as a backup and store things in local storage or Indexdb with the understanding that what’s not backed up can be lost. If you decide to implement something like this that is - totally understand if its not worth your time to do so! Thanks for looking into it!

1 Like

I’d be very happy with an option where I just export spaces after every session as a backup

Unless I misunderstand you can already do this through export → download all spaces. But you have to remember to manually do this , which it sounds like is the same as roam

UI-wise, what would be more intuitive/less-confusing for you:

  1. offline as a space privacy option. imagine fourth option here for Offline Only:
  2. offline as a space setting. imagine a ‘take space offline’ button here:
    CleanShot 2024-10-28 at 08.41.17@2x

If go with #1 as a privacy option

1 Like

Indeed, export option is great, and the re-import works smoothly! The challenge, as I understand it, is the moment I start to pay (as I’d like to, to support your amazing work!), all my spaces get uploaded to the cloud, and if I don’t pay, I run into a max limit of cards per space. Am I misunderstanding how that works? Thanks again for exploring these questions!

Also, Agree with @kordumb re #1 above. Would be sweet!

1 Like

ya that’s the current limitation, to remove the card limit you need to upgrade, but to upgrade you need to sign in (which adds stuff to the cloud). Hopefully I can add that offline mode, the way it could work is.

  • Change the privacy of your spaces to offline.
  • if you haven’t made an account, when you sign up to make an account, none of your spaces will be uploaded. If you already have an account, so long as you set the spaces to offline, they won’t be saved to the server.
  • then you can upgrade and make unlimited cards whether offline or not

possible limitation with offline:

if you upload files or images then those will be saved to the server because I there’s nowhere else to save big data. Is that okay? or should uploads be disabled if offline?