⚡️ v0.40.0 RELEASE 🚀 #2558
Description
🗺 What's left for release
- feat: Repo migration tool
- feat: add mssing
dag put
anddag resolve
cli commands -
feat: Migration of Blockstore to use multihash instead of CID as key - feat: webui 2.6
- feat: support base32 encoded CID in IPNS paths
🚢 Estimated shipping date
2nd December
🔦 Highlights
🦆 New repo migrations tool
Ever worked on an application where you've had to write a database migration? Yeah, us too. Up until now js-ipfs hasn't been able to migrate repo's to a new format. Well, that's not strictly true, you could have used the go-ipfs repo migration tool on a repo created when running js-ipfs in Node.js (yes, we have repo compatibility!), but in the browser you were stuck.
..and I mean really stuck, if we'd updated the format of a repo that ships with js-ipfs then your applications would just have to catch an error that the repo version was not compatible. You couldn't use it, and you couldn't upgrade. Bad news bears 🐻.
We had a cunning strategy to avoid this situation - do not change the repo 😂, but this is rapidly becoming unsustainable since we actually want to add a migration to achieve our dream of base32 encoded v1 (by default) CIDs.
Good news friends! The new version of js-ipfs now ships with a repo migration tool that'll automatically migrate repo's in the browser. So now all our ducks are in a line, stay tuned for a migration and a switch to v1 CIDs ✨!
🎻 base32 encoded CIDs in IPNS paths
My violin strings gently weep for being able to use Peer IDs in a domain, and let me tell you why.
Peer IDs currently cannot be used in a domain name because their string format is base58
- a case SENSITIVE encoding. In domain names the following are equivalent:
QmNib2c1qCVSbp9QPT81RmDSg3n8kFgPsMCdj4gpveJESE
qmnib2c1qcvsbp9qpt81rmdsg3n8kfgpsmcdj4gpvejese
QMNIB2C1QCVSBP9QPT81RMDSG3N8KFGPSMCDJ4GPVEJESE
So, bad times.
...but wait, Peer IDs ARE CIDs! I know, weird, but also rad because in theory we should be able to re-encode them as base32
. Right now though, everything expects a base58
encoded string (a v0 CID) because they're actually just a multihash.
In this js-ipfs release we've made a small change to allow you to take your Peer ID (a v0 CID), convert it to a base32 encoded v1 CID and use it in an IPNS path like /ipns/bafybeidta3hkxk3ihxfsk765oswgsjhmvcnkeestyuov6r2t5tyts4xuoe
. Here's how you might do the conversion:
jsipfs id | json id | jsipfs cid base32
bafybeidta3hkxk3ihxfsk765oswgsjhmvcnkeestyuov6r2t5tyts4xuoe
This is really, seriously cool, because now Peer IDs can be used in domain names and so an IPFS gateway operating at bafybeidta3hkxk3ihxfsk765oswgsjhmvcnkeestyuov6r2t5tyts4xuoe.ipns.dweb.link
for example, will have origin isolation (hooray for security 🔒) AND IPNS enabled mutable data 🚀⚡️
In the future, new Peer IDs will be v1 CIDs with a libp2p-key
codec that is base32
encoded by default...but that's a change for another day.
🌲 Implemented dag put
and dag resolve
CLI commands
These have been available in core for a while now and we finally got round to surfacing them in the CLI. e.g.
$ jsipfs dag put '""IPLD RULEZ""'
bafyreia5coklfzblgd3reqwaieafmpasdceqmcnjrowre3623mtb4nxlhm
$ jsipfs dag put '{"to": {"/": "bafyreia5coklfzblgd3reqwaieafmpasdceqmcnjrowre3623mtb4nxlhm"}}'
bafyreiequnkfflujkwhxk6wud5w64hmijdqdmx7p55fgrbiizw32kdrb7e
$ jsipfs dag put '{"path": {"/": "bafyreiequnkfflujkwhxk6wud5w64hmijdqdmx7p55fgrbiizw32kdrb7e"}}'
bafyreidgfdsoupe747qnjzkjk2yirgv76wr4drev3i7kv6dht4dkypusze
$ jsipfs dag resolve bafyreidgfdsoupe747qnjzkjk2yirgv76wr4drev3i7kv6dht4dkypusze/path/to
bafyreia5coklfzblgd3reqwaieafmpasdceqmcnjrowre3623mtb4nxlhm
$ jsipfs dag get bafyreia5coklfzblgd3reqwaieafmpasdceqmcnjrowre3623mtb4nxlhm
IPLD RULEZ
🏗 API Changes
dag.put
got apin
option to save you from calling the pin API separately (and potentially losing your node if GC runs inbetween!)
✅ Release Checklist
- Stage 0 - Automated Testing
- Feature freeze. If any "non-trivial" changes (see the footnotes of docs/releases.md for a definition) get added to the release, uncheck all the checkboxes and return to this stage.
- Automated Testing (already tested in CI) - Ensure that all tests are passing, this includes:
- unit/functional/integration/e2e
- interop
-
sharness(Does not runjs-ipfs
) - all the examples run without problems
- IPFS application testing
-
webui(Does not depend onjs-ipfs
orjs-ipfs-http-client
) -
ipfs-desktop(Does not depend onjs-ipfs
orjs-ipfs-http-client
) - ipfs-companion
- npm-on-ipfs
- ipfs-pubsub-room
- peer-base
- service-worker-gateway
-
- Third party application testing
- Stage 1 - Internal Testing
- Documentation
- Ensure that README.md is up to date
- Install section
- API calls
- Packages Listing
- Ensure that README.md is up to date
- Publish a release candidate to npm
# All succesful builds of master update the `build/last-successful branch which # contains a npm-shrinkwrap.json. # This command checks that branch out, installs it's dependencies using `npm ci`, # creates a release branch (e.g. release/v0.40.x), updates the minor prerelease # version (e.g. 0.39.1 -> 0.40.0-rc.0) and publishes it to npm npx aegir publish-rc # Later we may wish to update the rc. First cherry-picked/otherwise merged the # new commits into the release branch on github (e.g. not locally) and wait # for CI to pass. First update the lockfiles used by ci (n.b. one day this # will be done by our ci tools): npx aegir update-release-branch-lockfiles release/v0.40.x # Then update the rc publisehd on npm. This command pulls the specified release # branch, installs it's dependencies `npm ci`, increments the prerelease version # (e.g. 0.40.0-rc.0 -> 0.40.0-rc.1) and publishes it to npm npx aegir update-rc release/v0.40.x
- Network Testing:
- test lab things - TBD
- Infrastructure Testing:
- TBD
- Documentation
- Stage 2 - Community Dev Testing
- Reach out to the IPFS early testers listed in docs/EARLY_TESTERS.md for testing this release (check when no more problems have been reported). If you'd like to be added to this list, please file a PR.
- Reach out on IRC for additional early testers.
- Stage 3 - Community Prod Testing
- Update js.ipfs.io examples to use the latest js-ipfs
- Invite the IPFS early testers to deploy the release to part of their production infrastructure.
- Invite the wider community (link to the release issue):
- Stage 4 - Release
- Take a snapshot of everyone that has contributed to this release (including its direct dependencies in IPFS, libp2p, IPLD and multiformats) using the js-ipfs-contributors module.
- Publish to npm:
git checkout release/v0.34.x # Re-install dependencies using lockfile (will automatically remove your # node_modules folder) (Ensures the versions used for the browser build are the # same that have been verified by CI) npm ci # lint, build, test, tag, publish npm run release-minor # reintegrate release branch into master git rm npm-shrinkwrap.json yarn.lock git commit -m 'chore: removed lock files' git checkout master git merge release/v0.34.x git push
- Publish a blog post to github.com/ipfs/blog (at minimum, a c&p of this release issue with all the highlights, API changes and thank yous)
- Broadcasting (link to blog post)
- Copy release notes to the GitHub Release description
❤️ Huge thank you to everyone that made this release possible
- @0x6431346e (1 commit, 2 PRs, 1 comment)
- @0xflotus (1 comment)
- @achingbrain (33 commits, 23 PRs, 1 issue, 56 comments)
- @alanshaw (59 commits, 49 PRs, 8 issues, 148 comments)
- @Alvan98 (1 issue, 1 comment)
- @andrew (1 comment)
- @anorth (1 comment)
- @aphelionz (1 comment)
- @AquiGorka (1 comment)
- @arithmetric (1 comment)
- @arminsal1 (1 issue)
- @atfornes (1 comment)
- @AuHau (17 commits, 2 PRs, 2 issues, 16 comments)
- @ay2306 (1 commit, 1 PR, 1 issue, 8 comments)
- @ayushee10 (1 issue, 1 comment)
- @bitspill (1 comment)
- @bonedaddy (1 issue, 4 comments)
- @BrunoZell (1 comment)
- @bvand (1 comment)
- @caelumdev (1 comment)
- @ceslabdocker (1 issue, 3 comments)
- @charleenfei (1 comment)
- @chirag-shinde (1 comment)
- @csuwildcat (1 comment)
- @dasilvacontin (1 comment)
- @datafatmunger (1 comment)
- @daviddias (2 commits, 2 PRs, 3 issues, 21 comments)
- @davidgilbertson (1 comment)
- @dbachko (1 comment)
- @demmojo (1 comment)
- @dirkmc (2 commits, 5 PRs, 1 issue, 2 comments)
- @djdv (1 comment)
- @dordille (1 comment)
- @elsehow (1 comment)
- @enricomarino (1 comment)
- @ethers (1 comment)
- @faheel (1 comment)
- @fbaiodias (1 comment)
- @felixonmars (1 comment)
- @Fil (1 comment)
- @filips123 (1 comment)
- @fsdiogo (2 comments)
- @Gozala (1 comment)
- @grantlouisherman (1 comment)
- @grassias (1 comment)
- @hacdias (2 commits, 2 PRs, 2 comments)
- @HamzaBinSarfraz (1 issue, 1 comment)
- @harshjv (1 comment)
- @holodisc (1 comment)
- @hsanjuan (1 comment)
- @hugomrdias (1 commit, 1 PR, 10 comments)
- @iRyanBell (1 PR)
- @ishanjoshi02 (1 comment)
- @jacobheun (30 commits, 12 PRs, 1 issue, 32 comments)
- @jaller94 (1 commit, 1 PR)
- @JChanceHud (1 comment)
- @jessicaschilling (1 commit, 1 PR, 3 comments)
- @JGAntunes (2 comments)
- @joaosantos15 (1 comment)
- @jonahweissman (1 comment)
- @Jonybang (1 comment)
- @Jorropo (1 commit, 1 PR)
- @kenshyx (1 comment)
- @kpp (2 issues, 1 comment)
- @KrishnaPG (1 issue, 1 comment)
- @lidel (5 commits, 6 PRs, 14 comments)
- @liofchina (1 issue)
- @machawk1 (1 comment)
- @magik6k (1 comment)
- @masylum (1 comment)
- @maxlath (1 comment)
- @mboperator (2 commits, 2 PRs, 2 comments)
- @mburns (1 PR)
- @mcclure (1 issue, 1 comment)
- @MichaelMure (1 comment)
- @michaelsbradleyjr (1 issue)
- @mikeal (3 comments)
- @mishmosh (1 comment)
- @mitar (1 comment)
- @mkg20001 (26 commits, 6 PRs, 4 issues, 52 comments)
- @mnts (1 issue, 2 comments)
- @momack2 (3 comments)
- @moshisushi (1 comment)
- @mpetrunic (1 commit, 1 PR, 2 comments)
- @Mr0grog (1 comment)
- @Nashatyrev (1 comment)
- @NatoBoram (1 comment)
- @negamaxi (1 comment)
- @nick (1 comment)
- @niinpatel (1 comment)
- @noffle (2 comments)
- @npfoss (1 issue)
- @obo20 (1 issue, 3 comments)
- @oed (1 comment)
- @olizilla (2 comments)
- @OR13 (1 comment)
- @Otto-AA (1 comment)
- @PascalPrecht (1 comment)
- @pashoo2 (1 PR, 3 comments)
- @PedroMiguelSS (10 commits, 20 PRs, 1 issue, 22 comments)
- @petethomas (1 comment)
- @pgte (2 comments)
- @phillmac (1 commit, 1 PR, 2 comments)
- @PopTudor (2 comments)
- @raksooo (1 comment)
- @raoulmillais (1 comment)
- @rasmuserik (1 comment)
- @ratsclub (1 issue, 2 comments)
- @reasv (2 commits, 2 PRs, 1 issue, 9 comments)
- @requilence (1 comment)
- @RichardLitt (2 comments)
- @RobertFischer (1 comment)
- @rodkeys (1 comment)
- @rudolph9 (1 issue, 1 comment)
- @rumkin (2 issues, 3 comments)
- @rusfearuth (1 issue)
- @rvagg (1 commit, 1 PR, 4 comments)
- @sarthak0906 (1 commit, 1 PR, 1 comment)
- @satazor (1 comment)
- @SidHarder (1 comment)
- @sktt (1 comment)
- @Stebalien (2 comments)
- @suutaku (3 issues, 6 comments)
- @swedneck (1 comment)
- @terichadbourne (1 comment)
- @thisconnect (1 comment)
- @Thisisjuke (1 issue, 2 comments)
- @uluhonolulu (1 issue)
- @vasco-santos (46 commits, 21 PRs, 4 issues, 15 comments)
- @victorb (1 comment)
- @vith (1 comment)
- @vmx (9 commits, 4 PRs, 13 comments)
- @vporton (1 issue, 1 comment)
- @vweevers (4 comments)
- @whyrusleeping (1 comment)
- @wraithgar (2 comments)
- @ya7ya (1 comment)
🙌🏽 Want to contribute?
Would you like to contribute to the IPFS project and don't know how? Well, there are a few places you can get started:
- Check the issues with the
help wanted
label in the js-ipfs repo - Join an IPFS All Hands, introduce yourself and let us know where you would like to contribute - https://github.com/ipfs/team-mgmt/#weekly-ipfs-all-hands
- Hack with IPFS and show us what you made! The All Hands call is also the perfect venue for demos, join in and show us what you built
- Join the discussion at https://discuss.ipfs.io/ and help users finding their answers.
- Join the 🚀 IPFS Core Implementations Weekly Sync 🛰 and be part of the action!
⁉️ Do you have questions?
The best place to ask your questions about IPFS, how it works and what you can do with it is at discuss.ipfs.io. We are also available at the #ipfs
channel on Freenode.