---
title: "About Quarto"
---

[Quarto](https://quarto.org/) is a Markdown-based documentation system that lets you write documents in Markdown or Jupyter Notebooks, and render them to a variety of formats including HTML, PDF, PowerPoint, and more. 
You can also use Quarto to write [books](https://quarto.org/docs/books/), create [dashboards](https://quarto.org/docs/dashboards/), and embed web applications with [Observable](https://quarto.org/docs/interactive/ojs/) and [Shinylive](https://quarto.org/docs/blog/posts/2022-10-25-shinylive-extension/).

## Getting started with Quarto

Once you've created the space, click on the `Files` tab in the top right to take a look at the files which make up this Space. 
There are a couple of important files which you should pay attention to:

- `Dockerfile`: This contains the system setup to build and serve the Quarto site on Hugging Face. You probably won't need to change this file that 
often unless you need to add additional system dependencies or modify the Quarto version.
- `requirements.txt`: This is where you should include any Python dependencies which you need for your website. 
These are installed when the Dockerfile builds.
- The `src` directory contains the source files for the Quarto website. You can include Jupyter notebooks or markdown (`.qmd` or `.md`) files. 
- `src/_quarto.yml` defines the navigation for your website. If you want to add new pages or reorganize the existing ones, you'll need to change this file.


## Recommended Workflow

1. **Clone the space locally**
2. **Install Quarto**: In order to render your Quarto site without Docker, we recommend installing Quarto by following the instructions on the [official Quarto website](https://quarto.org/docs/get-started/).
3. **Install Quarto VS Code extension**: The [Quarto VS Code Extension](https://quarto.org/docs/tools/vscode.html) includes a number of productivity tools including YAML Autocomplete, a preview button, and a visual editor. Quarto works great with VS Code, but the extension does make it easier to get the most out of Quarto.
4. **Edit the site**: The website files are contained in the `src` directory, and the site navigation is defined in `src/_quarto.yml`. Try editing these files and either clicking the "Preview" button in VS Code, or calling `quarto preview src` from the command line.
5. **Learn more about Quarto**: You can do a lot of things with Quarto, and they are all documented on the [Quarto Website](https://quarto.org/guide/). In particular, you may be interested in:

    - All about building [websites](https://quarto.org/docs/websites/)
    - Building Static [Dashboards](https://quarto.org/docs/dashboards/)
    - How to write [books](https://quarto.org/docs/books/index.html) and [manuscripts](https://quarto.org/docs/manuscripts/)
    - Reproducible [presentations](https://quarto.org/docs/presentations/)
    - Including [Observable](https://quarto.org/docs/interactive/ojs/) or [Shiny](https://quarto.org/docs/interactive/shiny/) applications in your Quarto site

::: {.callout-warning}
It can take a couple of minutes for the Space to deploy to Hugging Face after the Docker build process completes. Two see your changes you will need to do two things: 

1) Wait for your space's status to go from 'Building' to 'Running'(this is visible in the status bar above the Space)
2) Force-reload the web page by holding Shift and hitting the reload button in your browser.
:::

## Code Execution

One of the main virtues of Quarto is that it lets you combine code and text in a single document.
By default, if you include a code chunk in your document, Quarto will execute that code and include the output in the rendered document.
This is great for reproducibility and for creating documents that are always up-to-date.
For example you can include code which generates a plot like this:

```{python}
import seaborn as sns
import matplotlib.pyplot as plt

# Sample data
tips = sns.load_dataset("tips")
# Create a seaborn plot
sns.set_style("whitegrid")
g = sns.lmplot(x="total_bill", y="tip", data=tips, aspect=2)
g = g.set_axis_labels("Total bill (USD)", "Tip").set(xlim=(0, 60), ylim=(0, 12))

plt.title("Tip by Total Bill")
plt.show()
```

When the website is built the Python code will run and the output will be included in the document. 

You can also include [inline code](https://quarto.org/docs/computations/inline-code.html) to insert computed values into text. 
For example we can include the maximum tip value in the `tips` data frame like this: ``{python} tips['tip'].max()``. 
You can control [code execution](https://quarto.org/docs/computations/execution-options.html), or [freeze code output](https://quarto.org/docs/projects/code-execution.html#freeze) to capture the output of long running computations. 


## About the Open Source AI Cookbook

To provide a realistic example of how Quarto can help you organize long-form documentation, 
we've implemented the Hugging Face [Open-Source AI Cookbook](https://github.com/huggingface/cookbook) in Quarto. 
The Open-Source AI Cookbook is a collection of notebooks illustrating practical aspects of building AI applications and solving various machine learning tasks using open-source tools and models.
You can read more about it, or contribute your own Notebook on the [Github Repo](https://github.com/huggingface/cookbook)


