Thank you everyone for your thoughts. Yes, this was a request for MWS features. I should have made that more clear.
Also, I think the following is my opening thoughts on the subject, not my final verdict, so please feel free to respond with your perspective as you see fit.
Auth seems to be a really popular request
There’s good news and bad news. The bad news is that third-party auth is complicated and normally tied to domain names. The good news is that part of my design philosophy is to make auth completely external to MWS.
In practice, this means you would install it as an NPM dependency and then setup your own auth handlers around it with all of the server keys and third-party connections for your specific use case. In my current line of work, every auth solution I implement is wildly different based on the specific use cases and requirements, and it’s always a pain to setup. There are entire companies dedicated to JUST auth!
I work on a few JavaScript projects very similar to MWS, and I have yet to find a good turn-key solution to auth that doesn’t require absolute tons of configuration AND is also verifiably secure AND is obviously the best solution, but if I ever do, I might bring some form of that into MWS. Better Auth (the successor to Auth.js) is an option I’m keeping an eye on.
But implementing auth that is BOTH usable AND secure is challenging. With the advent of passkeys we may finally have something that could work with the default MWS use-case by scanning a QR code in the console.
So I am more than happy to work with anyone wanting to do this to make sure MWS is as extensible as possible, but I don’t know how I could even begin to directly support third-party authentication in all it’s various flavors.
Along with that, any JavaScript developers who want to setup MWS as a dependency, feel free to open an issue on GitHub about that.
Instant sync is also pretty common
This is another subject with a huge amount of variation and deep implementation details and caveats. It’s not as easy to accomplish as you’d think, especially in TiddlyWiki where the client isn’t just a rendered page, but contains the entire wiki, but that doesn’t mean it’s not possible.
Unlike auth, this is something I think belongs in MWS. But I’m not exactly sure how to do it. The server side is very simple, so there should be no problem there. Most of the work that needs to be done is in the browser, so we could borrow the work of existing TiddlyWiki plugins that already do this well. Any recommendations along this line are appreciated.
Offline syncing can’t be guaranteed.
As in literally. I can’t think my way through all the caveats and edge cases this brings up. I’d be happy to work with someone else on this, but compromises have to be made for offline support, and I don’t know how to do that.
The best I can probably do is some kind of read-only offline caching or a PWA that installs as a home screen app and keeps a copy of all your wikis cached and up to date. This would require some server-side integration and I’m quite happy to make sure that happens.
There could also be a way of creating an offline cache of tiddlers that is presented as an import when you come back online and allows you to diff and merge tiddlers that changed while you were offline.
Huge imports is already implemented
A few people have requested being able to import huge wikis. This is already implemented in MWS. Just drag and drop anything into an existing wiki, and all tiddlers are saved at one time, instead of slowly over hours.
The existing TiddlyWiki syncer only saves one tiddler at a time, and there is no way for sync adapters to change this. There is currently a PR open with an improved syncer which does allow sync-adaptors to support saving many tiddlers at one time. If you write sync adapters, please take a look at that PR and let us know if that works for you.
Various prepackaged and portable installs are easily doable
There are various requests for running various portable installs of MWS. I’m open to these but not well-versed in all the user-land requirements there. I’ll have to take a closer look at that at some point. PRs are always welcome.
It really sounds like I keep punting work, and I kind of am, but with a twist.
Jeremy put me in charge of MWS mainly because of an extensive rewrite I proposed to the first version of MWS, which at the time was in a branch in the TiddlyWiki repo. The rewrite became the basis for the MWS repo, and a couple more rewrites followed, most notably separating the server and application layers of MWS. I’m in charge of the core architecture, first and foremost. Since this is a side-project for me, and definitely not my full time job, I have to let other people help with implementing various feature requests.
The twist is that I’m actually using the core server layers of MWS in my existing work projects as an alternative to Express, exactly the same way the mws layer uses it, which helps me work on the extensibility and core server features.
This also allows me to copy project ideas, like the client build system, between MWS and my existing projects.
And yes, these projects do use auth. And that experience informs most of what I said on the subject.
I’m trying to work on a rewrite for the frontend of MWS that incorporates a lot of the suggestions around bags and recipes. I’m still not exactly sure how to do that but I’ve been coming up with some ideas.
Jeremy and I share a slight aversion to React, despite recognizing its prevalence and ease-of-use, and I’ve been working on a way to use JSX with web components completely outside the React framework. The basic framework has been slowly coming together and at some point I’ll be porting that into MWS as well. There’s already a branch with one attempt.
So basically, I’m very actively focused on the core architecture of MWS. I don’t have time to implement all the features as my involvement isn’t being funded in any way, but I want MWS – both the server layer and the application layer – to be a solid foundation that anyone can easily build on or contribute to.
Deleting and renaming bags will be available eventually.