---
title: Projects and storage
description: How the playground stores your work — readable files, a derived database, autosave, and temporary projects.
sidebar:
  order: 1
---

Everything you do in the playground lives in a **project** — a folder on
disk. Understanding what is in that folder explains why your work is safe,
shareable, and easy to inspect.

## What a project contains

| File / folder | Role |
|---|---|
| `project.yaml` | The schema: your tables, columns, keys, relationships, and indexes. |
| `data/<table>.csv` | One file per table holding its rows, as plain CSV. |
| `history.log` | An append-only journal of every command you have run. |
| the database file | The working database the playground queries. **Derived** — see below. |

The first three are the **authoritative, human-readable** record of your
project. You can open them in any editor, diff them in version control, and
read them without the playground.

## The database is derived

The database file the playground queries is built *from* `project.yaml` and
the CSV files. Because it is derived, it never needs to be shared or backed
up separately — and if it is ever missing or stale, the `rebuild` command
regenerates it from the readable files:

```rdbms
rebuild
```

## Your work saves itself

There is no "save" step to remember. Every command writes through to the
files as it runs, so a project is always up to date on disk. (The `save`
command exists for a different purpose: giving a temporary project a
permanent name — see below.)

## Temporary vs. named projects

When you start the playground without naming a project, it creates a
**temporary** project with an automatic name. Temporary projects are perfect
for quick experiments. When you want to keep one, give it a name:

```rdbms
save
```

Empty, untouched temporary projects are cleaned up automatically, so casual
experimenting never leaves clutter behind.

## Where projects live

Projects are stored in a standard per-user location for your operating
system. Override it for a single run with `--data-dir <PATH>` — handy for
keeping a course's projects together, or for testing.

## Sharing a project

The `export` command packages a project as a zip you can send to anyone:

```rdbms
export
```

The zip contains the readable files (`project.yaml` and `data/`) but **not**
the derived database or your private `history.log`. The recipient opens it
and the playground rebuilds the database for them. [Exporting and
importing](/using-the-playground/export-and-import/) has its own page.
