Try Oyster on your computer
Run Oyster on your own machine with one command, no account, and open your first App. About five minutes.
Run Oyster on your laptop and open your first App. No Cloudflare account, Docker or payment. You need Node 24 or newer and Git.
npx @fungi.computer/oyster tryThat creates ./my-oyster, installs it, starts Oyster on
http://127.0.0.1:8787, builds the Oyster desktop (Tourtois) from its public
source, installs a one-page Hello App and opens your browser, already signed in
through a one-time link. You land on the desktop with Hello in the launcher.
It prints your owner key once and saves it in my-oyster/.oyster-owner; you
only need the key to sign in again at /login. Open Hello. You will see:
Hello from my first Oyster App
That is a real Oyster App, built from a git commit and running on your machine. Press Ctrl-C to stop.
Where Hello lives. try keeps the App’s source in my-oyster/hello-app, an
ordinary git repository with one commit. To change it, edit
my-oyster/hello-app/bundle/index.html, commit the edit, then stop Oyster and
run npx @fungi.computer/oyster try my-oyster again. It packs the new commit
and reinstalls Hello; open Hello to see the change. Oyster builds only
committed source. Run the same command from my-oyster (or
npx @fungi.computer/oyster try my-oyster) to start it again; nothing is
scaffolded twice. To use another folder or port, run
npx @fungi.computer/oyster try <folder> --port 8788. Add --no-open to keep
the browser closed.
If port 8787 is taken, the command says so and stops; pick another with
--port.
What it does under the hood
try runs these steps for you. They use pnpm 11 and openssl; npm works too
(skip the pnpm-workspace.yaml line).
mkdir my-oyster && cd my-oysterprintf 'allowBuilds: esbuild: true workerd: true "@google/genai": false "@mongodb-js/zstd": false exifreader: false node-liblzma: false protobufjs: false' > pnpm-workspace.yamlpnpm add @fungi.computer/oyster@0.12.0 @fungi.computer/computer@0.6.1 react@^19.2.0 react-dom@^19.2.0pnpm add -D wranglercp node_modules/@fungi.computer/oyster/examples/standalone/{worker.ts,wrangler.jsonc} .export OYSTER_OWNER_KEY=$(openssl rand -hex 24); echo "$OYSTER_OWNER_KEY" > .oyster-ownernpx wrangler dev --local --enable-containers=false --ip 127.0.0.1 --port 8787 --local-upstream oyster.test --upstream-protocol https --var OYSTER_OWNER_KEY:$OYSTER_OWNER_KEY --var OYSTER_ORIGIN:https://oyster.testWrangler is an ordinary dependency of my-oyster; try just runs it for you.
Once it prints Ready on http://127.0.0.1:8787, install the Hello App from a
second terminal in my-oyster. Make a one-page App and commit it:
export OYSTER_OWNER_KEY=$(cat .oyster-owner) OYSTER_URL=http://127.0.0.1:8787mkdir -p hello-app/bundleecho '{"name":"hello-app","private":true,"fungi":{"app":{"displayName":"Hello","capabilities":[]}}}' > hello-app/package.jsonecho '<!doctype html><title>Hello</title><h1>Hello from my first Oyster App</h1>' > hello-app/bundle/index.htmlgit -C hello-app init -q && git -C hello-app add . && git -C hello-app -c user.name=Me -c user.email=me@example.invalid commit -qm HelloSave this as install-hello.mjs and run node install-hello.mjs. It prints
installed hello: 201.
import { execFileSync } from "node:child_process";import { resolve } from "node:path";import { installRelease, packRelease } from "@fungi.computer/oyster/pack";
const source = resolve("hello-app");const commit = execFileSync("git", ["-C", source, "rev-parse", "HEAD"], { encoding: "utf8",}).trim();const directory = resolve("release");await packRelease({ appId: "app_hello", sourceDirectory: source, sourceRevision: `git:${commit}`, recipe: { kind: "bundled-html", entry: "bundle/index.html", assets: { maxManifestBytes: 65_536, maxObjects: 16, maxObjectBytes: 1_048_576, maxTotalBytes: 4_194_304, }, assetBase: "./", backend: null, maxOutputBytes: 4_194_304, }, outDirectory: directory,});const response = await installRelease({ directory, url: process.env.OYSTER_URL, key: process.env.OYSTER_OWNER_KEY, installationId: "hello",});console.log(`installed hello: ${response.status}`);Then open http://127.0.0.1:8787/login, paste the key from .oyster-owner, and
open hello.
Next: the detailed guide covers MCP, Git, the seven starter Apps and deploying to Cloudflare. Not sure Oyster fits? Read Is Oyster for you?.