This is an automated archive made by the Lemmit Bot.

The original was posted on /r/selfhosted by /u/mickael-kerjean on 2023-07-03 14:05:21+00:00.


Hello the community, I have been doing selfhosting for many years and that’s what led me to start working on Filestash in 2017 as I got to realised you couldn’t just PR Owncloud then Nextcloud to get something fast but needed a completely different approach.

One day it strucks me, we should simply decoupled things, after all Dropbox is 3 integrated components, a storage mechanism, a sync app and a web app. We had tons of choices for the storage with many protocols and software implementation, we had a couple quality sync apps but nothing in the web app department to integrate everything.

So I made it happen and it has served me very well along many other people. A couple years back I upgraded the horrible server that used to run with nodeJS to golang, obsessing over performance to the degree that most response are now sub millisecond fast and the entire architecture has become amazingly efficient with streams all the way.

The frontend though has aged in a way that it’s hard to upgrade things, versioning issue with various libraries, node version and npm version and all sort of other problems are emerging. Fixing those isn’t simple and the constant upkeep is a drain as I’ve been delaying the 2 biggest remaining features for 2 years now: the tag mechanism and the filesystem miniviewer because of the maintenance struggle it would come with.

So I’m comtemplating another option which is to make a complete rewrite of the frontend that will reuse the good ideas from the existing one (like caching the filesystem in the browser so that the next file list in a cached location is virtually instant) and throw away the bagage that come with react and rewrite the frontend in vanilla javascript, no framework, no node_modules, no diff algorithm, no bullshit, just efficient and optimised js code that runs from the browser without any abstraction that come with such framework and no wasted CPU cycles.

Back in 2017, this wasn’t really an option as es6 wasn’t much a adopted standard but things are better now. I made a POC of how I could build an app in plain es6 and think the resulting code is quite clean https://mickael-kerjean.github.io/skeleton/example/index.html

The benefits for such rewrite would be:

  • faster
  • lighter
  • make it possible to make server plugin that can do interesting things in the client
  • simpler to maintain
  • simpler to contribute, I’ve seen tons of people who struggle to compile everything, this would make things a lot simpler

The drawback:

  • this is a large undertaking, hence why I’m making a poll to gauge reactions

This is the dilema, please enlighten me

View Poll