# Trovi

## What is Trovi?

Trovi is a public service and open API that provides storing, referencing, and reproducing research artifacts. Applications can integrate with the Trovi API to provide the following capabilities to their users:

* **Artifact upload and storage:** users can upload files representing their experiment in whatever form appropriate (e.g., documentation, Jupyter notebooks, setup scripts, data sets, example output). Currently Trovi integrates with several storage backends, notably [Chameleon](https://www.chameleoncloud.org/)'s object store and [Zenodo](https://zenodo.org/), though future integrations are possible.
* **Artifact lifecycle management:** artifact owners can publish new versions of their artifact and apply useful metadata (e.g., tags, short descriptions, author list).
* **Sharing artifacts, publicly or during embargo/development**: generate private links that allow others to access the artifact's contents (e.g., for evaluation), or publish particular versions of the artifact for open access, including DOI assignment.
* **Instantiate artifacts within a variety of environments**: users can "re-play" an artifact, opening it on their local machine or within an open testbed environment. Testbeds can leverage existing general-purpose integrations (e.g., [JupyterLab](https://github.com/ChameleonCloud/jupyterlab-chameleon)) or build their own.
* **Build upon a catalog of relevant research artifacts and examples**: users can "fork" existing artifacts and create their own revision, or use existing work as a template or example for future research.

### What is an Artifact?

Currently, Trovi makes only a few assumptions about an Artifact:

* It contains some tarball of contents representing the *portable* portion of the artifact. This means source code, instructions, notebooks, and examples.
* External requirements, such as disk images hosted on a target infrastructure, datasets, etc., can be specified with link references (pointers.) These links are opaque from Trovi's point of view, enabling integrations specific to third-parties.

### Who can use Trovi?

Trovi's [authentication model](https://chameleoncloud.gitbook.io/trovi/api-reference/token/tokengrant) allows federation with select partners, enabling any user of a participating entity in the federation to utilize the API or any of its integrations. If you're interested in becoming part of the Trovi federation, please [contact us](mailto:contact@chameleoncloud.org).

## Trovi API Reference

Dive a little deeper and start exploring our API reference to get an idea of everything that's possible with the API:

{% content-ref url="api-reference" %}
[api-reference](https://chameleoncloud.gitbook.io/trovi/api-reference)
{% endcontent-ref %}

## Want to contribute, or just peek at the source code?

Take a look at our GitHub repository! There, you can read the source code, or open an issue, discussion, or pull request.

{% embed url="<https://github.com/ChameleonCloud/trovi>" %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://chameleoncloud.gitbook.io/trovi/readme.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
