Blumen
Self-custodial decentralized deployments
Blumen is a CLI and API library to deploy apps on the decentralized web using IPFS and Ethereum.
Blumen is in an alpha stage and has been neither audited nor tested yet. Use with caution!
Features
- Multi-Provider Deployment: Deploy your web app simultaneously on multiple IPFS providers, including web3.storage and Gateway3, ensuring redundancy and availability.
- ENS Integration: Seamlessly integrate with ENS to update your Content-Hash, making it easier for users to access your web app via ENS gateways.
- Safe Integration: Update your ENS Content-Hash using a multisig Safe contract, adding an extra layer of security and decentralization.
Getting Started
Installation
Node.js 16.8+ is required.
Warning: Support for Node 16.8 will be removed in the future. Node 18 is recommended.
pnpm install -g blumen
Environment setup
Grab API keys from the services you use and define them in your environment (e.g. .env
).
All env variables used by Blumen must be prefixed with BLUMEN_
BLUMEN_W3S_TOKEN=eyJhb....
BLUMEN_GW3_TOKEN=ZA70...
BLUMEN_GW3_ACCESS_KEY=9e01ce24...
Deployment
Running deploy
will try to use the dist
folder, otherwise the current directory.
$ blumen deploy
Documentation
CLI
blumen deploy
Deploys a directory on IPFS to specified providers and outputs a web-friendly gateway link, along with other useful information.
Upload a custom path:
$ blumen deploy /path/to/directory
You can update your ENS domain record in-place by passing a domain (and optionally a chain) and a BLUMEN_PK
environment variable:
$ BLUMEN_W3S_TOKEN=eyJhbG... BLUMEN_PK=0x2... ./dist/cli.js deploy dist --ens v1rtl.eth --chain goerli
blumen status <pin>
Retrieves pin status from providers.
$ blumen status bafybeibp54tslsez36quqptgzwyda3vo66za3rraujksmsb3d5q247uht4
web3.storage: pinned
Gateway3: pinned
By default, providers are fetched from environment like with the deploy
command. You can manually specify providers via --providers
flag, comma separated:
$ blumen status --providers=web3.storage,Gateway3 bafybeibp54tslsez36quqptgzwyda3vo66za3rraujksmsb3d5q247uht4
blumen ens <cid> <ens>
Update ENS Content-Hash from the CLI. Requires a BLUMEN_PK
environment variable (for private key).
$ BLUMEN_PK=0x2... blumen ens bafybeibp54tslsez36quqptgzwyda3vo66za3rraujksmsb3d5q247uht4 v1rtl.eth
If you are doing testing, you can pass --chain goerli
to use Goerli network instead of mainnet.
Safe multisig
You can also update your ENS name as a Safe owner or delegate by specifying the safe's address and the operation type (0 - (default) for owners, 1 - for delegates). ENS name should be owned by a Safe, and a delegate's private key has to be provided to generate a transaction signature for Safe.
EIP-3770 addresses are also supported.
$ BLUMEN_PK=0x2... blumen ens bafybeibp54tslsez36quqptgzwyda3vo66za3rraujksmsb3d5q247uht4 v1rtl.eth --safe eth:0x0000000000000000000000000000000000000000 --operation-type 1
After submitting the transaction, open your Safe app and approve it.