Skip to content

Your CRA build, shareable with one curl

react-scripts build still does what it always did: a complete static bundle in build/. If you're maintaining a CRA app, sharing that build is one POST — no platform account required.

Drop your Create React App report here — get a live link

free, no account, live for 7 days.

The artifact dead-end

CRA is in maintenance mode, but plenty of production apps still run it — and their deploy story shouldn't require migrating first. A build/ folder is a build/ folder.

Sending a teammate 'pull the branch and npm start' for a visual check is a ten-minute detour for a ten-second question.

Two lines to a live link

Build your output like you already do, then hand the folder to the action:

Build the app

npm run build

.github/workflows/ci.yml

- uses: bitgate/ship-page-action@v1
  if: always()
  with:
    path: build/

Or with plain curl — no account needed

cd build && zip -qr - . | curl -fsS -X POST https://ship.page/deploy \
  -H "Content-Type: application/zip" \
  --data-binary @- | jq -r .url

path: build/ deploys exactly what the tool wrote — no detection to configure. The link goes in the job summary — add comment: true and it lands on the pull request too.

What you get

  • The build/ folder deploys as-is — the default absolute asset paths (/static/…) resolve cleanly at the drop's subdomain root
  • Works like serve -s build, but public: hashed JS and CSS load exactly as CRA emitted them
  • When you migrate to Vite, the recipe is identical — dist/ instead of build/ (see the Vite page)

Questions

Isn't CRA deprecated?

Yes — new apps should start on Vite (see the Vite recipe). This page is for the many existing apps that still build with react-scripts.

Does client-side routing work?

The entry page works everywhere. Drops serve files as-is with no rewrite rules, so history-mode deep links behave like on any plain static host — HashRouter links work fully.

How long do links live?

Anonymous drops expire after 7 days. On a paid plan you control ttl — or set it to never expire.

Try it on your next run

Anonymous deploys need no account and no key — paste the step, get a link. When you want stable URLs that redeploy in place, an API key and a name are all it takes.

Need to share the report with someone outside GitHub? How to share a GitHub Actions artifact without a login.