datomic 2025-05-21

are there any paas/baas kind of tools built on top of datomic? ex - supabase on top of postgres

Yes. Thank you @cormacc for the mention! http://shipclojure.com will have a new stack with datomic, replicant & datascript. It handles auth, user management, verification & onboarding. And I’m investigating if datomic can be deployed on http://fly.io as part of the same docker. This stack is not yet released but will be pretty soon

❀️ 1
πŸ™Œ 1

"In full honesty, I am looking at bitemporal DBs because I see a raising interest in them. I am considering providing plugins or guides to change the database to https://www.datomic.com/ or https://xtdb.com/. This is not my main focus at the moment but it is in the backlog." πŸ™Œ I was myself thinking of such a thing but there you are.

does datomic cloud count?

None that I am aware of

> does datomic cloud count? I assume not, since that’s more like do-it-yourself IaaS (infrastructure as a service)

I have tried it and it was quite straightforward to setup, with an AWS account – it requires a basic level of AWS knowledge and tinkering.

I'm not aware of any, but @ovidiu.stoica1094's shipclojure offering is a deployment template covering similar ground. The live version is uix2 / postgres, but gather from a conversation at reclojure yesterday that he's working on a datomic/datascript/replicant variant. You'd still have to own your deployment but sounds like he's done a lot of the heavy lifting

πŸ†’ 1

Like ten years ago, I seem to recall a demo of datomic where you could pass raw CLJ vectors to d/q and query it. Am I hallucinating or is that supported? Is it documented?

I think it was at one of the first official Clojure conferences where datomic was being shown off

ohai πŸ‘‹ I got that from Stuart Halloway iirc, he demonstrated joining between Datomic and an Excel spreadsheet by parsing the sheet and converting it to vectors of facts πŸ™‚

πŸ”₯ 1

Cloud/client api needs a db as its first datasource because it needs a machine on which to run the query.

Peer does not have this limitation because the query runs on the peer itself.

In either case you can supply non-datomic datasources.

(datomic.api/q
   '[:find ?e
     :where
     [?e :really/awesome? true]]
   '([1 :really/awesome? true]
     [2 :really/awesome? false]))
Right, this works!

with cloud, just supply additional datasources

include the first one just as the place to run the query

e.g. (d/q '[:find ... :in $client $ :where [...])`

You can also use multiple:

:in $a $b :where [$a ?foo][$b ?foo] ...

Rules can use a specific datasource, but unfortunately not multiple

($my-ds my-rule-name ?rule-arg ...)

"rules" includes or-join/or/not-join/not, which are rules under the hood

and related, can you d/q the results of d/q, for filtering etc?

you can call d/q in a where clause

:where [[?pro :profile/id ?profile-id]
        [(q '[:find [?contact ...]
              :in $ ?pro
              :where
              [?contact :contact/of-profile ?pro]]
          $ ?pro) ?cs]
         [(set ?cs) ?cset]
         .... more clauses