> ## Documentation Index
> Fetch the complete documentation index at: https://docs.parable.work/llms.txt
> Use this file to discover all available pages before exploring further.

# Download & Upload

> Download a Parable as a ZIP archive and upload it into the same Parable or another Parable.

# Download and upload a Parable

## Sources

Docs: [Personal work](/ponder/parables/publishing/personal.md), [Propose](/ponder/parables/publishing/propose.md), [Plots](/ponder/parables/pieces/plots.md)

Web App: Open a Parable in **Ponder**, open **Parable actions**, and choose
**Download Parable** or **Upload Parable**.

**Download Parable** writes the Parable you are viewing, or your open set of
Changes to it, as a ZIP archive. `parable.json` lists every Piece by its ID,
and each Page, Pane, Plot and Palette has its source file in a folder named by
handles. **Upload Parable** plans first: the plan lists every Piece,
Report and Report Plan it creates, updates, moves, renames or deletes, and any
warnings. Nothing changes until you
confirm, and the upload applies only if the Parable is still at the version the
plan read.

## What an archive carries

An archive carries what a Parable needs to render and to run:

* Pages, Packages, Panes, Plots and Palettes, with their source (React, SQL
  with its default parameters, CSS), each Page's and Pane's Perception and
  Policies, and each Plot's catalog slug;
* each Plot's run settings: Pipeline (`requiresReportingRun`) and its caps.
  A cap is `{"value": n}`, checked as a saved Plot's is: an upload with a negative
  `maxExternalCalls`, `maxCost` or `maxRuntime` is refused;
* the Parable's Reports, and each Report's Plans, each with
  its schedule, if it has one, and its
  [Refresh after sources](/ponder/parables/pieces/reports.md#refresh-after-sources)
  settings. A Report runs every Pipeline, so its members need no list. An
  upload checks these settings as a save does.

It does not carry Workspace Preferences, which belong to the Workspace rather
than the Parable, the Parable's Details, participants and RACI, published
Versions, or Plot data and diagnostics. The plan says so. An upload keeps these
where the target already has them.

## Upload into the same Parable

An archive uploads back into the Parable or the set of Changes it was downloaded
from, at the version it was downloaded at. If the Parable changed since, download it
again. An archive from another set of Changes of the same Parable is refused. An
upload into a set of Changes also refuses an archive downloaded from the Parable
itself.

A Piece, Report or Plan missing from the archive stays. A Piece
marked `deleted` in `parable.json` is deleted with everything inside it; Home
cannot be deleted.

## Upload into another Parable

An archive from another Parable is a copy. Use it to start a second Parable
from one you have.

* **The target matches the archive.** Pieces, Reports and Plans the
  target has and the archive does not carry are deleted, and the plan lists
  each one. The archive's Home becomes the target's Home, which keeps the
  target's name.
* **IDs.** The source Parable already holds the archive's IDs, so the copy
  gets IDs of its own, and each Plan's Report points at the copy's. Uploading
  the same archive again updates what the first upload created.
* **Reports run once published.** A Report's Plans publish with the Version,
  and the scheduler runs them from the published Version, so the copy's
  scheduled Reports start after you publish it.
* **Code that names the source Parable now names the target.** The upload
  rewrites `@parable/<source handle>/<pane>` imports, catalog addresses
  `parables.<source slug>.<plot slug>` in Plot SQL and in Pane code (bare or
  quoted, any case), and Piece IDs written in code. Plots keep their catalog
  slugs, so a rewritten address reads the target's Plot. The plan lists every
  file whose SQL it rewrote. A target Plot the upload deletes frees its
  address there, so the archived Plot at the same address takes it; the
  target's Plot keeps its own key and history.
* **Version check.** The archive's version belongs to the source; the upload
  checks the target's version that the plan read.

You cannot upload directly into a published Parable. Open a set of Changes and
upload into it, then publish as usual.

## Copy a Parable into another Parable

1. Open the source Parable and choose **Download Parable**.
2. Create the target Parable, or open the one an earlier upload created.
3. Choose **Upload Parable**, select the ZIP, read the plan, and confirm.
4. Publish the target Parable, so its Reports and their Plans run, and set the
   Workspace Preferences its Pieces read.

## When an upload is refused

* **An archive from another set of Changes, or from the Parable itself.**
  Download from, or upload into, the matching one.
* **The Parable changed after the plan.** Plan again.
* **A published Parable.** Open a set of Changes and upload into it.
* **A Workspace deployment.** A Workspace cannot delete a Piece its Parable
  supplies, so a plan that would is not applicable.
* **Two Plots at one catalog address.** Two Plots that would both stay live
  at one address after the upload. Rename or remove one before uploading.
* **A Report whose handle a Piece holds.** Reports share the Parable's one
  handle namespace; rename one.
* **A Plan whose Report is gone.**
  The archive is incomplete; download it again.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.