Publish IPFS webapps which require user consent to update, see:
This repo contains a sort of web bootloader, you will style this repo as you like and then you will publish this repo and your app to IPFS. Your app is a fork of IPFS-boot-react or IPFS-boot-choo. You will host a file versions.json on any https server and inside this file an array of items describe versions of your app which users choose from.
It is intended that you share the source of your fork of IPFS-boot and IPFS-boot-react or IPFS-boot-choo. The sources allow users to build and see the IPFS CID (a hash) you publish is the same as what they get from source. The CID of IPFS-boot will be the URL of your app, the CID of each version of your app goes in versions.json, and the bootloader reads this file.
The bootloader only gets published once but your app updates can include CSS which styles the bootloader. This all actually works, and it works offline(!), give it a try.
The aim is reproducible builds so docker is involved
docker buildx build --platform=linux/amd64 -t ipfs-boot .
docker run --rm -i --platform=linux/amd64 -v ./dist:/root/dist ipfs-boot
Read the guide on choosing an IPFS pin service then
cp example.env .env
docker buildx build --platform=linux/amd64 -f Dockerfile.pin -t ipfs-pin .
docker run --rm -i --platform=linux/amd64 -v ./dist:/root/dist --env-file .env ipfs-pin
> CIDv0 = QmWakBHNNGkw1iqdzHiHyubU5A7BmgCGWhrUNKmDxXKF2Z
> CIDv1 = bafybeid2phhv7xwnsk7jrvpuc4ufd5zdltax47j64bgusf7iw3aybns5mi
> upload: ../dist.car to s3://bucket-name/bafybeid2phhv7xwnsk7jrvpuc4ufd5zdltax47j64bgusf7iw3aybns5mi
> done: https://bafybeid2phhv7xwnsk7jrvpuc4ufd5zdltax47j64bgusf7iw3aybns5mi.ipfs.dweb.link
Your bootloader is now live and discoverable with v0 and v1 CIDs, see gateways
https://localhost:8080 for quicker iterations on the bootloader
npm --prefix javascript/ install
npm --prefix javascript/ run dev
You may be wondering about the rust/ dir or dist/nitro_wasm.wasm. The Rust allows IPFS-boot to support attestation with AWS Nitro servers, so reproducible clients and servers, see:
Two files nitro_wasm.js and nitro_wasm.wasm are checked into source within javascript/assets/, these are tested by github actions and to build from source do:
docker buildx build --platform=linux/amd64 -f Dockerfile.wasm -t ipfs-wasm .
docker run --rm -i --platform=linux/amd64 -v ./dist:/root/dist ipfs-wasm
sha256sum javascript/assets/nitro_wasm.wasm
sha256sum dist/nitro_wasm.wasm
Velo.xyz and nijynot my coworker are due thanks for some AWS Nitro contributions
Please if you want to style the default bootloader, open a PR ^.^
If you clicked "boot!" without reading: you can return to boot list anytime by add #boot to the url
- react https://bafybeic76eeoeudbn6u2uzip6qb4v4fcensro3kfyd7st5jhdtlyvywqh4.ipfs.dweb.link
- choo https://bafybeid2phhv7xwnsk7jrvpuc4ufd5zdltax47j64bgusf7iw3aybns5mi.ipfs.dweb.link
MIT - Copyright 2025 - mike@rhodey.org