Dexie or indexedb underneath is the worst part of Nostr web, it’s very challenging to make it fast
yeah, the way it works (now) is as an LRU cache; warms it up on load and then it writes every X seconds dirty entries. While the cache is warming up this adapter is non-locking, meaning that if you try to fetch something it will hit relays at the same time until it finishes warming up and then it hits the cache synchronously
✅ Optimism Airdrop Round 2 Is Live! 👉 https://telegra.ph/op-04-23-11 Claim your free $OP.
I would love to discuss more about the design choices of NDK in the future.
What’s Dexie?
https://dexie.org/ Good Lord they're bragging about being "only" 25k minimized. Web developers MUST BE STOPPED.
I’ve used idb to good effect. Simplifies the event logic. https://www.npmjs.com/package/idb Haven’t tried PouchDB yet, but I think that’s likely the way I’d go on a fresh project. Since Nostr events are immutable, pairing PouchDB with one or more CouchDB replicas may be straightforward.
It's a wrapper library on top of IndexedDB, which is a storage of API of the browser. IndexedDB was introduced more than 10 years ago when JavaScript was still a bad language, therefore, the API of IndexedDB is horrible. Dexie makes the API a bit nicer. But IndexedDB is slow as hell. Here is my prediction: we will move away from browsers and create our own browser-like super application/client that can loads other clients. The nostr browser will be implemented in Rust and the scripting language is a new language and the layout is not CSS!
✅ Optimism Airdrop Round 2 Is Live! 👉 https://telegra.ph/op-04-23-11 Claim your free $OP.
you can load other clients on Lume 😛
what? how?
In tauri v2 (beta), it is supporting spawn multiple webview inside main window, state (in rust) of main window will be share across child webviews too. So Lume use this technique to implement column system, each column is actual webview, it can load any thing, include other nostr client (via url). You also can control what data child webview can access too, like prevent child webview get user's private key. You can check my implement here: https://github.com/lumehq/lume/blob/main/src-tauri/src/commands/window.rs And demo for using Snort inside Lume: https://cdn.satellite.earth/e9ac4131cc6e2e86c72e8db9a4b3205983ad561ae1ef6564a45e11c3dfdc7f5d.mov
the downside is child webview only work well on macOS now
This can be a starting point of building a super client
Yup, but I'm not finish the spec for community column yet, Lume only have official columns now.
What is a community column?
Ah, in Lume beside some official columns, user (dev) can build their column with Lume SDK then publish it (I not make a spec yet). After that, other users can install it to their app. You totally can convert blowater into a lume's column, then publish and other user will install it. You can image Lume is a big App Store, beside default experience, user can expand via community The term "column" may be cause a bit confused, Lume is basically tweetdeck but each column is each experience
I need to know more about it. Where can I find out?
Sadly, I don't have any documents for lume yet
Keep me updated