{"slug": "datomic", "name": "Datomic", "category": "databases", "category_name": "Databases", "description": "", "recommenders": 7, "commenters": 19, "warners": 3, "score": 5.52, "rising": -2.29, "first": "2025-11-04", "latest": "2026-09-14", "why": "The capacity to easily rollback the state to a previous immutably preserved state has always seemed like a fantastic addition to databases", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 8, "neutral": 9, "compare": 1, "warn": 3}, "spark": [0, 0, 4, 3, 0, 1, 0, 0, 0, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "The capacity to easily rollback the state to a previous immutably preserved state has always seemed like a fantastic addition to databases", "kind": "", "icon": true, "domain": "datomic.com", "github_repo": null, "official_url": "https://www.datomic.com", "pricing": "", "aliases": ["Datomic"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 751273008, "item_id": 46954563, "url": "https://news.ycombinator.com/item?id=46954563", "by": "AlotOfReading", "date": "2026-02-09", "stance": "recommend", "quote": "the datalog model it implements is honestly a pretty good way to think about things", "excerpt": "I haven't used datomic specifically, but the datalog model it implements is honestly a pretty good way to think about things. The worst part about learning it has been realizing how many systems out there are just worse reimplementations of the same idea. Gameplay tags for example [0], and quite a lot of SQL. [0] https://dev.epicgames.com/documentation/en-us/unreal-engine/using-gameplay-tags-in-unreal-engine", "context": "", "use_case": "", "switched_from": "", "story": "What Functional Programmers Get Wrong About Systems"}, {"id": 751268576, "item_id": 46954286, "url": "https://news.ycombinator.com/item?id=46954286", "by": "AlotOfReading", "date": "2026-02-09", "stance": "recommend", "quote": "You might be interested in the datomic model", "excerpt": "You might be interested in the datomic model [0], where you never remove data and all previous views of the database remain accessible. [0] https://docs.datomic.com/datomic-overview.html#information-model", "context": "", "use_case": "Immutable history database", "switched_from": "", "story": "What Functional Programmers Get Wrong About Systems"}, {"id": 751212882, "item_id": 46950805, "url": "https://news.ycombinator.com/item?id=46950805", "by": "pgt", "date": "2026-02-09", "stance": "recommend", "quote": "horizontally-scalable Datomic Peers already cache datoms aggressively", "excerpt": "EACL: Enterprise Access ControL is a situated ReBAC Authorization system based on SpiceDB, built in Clojure and backed by Datomic \u2013 https://github.com/theronic/eacl 'Situated' here means that your permission schema & permission data live with your data, which has a number of benefits: - one less network hop, so can be faster than Spice for typical workloads, - one less distributed consistency & syncing problem, - one", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: What Are You Working On? (February 2026)"}, {"id": 750052721, "item_id": 46878295, "url": "https://news.ycombinator.com/item?id=46878295", "by": "eliasdejong", "date": "2026-02-03", "stance": "recommend", "quote": "I suggest you study Datomic and the EAVT data model", "excerpt": "Very cool project! Being able to replay history is huge and makes it possible to look back in time without having to make full copies of the database. This is something that is very much lacking in many SQL systems where you need 'temporal tables' to achieve the same effect, but those are really limited as they have to be setup specifically and often duplicate data unnecessarily. If you are interested in this topic, ", "context": "", "use_case": "", "switched_from": "", "story": "Joedb, the Journal-Only Embedded Database"}, {"id": 749013936, "item_id": 46813371, "url": "https://news.ycombinator.com/item?id=46813371", "by": "christophilus", "date": "2026-01-29", "stance": "recommend", "quote": "it does fit Datomic really well", "excerpt": "Interesting idea, and it does fit Datomic really well. Here's the project the presenter is working on: https://github.com/saberstack/zsxf", "context": "", "use_case": "", "switched_from": "", "story": "Databases: Are We There Yet? \u2013 Spasov [video]"}]}], "caveats": [{"label": "", "summary": "", "quotes": [{"id": 765344336, "item_id": 47834021, "url": "https://news.ycombinator.com/item?id=47834021", "by": "xeubie", "date": "2026-04-20", "stance": "warn", "quote": "it seems like a huge miss that these ones don't", "excerpt": "Surprisingly, neither Datomic nor XTDB support branching. See: https://blog.danieljanus.pl/datomic-forking-the-past/ I actually built my own immutable database which does support branching (see profile), so it seems like a huge miss that these ones don't. It's pretty much the main reason I would want an immutable database.", "context": "", "use_case": "", "switched_from": "", "story": "What if database branching was easy?"}, {"id": 738988624, "item_id": 46186789, "url": "https://news.ycombinator.com/item?id=46186789", "by": "joeevans1000", "date": "2025-12-07", "stance": "warn", "quote": "the companies making the awesome tools that COULD be used by noobs often keep them closed source (Datomic and, I think here, Rama)", "excerpt": "I use both approaches. One thing is that Clojure code bases are comically hard for anyone to mentally parse if they didn't write it. At least the bulk of programmers... like you'll find on an actual team. Great to write, sure, but not useful in terms of onboarding new team members. Clojure programmers are typically great thinkers. And veterans. But if you are actually trying to build a company, then beware. Your hand", "context": "uses both 2D and Clojure-style approaches", "use_case": "", "switched_from": "", "story": "The programmers who live in Flatland"}]}], "who": [], "tags": [], "use_cases": ["immutable history database", "immutable state rollback", "immutable bi-temporal database", "database backing eacl"], "compared": [{"slug": "xtdb", "name": "XTDB", "co": 4, "switched_from": 0, "switched_to": 0}, {"slug": "spicedb", "name": "SpiceDB", "co": 3, "switched_from": 0, "switched_to": 0}, {"slug": "clingo", "name": "Clingo", "co": 2, "switched_from": 0, "switched_to": 0}, {"slug": "datalevin", "name": "Datalevin", "co": 2, "switched_from": 0, "switched_to": 0}], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=47813616", "title": "What if database branching was easy?", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=47798345", "title": "Official Clojure Documentary page with Video, Shownotes, and Links", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=46953491", "title": "What Functional Programmers Get Wrong About Systems", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=46496103", "title": "Databases in 2025: A Year in Review", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=45811447", "title": "Optimizing Datalog for the GPU", "mentions": 2}, {"url": "https://news.ycombinator.com/item?id=49686380", "title": "Ask HN: What are you working on? (September 2026)", "mentions": 1}], "sentiment_by_month": {"2025-11": {"neutral": 2}, "2025-12": {"warn": 1, "neutral": 4}, "2026-01": {"recommend": 4, "neutral": 1}, "2026-02": {"recommend": 3}, "2026-03": {}, "2026-04": {"recommend": 1, "neutral": 1, "warn": 2, "compare": 1}, "2026-05": {}, "2026-06": {}, "2026-07": {}, "2026-08": {}, "2026-09": {"neutral": 1}, "2026-10": {}}, "quotes": [{"id": 795211282, "item_id": 49700705, "url": "https://news.ycombinator.com/item?id=49700705", "by": "fiv0", "date": "2026-09-14", "stance": "neutral", "quote": "The system is very much inspired by Datomic.", "excerpt": "I have been working on a Datalog engine on top of object storage. The system is called https://triplox.xyz/. I am using SlateDB at the storage layer. The system is very much inspired by Datomic. in its final version the only source of the truth and primitive used should be object storage. The most interesting and experimental part of Triplox, are incremental queries (https://triplox.xyz/incremental-queries/overview/)", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: What are you working on? (September 2026)"}, {"id": 765640322, "item_id": 47852520, "url": "https://news.ycombinator.com/item?id=47852520", "by": "j-pb", "date": "2026-04-21", "stance": "compare", "quote": "closer to Datascript or Datomic", "excerpt": "Spot on! In one word. Simplicity! TerminusDB is a RDF database with build-in prolog, a heavy focus on succinct data structure indexes, and has a client server model. Triblespace is purposefully not RDF, because RDF has horrible DX, and it does not have a good reconciliation and distributed consistency story. It's virtually impossible to get RDF data into a canonical form [https://www.w3.org/TR/rdf-canon/#how-to-read]", "context": "", "use_case": "", "switched_from": "", "story": "A type-safe, realtime collaborative Graph Database in a CRDT"}, {"id": 765355952, "item_id": 47834747, "url": "https://news.ycombinator.com/item?id=47834747", "by": "nathell", "date": "2026-04-20", "stance": "warn", "quote": "", "excerpt": "It appears that Datahike [0] is a Datomic workalike that supports branching. I haven\u2019t tried it out myself (yet), but the documentation suggests it\u2019s possible [1]. That said, I\u2019m adding xitdb to the list of tech to try out. Thank you for building it! Oh, and thanks for linking to my article :-) [0]: https://github.com/replikativ/datahike [1]: https://datahike.io/notes/the-git-model-for-databases/", "context": "", "use_case": "", "switched_from": "", "story": "What if database branching was easy?"}, {"id": 765344336, "item_id": 47834021, "url": "https://news.ycombinator.com/item?id=47834021", "by": "xeubie", "date": "2026-04-20", "stance": "warn", "quote": "it seems like a huge miss that these ones don't", "excerpt": "Surprisingly, neither Datomic nor XTDB support branching. See: https://blog.danieljanus.pl/datomic-forking-the-past/ I actually built my own immutable database which does support branching (see profile), so it seems like a huge miss that these ones don't. It's pretty much the main reason I would want an immutable database.", "context": "", "use_case": "", "switched_from": "", "story": "What if database branching was easy?"}, {"id": 764943856, "item_id": 47808991, "url": "https://news.ycombinator.com/item?id=47808991", "by": "dimitar", "date": "2026-04-17", "stance": "neutral", "quote": "It is!", "excerpt": "It is! And also it has inspired a few other clojure datalog databases, so there is much more choice: * https://github.com/datalevin/datalevin * https://github.com/replikativ/datahike * https://github.com/threatgrid/asami There is also xtdb, but it abandoned datalog and is going in another (albeit interesting direction) https://xtdb.com/ here is a comparison website, but it is somewhat out of date: https://clojurelog.", "context": "", "use_case": "", "switched_from": "", "story": "Official Clojure Documentary page with Video, Shownotes, and Links"}, {"id": 764865392, "item_id": 47804087, "url": "https://news.ycombinator.com/item?id=47804087", "by": "pgt", "date": "2026-04-17", "stance": "recommend", "quote": "", "excerpt": "Datomic was the reason I switched [^1] to Clojure as my primary language in 2014. It was a gamble, but it paid off in the end. I maintain that Clojure is the best AI-first language due to the lightning-fast iteration via the nREPL and Clojure's token efficiency. [^1]: https://petrustheron.com/posts/why-clojure.html", "context": "", "use_case": "", "switched_from": "", "story": "Official Clojure Documentary page with Video, Shownotes, and Links"}, {"id": 751273008, "item_id": 46954563, "url": "https://news.ycombinator.com/item?id=46954563", "by": "AlotOfReading", "date": "2026-02-09", "stance": "recommend", "quote": "the datalog model it implements is honestly a pretty good way to think about things", "excerpt": "I haven't used datomic specifically, but the datalog model it implements is honestly a pretty good way to think about things. The worst part about learning it has been realizing how many systems out there are just worse reimplementations of the same idea. Gameplay tags for example [0], and quite a lot of SQL. [0] https://dev.epicgames.com/documentation/en-us/unreal-engine/using-gameplay-tags-in-unreal-engine", "context": "", "use_case": "", "switched_from": "", "story": "What Functional Programmers Get Wrong About Systems"}, {"id": 751268576, "item_id": 46954286, "url": "https://news.ycombinator.com/item?id=46954286", "by": "AlotOfReading", "date": "2026-02-09", "stance": "recommend", "quote": "You might be interested in the datomic model", "excerpt": "You might be interested in the datomic model [0], where you never remove data and all previous views of the database remain accessible. [0] https://docs.datomic.com/datomic-overview.html#information-model", "context": "", "use_case": "Immutable history database", "switched_from": "", "story": "What Functional Programmers Get Wrong About Systems"}, {"id": 751212882, "item_id": 46950805, "url": "https://news.ycombinator.com/item?id=46950805", "by": "pgt", "date": "2026-02-09", "stance": "recommend", "quote": "horizontally-scalable Datomic Peers already cache datoms aggressively", "excerpt": "EACL: Enterprise Access ControL is a situated ReBAC Authorization system based on SpiceDB, built in Clojure and backed by Datomic \u2013 https://github.com/theronic/eacl 'Situated' here means that your permission schema & permission data live with your data, which has a number of benefits: - one less network hop, so can be faster than Spice for typical workloads, - one less distributed consistency & syncing problem, - one", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: What Are You Working On? (February 2026)"}, {"id": 750052721, "item_id": 46878295, "url": "https://news.ycombinator.com/item?id=46878295", "by": "eliasdejong", "date": "2026-02-03", "stance": "recommend", "quote": "I suggest you study Datomic and the EAVT data model", "excerpt": "Very cool project! Being able to replay history is huge and makes it possible to look back in time without having to make full copies of the database. This is something that is very much lacking in many SQL systems where you need 'temporal tables' to achieve the same effect, but those are really limited as they have to be setup specifically and often duplicate data unnecessarily. If you are interested in this topic, ", "context": "", "use_case": "", "switched_from": "", "story": "Joedb, the Journal-Only Embedded Database"}, {"id": 749309568, "item_id": 46831848, "url": "https://news.ycombinator.com/item?id=46831848", "by": "Leftium", "date": "2026-01-30", "stance": "neutral", "quote": "At the DB layer: https://www.datomic.com", "excerpt": "There are forms of state that are reversible: essentially, you store read-only events instead of writing to existing state. The main disadvantages are more complexity and performance issues. Examples: - Event sourcing: https://youtu.be/8JKjvY4etTY - CRDT - At the DB layer: https://www.datomic.com - You can also do it at the code level (but this is more like keeping copies of the old state): https://immerjs.github.io/", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: Do you bother making state changes reversible?"}, {"id": 749013936, "item_id": 46813371, "url": "https://news.ycombinator.com/item?id=46813371", "by": "christophilus", "date": "2026-01-29", "stance": "recommend", "quote": "it does fit Datomic really well", "excerpt": "Interesting idea, and it does fit Datomic really well. Here's the project the presenter is working on: https://github.com/saberstack/zsxf", "context": "", "use_case": "", "switched_from": "", "story": "Databases: Are We There Yet? \u2013 Spasov [video]"}, {"id": 745989969, "item_id": 46624373, "url": "https://news.ycombinator.com/item?id=46624373", "by": "frio", "date": "2026-01-14", "stance": "recommend", "quote": "The capacity to easily rollback the state to a previous immutably preserved state has always seemed like a fantastic addition to databases", "excerpt": "I do wonder if LLMs will see tools like immudb (https://immudb.io/) or Datomic (https://www.datomic.com/) receive a bit more attention. The capacity to easily rollback the state to a previous immutably preserved state has always seemed like a fantastic addition to databases to me, but in the era of LLMs, even more important.", "context": "", "use_case": "immutable state rollback", "switched_from": "", "story": "Ask HN: How do you safely give LLMs SSH/DB access?"}, {"id": 744556912, "item_id": 46534807, "url": "https://news.ycombinator.com/item?id=46534807", "by": "malloryerik", "date": "2026-01-07", "stance": "recommend", "quote": "Btw Datomic is free now that Nubank supports it", "excerpt": "Btw Datomic is free now that Nubank supports it (and runs a large bank on it). There's also a fantastic kind of mini, FOSS, file-based Datomic-style Datalog DB that's not immutable called Datalevin. Uses the hyper-fast LMDB under the hood. It's called Datalevin. https://github.com/juji-io/datalevin", "context": "", "use_case": "", "switched_from": "", "story": "Databases in 2025: A Year in Review"}, {"id": 743956881, "item_id": 46497305, "url": "https://news.ycombinator.com/item?id=46497305", "by": "beders", "date": "2026-01-05", "stance": "recommend", "quote": "Two candidates are sticking out.", "excerpt": "While the author mentions that he just doesn't have the time to look at all the databases, none of the reviews of the last few years mention immutable and/or bi-temporal databases. Which looks more like a blind spot to me honestly. This category of databases is just fantastic for industries like fintech. Two candidates are sticking out. https://xtdb.com/blog/launching-xtdb-v2 (2025) https://blog.datomic.com/2023/04/d", "context": "", "use_case": "immutable bi-temporal database", "switched_from": "", "story": "Databases in 2025: A Year in Review"}, {"id": 741858624, "item_id": 46366164, "url": "https://news.ycombinator.com/item?id=46366164", "by": "radarroark", "date": "2025-12-23", "stance": "neutral", "quote": "Datomic has a more limited feature that lets you make an in-memory clone", "excerpt": "Surprisingly, no it does not. Datomic has a more limited feature that lets you make an in-memory clone of the latest copy of the db for speculative writes, which might be useful for tests, but you can't take an arbitrary version of the db with as-of and use it as the basis for a new version on disk. See: https://blog.danieljanus.pl/2025/04/22/datomic-forking-the-past/ There's nothing technically that should prevent t", "context": "", "use_case": "", "switched_from": "", "story": "Instant database clones with PostgreSQL 18"}, {"id": 741470848, "item_id": 46341928, "url": "https://news.ycombinator.com/item?id=46341928", "by": "lucyjojo", "date": "2025-12-20", "stance": "neutral", "quote": "datomic used to have a single-threaded writer", "excerpt": "this is so very very right. i don't know how it works now but datomic used to have a single-threaded writer (transactor?, if i remember right, been a long time) and offers serialization by default. https://docs.datomic.com/datomic-overview.html", "context": "", "use_case": "", "switched_from": "", "story": "More databases should be single-threaded"}, {"id": 741369953, "item_id": 46335622, "url": "https://news.ycombinator.com/item?id=46335622", "by": "adityaathalye", "date": "2025-12-20", "stance": "neutral", "quote": "Source (Clojure and Datomic)", "excerpt": "Source (Clojure and Datomic): https://github.com/vendekagon-labs/unify Original video title doesn't explain much. Excerpt from the talk: > \"This talk details how using this toolkit has enabled us to take novel approaches to unraveling the puzzles underlying rare cancers.\"", "context": "", "use_case": "", "switched_from": "", "story": "UnifyBio: Power Tools for Translational Data Science \u2013 Benjamin Kamphaus [video]"}, {"id": 740423490, "item_id": 46276468, "url": "https://news.ycombinator.com/item?id=46276468", "by": "pgt", "date": "2025-12-15", "stance": "neutral", "quote": "backed by Datomic", "excerpt": "I'm working on EACL: http://github.com/theronic/eacl EACL (Enterprise Access ControL) is a situated ReBAC authorization library based on SpiceDB, built in Clojure and backed by Datomic. EACL queries offer sub-millisecond query times and has replaced SpiceDB at work (CloudAfrica). 'Situated' here means that your permissions live _next_ to your data in Datomic, which avoids a network hop and avoids syncing to an extern", "context": "", "use_case": "", "switched_from": "", "story": "Ask HN: What Are You Working On? (December 2025)"}, {"id": 740231186, "item_id": 46264449, "url": "https://news.ycombinator.com/item?id=46264449", "by": "pgt", "date": "2025-12-14", "stance": "neutral", "quote": "backed by Datomic", "excerpt": "With the help of AI, I made EACL (Enterprise Access ControL), a situated ReBAC authorization library based on SpiceDB, built in Clojure and backed by Datomic: https://github.com/theronic/eacl EACL replaced SpiceDB at work for us, and would not have been possible without AI.", "context": "", "use_case": "database backing EACL", "switched_from": "", "story": "The Gorman Paradox: Where Are All the AI-Generated Apps?"}, {"id": 738988624, "item_id": 46186789, "url": "https://news.ycombinator.com/item?id=46186789", "by": "joeevans1000", "date": "2025-12-07", "stance": "warn", "quote": "the companies making the awesome tools that COULD be used by noobs often keep them closed source (Datomic and, I think here, Rama)", "excerpt": "I use both approaches. One thing is that Clojure code bases are comically hard for anyone to mentally parse if they didn't write it. At least the bulk of programmers... like you'll find on an actual team. Great to write, sure, but not useful in terms of onboarding new team members. Clojure programmers are typically great thinkers. And veterans. But if you are actually trying to build a company, then beware. Your hand", "context": "uses both 2D and Clojure-style approaches", "use_case": "", "switched_from": "", "story": "The programmers who live in Flatland"}, {"id": 733103764, "item_id": 45818985, "url": "https://news.ycombinator.com/item?id=45818985", "by": "arxanas", "date": "2025-11-04", "stance": "neutral", "quote": "", "excerpt": "Just gave a talk about this: https://blog.waleedkhan.name/what-if-sql-were-good/ - Recommend Ascent (Rust only, but supports targeting WASM) - Souffl\u00e9: good, but too hard to integrate into existing systems; lots of ergonomic problems in comparison to Ascent (can elaborate) - CozoDB: really cool but seems to be abandoned - Logica: have not tried it yet", "context": "", "use_case": "", "switched_from": "", "story": "Optimizing Datalog for the GPU"}, {"id": 733000160, "item_id": 45812510, "url": "https://news.ycombinator.com/item?id=45812510", "by": "haolez", "date": "2025-11-04", "stance": "neutral", "quote": "I know that Datomic[0] is very popular.", "excerpt": "On a side note, what tools that leverage Datalog are in use by the HN crowd? I know that Datomic[0] is very popular. I've also been playing with Clingo[1] lately. [0] https://www.datomic.com/ [1] https://potassco.org/clingo/", "context": "", "use_case": "", "switched_from": "", "story": "Optimizing Datalog for the GPU"}]}