427 points by gjvc 3 days ago | 34 comments
softfalcon 17 hours ago
I'm more than a little worried about the following all being `Coming Soon`:

- Cursors & carets

- Two way sync to your DB

- Video presence & calls

    - both the Group and BinaryCoStreams
All of these are the key reasons I would be evaluating this framework to handle my data. All of these are not fully implemented yet.

It is these key topics of live reloading/updating data that make or break an app. In my opinion, if you haven't concretely solved these problems, you haven't really built a viable state framework for 2024.

I really like the patterns they've implemented though, looks a lot like the same framework I just built on top of MobX, websockets, and React for a recent project. They're headed in the right direction, but I'm not sure they realize how much more work they have to go before this is fully fleshed out.

theanzelm 17 hours ago
It is already persisting and syncing data (fully encrypted) between the cloud and other users. You can think of Jazz as a distributed database itself.

The coming-soon badges are about interop with traditional systems and higher level features we will add later.

The fundamentals are solved and you can build full multiplayer, local-first apps with it.

Does that make sense?

softfalcon 11 hours ago
That sounds a lot more promising!

Which brings in even more questions. What is the performance of these multiplayer experiences? Can I have 1000+ users all connected to the same chat session? What about 10,000?

(these numbers might seem high, but they're what I'm expected to deliver in my day-job)

theanzelm 5 hours ago
Eventually, yes! The origin story of Jazz is that I did a lot of experiments and research to convince myself of satisfying performance characteristics. Right now, the pure-TypeScript implementation is not very optimised and I'm very intentionally optimising it as needed for early adopter apps instead of predicting where bottlenecks are. So if you start building a chat app with 10s of thousands of users interacting, we'll make sure that's possible by when you want to launch.

This lets us more easily prioritise features vs performance.

bilekas 5 hours ago
Not to go off topic but isn't performance metrics your responsibility ? Those are small numbers in reality, but if you are not performing your own tests and trusting the maintainer/publisher instead then you're not doing your 'day-job' properly.
aboodman 15 hours ago
Does it store data persistently anywhere (on servers?). If so where?
theanzelm 7 hours ago
The Jazz Mesh stores everything you sync through it in geographically distributed and redundant servers (with backups to S3)
KPGv2 12 hours ago
It looks like it stores it on Jazz Flex, a paid service.

Free tier is 1GB of storage, and it goes up from there.

boffinAudio 6 hours ago
What plans do you have for a third-party audit/review of your backend to verify the claims being made?

Its one thing to use this service on the basis of encryption claims - its another thing to have to clean up the mess from a forgotten API key being leaked somewhere... is there, therefore, a third party involved in an audit of Jazz?

theanzelm 5 hours ago
First it's all open source so even without knowing that my paid service uses the same open source libraries, you can verify yourself that nothing leaves the client unencrypted.

Of course we will also do public audit(s) with security companies to make sure our cryptographic protocols are sound and implemented correctly.

boffinAudio 3 hours ago
Thanks for the info. Of course, "its all open source" is a fair answer, but its also a dangerous one, since it shifts culpability for verification to anyone who has the time/resources to audit the open source components that you're using.

But, it also has to be stated, there is no guarantee that you're using only the open source components you've declared, which is why an impartial audit by a third party would be necessary before this project can be used to build products in some industries.

Anyway, I see that you have other concerns, so no worries and thanks for the honest answer.

theanzelm 2 hours ago
Just making sure that you saw the point where we will do an impartial third party audit!
boffinAudio 2 hours ago
I did, and I hope you will promote that fact a bit more overtly, because its kind of important for some .. especially in Europe ..
jimmywetnips 16 hours ago
Seems like you have lots of real world mobx experience.

Have you ever read this article, basically saying that every front end state (including mobx) basically ends up being a worse version of a standard database?

https://sqlsync.dev/posts/stop-building-databases/

I ended up finding that article after running into lots of the challenges with mobx State tree. I ended up trying to use watermelondb, a sqlite wrapped for react native, but gave up entirely on offline due to bugs and project abandonment

whizzter 50 minutes ago
I would retort with, stop trying to chuck a SQL database everywhere.

The issue imho is that multiplayer synchronization (like Jazz) should rely on primitives(CRDT or similar) that you really can't hide under abstractions but should be part of the datamodel to allow for custom synchronization protocols for different parts of the datamodel or even exposing synchronization faults to the user.

An analogy would perhaps be how wrongly abstracted systems like CORBA and DCOM lost out (Even if you can run into them in crevices of enterprise systems) to things centered around HTTP calls or simpler message oriented systems like gRPC.

softfalcon 11 hours ago
Yes, I have read and found similar articles to what you've posted!

It is an ongoing exploration for us to find the best way to store/consume reactive state data within our client sites/apps. So far, MobX has given us a lot of leeway since we can create the data store we want for our data.

Going forward, I foresee us switching to something closer to WatermelonDB or maybe even just SQLite with a thin wrapper in React to create observability. I'm not 100% sure where it's going to go, but I agree with you that flexible state management for large platforms evolves fast and the difficulty of creating fast look-ups rapidly approaches "reinventing the DB" client-side.

I've had to build similar on top of SQLite for various other mobile/desktop apps, the problem hasn't really changed, the only difference is we're now using React + JS instead of C++, C#, or Java.

All roads so far have led to SQLite though.

bhl 8 hours ago
I've done the same with mobx-state-tree, and realized I was essentially building a relational database with cache-ing in JavaScript.

The only thing SQLite is missed, which is important when integrating with React, is incremental view maintenance: how do we maintain as much immutable state on an update as possible to avoid wasteful re-renders?

svilen_dobrev 8 hours ago
i have built similar thing long time ago, using couchdb as replication-storage mechanism, and it's variants on non-server platforms - touchdb/android/ios <-> pouchdb/js-browser etc , but yes, except serverside, all other platforms still had sqlite underneath.

Long live sqlite :)

yard2010 14 hours ago
Not GP but isn't it like saying that every database ends up being a worse version of a standard filesystem?
enugu 5 hours ago
The analogy is more like an easier to implement version of a system(Custom Frontend Data Store) is worse than the standardized system (Database) rather than one system(database) being implemented on top of another system(filesystem).

The database has more features relative to filesystem, so we wouldn't miss the filesystem whereas a powerful indexing system is a feature in database missing in frontend data stores.

Some other examples below(Firefox plugins which are file browsers, FTP clients, C programs informally implementing subset of Common LISP features).

https://en.wikipedia.org/wiki/Inner-platform_effect

https://en.wikipedia.org/wiki/Greenspun%27s_tenth_rule

https://wiki.c2.com/?GreencoddsTenthRuleOfProgramming

desdenova 12 hours ago
Every filesystem ends up being a worse version of writing to the disk by hand with a magnetized needle.
bbor 14 hours ago
Plus the sync only works between clients AFAICT — literally all the listed backends are also “coming soon”. Which is troubling, I’d guess that almost all local-first applications need some sort of trusted verification server, at the very least. But maybe I’m biased/unimaginative; I suppose some kinds of collaboration apps (figma, google docs, etc) might work fine serverless? Certainly not games or AI agents, right?

This seems awesome, but my natural game-stopping questions are;

1. When will backends be supported?

2. Why doesn’t the site mention “local-first”?

Oh and just for fun;

3. Why “Collaborative Values” instead of what I learned in school, “Shared Memory”?

theanzelm 7 hours ago
1. The sync is not just between clients, it by default works over a central backend infrastructure that syncs and persists. Plus you can create server workers (with jazz-nodejs) that also are clients to the same infrastructure and can do side-effects like API calls and interacting with “normal” databases in response to react state changing. And they can also mutate Jazz state.

2. The next version will. I like to think of Jazz as distributed state, of which local-first is a special case.

3. Shared memory to me sounds like concurrency is handled with locks, while Jazz uses CRDTs

MrGreenTea 3 hours ago
This looks very like a promising addition to the local-first space. Thanks for your work!

Are there plans for supporting dart/Flutter as well in the future?

theanzelm 3 hours ago
We want to support as many environments as possible and are doing them in order of easiest & most requested - you are the first one to ask about Dart/Flutter

React Native is released (experimental)

After that will be really good support for Next.JS (Jazz for both SSR and client)

A bit later will probably be a Rust port, which then also makes bindings to Swift/Kotlin/Go/... easy

jessmartin 17 hours ago
Over the past few years, I've worked on and used a bunch of different frameworks to try to solve for distributed state. Jazz feels like it has the right "shape" - the right primitives to quickly build an app with magical powers like offline, real-time collab, etc.

If you can push the distributed state problem below the framework level, it becomes dead simple to build apps, which feels great.

theanzelm 17 hours ago
Thanks for the kind words, Jess!
xrd 1 hour ago
Jess would know, DXOS is also amazing and in this space. I learned about DXOS at the local-first unconference after Strange Loop and was very impressed by Jess and his work.
Doorknob8479 7 hours ago
Really interesting. Looking over their github, seems that at its core is a CRDT JSON structure with encryption and permissions built in. Storage, transport and auth are agnostic, but they offer some flavors (sqlite, websockets, clerk, react, nodejs). We're interested in svelte and rust support for now. Looks like the local-first space is gaining traction. Probably this is the most interesting execution so far.
theanzelm 6 hours ago
Thanks for sharing your overview and for the kind words.

I recently hired someone who is a big svelte fan so we’ll have bindings for that soon. Rust is coming a bit later.

somishere 1 hour ago
Not sure if this question belongs on this post but kinda interested in how validation and e.g data schema enforcement work in local first / distributed infrastructure.

Assume this is built into the way you think about the model (and my mental model definitely isn't there yet), but having read the permissions part of the jazz docs (on/off?) and thinking about how client-first platforms like firebase do it with private rules on a centralised server .. I don't get it. Is it possible to do complex validation against e.g writes? Is it a natural state of CRDTs, somehow handled in the PKC, or just a side effect of the data models demanded of the setup?

Any info or pointers to further reading would be ace!

theanzelm 1 hour ago
Right now, we're not doing complex validation very well, we basically rely on all clients having the same schema or backwards-compatible schemas and prevent errors at the type level.

But because the schemas are runtime constructs as well, we might be able to do more complex stuff in the future. Basically any rule you can express as a function of (previous history, new transaction) -> is new transaction valid? can be a rule in theory, and each client will verify it in an eventually consistent way.

For the time being, the Group abstraction with it's reader, writer and admin roles, plus composition of CoValues in different groups is sufficient for most permission-like rules, which is what most apps need most of the time.

Let me know if that makes sense

ccorcos 14 hours ago
Nice abstractions. Though I worry they’re going to be too rigid for some applications.

- how can I setup delivery receipts for messages in your chat app? I want to know if they got my message and when it was sent.

- how can I create a chat group where the entire list of access permissions is not transparently available to everyone? For example, customer support: I don’t want to give out a list of every employee because a customer opens a chat that any employee and respond to.

- how are you handling p2p sync to multiple devices with the same account? Are all of my devices made public to anyone I collaborate with? Or does one device always need to be online?

theanzelm 7 hours ago
- add a “read” property to Message that the other person sets

- groups not only allow adding exact accounts, but also allow for “invites” which in your example only one employee could accept for a new support chat

- devices aren’t synced p2p by default but through the syncing server like everything else. Right now, all devices in one account use the same keypair for signing, so people you collaborate with can’t tell (except that they’re using different anonymous session ids)

theanzelm 17 hours ago
Founder here - thanks for posting this! It’s getting late where I am so everyone who has questions please don’t be shy to ask, will elaborate in detail tomorrow!
chr15m 2 hours ago
What happens to the mesh if this doesn't work out as a commercial enterprise and the company behind it goes away? Practically speaking how much of it is running on your computer's today?
theanzelm 40 minutes ago
Well the version of the Mesh that we offer would go away, but the framework is open source as is a simple but fully functional version of the sync server, so you could somewhat easily host your own mesh. Not having lock-in here is super important for us
Humphrey 14 hours ago
How does the mesh (zero-server) work under-the-hood? What are some example of applications you see being possible with this library? Your site also mentions either using a central server or not having a server. The first idea that comes to mind (perhaps because of your chat example on the homepage) is a decentralised P2P messaging app - something like Messenger or WhatsApp but is completely free from central servers.
theanzelm 5 hours ago
The underlying protocol is peer-to-peer sync, so the mesh is really just a bunch of geographically distributed servers that sync between each other as needed and act as "one giant syncing & persistence peer" for your app - mostly so you can sync stuff between devices even if they're not online at the same time, and to use it like cloud storage (I like to call it "S3 for collaborative data")
s17n 8 hours ago
The first question I have when I visit the site is, how is this different from Firebase?
theanzelm 5 hours ago
On a high level, it solves a similar problem: a full backend so you mostly only have to write a frontend.

But Jazz does so in a completely different (local-first) way: it implements shared state on top of CRDTs and implements user identity and permissions based on public-key cryptography. This means you can create, store and share data from the client (even while offline) while still benefitting from cloud storage and real-time sync between devices and users by default.

timolins 16 hours ago
I love building with Jazz. It's so refreshing to build apps without thinking about backends.

The number one thing I'm looking forward to is React Native support. Having local data that syncs is essential for many mobile apps, but there are no easy solutions yet. (Besides iCloud, which is limited to iOS/macOS)

With Jazz, I can see a future where building syncing, cross-platform apps becomes effortless.

theanzelm 5 hours ago
Thanks, Timo! Couldn't ask for better early adopters than you guys
aliasxneo 17 hours ago
After a cursory review of the docs, it conceptually reminds me of iroh: https://github.com/n0-computer/iroh.
janpmz 5 hours ago
My first thoughts after visiting the webiste: People will be quick to create apps with this. But what happens if I want to implement something that is not supported by the framework yet? That is a common problem with frameworks in my experience.
theanzelm 5 hours ago
Right now we build features exactly when early adopters need them. What's an example of something you're concerned about?
graypegg 17 hours ago
Edit: This IS being used to build a product, see reply below

One thing I always find weird about these sorts of projects is I get the feeling this is a framework built up from scratch. I've always had really bad luck doing that. Extracting and refining something from a running application always feels like you catch the cases that actually matter.

It's neat that it's quick to start, but I think that's mostly because the framework has only been evaluated by making tiny toy examples. Staying reaaaaally close to the framework code is sort of like painting with your nose against the canvas. At the scale of features you want to fit in:

    - live sync
    - authorization
    - video chat
    - an open connection to your DB, presumably meaning this is your main data fetching API
you're basically building 20% of someones else's app that currently doesn't exist. Once it does exist, it'll only be a simple toy example for a short while.

It's sensibly licensed though (MIT), and honestly, skimming the source, seems clean to work with! I hope people using this contribute back to it, to get over that starter-project hurdle.

theanzelm 17 hours ago
Jazz is built specifically for a work-in-progress, but full app (essentially a Notion clone, TBA) and all the design choices are driven by that.

Completely agree that this is the only way to create frameworks.

Edit: also other people are building full apps with it too which I’ll showcase soon. https://learn-anything.xyz/ is one example, https://invoiceradar.com/ is another.

salomonk_mur 9 hours ago
That first link is great. Thank you so much for sharing it.
graypegg 16 hours ago
Oh neat! I stand corrected then! That's really cool!

Definitely get that showcase up, I think it just helps to confirm this isn't one of those stealth-mode "solves everything" dev tools that disappears along with it's VC funding.

avodonosov 7 hours ago
Reminded me of the Google Realtime API, killed by google 6 years ago. https://developers.google.com/google-apps/realtime/overview

This one is open source, thus hopefully a safer choice.

theanzelm 5 hours ago
Even with the high failure rate of startups, I hope I'll do infinitely better than Google's certain product death (plus yeah, it's open source)
avodonosov 2 hours ago
How difficult it is to self host? Is backend (the mesh) also open source?
theanzelm 39 minutes ago
yes a simple version of it is!

npx jazz-run sync

stanislavb 13 hours ago
An interesting project and looks quite promising. I will be keeping an eye on it. The source code can be found here https://github.com/gardencmp/jazz (TypeScript).
novoreorx 1 hour ago
It seems to be an InstantDB alternative that integrates more closely with React.
theanzelm 1 hour ago
Yes, plus it’s actually local-first (works offline) and you don’t have to trust the syncing & persistence infrastructure because only encrypted edits are synced!

Also you can use it as blog storage as well

novoreorx 1 hour ago
Sounds interesting, is it SaaS-only or self-hostable?
theanzelm 12 minutes ago
yohannparis 17 hours ago
Where are the information about the company? I cannot find an About Us, where they are based, etc?
theanzelm 17 hours ago
Founder here - we’re working on that page, so far there’s just info on me on https://gcmp.io/team

But I was able to hire a couple really good first people recently! We’re based all over Europe.

Let me know what else you’d like to know!

yohannparis 1 hour ago
Thank you I really appreciate it. As an European, I am trying to use only database/sync services based in Europe using European datacenter. Is it the case for Jazz?
azeirah 4 hours ago
Are you looking to hire at all? This is the kind of technical work that I'm very interested in.

I'm based in Europe.

theanzelm 3 hours ago
I think we're good for now but please link your GitHub / most impressive project, or shoot me an email to anselm@gcmp.io
huhtenberg 5 hours ago
Opening a demo chat app URL in Private Mode in Firefox results in perpetual "Loading..." screen and the following error on the console:

  Uncaught (in promise) DOMException: A mutation operation was attempted 
  on a database that did not allow mutations.
theanzelm 5 hours ago
Thanks for reporting, created an issue: https://github.com/gardencmp/jazz/issues/498

In this case we should fall back to using in-memory state only

jbkkd 1 hour ago
How do this compare (or differ) to PartyKit?
theanzelm 1 hour ago
Partykit is mostly an abstraction on top of Cloudflare Durable Objects and offers simplified Websockets for room-like multiplayer.

Jazz is a framework for building apps around locally mutable collaborative values which are granularly synced (you don't have to worry about data transport or coordinating sync between collaborators, you just set permissions and edit data)

bbojan 15 hours ago
How does this compare to Instant (https://www.instantdb.com/)?
aboodman 14 hours ago
Jazz is decentralized. There is no central server. See: https://x.com/aboodman/status/1843045692736204802
aboodman 14 hours ago
Also Instant is a database (it has queries and so forth, more appropriate for bigger data). I would put Jazz at the document sync side of the spectrum:

https://x.com/aboodman/status/1843042582672355834

theanzelm 5 hours ago
This is fair, thanks for chipping in, Aaron!

With decentralised I always like to be very precise:

- Jazz is decentralised in a "source of truth" sense. You mutate data locally and sync edits between participants until you reach eventually consistent history (and thus state, as per the underlying CRDTs)

- the protocol is peer-to-peer

- the way you use it typically is in a very centralised way. You use a central sync and persistence peer (either your own, or my distributed Jazz Mesh service) and every device syncs to that. That way devices don't have to be online at the same time to sync

gr__or 6 hours ago
I'm jazzed about Jazz, I think Anselm got the priorities right and I'm excited to use it soon. If you get the chance to hear him talk about it, I highly recommend that too!
theanzelm 5 hours ago
Thanks, whoever you are!
dalben 3 hours ago
This is absolutely fantastic! I have been looking on and off for something like this for years (some of the things I have used are CouchDB, command/event sourcing, and ditto.live).

I have not been able to read the docs fully, but some questions:

* How do you handle state that is too big to send to the client fully? In a chat application, does the client need to have the whole channel history, or is syncing a subset of that supported? * Does permissioning support partial CoValues? For example, "You can edit the contents but not the title of the 'blog post #11' object" * Do you have resources about the suggested data modelling? Things like how granular should a CoValue be and what the trade-offs are. * How do you handle deletion? Do you tombstone? Is there a way to fully scrub a value from history (to support, for example, GDPR's right to erasure)?

theanzelm 3 hours ago
- Jazz is built with granular syncing in mind. CoValues are meant to be small (think one level of a JSON tree) and then reference each other. You only resolve references and sync as far down as you need / in lists you can do pagination.

- CoValues can reference CoValues that belong to a different group and thus have different permissions. In your example the title would need to live in its own CoValue and group compared to the content, which is a tiny bit more setup, but totally viable

- no resources for data modelling yet, but the guide + example apps should give you a very good idea. If you have any questions, please ask on Discord! https://discord.gg/sesjU2W5

- deletion is typically soft-deletion with tombstones. Total erasure of entire CoValues is coming soon but should only be needed in compliance situations (such as GDPR)

Ey7NFZ3P0nzAe 15 hours ago
Nice. Is there a way to add an rss feed? Can't seem to make the newsletter subscription work (could totally be my fault)

Also, do you think there will be a way to use python with it?

theanzelm 5 hours ago
I think the email newsletter is broken, sorry! Best way to follow it is Twitter and joining the Discord https://discord.gg/sesjU2W5

I haven't had someone ask for Python yet, but I want to eventually support as many environments as possible. Which use-case do you have in mind?

pshc 17 hours ago
> Jazz Mesh is currently free — and it's set up as the default sync & storage peer in Jazz

How difficult is it to run my own backend?

Edit:

> Completely DIY Mesh.

> Build your own network of sync and storage nodes. Handle networking, security and backups yourself.

> Costs:

> N × instance cost for your sync nodes.

> Very high self-hosted egress costs.

> High self-hosted storage costs.

Compared to Mesh Pro at $79 for 30,000 sync-minutes (“Sync-minutes are counted on a per-connected-device, per-minute basis.”) per month… I bet the cost of self-hosted storage and egress is very low, actually, of course assuming you have the competence and time to DIY it.

theanzelm 17 hours ago
npx jazz-run sync

Either locally or on your server.

And then point the app to that!

Edit: re pricing

Super preliminary, curious to hear everyone’s thoughts

earthnail 4 hours ago
Storage seems reasonable, maybe even a bit too cheap, but the sync minutes look way too expensive. One problem is with end-user monetization: users are used to pay for storage, but not for how much time they can use your app.

For a small storage-heavy indie app I have, I'd pay $79 for base price, $45 for additional storage, and $1500 for sync minutes.

theanzelm 4 hours ago
Thanks, this is very helpful. If it's unfeasible for a small indie app then that's a bug in the pricing.

If you have time, I'd love to hear about your app and work out alternatives (not just for you, but for everyone)

anselm@gcmp.io anselm_io on Twitter

Or book a chat directly: https://cal.com/anselm-io/talk-about-jazz

(everyone else who has opinions on pricing is welcome to do the same)

pkrulz101 2 hours ago
Random one, but how do you find using Cal - Im keen to try it out?? I saw it on Onestack.cloud hosted for A$10 per 10 users per month which is pretty decent - our startup has a few founders and are pre-revenue, so means we couldn't really afford per user per month.
theanzelm 2 hours ago
It's great! The first really good commercial open source SaaS app in my opinion and a big inspiration
2 hours ago
whalesalad 18 hours ago
yawnxyz 17 hours ago
very cool! I was there for maybe 2 minutes before HN took the system down :D
theanzelm 17 hours ago
Investigating why it’s breaking, was there a lot of people in that room?
whalesalad 17 hours ago
when it broke there were 3-4 people in it
theanzelm 5 hours ago
update: it's not the amount of people in it that broke this room https://news.ycombinator.com/item?id=41775047
theanzelm 4 hours ago
update 2: should be working now (give it a second to fully load)
theanzelm 3 hours ago
update 3: added rendering of only the newest messages per default, scroll-to-bottom, and message length truncation to deal with the spam a bit better
gocken 16 hours ago
Not very cool if it breaks under hardly any load.

You'd think they'd test their tech demos on more than a handful of people before launching. This doesn't give much confidence at all in their product.

aboodman 14 hours ago
I don't think you're on the right forum if this is your response to somebody launching something new and technically interesting.
theanzelm 5 hours ago
Looks like it's not load that brought it down but someone posting a 340kb individual message that's triggering a bug because we didn't account for that sort of thing somewhere.

The good thing is we now have an easily reproducible case, thanks HN :)

theanzelm 2 hours ago
Update: it was something else entirely, that we worked around for now and will fix soon
rattray 11 hours ago
note the creator did not intend for the project to be posted to hn at this time
meiraleal 2 hours ago
Tell me you never build anything without telling you never build anything
aboodman 16 hours ago
Very excited to see this. I think this is currently the most promising of the fully-decentralized local-first systems I've seen.
theanzelm 5 hours ago
Thanks, Aaron!
authorfly 17 hours ago
Neat work! Can the author provide any ideas around:

1) Differences from fire-svelte for core functionality?

2) For the beyond core aspects, like Group-WebRTC (great innovation btw), how will things like TURN/PEER servers work to manage the WebRTC connections?

theanzelm 17 hours ago
What exactly does fire-svelte do? For me it looked like a frontend framework but without synced or persisted state?
17 hours ago
bcye 16 hours ago
Awesome project!

fyi on latest Chrome the navigation items blog, releases, roadmap are aligned top/start instead of center for me

theanzelm 5 hours ago
thanks for letting me know!
squidsoup 16 hours ago
You missed an opportunity to call the free tier of your mesh service "free jazz".
theanzelm 16 hours ago
Great idea!
Andrex 8 hours ago
Curious how this compares with Meteor.
theanzelm 5 hours ago
Meteor works on top of a traditional backend (typically MongoDB afaik?) to give you full-stack reactivity.

Jazz implements essentially a distributed database with permissions based on public-key cryptography, so you can meaningfully create, edit, share and store data on the client (even while offline), which gets synced to other users and devices (and stored in the cloud) whenever you're online

azeirah 4 hours ago
Is this synchronisation (theoretically) possible over p2p communication protocols like Bluetooth or wifi direct?

I would more than love to have local networks that can be emergent and growing and shrinking in this way.

Reminds me of my student days when I was traveling in the train, wondering why we couldn't have a p2p social network for people who are in this train _right now_

theanzelm 3 hours ago
yes! The hard part that Jazz doesn't solve is peer discovery. If you give Jazz a peer and a transport mechanism it will happily sync to it
Deen101 5 hours ago
Sounds promising.
cyanydeez 16 hours ago
Nice, but react.
theanzelm 7 hours ago
I’m only showcasing the react bindings because that’s mainstream, but they are only a very thin wrapper over jazz-browser, which you can use in vanilla JS or to build your own framework bindings
veidelis 1 hour ago
Thank you! I was concerned about having a hooks-only API.
candiddevmike 17 hours ago
This is JavaScript only from what I can tell.
nielsbot 17 hours ago
It's TypeScript... but maybe TypeScript only?
frenchie4111 17 hours ago
Mild nit: your website hijacked the back button, I had to spam click back like 30 times to get back to this hacker news comment thread
theanzelm 5 hours ago
Just wanted to apologise to everyone for this, this kind of stuff drives me nuts and I'm not sure how I never noticed - it seems to be a result of how we use the iframe to render the chat example. Investigating!
theanzelm 3 hours ago
Update: this should be fixed now
kspacewalk2 17 hours ago
>I had to spam click back like 30 times to get back to this hacker news comment thread

Click-and-holding or right-clicking the back button will give you a list of last N URLs in your tab history. This page only generates one auto-redirect, so the HN URL will show up.

ddoolin 17 hours ago
Thank you for this. Many years of browser usage and I never knew this.
scoopr 5 hours ago
Such is the years long removal of affordance from the UI. Netscape 4 had a small downwards arrow to indicate a submenu for the backbutton.
cassepipe 3 hours ago
On Firefox it apparently disappeared in 2011

https://github.com/black7375/Firefox-UI-Fix/wiki/%5BArticle%...

abrookewood 12 hours ago
Wow .. you've just removed a massive source of frustration - thank you.
NetOpWibby 16 hours ago
Just tried this in Arc and Firefox...I never knew.
todd3834 17 hours ago
Tip for next time this happens: hold down the back button for a menu of your history. It can help get where you want faster. Although not sure it helps too much if you literally had to click 30 times
brazzledazzle 17 hours ago
That or right click.
theanzelm 17 hours ago
Founder here - do you mean the chat example? Or just the homepage itself?
janderland 15 hours ago
I’m also experiencing issues with the website. I when to the docs page and accidentally pressed back in my browser, after which the forward button wouldn’t work to undo the back operation.

Seems like the website breaks basic browser navigation.

exac 17 hours ago
On Firefox 131.0 I clicked through the tabs with the demo code, then pressed my mouse's "back" button and it didn't work. So I manually clicked the back button and it directed me back to this page.

Then I opened it again and clicked the back button and it didn't work again.

slipgate55 17 hours ago
I couldn't replicate this in Firefox 131 under W11.
rozap 17 hours ago
homepage itself, firefox on ubuntu
theanzelm 17 hours ago
Are the history entries all just the same URL? Thanks for reporting
_false 17 hours ago
Yes (encountered same issue on ff macos after clicking on example tabs)
rbattula 17 hours ago
same for me safari on macos15
neogodless 15 hours ago
Reproduced with Firefox 131.0 on Windows 11. Happens if I click to jazz.tools. After pressing back once, I am still on jazz.tools, but have a forward arrow. It does seem related to the "chat" because the "result" window changes when I click between those back/forward arrow controls of the browser.

https://imgur.com/a/nuUluX3

1 hour ago
gocken 16 hours ago
I wonder if they tested this at all. What a poor showing.
elikarad 6 hours ago
[dead]