{"id":22484230,"url":"https://github.com/fluree/db","last_synced_at":"2026-05-07T22:01:53.672Z","repository":{"id":37954582,"uuid":"305513242","full_name":"fluree/db","owner":"fluree","description":"Fluree database library","archived":false,"fork":false,"pushed_at":"2025-10-14T21:57:18.000Z","size":15367,"stargazers_count":359,"open_issues_count":64,"forks_count":24,"subscribers_count":19,"default_branch":"main","last_synced_at":"2025-10-15T00:13:23.441Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://fluree.github.io/db/","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/fluree.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"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}},"created_at":"2020-10-19T21:06:38.000Z","updated_at":"2025-10-10T02:58:09.000Z","dependencies_parsed_at":"2023-09-27T03:17:34.563Z","dependency_job_id":"e586845f-85b8-4b26-977d-be3a26de6fdd","html_url":"https://github.com/fluree/db","commit_stats":{"total_commits":1683,"total_committers":12,"mean_commits":140.25,"dds":0.673202614379085,"last_synced_commit":"b1bfb15475204a392c64ded5024b9d835a1241ea"},"previous_names":[],"tags_count":54,"template":false,"template_full_name":null,"purl":"pkg:github/fluree/db","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluree%2Fdb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluree%2Fdb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluree%2Fdb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluree%2Fdb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fluree","download_url":"https://codeload.github.com/fluree/db/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fluree%2Fdb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279040293,"owners_count":26090786,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-15T02:00:07.814Z","response_time":56,"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":[],"created_at":"2024-12-06T17:10:27.361Z","updated_at":"2026-05-07T22:01:53.664Z","avatar_url":"https://github.com/fluree.png","language":"Clojure","funding_links":[],"categories":["Clojure","数据库"],"sub_categories":[],"readme":"# Fluree\n\nA graph database built for data that matters. Temporal, verifiable, standards-compliant.\n\nFluree stores data as RDF triples with complete history, integrated search, and fine-grained access control — in a single binary with no external dependencies.\n\nBillions of triples on commodity hardware. Over 2M triples/second bulk import. [Benchmark leader](https://labs.flur.ee) across 105 W3C SPARQL queries.\n\n[![License: BSL 1.1](https://img.shields.io/badge/license-BSL%201.1-blue)](#license)\n\n\u003e [!NOTE]\n\u003e **Fluree Memory** — is part of the Fluree DB CLI.\n\u003e Persistent, searchable memory for AI coding assistants. Give Claude Code, Cursor, and other AI tools long-term project memory: facts, decisions, and preferences persist across sessions in a Fluree ledger you control — scoped per-repo or per-user, shareable via git.\n\u003e [Fluree Memory docs →](https://labs.flur.ee/docs)\n\n## Install\n\n**Docker** — pre-configured HTTP server, ready to accept queries on port 8090. Best for trying out the API or running Fluree as a service.\n\n```bash\ndocker run -p 8090:8090 fluree/server:latest\n```\n\n**Homebrew, shell installer, or Windows PowerShell** — installs the `fluree` binary that bundles both the CLI and the embedded server (`fluree server run`).\n\n```bash\n# Homebrew (macOS / Linux)\nbrew install fluree/tap/fluree\n\n# Shell installer (macOS / Linux)\ncurl --proto '=https' --tlsv1.2 -LsSf https://github.com/fluree/db/releases/latest/download/fluree-db-cli-installer.sh | sh\n```\n\n```powershell\n# Windows (PowerShell)\nirm https://github.com/fluree/db/releases/latest/download/fluree-db-cli-installer.ps1 | iex\n```\n\nPre-built binaries and the changelog for every release are on the [GitHub Releases page](https://github.com/fluree/db/releases).\n\n## Zero to graph in 60 seconds\n\n```bash\nfluree init\nfluree create movies\n\nfluree insert '\n@prefix schema: \u003chttp://schema.org/\u003e .\n@prefix ex:     \u003chttp://example.org/\u003e .\n\nex:blade-runner  a schema:Movie ;\n  schema:name        \"Blade Runner\" ;\n  schema:dateCreated \"1982-06-25\"^^\u003chttp://www.w3.org/2001/XMLSchema#date\u003e ;\n  schema:director    ex:ridley-scott .\n\nex:ridley-scott  a schema:Person ;\n  schema:name \"Ridley Scott\" .\n\nex:alien  a schema:Movie ;\n  schema:name        \"Alien\" ;\n  schema:dateCreated \"1979-05-25\"^^\u003chttp://www.w3.org/2001/XMLSchema#date\u003e ;\n  schema:director    ex:ridley-scott .\n'\n\nfluree query --format table 'SELECT ?title ?date WHERE {\n  ?movie a \u003chttp://schema.org/Movie\u003e ;\n         \u003chttp://schema.org/name\u003e ?title ;\n         \u003chttp://schema.org/dateCreated\u003e ?date .\n} ORDER BY ?date'\n```\n\n```\n┌──────────────┬────────────┐\n│ title        │ date       │\n├──────────────┼────────────┤\n│ Alien        │ 1979-05-25 │\n│ Blade Runner │ 1982-06-25 │\n└──────────────┴────────────┘\n```\n\nThat's a SPARQL query. The same query in JSON-LD:\n\n```bash\nfluree query --jsonld '{\n  \"@context\": { \"schema\": \"http://schema.org/\" },\n  \"select\": [\"?title\", \"?date\"],\n  \"where\": [\n    { \"@id\": \"?movie\", \"@type\": \"schema:Movie\",\n      \"schema:name\": \"?title\", \"schema:dateCreated\": \"?date\" }\n  ],\n  \"orderBy\": \"?date\"\n}'\n```\n\nBoth languages access the same engine — same features, same performance.\n\nNow update the data and query the past:\n\n```bash\n# Give every Ridley Scott movie a genre\nfluree update '\nPREFIX schema: \u003chttp://schema.org/\u003e\nPREFIX ex:     \u003chttp://example.org/\u003e\nINSERT { ?movie schema:genre \"sci-fi\" }\nWHERE  { ?movie schema:director ex:ridley-scott }\n'\n\n# What did the data look like before that update?\nfluree query --at 1 'SELECT ?title ?genre WHERE {\n  ?movie a \u003chttp://schema.org/Movie\u003e ;\n         \u003chttp://schema.org/name\u003e ?title .\n  OPTIONAL { ?movie \u003chttp://schema.org/genre\u003e ?genre }\n}'\n# → Blade Runner (no genre), Alien (no genre)\n\n# And now?\nfluree query 'SELECT ?title ?genre WHERE {\n  ?movie a \u003chttp://schema.org/Movie\u003e ;\n         \u003chttp://schema.org/name\u003e ?title .\n  OPTIONAL { ?movie \u003chttp://schema.org/genre\u003e ?genre }\n}'\n# → Blade Runner \"sci-fi\", Alien \"sci-fi\"\n```\n\nEvery change is preserved. Query any point in history by transaction number, ISO timestamp, or commit ID.\n\n## What makes Fluree different\n\n### Time travel\n\nEvery transaction is immutable. Query data as it existed at any point in time — by transaction number, ISO-8601 timestamp, or content-addressed commit ID. No special tables, no slowly-changing dimensions. It's built into the storage model.\n\n```bash\nfluree query --at 2024-06-15T00:00:00Z 'SELECT * WHERE { ?s ?p ?o }'\n```\n\nLearn more: [Time travel concepts](docs/concepts/time-travel.md), [time-travel cookbook](docs/guides/cookbook-time-travel.md).\n\n### Integrated search\n\nBM25 full-text search and HNSW vector similarity are built into the query engine — not bolted-on external services. Search results participate in joins, filters, and aggregations like any other graph pattern.\n\n```json\n{\n  \"@context\": { \"ex\": \"http://example.org/\" },\n  \"from\": \"mydb:main\",\n  \"where\": [\n    { \"@id\": \"?doc\", \"ex:title\": \"?title\" },\n    [\"bind\", \"?score\", \"(fulltext ?title \\\"knowledge graph\\\")\"]\n  ],\n  \"select\": [\"?doc\", \"?title\", \"?score\"],\n  \"orderBy\": [[\"desc\", \"?score\"]],\n  \"limit\": 10\n}\n```\n\nFor dedicated BM25 / HNSW graph sources, the same query engine drives the `f:graphSource` / `f:searchText` / `f:queryVector` patterns and can be backed by an embedded index or a remote `fluree-search-httpd` service.\n\nLearn more: [BM25 full-text](docs/indexing-and-search/bm25.md), [vector search](docs/indexing-and-search/vector-search.md), [search cookbook](docs/guides/cookbook-search.md).\n\n### Git-like data management\n\nBranch, rebase, merge, push, pull — the same workflow developers already use for code, applied to data. Fork a dataset to experiment without affecting production. Merge when ready. Rebase to catch up with upstream changes. Every branch has its own independent commit history.\n\n```bash\nfluree branch create experiment\nfluree use mydb:experiment\n# ... make changes safely ...\nfluree branch rebase experiment    # catch up with main\nfluree branch merge experiment     # fast-forward merge into main\nfluree branch drop experiment      # clean up\n```\n\nLearn more: [branching cookbook](docs/guides/cookbook-branching.md), [Ledgers and the nameservice](docs/concepts/ledgers-and-nameservice.md).\n\n### Triple-level access control\n\nPolicies are data in the ledger, enforced at query and transaction time. Users see only what they're authorized to see — not rows, not tables, individual facts. No application-layer filtering required.\n\nSee [Policy enforcement](docs/concepts/policy-enforcement.md) for the model, the [policy cookbook](docs/guides/cookbook-policies.md) for worked examples, and [Policy model and inputs](docs/security/policy-model.md) for the reference.\n\n### Reasoning and inference\n\nRDFS subclass/subproperty reasoning, OWL 2 RL forward-chaining, and user-defined Datalog rules. The database infers facts you didn't explicitly store.\n\nLearn more: [Reasoning and inference](docs/concepts/reasoning.md), [OWL \u0026 RDFS support reference](docs/reference/owl-rdfs-support.md), [Datalog rules](docs/query/datalog-rules.md).\n\n### Standards-first\n\nFull SPARQL 1.1 with zero compliance failures against the W3C test suite. Native JSON-LD for idiomatic JSON APIs. Both query languages access the same engine with the same capabilities — time travel, policies, graph sources, and all.\n\nLearn more: [SPARQL reference](docs/query/sparql.md), [JSON-LD Query reference](docs/query/jsonld-query.md), [Standards and feature flags](docs/reference/compatibility.md).\n\n### Also worth knowing\n\n- **[SHACL validation](docs/guides/cookbook-shacl.md)** — declarative shape constraints enforced at transaction time, with violations reported per-target, per-property.\n- **[OWL ontology imports](docs/design/ontology-imports.md)** — pull external vocabularies into a ledger via `f:schemaSource` + `owl:imports`, materialized at commit time.\n- **[Apache Iceberg / R2RML](docs/graph-sources/iceberg.md)** — query Parquet warehouses and relational stores as first-class graph sources alongside native Fluree data.\n\n## Use it your way\n\n**CLI** — Explore data, script pipelines, manage ledgers from the terminal.\n```bash\nfluree query -f report.rq --format csv \u003e output.csv\n```\n\n**HTTP Server** — Run `fluree server` for a production API with OIDC auth, content negotiation, and OpenTelemetry.\n```bash\nfluree server run\ncurl -X POST http://localhost:8090/v1/fluree/query?ledger=mydb:main \\\n  -H \"Content-Type: application/sparql-query\" \\\n  -d 'SELECT ?s ?p ?o WHERE { ?s ?p ?o } LIMIT 10'\n```\n\n**Rust library** — Embed Fluree directly in your application. No server process needed.\n```rust\nlet fluree = FlureeBuilder::memory().build_memory();\nfluree.create_ledger(\"mydb\").await?;\n\nlet result = fluree.graph(\"mydb:main\")\n    .query()\n    .sparql(\"SELECT ?s WHERE { ?s a \u003chttp://schema.org/Person\u003e }\")\n    .execute()\n    .await?;\n```\n\n**MCP server** — Expose Fluree to AI assistants over the Model Context Protocol.\n```bash\nfluree mcp serve            # stdio transport for Claude Desktop, Cursor, etc.\n```\n\n## Capabilities\n\n| | |\n|---|---|\n| **Query languages** | [SPARQL 1.1](docs/query/sparql.md), [JSON-LD Query](docs/query/jsonld-query.md) |\n| **Data formats** | JSON-LD, [Turtle, TriG](docs/transactions/turtle.md), N-Triples, N-Quads |\n| **Time travel** | [Transaction number, ISO timestamp, commit ID](docs/concepts/time-travel.md) |\n| **Full-text search** | [Integrated BM25 with Block-Max WAND](docs/indexing-and-search/bm25.md) |\n| **Vector search** | [Embedded HNSW or remote service](docs/indexing-and-search/vector-search.md) |\n| **Reasoning** | [RDFS, OWL 2 QL, OWL 2 RL, Datalog rules](docs/reference/owl-rdfs-support.md) |\n| **Access control** | [Triple-level policy enforcement](docs/concepts/policy-enforcement.md) |\n| **Geospatial** | [GeoSPARQL, S2 cell indexing](docs/indexing-and-search/geospatial.md) |\n| **Verifiability** | [JWS-signed transactions, Verifiable Credentials](docs/api/signed-requests.md) |\n| **Data sources** | [Apache Iceberg](docs/graph-sources/iceberg.md), [R2RML relational mappings](docs/graph-sources/r2rml.md) |\n| **Storage backends** | [Memory, file, AWS S3 + DynamoDB, IPFS](docs/operations/storage.md) |\n| **Replication** | [Clone, push, pull between instances](docs/operations/query-peers.md) |\n| **Branching** | [Fork ledgers, independent commit histories](docs/guides/cookbook-branching.md) |\n| **Observability** | [OpenTelemetry tracing, structured logging](docs/operations/telemetry.md) |\n| **Validation** | [SHACL shape constraints](docs/guides/cookbook-shacl.md) |\n\n## Documentation\n\nFor documentation and more information, visit [labs.flur.ee/docs](https://labs.flur.ee/docs).\n\nFull documentation also lives in [`docs/`](docs/README.md):\n\n- [Getting started](docs/getting-started/README.md) — Install, create a ledger, write and query data\n- [Fluree for SQL developers](docs/getting-started/fluree-for-sql-developers.md) — Coming from relational? Start here\n- [End-to-end tutorial](docs/getting-started/tutorial-end-to-end.md) — Build a knowledge base using search, time travel, branching, and policies\n- [Concepts](docs/concepts/README.md) — Time travel, graph sources, policies, verifiable data\n- [Guides](docs/guides/) — Practical cookbooks for [search](docs/guides/cookbook-search.md), [time travel](docs/guides/cookbook-time-travel.md), [branching](docs/guides/cookbook-branching.md), [policies](docs/guides/cookbook-policies.md), and [SHACL validation](docs/guides/cookbook-shacl.md)\n- [Query languages](docs/query/README.md) — SPARQL and JSON-LD query reference\n- [Transactions](docs/transactions/README.md) — Insert, upsert, update patterns\n- [CLI reference](docs/cli/README.md) — All commands and options\n- [HTTP API](docs/api/README.md) — Server endpoints and authentication\n- [Operations](docs/operations/README.md) — Configuration, deployment, telemetry\n- [Contributing](docs/contributing/README.md) — Build from source, run tests, PR workflow\n\n## License\n\nLicensed under the [Business Source License 1.1](LICENSE), with a Change Date\nto Apache License 2.0 as specified in that file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluree%2Fdb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffluree%2Fdb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffluree%2Fdb/lists"}