The first proper release of v2 is nigh’. Here are some topics that are top of mind for me to work on next for the SB core (I have other areas to work on for Sustainable SilverBullet).
Please let me know if you see other priorities.
Overall my primary concern is stability, reliability and security. Stabilizing the core functionality and APIs rather than rapidly expanding the feature set. I’d rather have the community be able to build stuff with Space Lua than to build in more functionality directly.
Specifically:
Sync engine: I think here we see mixed experiences. I barely see any issues, for others weird stuff happens. I think at its core the sync engine works correctly, it’s just a lot of special cases that make things potentially unreliable. I have some ideas on how to improve this (@mjf — who I know is suffering). Part of this should also be to allow more flexibility in what to sync (specifically: whether to include documents/attachments or not).
Encryption: Currently we rely purely on you securing your server and browser, with SSL in between. I want to explore encryption to make things more secure at various levels: encryption of the local database (IndexedDB), but perhaps even an E2EE mode where the content is stored encrypted on the server and only the end-user has the key. Obviously the latter would break the concept of “these are just a bunch of markdown files on disk” and the ability to run shell commands so this would be optional. It could, however, provide a secure way to run SB in a multi-tenant cloud environment.
Maybe one thing you can consider is spacelua development experience, like documentation, error handling (I think I had one case where invalid space lua code would cause everything to loop), more examples (simple ways to create slash commands, and new page templates) and tooling.
This is probably not that interesting for non technical users but even just “this is how you can make a header on top of your journal page that shows upcoming birthdays” would be neat and a motivation to learn lua.
Right now we can plop space lua code anywhere but it might actually be better to be more opinionated (at least, give strong recommendation) as to where the code should be (like, an extensions/ folder?)
The End-to-End-Encryption (E2EE) is indeed good thing and it is certainly worth implementing, but please, it should be optional, opt-in, feature.
I have my disks, of course, encrypted. I edit the content of files in vi(1) very often and I also use other unix tools to inplace edit them, such as sed(1) for finding and renaming things in the whole space etc.
I would beg for some deep inspection of the overall logic. What is the actuall “notion” of the source of truth in Silverbullet? How does it resolve split-brain scenarios? Do some potentional edge-case race conditions exist? I know you did your best to avoid any logical flaws in the code but from what I have seen so far, there are at least some edge-cases where the synchronization mechanisms can fail to do good job for the user. On the other hand, these things are always extremely hard to debug, reproduce, etc.
Apart from synchronization of the content between Silverbullet clients and the server I would also like to see the eversaving mechanism to be revisited. Silverbullet is now saving immediately after I write a letter. This is sub-optimal, it causes miscellaneous issues (discrupts selection of text, for example, in code blocks) and the scenario should be somehow configurable, customizable. I would suggest to look into this as well.
Some people were also suffering from the periodical actions in Silverbullet, as I remember. Any background action, such as (re-)indexing, saving or synchronizing, should not disrupt client action (reseting menu position, for example, or the issue with the selected text).
All of these things look like to have something similar. I cannot guess more.
If I were to add anything, it would be some “selective sync” to avoid overloading the browser with big files in the space.
This is a bad habit, but I love storing files like PDFs, PPTs, and images in notes. Having them available in the exact right context is very appealing to me.
Ability to for custom code to use Cmd+/ kind of input would be nice for full text search.
IMO Encryption is incredibly out of scope for now, as long as we dont allow multi-user interaction, E2E is extremely trivial for single user with just space-JS thingy.
If you however implement solid multi-user env. and new sync, with stuff like Jetstream for event handling, that would be much more useful than e2e.
I do remember there were a bunch of concerns around performance at scale - when the number of documents shoots up. Personally I haven’t hit them yet and maybe v2 has made it much better, but given there is some thought on a managed hosted silverbullet solution, this could turn up as a concern pretty quick. It might be worth reviving the discussions around that as well.
I’ve just updated the “sync engine” item to include selective syncing. Indeed, it should at least be possible to opt out of syncing documents (anything that is not a page) to all devices, this really limits scalability.
If this is done in a gitignore style, could I then exclude all files and live in an “offline” mode again ?
Obviously it won’t be aaaas offline as the offline mode was, but just letting the sync engine pass through all files seems like a simple way to bring back offline mode, without all the coding overhead.