|3 months ago||2 days ago|
|GNU General Public License v3.0 only||MIT|
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
Show HN: WebCrate – an open source, social and self-hosted bookmarking tool
5 projects | news.ycombinator.com | 25 Aug 2021
> Deta Space made it really easy for me as dev to build something like WebCrate quickly and it's also awesome for users. The app keeps running even if I disappear and hosting, auth etc. is all handled for me
Ah yeah, love the concept, I had similar goals in mind when making Cardi (although I wasn't aware of many options at the time for putting data in control of the user -- I ended up just having people log in with AWS access keys and it stores data in DynamoDB, which is weird but has actually been working great so far).
Anyways Deta seems interesting, looking forward to seeing where it goes from here! Would love more/better options in this space.
Kanban board in one HTML using localstorage
10 projects | news.ycombinator.com | 15 Feb 2021
Ha, I'm very interested in this!
I had this same problem for my own app, I ended up solving it by just using dynamodb in my personal AWS account as the storage. Generous free tier, great uptime, and no users, security, etc to manage for me, like you mention.
It's way more technical than I'd like of course, since anyone who wants to use it needs to have a personal AWS account. And it isn't "synced", like you say, it's just using the AWS JS SDK to speak to dynamodb directly. But still it's been a real pleasure to build a web app this way -- the fact that anyone can use the app by plugging in their own storage is kind of the web development holy grail IMO.
pickledish/cardi Google Keep, but without the Google.
1 project | reddit.com/r/coolgithubprojects | 2 Feb 2021
Show HN: Cardi – store your notes for free in AWS DynamoDB
2 projects | news.ycombinator.com | 2 Feb 2021
Hey thanks! I wouldn't say it's a hard dependency, in fact it can work with other things that are API-compatible with DynamoDB, like Scylla for example if you wanted to self-host everything:
And in terms of using something like Firestore, the storage needs of this are very simple so it wouldn't be very hard to add that in. I tried to keep all the persistence-related functionality separated off for this purpose:2 projects | news.ycombinator.com | 2 Feb 2021
13 projects | news.ycombinator.com | 29 Dec 2021
You have to handle the merge conflicts yourself, see https://www.sqlite.org/session/sqlite3changeset_apply.html
So you need to be carful how you design your schema, but very possible.
One option is to use something like Yjs and a JSON column to get proper CRDTs for merging.
Markdown editor for freedom!
6 projects | dev.to | 21 Dec 2021
🍻 Collaborate - Shared editing support with yjs
Automerge: a new foundation for collaboration software [video]
13 projects | news.ycombinator.com | 10 Dec 2021
Show HN: SyncedStore CRDT – build multiplayer collaborative apps for React / Vue
11 projects | news.ycombinator.com | 8 Dec 2021
Hi! Great questions :)
First of all, SyncedStore does not implement any CRDT algorithms. Credits for this go to Yjs  (and its author Kevin), which it uses as underlying CRDT.
Yjs and Automerge are (afaik) the two most commonly used CRDT implementations. Both have their pros and cons, but Yjs has focused a lot on performance .
Automerge has a bit friendlier "Immer style"  API. I'm not too familiar with @localfirst/state, but it seems to add a Redux style API on top of Automerge.
Hope you're still following along :) Maybe it helps to compare the TODO-MVC applications, as both SyncedStore (https://github.com/YousefED/SyncedStore/tree/main/examples) and @localfirst/state (https://github.com/local-first-web/state/tree/main/examples/...) have implemented these as examples!11 projects | news.ycombinator.com | 8 Dec 2021
- if you modify a property "prop" and set it to "value" it will sync an update [set "prop" to "value"] along with some metadata
It will not automatically diff these with the previous value (in a distributed system it's difficult to say what the "previous value" was, but it will sync only those properties that have been changed). For text heavy operations, you can use the Text structure which will sync fine-grained operations ([delete 4 characters at position 2] or [insert "world" at position 5]). This makes it suitable for collaborating on rich text documents (similar to Google Docs), see: https://syncedstore.org/docs/advanced/richtext.
This might also be an interesting resource to learn how the Yjs internals work (SyncedStore builds on top of this): https://github.com/yjs/yjs/blob/main/INTERNALS.md
Where is the CRDT for syntax trees
5 projects | news.ycombinator.com | 3 Dec 2021
Todos: The Hard Parts
3 projects | dev.to | 15 Sep 2021
But still, frontend development is pretty damn hard! And that makes sense. Web applications can have interfaces as complex as IDEs and data exchange layers as complex as distributed databases.
A Simple Way to Build Collaborative Web Apps
I haven't yet done this but based on some research it seems to me like the core of any collaborative app today is easiest served by picking some CRDT library.
My basic assumption is that as long as you put all your relevant data into one of these data structures and have the CRDT library hook into a server for storing the data, you're basically done.
This may be a simplistic view of the problem though. For example I've heard people mention that CRDTs can be space inefficient so you may want/have to do periodic compaction.
I've used YJS and can strongly recommend. https://github.com/yjs/yjs
Built a Google Docs like rich text collaborator for a client on Express/Psql and React. Worked like a charm (the hardest part was dealing with ports on AWS tbh).
That's a really nice tutorial. However, most of collaborative apps mentioned in the beginning operate on documents where merging concurrent edits by different users is more of a problem, and there's a really nice tool for that problem: CRDT (https://en.wikipedia.org/wiki/Conflict-free_replicated_data_...) and even ready to use libraries like Yjs (https://docs.yjs.dev).
Of course, there's a lot of very senior HN users who already know about it. I only mention it because I never explored these tools before, learned about it a couple of months ago for the first time in my life and was really impressed.
What are some alternatives?
automerge - A JSON-like data structure (a CRDT) that can be modified concurrently by different users, and merged again automatically.
pacman-backup - :floppy_disk: Pacman Backup tool for off-the-grid updates via portable USB sticks or (mesh) LAN networks.
automerge-rs - Rust implementation of automerge
player.html - One file drop-in video player web app for using video files served using basic directory listing
logseq - A local-first, non-linear, outliner notebook for organizing and sharing your personal knowledge base. Use it to organize your todo list, to write your journals, or to record your unique life.
kanban - A basic kanban board in a single HTML file using browser native drag & drop and localStorage for persistence
Visual Studio Code - Visual Studio Code
crdt-woot - Implementation of collaborative editing algorithm CRDT WOOT.
chronofold - Chronofold is a conflict-free replicated data structure (a.k.a. CRDT) for versioned text.
Kanboard - Kanban project management software
github-scrumboard - :calendar: GitHub Scrumboard Chromium Extension