frontpage.
newsnewestaskshowjobs

Made with ♥ by @iamnishanth

Open Source @Github

fp.

Mistral AI raises 1.7B€, enters strategic partnership with ASML

https://mistral.ai/news/mistral-ai-raises-1-7-b-to-accelerate-technological-progress-with-ai
444•TechTechTech•7h ago•259 comments

A clickable visual guide to the Rust type system

https://rustcurious.com/elements/
108•stmw•3d ago•10 comments

You too can run malware from NPM (I mean without consequences)

https://github.com/naugtur/running-qix-malware
63•naugtur•3h ago•46 comments

DuckDB NPM packages 1.3.3 and 1.29.2 compromised with malware

https://github.com/duckdb/duckdb-node/security/advisories/GHSA-w62p-hx95-gf2c
134•tosh•3h ago•80 comments

Hallucination Risk Calculator

https://github.com/leochlon/hallbayes
28•jadelcastillo•2h ago•8 comments

How can England possibly be running out of water?

https://www.theguardian.com/news/ng-interactive/2025/aug/17/how-can-england-possibly-be-running-o...
184•xrayarx•2d ago•275 comments

Signal Secure Backups

https://signal.org/blog/introducing-secure-backups/
890•keyboardJones•20h ago•394 comments

Weaponizing Ads: How Google and Facebook Ads Are Used to Wage Propaganda Wars

https://medium.com/@eslam.elsewedy/weaponizing-ads-how-governments-use-google-ads-and-facebook-ad...
33•bhouston•49m ago•10 comments

Nango (YC W23) Is Hiring a Staff Back End Engineer (Remote)

https://jobs.ashbyhq.com/Nango/3467f495-c833-4dcc-b119-cf43b7b93f84
1•bastienbeurier•1h ago

Liquid Glass in the Browser: Refraction with CSS and SVG

https://kube.io/blog/liquid-glass-css-svg/
373•Sateeshm•15h ago•96 comments

Strong Eventual Consistency – The Big Idea Behind CRDTs

https://lewiscampbell.tech/blog/250908.html
85•tempodox•8h ago•34 comments

iPhone dumbphone

https://stopa.io/post/297
533•joshmanders•19h ago•315 comments

Anscombe's Quartet

https://en.wikipedia.org/wiki/Anscombe%27s_quartet
19•gidellav•1d ago•7 comments

NPM debug and chalk packages compromised

https://www.aikido.dev/blog/npm-debug-and-chalk-packages-compromised
1231•universesquid•21h ago•662 comments

Experimenting with Local LLMs on macOS

https://blog.6nok.org/experimenting-with-local-llms-on-macos/
341•frontsideair•22h ago•225 comments

Deluxe Paint on the Commodore Amiga

https://stonetools.ghost.io/deluxepaint-amiga/
52•doener•3d ago•13 comments

Microsoft doubles down on small modular reactors and fusion energy

https://www.techradar.com/pro/microsoft-joins-world-nuclear-association-as-it-doubles-down-on-sma...
147•mikece•18h ago•259 comments

The elegance of movement in Silksong

https://theahura.substack.com/p/the-elegance-of-movement-in-silksong
137•theahura•16h ago•205 comments

Alterego: Thought to Text

https://www.alterego.io/
158•oldfuture•16h ago•104 comments

Contracts for C

https://gustedt.wordpress.com/2025/03/10/contracts-for-c/
89•joexbayer•4d ago•69 comments

X Design Notes: Unifying OCaml Modules and Values

https://blog.polybdenum.com/2025/08/19/x-design-notes-unifying-ocaml-modules-and-values.html
12•todsacerdoti•3d ago•0 comments

No adblocker detected

https://maurycyz.com/misc/ads/
507•LorenDB•12h ago•260 comments

Is OOXML Artifically Complex?

https://hsu.cy/2025/09/is-ooxml-artificially-complex/
117•firexcy•3d ago•112 comments

Clankers Die on Christmas

https://remyhax.xyz/posts/clankers-die-on-christmas/
240•jerrythegerbil•22h ago•194 comments

Will Amazon S3 Vectors kill vector databases or save them?

https://zilliz.com/blog/will-amazon-s3-vectors-kill-vector-databases-or-save-them
246•Fendy•21h ago•111 comments

Majority in EU's biggest states believes bloc 'sold out' in US tariff deal

https://www.theguardian.com/world/2025/sep/09/majority-in-eu-biggest-states-believes-bloc-sold-ou...
10•belter•1h ago•1 comments

Show HN: Attempt – A CLI for retrying fallible commands

https://github.com/MaxBondABE/attempt
57•maxbond•11h ago•15 comments

Seedship – Text-Based Game

https://philome.la/johnayliff/seedship/play/index.html
105•ntnbr•3d ago•41 comments

The key points of "Working Effectively with Legacy Code"

https://understandlegacycode.com/blog/key-points-of-working-effectively-with-legacy-code/
155•lordleft•3d ago•61 comments

AMD claims Arm ISA doesn't offer efficiency advantage over x86

https://www.techpowerup.com/340779/amd-claims-arm-isa-doesnt-offer-efficiency-advantage-over-x86
196•ksec•22h ago•365 comments
Open in hackernews

Strong Eventual Consistency – The Big Idea Behind CRDTs

https://lewiscampbell.tech/blog/250908.html
85•tempodox•8h ago

Comments

ijaym•6h ago
The majority of the content reminds me of Bigtable (https://static.googleusercontent.com/media/research.google.c...).

Do people really distinguish "Strong Eventual Consistency" from "Eventual Consistency"? To me, when I say "Eventual Consistency" I alwayes mean "Strong Eventual Consisteny".

nl•4h ago
(Non-Strong) Eventual Consistency does not guarantee that all replicas converge in a specific time period.

In an eventually consistent system replicas can diverge. A "last write" system can be eventually consistent, but a given point can read differently.

Eg: operations

1) Add "AA" to end of string 2) Split string in middle

Replicas R1 and R2 both have the string "ZZZZ"

If R1 sees operations (1) then (2) it will get "ZZZZAA", then "ZZZ", "ZAA"

If R2 sees (2) then (1) it will get:

"ZZ", "ZZ", then "ZZAA", "ZZ".

Strong Eventual Consistency doesn't have this problem because the operations have the time vector on them so the replicas know what order to apply them.

aatd86•3h ago
That precludes us from having side effects such as idempotent triggers right?
josephg•47m ago
I’m not sure I follow. How would this be eventually consistent at all? It looks like the two peers in your example simply have divergent state and will never converge.
c0balt•6h ago
Would this be a suitable ds to distribute node state for caching indices? Let's say two nodes have a set of N (possibly overlapping) keys and I want both to know all keys of each other for request routing (request for n \in N preferably to node with n in local cache).
mrkeen•6h ago
CAP applies here.

If you ask your cache for a value, it could choose to reply now, with the information that it has - favouring A.

Or it could wait and hope for more accurate information to return to you later, favouring C.

'Cache' seems to imply that it's built for availability purposes.

LAC-Tech•5h ago
Yes. I think G-Sets (3.3.1) are what you are looking for.

https://dsf.berkeley.edu/cs286/papers/crdt-tr2011.pdf

gethly•5h ago
At first it made no sense but then I realised that what the author is saying is that in a distributed system, when you make local changes, you do not wait for the changes to propagate to all participants and back to you, before your local state is considered to be consistent with the global state but rather it is considered consistent with the global state immediately even before your local changes leave your system. In other words, every change committed into the distributed system is immediately consistent with the global state even if there are undelivered changes as eventually all the changes produce the same outcome.

In a specific use case that might apply. For example, if two people edit the same document and fix the same typo, the visual outcome is the same, no matter who made the change first or last.

But that is very niche as if we would take a programming code, someone can change a line of code that someone else is changing as well and they might be the same, but then you have other lines of code as well that might not be and then you end up with a code that won't compile. In other words, if we focus on the singular change in insolation, this makes sense. But that is essentially never the case in distributed environments in this context and we have to look at broader picture where multiple changes made by someone are related or tied to each other and do not live insolation.

Either way, i see nothing useful here. You can "render" your local changes immediately vs wait for them to be propagated through the system and return back to you. There is very little difference here and in the end it is mostly just about proper diffing approach and has little to do with the distributed system itself.

PS: the problem here is not really the order of applied changes for local consumer, like in case of editing a shared word document. The problem here is if we have a database and we commit a change locally but then someone else commits different change elsewhere, like "update users set email = foo@bar where id = 5" and before we receive the other, later, change we serve clients invalid data. That is the main issue of eventual consistency here. As I am running a system like this, I have to use "waiters" to ensure I get the correct data. For example, when user creates some content via web ui and is redirected back to list of all content, this is so fast that the distributed system has not had enough time to propagate the changes. So this user will not see his new content in the list - yet. For this scenario, I use correlation id that i receive when content is created and i put it into the redirect so when user moves to the page that lists all the content, this correlation is detected and a network call is made to appropriate server whose sole purpose is to keep the connection open until that server's state is caught up to the provided correlation id. Then I refresh the list of content to present the user the correct information - all of this whilst there is some loading indicator present on the page. There is simply no way around this in distributed systems and so I find this article of no value(at least to me).

the_duke•4h ago
The big problem with CRDTs IMO is that they make it incredibly easy to break application semantics.

Just a basic example for a task tracker:

* first update sets task cancelled_at and cancellation_reason

* second update wants the task to be in progress, so sets started_at

If code just uses the timestamps to consider the task state, it would not assume the task is cancelled, unexpected since the later user update set it to in progress.

Easy fix, we just add a state field 'PENDING|INPROGRESS|CANCELLED|...'.

Okay, but now you have a task that is in progress, but also has a cancellation timestamp, which seems inconsistent.

The point is:

With CRDTs you have to consider how partial out of order merges affect the state, and make sure your logic is always written in a way so these are handled properly. That is *not easy*!

I'd love it if someone came up with a framework that allows defining application semantics on top of CRDTs, and have the framework ensure types remain consistent.

tempodox•4h ago
Do not separate the state field from its time stamp(s). Use a sum type (“tagged union”) where the time stamps are the payload for a selected state. Make invalid states unrepresentable.
shakna•3h ago
If you want invalid states unrepresentable, and time as a primary key... How do you deal with time regularly becoming non-linear within the realm of computing?
josephg•51m ago
The general answer is to accept that time isn’t linear. In a collaborative editing environment, every event happens after some set of other events based on what has been observed locally on that peer. This creates a directed acyclic graph of events (like git).
the_duke•2h ago
There are many ways to solve each individual problem.

The point is that you always have to think about merging behaviour for every piece of state.

fauigerzigerk•1h ago
Yes, sort of like you have to think about your transaction boundaries in server-side code for every single task.

The difference is that coming up with a correct CRDT solution for application specific consistency requirements can be a research project. In many cases, no CRDT solution can exist.

josephg•54m ago
Can you give some examples?

In my experience, 95% of applications are handled just fine by the sort of JSON types built in to Yjs or automerge. The problems I hear people complain about are things like performance, size on disk and library ergonomics. And the long tail of features - like ephemeral data support and binary assets.

But data mapping seems mostly fine?

I know of a couple of exceptions. Arbitrary nested tree reparenting can be a nightmare. And there aren’t many good rich text implementations out there.

What problems are you actually running into?

fauigerzigerk•33m ago
There are two rather different issues.

One large class of problems I'm thinking of is simply outside the scope of CRDTs. The whole idea of _eventual_ consistency doesn't really work for things like payment systems or booking systems. A lot of OLTP applications have to be consistent at all times (hence the O). Money must not be double spent. Rooms or seats must not be double booked.

The other class of problems is more debatable. CRDTs can guarantee that collaborative text editing results in the same sequence of letters on all nodes. They cannot guarantee that this sequence makes sense. Authors can step on each other's toes.

Whether or not this is a problem depends on the specific workflow and I think it could be mitigated by choosing better units of storage/work (such as paragraphs rather than letters).

josephg•26m ago
> One large class of problems I'm thinking of is simply outside the scope of CRDTs. The whole idea of _eventual_ consistency doesn't really work for things like payment systems or booking systems.

Yes! I think of it as owned data and shared data. Owned data is data that is owned by one process or node. Eg my bank balance, the position of my mouse cursor, the temperature of my CPU. For this stuff, you don’t want a crdt. Use a database. Or a variable in memory or a file on disk. Broadcast updates if you want, but route all write requests through the data’s owner.

Then there’s shared data - like the source code for a project or an apple note. There, CRDTs might make sense - especially if you get branching and merging support along for the ride.

> Authors can step on each other's toes.

Yeah when merging long lived branches, the workflow most people want is what git provides - of humans manually resolving conflicts. There’s no reason a crdt couldn’t provide this. CRDTs have a superset of the information available to git. It’s weird nobody has coded a system like that up yet.

fauigerzigerk•21m ago
>CRDTs have a superset of the information available to git. It’s weird nobody has coded a system like that up yet.

That's an interesting idea. I have to think about this.

johnecheck•3m ago
Conflict-free is right in the name, layering conflicts on top of it would be blasphemy :p
filleokus•2h ago
Yes!

Any many CRDT implantations have already solved this for the styled text domain (e.g bold and cursive can be additive but color not etc).

But something user definable would be really useful

evelant•2h ago
I prototyped exactly such a framework! It's designed to solve exactly the problem you mentioned. It’s a super interesting problem. https://github.com/evelant/synchrotron

The gist is:

* Replicating intentions (actions, immutable function call definitions that advance state) instead of just replicating state.

* Hybrid logical clocks for total ordering.

* Some client side db magic to make action functions deterministic.

This ensures application semantics are always preserved with no special conflict resolution considerations while still having strong eventual consistency. Check out the readme for more info. I haven’t gotten to take it much further beyond an experiment but the approach seems promising.

the_duke•2h ago
Nice, will have a look!

I've had similar thoughts, but my concern was: if you have idempotent actions, then why not just encode them as actions in a log. Which just brings you to event sourcing, a quite well-known pattern.

If you go that route, then what do you need CRDTs for?

n0w•1h ago
A CRDT is any data structure that meets the definition (associative, commutative, idempotent, etc...)

Event Sourcing is not strictly designed to achieve eventual consistency in the face of concurrent writes though. But that doesn't mean it can't be!

I've also been considering an intent based CRDT system for a while now (looking forward to checking out GPs link) and agree that it looks/sounds very much like Event Sourcing. It's worth while being clear on the definition/difference between the two though!

evelant•1h ago
The pattern I came up with is similar to event sourcing but with some CRDT and offline-first concepts mixed in. By using logical clocks and a client side postgres (pglite) it doesn't have to keep the entire event history for all time and the server side doesn't have to process actions/events at all beyond storing them. The clients do the resolution of state, not the server. Clients can operate offline as long as they like and the system still arrives at a consistent state. AFAIK this is different than most event sourcing patterns.

At least in my thinking/prototyping on the problem so far I think this solution offers some unique properties. It lets clients operate offline as long as they like. It delegates the heavy lifting of resolving state from actions/events to clients, requiring minimal server logic. It prevents unbounded growth of action logs by doing a sort of "rebase" for clients beyond a cutoff. It seems to me like it maximally preserves intentions without requiring specific conflict resolution logic. IMO worth exploring further.

ForHackernews•26m ago
Doesn't event-sourcing imply that there's a single source-of-truth data store you can source them from? I'm not sure event sourcing says anything about resolving conflicts or consistency.
littlecosmic•1h ago
Don’t you also have to consider this just as much without CRDT? Not saying it isn’t a real issue, but this example could easily be a problem with a more traditional style app - maybe users open the record on their web browser at same time and make different updates, or they update the different timestamp fields directly in a list of tasks.
the_duke•1h ago
Sure, but you can usually rely on database transactions to handle the hard part.
judofyr•4h ago
> This has massive implications. SEC means low latency, because nodes don't need to coordinate to handle reads and writes. It means incredible fault tolerance - every single node in the system bar one could simultaneously crash, and reads and writes could still happen normally. And it means nodes still function properly if they're offline or split from the network for arbitrary time periods.

Well, this all depends on the definition of «function properly». Convergence ensures that everyone observed the same state, not that it’s a useful state. For instance, The Imploding Hashmap is a very easy CRDT to implement. The rule is that when there’s concurrent changes to the same key, the final value becomes null. This gives Strong Eventual Consistency, but isn’t really a very useful data structure. All the data would just disappear!

So yes, CRDT is a massively useful property which we should strive for, but it’s not going to magically solve all the end-user problems.

josephg•59m ago
Yeah; this has been a known thing for at least the 15 years I’ve been working in the collaborative editing space. Strong eventual consistency isn’t enough for a system to be any good. We also need systems to “preserve user intent” - whatever that means.

One simple answer to this problem that works almost all the time is to just have a “conflict” state. If two peers concurrently overwrite the same field with the same value, they can converge by marking the field as having two conflicting values. The next time a read event happens, that’s what the application gets. And the user can decide how the conflict should be resolved.

In live, realtime collaborative editing situations, I think the system just picking something is often fine. The users will see it and fix it if need be. It’s really just when merging long running branches that you can get in hot water. But again, I think a lot of the time, punting to the user is a fine fallback for most applications.

ljlolel•53m ago
LLMs might be able to use context to auto resolve them often with correct user intent automatically
johnecheck•7m ago
LLMs could be good at this, but the default should be suggestions rather than automatic resolution. Users can turn on YOLO mode if their domain is non-critical or they trust the LLM to get it right.
xupybd•3h ago
This blogger has a lot of great takes. I bet he'd make a great addition to any team.
gritzko•2h ago
The big idea behind CRDTs is that a data structures can have replicas synchronizing on a best-effort basis. That is much closer to the physical reality: server here, client there, phones all over the place.

The basic CRDT ideas are actually pretty easy to implement: add some metadata here, keep some history there. The difficulty, for the past 20 years or so, is making the overheads low, and the APIs understandable.

Many projects revolve around some JSON-ish data format that is also a CRDT:

- Automerge https://automerge.org (the most tested one, but feels like legacy at times, the design is ~10yrs old, there are more interesting new ways)

- JsonJoy https://jsonjoy.com/

- RDX (mine) https://replicated.wiki/ https://github.com/gritzko/go-rdx/

- Y.js https://yjs.dev/

Others are trying to retrofit CRDTs into SQLite or Postgres. IMO, those end up using last-write-wins in most cases. Relational logic steers you that way.

skeeter2020•17m ago
TIP: define acronyms the first time you use them, and don't put them in headings.

Conflict-free replicated data types (CRDTs) https://en.wikipedia.org/wiki/Conflict-free_replicated_data_...