{"id":13425088,"url":"https://github.com/qri-io/qri","last_synced_at":"2025-04-08T15:14:40.378Z","repository":{"id":40660933,"uuid":"71603023","full_name":"qri-io/qri","owner":"qri-io","description":"you're invited to a data party!","archived":false,"fork":false,"pushed_at":"2022-08-10T05:38:29.000Z","size":45189,"stargazers_count":1104,"open_issues_count":220,"forks_count":64,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-04-01T14:14:06.284Z","etag":null,"topics":["data-science","dataset","golang","hacktoberfest","hacktoberfest2021","ipfs","opendata","p2p","qri","service","trust","web3"],"latest_commit_sha":null,"homepage":"https://qri.io","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qri-io.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"code_of_conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-10-21T22:58:23.000Z","updated_at":"2025-03-22T10:59:46.000Z","dependencies_parsed_at":"2022-07-15T22:00:54.387Z","dependency_job_id":null,"html_url":"https://github.com/qri-io/qri","commit_stats":null,"previous_names":[],"tags_count":42,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qri-io%2Fqri","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qri-io%2Fqri/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qri-io%2Fqri/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qri-io%2Fqri/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qri-io","download_url":"https://codeload.github.com/qri-io/qri/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247867362,"owners_count":21009240,"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","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":["data-science","dataset","golang","hacktoberfest","hacktoberfest2021","ipfs","opendata","p2p","qri","service","trust","web3"],"created_at":"2024-07-31T00:01:04.317Z","updated_at":"2025-04-08T15:14:40.361Z","avatar_url":"https://github.com/qri-io.png","language":"Go","funding_links":[],"categories":["Go","web3","golang"],"sub_categories":[],"readme":"# [qri](http://qri.io)\n\n[![Qri](https://img.shields.io/badge/made%20by-qri-magenta.svg?style=flat-square)](https://qri.io) [![GoDoc](https://godoc.org/github.com/qri-io/qri?status.svg)](http://godoc.org/github.com/qri-io/qri) [![License](https://img.shields.io/github/license/qri-io/qri.svg?style=flat-square)](./LICENSE) [![Codecov](https://img.shields.io/codecov/c/github/qri-io/qri.svg?style=flat-square)](https://codecov.io/gh/qri-io/qri) [![CI](https://img.shields.io/circleci/project/github/qri-io/qri.svg?style=flat-square)](https://circleci.com/gh/qri-io/qri)\n\n\u003ch1 align=\"center\"\u003eQri CLI\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg alt=\"logo\" src=\"https://qri.io/img/blobs/blob_trio.png\" width=\"128\"\u003e\n\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\n  \u003cstrong\u003ea dataset version control system built on the distributed web\u003c/strong\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ch3\u003e\n    \u003ca href=\"https://qri.io\"\u003e\n      Website\n    \u003c/a\u003e\n    \u003cspan\u003e | \u003c/span\u003e\n    \u003ca href=\"#packages\"\u003e\n      Packages\n    \u003c/a\u003e\n    \u003cspan\u003e | \u003c/span\u003e\n    \u003ca href=\"https://github.com/qri-io/qri/blob/master/CONTRIBUTOR.md\"\u003e\n      Contribute\n    \u003c/a\u003e\n    \u003cspan\u003e | \u003c/span\u003e\n    \u003ca href=\"https://github.com/qri-io/qri/issues\"\u003e\n      Issues\n    \u003c/a\u003e\n     \u003cspan\u003e | \u003c/span\u003e\n    \u003ca href=\"https://qri.io/docs/\"\u003e\n      Docs\n    \u003c/a\u003e\n     \u003cspan\u003e | \u003c/span\u003e\n    \u003ca href=\"https://qri.io/download/\"\u003e\n      Download\n    \u003c/a\u003e\n  \u003c/h3\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003c!-- Build Status --\u003e\n\u003c/div\u003e\n\n## Welcome\n\n| Question | Answer |\n|--------|-------|\n| \"I want to learn about Qri\" | [Read the official documentation](https://qri.io/docs/) |\n| \"I want to download Qri\" | [Download Qri](https://qri.io/download) or `brew install qri-io/qri/qri` |\n| \"I have a question\" | [Create an issue](https://github.com/qri-io/qri/issues) and use the label 'question' |\n| \"I found a bug\" | [Create an issue](https://github.com/qri-io/qri/issues) and use the label 'bug' |\n| \"I want to help build the Qri backend\" | [Read the Contributing guides](https://github.com/qri-io/qri/blob/master/CONTRIBUTOR.md) |\n| \"I want to build Qri from source\" | [Build Qri from source](#build)\n\n__qri is a global dataset version control system built on the distributed web__\n\nBreaking that down:\n\n- **global** so that if *anyone, anywhere* has published work with the same or similar datasets, you can discover it.\n- Specific to **datasets** because data deserves purpose-built tools\n- **version control** to keep data in sync, attributing all changes to authors\n- On the **distributed web** to make *all* of the data published on qri simultaneously available, letting peers work on data together.\n\nIf you’re unfamiliar with *version control,* particularly the distributed kind, well you're probably viewing this document on [github](https://github.com/qri-io/qri) — which is a version control system intended for code. Its underlying technology – git – popularized some magic sauce that has inspired a generation of programmers and popularized concepts at the heart of the distributed web. Qri is applying that family of concepts to four common data problems:\n\n1. **Discovery** _Can I find data I’m looking for?_\n2. **Trust** _Can I trust what I’ve found?_\n3. **Friction** _Can I make this work with my other stuff?_\n4. **Sync** _How do I handle changes in data?_\n\nBecause qri is *global* and *content-addressed*, adding data to qri also checks the entire network to see if someone has added it before. Since qri is focused solely on datasets, it can provide meaningful search results. Every change on qri is associated with a peer, creating an audit-able trail you can use to quickly see what has changed and who has changed it. All datasets on qri are automatically described at the time of ingest using a flexible schema that makes data naturally inter-operate. Qri comes with tools to turn *all* datasets on the network into a JSON API with a single command. Finally, all changes in qri are tracked \u0026 synced.\n\n\u003ca id=\"build\"\u003e\u003c/a\u003e\n## Building From Source\n\nTo build qri you'll need the [go programming language](https://golang.org/dl/) on your machine.\n\n```shell\n$ git clone https://github.com/qri-io/qri\n$ cd qri\n$ make install\n```\n\nIf this is your first time building, this command will have a lot of output. That's good! Its means it's working :) It'll take a minute or two to build.\n\nAfter this is done, there will be a new binary `qri` in your `~/go/bin` directory if using go modules, and `$GOPATH/bin` directory otherwise. You should be able to run:\n\n```shell\n$ qri help\n```\nand see help output.\n\n### Building on Windows\n\nTo start, make sure that you have enabled [Developer Mode](https://docs.microsoft.com/en-us/windows/uwp/get-started/enable-your-device-for-development). A library that we depend on needs it enabled in order to properly handle symlinks. If not done, you'll likely get the error message \"A required privilege is not held by the client\".\n\nYou should not need to Run As Administrator to build or run `qri`. We do not recommend using administrator to run `qri`.\n\n#### Shell\n\nFor your shell, we recommend using [msys2](https://www.msys2.org/). Other shells, such as `cmd`, `Powershell`, or `cygwin` may also be usable, but `msys2` makes it easy to install our required dependencies. IPFS also recommends `msys2`, and `qri` is built on top of IPFS.\n\n#### Dependencies\n\nBuilding depends upon having `git` and `make` installed. If using `msys2`, you can easily install these by using the package manager \"pacman\". In a shell, type:\n\n```shell\npacman -S git make\n```\n\nAssuming you've also installed `go` using the official Windows installer linked above, you will also need to add `go` to your `PATH` by modifying your environment variable. See the next section on \"Environment variables\" for more information.\n\nDue to how msys2 treats the `PATH` variable, you also need to add a new environment variable `MSYS2_PATH_TYPE`, with the value `inherit`, using the same procedure.\n\nOnce these steps are complete, proceed to \u003ca href=\"#building\"\u003ebuilding\u003c/a\u003e.\n\n### Building on Rasberry PI\n\nOn a Raspberry PI, you'll need to increase your swap file size in order to build. Normal desktop and server linux OSes should be fine to proceed to \u003ca href=\"#building\"\u003ebuilding\u003c/a\u003e.\n\nOne symptom of having not enough swap space is the `go install` command producing an error message ending with:\n\n```\nlink: signal: killed\n```\n\nTo increase your swapfile size, first turn off the swapfile:\n\n```\nsudo dphys-swapfile swapoff\n```\n\nThen edit `/etc/dphys-swapfile` as root and set `CONF_SWAPSIZE` to 1024.\n\nFinally turn on the swapfile again:\n\n```\nsudo dphys-swapfile swapon\n```\n\nOtherwise linux machines with reduced memory will have other ways to increase their swap file sizes. Check documentation for your particular machine.\n\n\n## Packages\n\nQri is comprised of many specialized packages. Below you will find a summary of each package.\n\n| Package | Go Docs | Go Report Card | Description |\n|---------|---------|----------------|-------------|\n| [`api`](https://github.com/qri-io/qri/tree/master/api) | [![Go Docs](https://godoc.org/github.com/qri-io/qri?status.svg)](https://godoc.org/github.com/qri-io/qri/api) | [![report](https://goreportcard.com/badge/github.com/qri-io/qri)](https://goreportcard.com/report/github.com/qri-io/qri) | user accessible layer, primarily made for communication with our frontend webapp |\n| [`cmd`](https://github.com/qri-io/qri/tree/master/cmd) | [![Go Docs](https://godoc.org/github.com/qri-io/qri?status.svg)](https://godoc.org/github.com/qri-io/qri/cmd) | [![report](https://goreportcard.com/badge/github.com/qri-io/qri)](https://goreportcard.com/report/github.com/qri-io/qri) | our command line interface |\n| [`config`](https://github.com/qri-io/qri/tree/master/config) | [![Go Docs](https://godoc.org/github.com/qri-io/qri?status.svg)](https://godoc.org/github.com/qri-io/qri/config) | [![report](https://goreportcard.com/badge/github.com/qri-io/qri)](https://goreportcard.com/report/github.com/qri-io/qri) | user configuration details, includes peer's profile |\n| [`lib`](https://github.com/qri-io/qri/tree/master/lib) | [![Go Docs](https://godoc.org/github.com/qri-io/qri?status.svg)](https://godoc.org/github.com/qri-io/qri/lib) | [![report](https://goreportcard.com/badge/github.com/qri-io/qri)](https://goreportcard.com/report/github.com/qri-io/qri) | takes arguments from the cmd and api layer and forms proper requests to call to the action layer |\n| [`p2p`](https://github.com/qri-io/qri/tree/master/p2p) | [![Go Docs](https://godoc.org/github.com/qri-io/qri?status.svg)](https://godoc.org/github.com/qri-io/qri/p2p) | [![report](https://goreportcard.com/badge/github.com/qri-io/qri)](https://goreportcard.com/report/github.com/qri-io/qri) | the peer to peer communication layer of qri |\n| [`repo`](https://github.com/qri-io/qri/tree/master/repo) | [![Go Docs](https://godoc.org/github.com/qri-io/qri?status.svg)](https://godoc.org/github.com/qri-io/qri/repo) | [![report](https://goreportcard.com/badge/github.com/qri-io/qri)](https://goreportcard.com/report/github.com/qri-io/qri) | the repository: saving, removing, and storing datasets, profiles, and the config |\n| [`dataset`](https://github.com/qri-io/dataset) | [![Go Docs](https://godoc.org/github.com/qri-io/dataset?status.svg)](https://godoc.org/github.com/qri-io/dataset) | [![report](https://goreportcard.com/badge/github.com/qri-io/dataset)](https://goreportcard.com/report/github.com/qri-io/dataset) | the blueprint for a dataset, the atoms that make up qri |\n| [`registry`](https://github.com/qri-io/qri/tree/master/registry) | [![Go Docs](https://godoc.org/github.com/qri-io/qri?status.svg)](https://godoc.org/github.com/qri-io/qri/registry) | [![report](https://goreportcard.com/badge/github.com/qri-io/qri)](https://goreportcard.com/report/github.com/qri-io/qri) | the blueprint for a registry: the service that allows profiles to be unique and datasets to be searchable |\n| [`starlib`](https://github.com/qri-io/starlib) | [![Go Docs](https://godoc.org/github.com/qri-io/starlib?status.svg)](https://godoc.org/github.com/qri-io/starlib) | [![report](https://goreportcard.com/badge/github.com/qri-io/starlib)](https://goreportcard.com/report/github.com/qri-io/starlib) | the starlark standard library available for qri transform scripts |\n| [`qfs`](https://github.com/qri-io/qfs) | [![Go Docs](https://godoc.org/github.com/qri-io/qfs?status.svg)](https://godoc.org/github.com/qri-io/qfs) | [![report](https://goreportcard.com/badge/github.com/qri-io/qfs)](https://goreportcard.com/report/github.com/qri-io/qfs) | \"qri file sytem\" is Qri's file system abstraction for getting \u0026 storing data from different sources |\n| [`ioes`](https://github.com/qri-io/ioes) | [![Go Docs](https://godoc.org/github.com/qri-io/ioes?status.svg)](https://godoc.org/github.com/qri-io/ioes) | [![report](https://goreportcard.com/badge/github.com/qri-io/ioes)](https://goreportcard.com/report/github.com/qri-io/ioes) | package to handle in, out, and error streams: gives us better control of where we send output and errors |\n| [`jsonschema`](https://github.com/qri-io/jsonschema) | [![Go Docs](https://godoc.org/github.com/qri-io/jsonschema?status.svg)](https://godoc.org/github.com/qri-io/jsonschema) | [![report](https://goreportcard.com/badge/github.com/qri-io/jsonschema)](https://goreportcard.com/report/github.com/qri-io/jsonschema) | used to describe the structure of a dataset, so we can validate datasets and determine dataset interop |\n\n### Outside Libraries\n\nThe following packages are not under Qri, but are important dependencies, so we display their latest versions for convenience.\n\n| Package | Version |\n|--------|-------|\n| `ipfs` | [![ipfs version](https://img.shields.io/badge/ipfs-v0.6.0-blue.svg)](https://github.com/ipfs/go-ipfs/) |\n\n\n###### This documentation has been adapted from the [Cycle.js](https://github.com/cyclejs/cyclejs) documentation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqri-io%2Fqri","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqri-io%2Fqri","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqri-io%2Fqri/lists"}