# Ship your App

> Create and test an App locally, build its Release, and install it on an Oyster you own. Find the separate hosted Team publishing path.

Start with a small App that people can open and agents can call. This guide
takes you from the published starter to a built Release and an existing Oyster.

| Where             | What you need                                                                                            |
| ----------------- | -------------------------------------------------------------------------------------------------------- |
| Local development | Node 24.20.0, npm 11.19.0 and Git. No account, Docker or Computer.                                       |
| Install on Oyster | A running Oyster you own, its URL and its owner key.                                                     |
| Hosted Fungi      | An existing Team and the appropriate owner access. Hosted sign-up is invite-only and usage needs credit. |

## Create and try it

In a directory where you want the project to live, run:

```sh
npm create fungi-app@latest my-app
cd my-app
npm run dev
```

Open the printed local URL and click **Say hello**. The page calls the App's
typed `greet` backend method. Edit the files in `src/`, save, and check the
reloaded page. Stop the development command with **Ctrl-C** when you are done.

The starter runs its own local Oyster. It has no Computer attached and does not
emulate Team sign-in, grants or funded model services. Its local requests run as
the owner. Prove access to files, models and other resources on the host where
you intend to use those capabilities.

See the
[starter quickstart](https://docs.fungi.computer/create-fungi-app/quickstart)
for its files and development commands, or
[Make your own App](/apps/my-first-app/) to begin with the Hello App from the
Oyster trial instead.

## Build a Release

From `my-app`, run:

```sh
npm run build
```

The output is `dist/release.json` and `dist/artifacts/`. Keep them together. The
build captures your saved files, including uncommitted edits, in an isolated Git
snapshot. It does not create a commit in your working repository. The Release
records that snapshot so you can identify what was built.

A successful build creates the files locally. Installation is the next step.

## Install on your Oyster

Use the URL and owner key of an Oyster that is already running. Set `OYSTER_URL`
and `OYSTER_OWNER_KEY` in your shell, then run from `my-app`:

```sh
npx @fungi.computer/oyster \
  install ./dist --installation-id my-app
```

The command uploads the artifacts and asks that Oyster to install the Release.
It exits with an error if uploading or installation fails. It does not create or
deploy a host; follow [Oyster's setup guide](https://docs.fungi.computer/oyster)
first if you need one.

Open the installed App on that Oyster and check the same greeting there. Review
the access it requests before approving it. If you add a Computer or model
capability, test both approval and refusal on the target host.

For the next version, edit, test, build and install again using the same
installation ID. Keep the previous Release files if you need to reinstall a
known version. Restoring an App version does not undo changes to its stored
data.

## Publish for a hosted Team

The hosted workflow has its own owner controls.
[Build an App](/guides/build-an-app/) and
[Publish an App](/guides/publish-an-app/) walk through a Team's source fork,
build, candidate preview and explicit acceptance. They require an existing Team
and a funded build Computer.

For repository-driven updates, the starter also supports Bonsai's **Make this an
App** flow. Registration reads the committed App metadata; it does not build or
install immediately. Later accepted pushes to `main` can build on an attached
hosted backend. New permissions require consent before replacing the previous
Release. See the
[starter documentation](https://docs.fungi.computer/create-fungi-app/quickstart)
for that path and its local-backend limit.

Installing an App for yourself or your Team does not list it for sale in Bazaar.
Share the source repository when you want another builder to run their own copy.
