{"id":13393117,"url":"https://github.com/replikativ/datahike","last_synced_at":"2026-06-07T12:04:00.164Z","repository":{"id":38375389,"uuid":"116407410","full_name":"replikativ/datahike","owner":"replikativ","description":"Versioned, fast, distributed Datalog engine for everyone. ","archived":false,"fork":false,"pushed_at":"2026-06-07T07:38:17.000Z","size":6638,"stargazers_count":1837,"open_issues_count":84,"forks_count":111,"subscribers_count":51,"default_branch":"main","last_synced_at":"2026-06-07T08:18:41.816Z","etag":null,"topics":["clojure","database","datahike","datalog","open-source"],"latest_commit_sha":null,"homepage":"https://datahike.io","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/replikativ.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"replikativ"}},"created_at":"2018-01-05T16:57:28.000Z","updated_at":"2026-06-05T16:16:55.000Z","dependencies_parsed_at":"2023-10-16T08:50:53.545Z","dependency_job_id":"977a8388-5e5d-481b-abc9-faa6292b07c9","html_url":"https://github.com/replikativ/datahike","commit_stats":{"total_commits":1320,"total_committers":78,"mean_commits":"16.923076923076923","dds":0.7742424242424242,"last_synced_commit":"f85c748aaf96d918c9382d6a7261f676d8e9abf5"},"previous_names":[],"tags_count":193,"template":false,"template_full_name":null,"purl":"pkg:github/replikativ/datahike","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/replikativ%2Fdatahike","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/replikativ%2Fdatahike/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/replikativ%2Fdatahike/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/replikativ%2Fdatahike/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/replikativ","download_url":"https://codeload.github.com/replikativ/datahike/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/replikativ%2Fdatahike/sbom","scorecard":{"id":394756,"data":{"date":"2025-08-11","repo":{"name":"github.com/replikativ/datahike","commit":"cba685c2e724ec1198cc7819acbcd6f5d3ea85c0"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":5,"reason":"5 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/native-image.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Code-Review","score":6,"reason":"Found 19/30 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/native-image.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/replikativ/datahike/native-image.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/native-image.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/replikativ/datahike/native-image.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/native-image.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/replikativ/datahike/native-image.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/native-image.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/replikativ/datahike/native-image.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/native-image.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/replikativ/datahike/native-image.yml/main?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Eclipse Public License 1.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact 0.6.1601 not signed: https://api.github.com/repos/replikativ/datahike/releases/236792747","Warn: release artifact 0.6.1600 not signed: https://api.github.com/repos/replikativ/datahike/releases/236791767","Warn: release artifact 0.6.1599 not signed: https://api.github.com/repos/replikativ/datahike/releases/232133031","Warn: release artifact 0.6.1598 not signed: https://api.github.com/repos/replikativ/datahike/releases/222297262","Warn: release artifact 0.6.1597 not signed: https://api.github.com/repos/replikativ/datahike/releases/222295532","Warn: release artifact 0.6.1601 does not have provenance: https://api.github.com/repos/replikativ/datahike/releases/236792747","Warn: release artifact 0.6.1600 does not have provenance: https://api.github.com/repos/replikativ/datahike/releases/236791767","Warn: release artifact 0.6.1599 does not have provenance: https://api.github.com/repos/replikativ/datahike/releases/232133031","Warn: release artifact 0.6.1598 does not have provenance: https://api.github.com/repos/replikativ/datahike/releases/222297262","Warn: release artifact 0.6.1597 does not have provenance: https://api.github.com/repos/replikativ/datahike/releases/222295532"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-18T18:42:48.831Z","repository_id":38375389,"created_at":"2025-08-18T18:42:48.831Z","updated_at":"2025-08-18T18:42:48.831Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34020187,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-07T02:00:07.652Z","response_time":124,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clojure","database","datahike","datalog","open-source"],"created_at":"2024-07-30T17:00:43.570Z","updated_at":"2026-06-07T12:04:00.143Z","avatar_url":"https://github.com/replikativ.png","language":"Clojure","funding_links":["https://github.com/sponsors/replikativ"],"categories":["Clojure","database","数据库","Database"],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003ca align=\"center\" href=\"https://datahike.io\" target=\"_blank\"\u003e\n    \u003cimg alt=\"Datahike\" src=\"./doc/assets/datahike-logo.svg\" height=\"128em\"\u003e\n  \u003c/a\u003e\n\u003c/p\u003e\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://clojurians.slack.com/archives/CB7GJAN0L\"\u003e\u003cimg src=\"https://badgen.net/badge/-/slack?icon=slack\u0026label\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://clojars.org/org.replikativ/datahike\"\u003e \u003cimg src=\"https://img.shields.io/clojars/v/org.replikativ/datahike.svg\" /\u003e\u003c/a\u003e\n\u003ca href=\"https://circleci.com/gh/replikativ/datahike\"\u003e\u003cimg src=\"https://circleci.com/gh/replikativ/datahike.svg?style=shield\"/\u003e\u003c/a\u003e\n\u003ca href=\"https://github.com/replikativ/datahike/tree/main\"\u003e\u003cimg src=\"https://img.shields.io/github/last-commit/replikativ/datahike/main\"/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n**Branch databases, not just code.**\n\n[Datahike](https://datahike.io) is a durable [Datalog](https://en.wikipedia.org/wiki/Datalog) database with\nDatomic-compatible APIs and git-like semantics. Built on persistent data structures and structural sharing,\ndatabase snapshots are immutable values that can be held, shared, and queried anywhere—without locks or copying.\n\n**Key capabilities:**\n- 🌐 **[Distributed Index Space](./doc/distributed.md)**: Read scaling without database connections—readers access persistent indices directly\n- 🗄️ **[Flexible storage](./doc/storage-backends.md)**: File, LMDB, S3, JDBC, Redis, IndexedDB via konserve\n- 🌍 **[Cross-platform](./doc/README.md#language-bindings-beta)**: JVM, Node.js, Browser (Clojure, ClojureScript, JavaScript, Java APIs)\n- ⚡ **[Real-time sync](./doc/distributed.md)**: WebSocket streaming with Kabel for browser ↔ server\n- 🕰️ **[Time-travel](./doc/time_variance.md)**: Query any historical state, full transaction audit trail\n- 🔒 **[GDPR-ready](./doc/time_variance.md#data-purging)**: Complete data excision for regulatory compliance\n- 🚀 **[Production-proven](https://gitlab.com/arbetsformedlingen/taxonomy-dev)**: Tested with billions of datoms, deployed in government services\n\n**Distributed by design**: Datahike is part of the [replikativ](https://github.com/replikativ) ecosystem for decentralized data architectures.\n\n## Why Datalog?\n\nModern applications model increasingly complex relationships—social networks, organizational hierarchies, supply chains, knowledge graphs. Traditional SQL forces you to express graph queries through explicit joins, accumulating complexity as relationships grow. Datalog uses **pattern matching over relationships**: describe what you're looking for, not how to join tables.\n\nAs systems evolve, SQL schemas accumulate join complexity. What starts as simple tables becomes nested subqueries and ad-hoc graph features. Datalog treats relationships as first-class: transitive queries, recursive rules, and multi-database joins are natural to express. The result is maintainable queries that scale with relationship complexity. See [Why Datalog?](./doc/datalog-vs-sql.md) for detailed comparisons.\n\n**Time is fundamental to information**: Most value derives from how facts evolve over time. Datahike's immutable design treats the database as an append-only log of facts—queryable at any point in history, enabling audit trails, debugging through time-travel, and GDPR-compliant data excision. Immutability also powers Distributed Index Space: database snapshots are values that can be shared, cached, and queried without locks.\n\nYou can find [API documentation on cljdoc](https://cljdoc.org/d/org.replikativ/datahike) and articles on Datahike on our company's [blog page](https://datahike.io/notes/).\n\n[![cljdoc](https://badgen.net/badge/cljdoc/datahike/blue)](https://cljdoc.org/d/org.replikativ/datahike)\n\nWe presented Datahike also at meetups,for example at:\n\n- [2021 Bay Area Clojure meetup](https://www.youtube.com/watch?v=GG-S-xrDS5M)\n- [2019 scicloj online meetup](https://www.youtube.com/watch?v=Hjo4TEV81sQ).\n- [2019 Vancouver Meetup](https://www.youtube.com/watch?v=A2CZwOHOb6U).\n- [2018 Dutch clojure meetup](https://www.youtube.com/watch?v=W6Z1mkvqp3g).\n\n## Usage\n\nAdd to your dependencies:\n\n[![Clojars Project](http://clojars.org/org.replikativ/datahike/latest-version.svg)](http://clojars.org/org.replikativ/datahike)\n\nWe provide a stable API for the JVM that we extend by first providing experimental/beta features that then get merged into the API over time.\n\n```clojure\n(require '[datahike.api :as d])\n\n\n;; use the filesystem as storage medium\n(def cfg {:store {:backend :file \n                  :id #uuid \"550e8400-e29b-41d4-a716-446655440000\"\n                  :path \"/tmp/example\"}})\n\n;; create a database at this place, per default configuration we enforce a strict\n;; schema and keep all historical data\n(d/create-database cfg)\n\n(def conn (d/connect cfg))\n\n;; the first transaction will be the schema we are using\n;; you may also add this within database creation by adding :initial-tx\n;; to the configuration\n(d/transact conn [{:db/ident :name\n                   :db/valueType :db.type/string\n                   :db/cardinality :db.cardinality/one }\n                  {:db/ident :age\n                   :db/valueType :db.type/long\n                   :db/cardinality :db.cardinality/one }])\n\n;; lets add some data and wait for the transaction\n(d/transact conn [{:name  \"Alice\", :age   20 }\n                  {:name  \"Bob\", :age   30 }\n                  {:name  \"Charlie\", :age   40 }\n                  {:age 15 }])\n\n;; search the data\n(d/q '[:find ?e ?n ?a\n       :where\n       [?e :name ?n]\n       [?e :age ?a]]\n  @conn)\n;; =\u003e #{[3 \"Alice\" 20] [4 \"Bob\" 30] [5 \"Charlie\" 40]}\n\n;; add new entity data using a hash map\n(d/transact conn {:tx-data [{:db/id 3 :age 25}]})\n\n;; if you want to work with queries like in\n;; https://grishaev.me/en/datomic-query/,\n;; you may use a hashmap\n(d/q {:query '{:find [?e ?n ?a ]\n               :where [[?e :name ?n]\n                       [?e :age ?a]]}\n      :args [@conn]})\n;; =\u003e #{[5 \"Charlie\" 40] [4 \"Bob\" 30] [3 \"Alice\" 25]}\n\n;; query the history of the data\n(d/q '[:find ?a\n       :where\n       [?e :name \"Alice\"]\n       [?e :age ?a]]\n  (d/history @conn))\n;; =\u003e #{[20] [25]}\n\n;; you might need to release the connection for specific stores\n(d/release conn)\n\n;; clean up the database if it is not need any more\n(d/delete-database cfg)\n```\n\nThe API namespace provides compatibility to a subset of Datomic functionality\nand should work as a drop-in replacement on the JVM. The rest of Datahike will\nbe ported to core.async to coordinate IO in a platform-neutral manner.\n\n## Documentation\n\n**[📖 Complete Documentation Index](./doc/README.md)** - Organized by topic and skill level\n\n**Quick links:**\n- [Configuration](./doc/config.md) - Database setup and backend options\n- [Why Datalog?](./doc/datalog-vs-sql.md) - Query comparisons and when to use Datalog\n- [Language Bindings](./doc/README.md#language-bindings-beta) - Java, JavaScript, Python, CLI, and more (beta)\n- [Time Variance](./doc/time_variance.md) - Time-travel queries and GDPR-compliant purging\n\n\nFor simple examples have a look at the projects in the `examples` folder.\n\n## Example Projects\n\n### Applications\n\n- **[Beleg](https://github.com/replikativ/beleg)** - Invoice and CRM system with web UI, LaTeX PDF generation, and Datahike persistence. Works as both an example project demonstrating Datahike patterns and a practical solution for contractors and small businesses. Features customers, tasks, offers, and invoices. Successor to the [original Datahike invoice demo](https://www.youtube.com/watch?v=W6Z1mkvqp3g) from Dutch Clojure Meetup 2018.\n\n## ClojureScript \u0026 JavaScript Support\n\nDatahike has **beta ClojureScript support** for both **Node.js** (file backend) and **browsers** (IndexedDB with TieredStore for memory hierarchies).\n\n**JavaScript API** (beta):\n\nInstall from npm:\n```bash\nnpm install datahike@next\n```\n\nExample usage:\n```javascript\nconst d = require('datahike');\nconst crypto = require('crypto');\n\nconst config = {\n  store: {\n    backend: ':memory',\n    id: crypto.randomUUID()\n  },\n  'schema-flexibility': ':read'\n};\n\nawait d.createDatabase(config);\nconst conn = await d.connect(config);\nawait d.transact(conn, [{ name: 'Alice' }]);\nconst db = await d.db(conn);\nconst results = await d.q('[:find ?n :where [?e :name ?n]]', db);\nconsole.log(results);\n// =\u003e [['Alice']]\n```\n\nSee [JavaScript API documentation](./doc/javascript-api.md) for details.\n\n**Browser with real-time sync**: Combine IndexedDB storage with [Kabel](https://github.com/replikativ/kabel) WebSocket middleware for offline-capable applications.\n\n**Native CLI tool** (`dthk`) (beta): Compiled with GraalVM native-image for instant startup. Ships with file backend support, scriptable for quick queries and automation. Available in [releases](https://github.com/replikativ/datahike/releases). See [CLI documentation](./doc/cli.md).\n\n**Babashka pod** (beta): Native-compiled pod available in the [Babashka pod registry](https://github.com/babashka/pod-registry) for shell scripting. See [Babashka pod documentation](./doc/bb-pod.md).\n\n**Java API** (beta): Comprehensive bindings with fluent builder pattern and automatic collection conversion. See [Java API documentation](./doc/java-api.md) for the full API guide and [examples](./examples/java/).\n\n**libdatahike** (beta): *C/C++ native bindings* enable embedding Datahike in non-JVM applications. See [libdatahike documentation](./doc/libdatahike.md).\n\n**Python bindings** (beta): High-level Pythonic API with automatic EDN conversion. See [Python documentation](./pydatahike/README.md).\n\n## Production Use\n\n### Swedish Public Employment Service\n\nThe [Swedish Public Employment Service](https://arbetsformedlingen.se) (Arbetsförmedlingen) has been using Datahike in production since 2024 to serve the [JobTech Taxonomy](https://gitlab.com/arbetsformedlingen/taxonomy-dev/backend/jobtech-taxonomy-api) (Arbetsmarknadstaxonomin) - a labour market terminology database with 40,000+ concepts representing occupations, skills, and education standards, accessed daily by thousands of case workers across Sweden.\n\n**Technical Highlights**:\n- **Scale**: 60+ schema attributes with multi-language support (Swedish, English)\n- **Architecture**: Multi-backend abstraction supporting both Datomic and Datahike\n- **API**: GraphQL interface with Apache Lucene full-text search\n- **Compliance**: Full transaction history for regulatory audit trail\n- **Resilience**: S3-based backup/restore for disaster recovery\n- **Migration**: Successfully migrated from Datomic after extensive testing (U1 → I1 → Production)\n\n**Resources**:\n- **Source Code**: [jobtech-taxonomy-api](https://gitlab.com/arbetsformedlingen/taxonomy-dev/backend/jobtech-taxonomy-api) (2,851+ commits)\n- **Benchmarks**: [Performance comparison suite](https://gitlab.com/arbetsformedlingen/taxonomy-dev/backend/experimental/datahike-benchmark) (Datahike vs Datomic)\n- **Migration Story**: [Plan.md](https://gitlab.com/arbetsformedlingen/taxonomy-dev/backend/jobtech-taxonomy-api/-/blob/develop/test/datahike/Plan.md) - detailed deployment journey\n\nThis represents one of the most comprehensive open-source Datahike deployments, demonstrating production-readiness at government scale.\n\n### Stub - Accounting for African Entrepreneurs\n\n[Stub](https://stub.africa/) is a comprehensive accounting and invoicing platform serving 5,000+ small businesses across South Africa. Built by [Alexander Oloo](https://github.com/alekcz) with Datahike powering the core data layer.\n\n**Features**: Invoicing with payment integration, double-entry bookkeeping, bank sync (Capitec, FNB, Absa, Nedbank), VAT tracking, inventory management, and financial reporting.\n\n### Heidelberg University - Emotion Tracking\n\nHeidelberg University uses Datahike in an internal emotion tracking application for psychological research (source not publicly available).\n\n## Proximum: Vector Search for Datahike\n\n[Proximum](https://datahike.io/proximum) is a high-performance HNSW vector index designed for Datahike's persistent data model. It brings semantic search and RAG capabilities to Datahike while maintaining immutability and full audit history.\n\n**Key features**:\n- Fast HNSW (Hierarchical Navigable Small World) vector search\n- Immutable index snapshots—same git-like semantics as Datahike\n- Persistent data structures without mutation or locks\n- Dual-licensed: EPL-2.0 (open source) and commercial license\n\nSee [datahike.io/proximum](https://datahike.io/proximum) for details. Integration as secondary index into Datahike coming soon.\n\n## Composable Ecosystem\n\nDatahike is **compositional by design**—built from independent, reusable libraries that work together but can be used separately in your own systems. Each component is open source and maintained as part of the [replikativ](https://github.com/replikativ) project.\n\n**Core libraries:**\n- **[konserve](https://github.com/replikativ/konserve)**: Pluggable key-value store abstraction with backends for File, LMDB, S3, JDBC, Redis, IndexedDB, and more. Use it for any persistent storage needs beyond Datahike.\n- **[kabel](https://github.com/replikativ/kabel)**: WebSocket transport with middleware support. Build real-time communication layers for any application.\n- **[hasch](https://github.com/replikativ/hasch)**: Content-addressable hashing for Clojure data structures. Create immutable references to data.\n- **[incognito](https://github.com/replikativ/incognito)**: Extensible serialization for custom types. Serialize any Clojure data across networks or storage.\n- **[superv.async](https://github.com/replikativ/superv.async)**: Supervision and error handling for core.async. Build robust asynchronous systems.\n\n**Advanced:**\n- **[replikativ](https://github.com/replikativ/replikativ)**: CRDT-based data synchronization for eventually consistent systems. Build collaborative applications with automatic conflict resolution.\n- **[distributed-scope](https://github.com/simm-is/distributed-scope)**: Remote function invocation with Clojure semantics across processes.\n\nThis modularity enables **custom solutions** across languages and runtimes: embed konserve in Python applications, use kabel for non-database real-time systems, or build entirely new databases on the same storage layer. Datahike demonstrates how these components work together, but you're not locked into our choices.\n\n## Roadmap and Participation\n\nInstead of providing a static roadmap, we work closely with the community to decide what will be worked on next in a dynamic and interactive way.\n\n**How it works:**\n\nGo to [GitHub Discussions](https://github.com/replikativ/datahike/discussions/categories/ideas) and upvote the _ideas_ you'd like to see in Datahike. When we have capacity for a new feature, we address the most upvoted items.\n\nYou can also propose ideas yourself—either by adding them to Discussions or by creating a pull request. Note that due to backward compatibility considerations, some PRs may take time to integrate.\n\n\n## Commercial Support\n\nWe are happy to provide commercial support. If you are interested in a particular\nfeature, please contact us at [contact@datahike.io](mailto:contact@datahike.io).\n\n## License\n\nCopyright © 2014–2026 Christian Weilbach et al.\n\nLicensed under Eclipse Public License (see [LICENSE](LICENSE)).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freplikativ%2Fdatahike","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Freplikativ%2Fdatahike","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Freplikativ%2Fdatahike/lists"}