{"id":16320780,"url":"https://github.com/ntoll/bfd","last_synced_at":"2026-02-18T04:36:30.218Z","repository":{"id":46927991,"uuid":"263662387","full_name":"ntoll/BFD","owner":"ntoll","description":"Big Friendly Datastore (organic collaboration on data, from the ground up).","archived":false,"fork":false,"pushed_at":"2022-10-02T17:56:54.000Z","size":3219,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-08T12:46:00.613Z","etag":null,"topics":["database","open-data","rest-api","social"],"latest_commit_sha":null,"homepage":"https://bfd.rtfd.io","language":"Python","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/ntoll.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-05-13T15:01:08.000Z","updated_at":"2023-08-06T07:57:31.000Z","dependencies_parsed_at":"2023-01-19T02:15:32.043Z","dependency_job_id":null,"html_url":"https://github.com/ntoll/BFD","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ntoll/BFD","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntoll%2FBFD","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntoll%2FBFD/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntoll%2FBFD/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntoll%2FBFD/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ntoll","download_url":"https://codeload.github.com/ntoll/BFD/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ntoll%2FBFD/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29568743,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T04:18:28.490Z","status":"ssl_error","status_checked_at":"2026-02-18T04:13:49.018Z","response_time":162,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["database","open-data","rest-api","social"],"created_at":"2024-10-10T22:45:25.806Z","updated_at":"2026-02-18T04:36:25.209Z","avatar_url":"https://github.com/ntoll.png","language":"Python","readme":"# Big Friendly Datastore\n\nOrganic data collaboration, from the ground up.\n\nThis is an experiment in APIs, data storage, aggregation and discovery.\n\n## Developer Setup\n\nThis project uses Python 3.8+.\n\n1. Clone the repository.\n2. Create and start a new virtual environment.\n3. `pip install -r requirements.txt`\n4. Type `make` to see a list of common developer related tasks. For instance,\n   to run the full test suite and code checks type: `make check`.\n\nDeveloper documentation is in the `docs` sub-directory.\n\n## Core Concepts\n\n* Objects represent things and have a unique unicode name. BFD doesn't impose\n  any further constraints on the name, except uniqueness. However, naming\n  conventions are likely to evolve and/or be specified by mutual agreement of\n  users working together across domains.\n* Namespaced tags annotate data on openly writeable objects. The\n  combination of namespace (who) and tag (what) provide meaningful context\n  for the data tagged onto the object. Namespaces and tags also have\n  associated descriptions to provide more schema detail.\n* Tag values containing data about objects are typed and can be queried via\n  predicate based comparison operations (`and`, `or`, `missing`, `\u003c`, `\u003e`, `=`,\n  `\u003c=`, `\u003e=`, `(`, `)`, `has`), or naive string matching a la SQL `like`\n  (and case insensitive `ilike`) pattern matching operator on string values.\n  Queries either return specified tags on matching objects, update given values\n  for matching objects, or delete specified tags from matching objects.\n* Namespaces have admins and tags have users and readers. Admins configure\n  the namespaces and tags belonging to their namespaces, users may annotate\n  objects with the namespaces/tags and readers can see the namespaces/tags and\n  their associated values.\n* Interrogate individual objects for readable namespaces/tags (that may match\n  a pattern).\n* Events are raised when specific changes happen in the datastore. These are \n  configured to call web-hooks so third parties can follow what's going on. The\n  event log can be used observe how the object and associated values changed\n  through time (i.e. versioning).\n* Data types understood by BFD: string, boolean, integer, floats, datetime,\n  duration and pointer (URL). Geospatial types may also be added soon. Blobs of\n  arbitrary bytes may also be stored (as raw data identified by mime-type).\n  There is no such thing as \"null\". If a value isn't known, the tag is removed\n  (but its historic presence is retained in the event log).\n\n## Implementation\n\n* Delivered via a REST API. Query results returned as either JSON or CSV.\n* Admins, users and readers are expressed as a \"whitelist\", when the `private`\n  flag is set to `True`. For instance, if the readers are set to,\n  `private=False`, then everyone can see the namespace/tag. If the users are\n  set to, `[\"nicholas\", ]` and the flag `private=True`, then only the user\n  identified as \"nicholas\" can annotate with the namespace/tag. If the admins\n  are set to, `[\"mary\", \"penelope\", ]`, then only the users identified as\n  \"mary\" and \"penelope\" may change the behaviour of the namespace and the tags\n  contained therein.\n\n# Acknowledgements\n\nMany of the ideas found herein have evolved from those used in FluidDB by\n[Fluidinfo](https://fluidinfo.com/), a defunct startup project I was involved\nwith between 2009-2012 (when it folded). Special mention to\n[Terry Jones](https://github.com/terrycojones) for much of the original thought\nbehind this, and to [Nick Radcliffe](https://github.com/njr0) for subsequent\nstimulating exploration of the concepts involved.\n\nWhy this? Why now?\n\nI find myself in need of such a data store, and since FluidDB is no more, I\nneed to reheat the ocean with my own plastic kettle. 🤨\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fntoll%2Fbfd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fntoll%2Fbfd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fntoll%2Fbfd/lists"}