{"action":"created","issue":{"url":"https://api.github.com/repos/ipfs/js-ipfs/issues/1375","repository_url":"https://api.github.com/repos/ipfs/js-ipfs","labels_url":"https://api.github.com/repos/ipfs/js-ipfs/issues/1375/labels{/name}","comments_url":"https://api.github.com/repos/ipfs/js-ipfs/issues/1375/comments","events_url":"https://api.github.com/repos/ipfs/js-ipfs/issues/1375/events","html_url":"https://github.com/ipfs/js-ipfs/issues/1375","id":328456179,"node_id":"MDU6SXNzdWUzMjg0NTYxNzk=","number":1375,"title":"⚡️ v0.30.0 RELEASE 🚀","user":{"login":"alanshaw","id":152863,"node_id":"MDQ6VXNlcjE1Mjg2Mw==","avatar_url":"https://avatars1.githubusercontent.com/u/152863?v=4","gravatar_id":"","url":"https://api.github.com/users/alanshaw","html_url":"https://github.com/alanshaw","followers_url":"https://api.github.com/users/alanshaw/followers","following_url":"https://api.github.com/users/alanshaw/following{/other_user}","gists_url":"https://api.github.com/users/alanshaw/gists{/gist_id}","starred_url":"https://api.github.com/users/alanshaw/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/alanshaw/subscriptions","organizations_url":"https://api.github.com/users/alanshaw/orgs","repos_url":"https://api.github.com/users/alanshaw/repos","events_url":"https://api.github.com/users/alanshaw/events{/privacy}","received_events_url":"https://api.github.com/users/alanshaw/received_events","type":"User","site_admin":false},"labels":[{"id":491319655,"node_id":"MDU6TGFiZWw0OTEzMTk2NTU=","url":"https://api.github.com/repos/ipfs/js-ipfs/labels/ready","name":"ready","color":"e6e6e6","default":false}],"state":"open","locked":false,"assignee":null,"assignees":[],"milestone":null,"comments":21,"created_at":"2018-06-01T09:58:50Z","updated_at":"2018-07-09T15:39:00Z","closed_at":null,"author_association":"MEMBER","body":"> Feature parity with go-ipfs just got a whole lot closer!\r\n\r\n# 🗺 What's left for release\r\n\r\n- [x] [Complete Pin API](https://github.com/ipfs/js-ipfs/pull/1045)\r\n- [x] [Connection Manager](https://github.com/ipfs/js-ipfs/pull/1410)\r\n- [x] [Implement bitswap.wantlist (with peer ID) and bitswap.unwant](https://github.com/ipfs/js-ipfs/pull/1349)\r\n- [x] [Consistent content hashes between js-ipfs and go-ipfs](https://github.com/ipfs/js-ipfs/pull/1371)\r\n- [x] [libp2p configuration changes](https://github.com/ipfs/js-ipfs/pull/1401)\r\n- [x] [MFS](https://github.com/ipfs/js-ipfs/pull/1360)\r\n\r\n# 🔦 Highlights\r\n\r\n## 🔀 Mutable File System (MFS)\r\n\r\nMFS, the mutable file system is finally here in js-ipfs. The [MFS API](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system) allows you to use IPFS like a regular Unix file system. Add, edit, move, copy, rename and delete your files while keeping all that content addressable, Merkle DAGgy goodness.\r\n\r\n## 📌 Pin API implemented\r\n\r\nEver wanted to keep the things you add to IPFS? Well now you can! Pinning a hash in IPFS land tells your node to keep the data around in your local repo until you decide to unpin it. No amount of garbage collection will take it! Next stop, implement garbage collection 😝 \r\n\r\n## 🤝 libp2p connection manager added\r\n\r\nThe new libp2p connection manager gives you the power to disconnect peers when you have too many or when certain bandwidth restrictions are reached. Really useful for preserving resources on resource constrained devices such as mobile phones or IoT.\r\n\r\nSee the options at: https://github.com/libp2p/js-libp2p-connection-manager#create-a-connectionmanager\r\n\r\n## 📇 bitswap improvements\r\n\r\nSwapping your bits has never been so easy to keep track of. You can now inspect the \"wantlist\" (the list of hashes currently wanted by various peers) on a per peer basis, and you can manually \"unwant\" hashes in your own list.\r\n\r\n## ☯️ Content hashes interop\r\n\r\nIf you add a file to go-ipfs and also add it to js-ipfs then you might get a different hash. It doesn't mean the hash is wrong, just that the layout of the DAG nodes that were created for your file was different. Good news folks, we fixed that. You should now get the same hash whether you add your file to go-ipfs or js-ipfs. Hooray \\o/.\r\n\r\n## 🙅 Node.js 10 support\r\n\r\nNow you can run your js-ipfs node on the latest and greatest Node.js yet.\r\n\r\n# 🏗 API Changes\r\n\r\n* libp2p configuration property names for custom modules has changed\r\n    * old: `libp2p.modules.discovery`\r\n    * new: `libp2p.modules.peerDiscovery`\r\n* Custom libp2p modules you provide now _replace_ default modules\r\n* Pin API added ([spec](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/PIN.md))\r\n* `bitswap.wantlist` peer ID parameter added ([spec](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapwantlist))\r\n* `bitswap.unwant` implemented ([spec](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/BITSWAP.md#bitswapunwant))\r\n* MFS API added ([spec](https://github.com/ipfs/interface-ipfs-core/blob/master/SPEC/FILES.md#mutable-file-system))\r\n\r\n# ✅ Release Checklist\r\n\r\n- Robustness and quality\r\n  - [x] Ensure that all tests are passing, this includes:\r\n    - [x] unit\r\n    - [x] interop\r\n    - [x] sharness\r\n  - [x] Run tests of the following projects with the new release:\r\n    - [x] [ipfs-pubsub-room](https://github.com/ipfs-shipyard/ipfs-pubsub-room/issues/52)\r\n    - [x] [peerpad-core](https://github.com/ipfs-shipyard/peer-pad-core/issues/20)\r\n    - [x] [ipfs-log](https://github.com/orbitdb/ipfs-log/issues/129)\r\n    - [x] [orbit-db](https://github.com/orbitdb/orbit-db/issues/398)\r\n- Documentation\r\n  - [x] Ensure that README.md is up to date\r\n  - [x] Ensure that all the examples run\r\n- Communication\r\n  - [x] Create the release issue\r\n  - [x] Announcements (both pre-release and post-release)\r\n    - [x] [Twitter](https://twitter.com/_alanshaw/status/1014990745508425728)\r\n    - [x] IRC\r\n    - [x] [Reddit](https://new.reddit.com/r/ipfs/comments/8wi6j4/jsipfs_v0300_is_coming_to_a_node_modules_near_you/)\r\n  - [x] [Blog post](https://github.com/ipfs/blog/pull/165/files)\r\n\r\n# 🙌🏽 Want to contribute?\r\n\r\nWould you like to contribute to the IPFS project and don't know how? Well, there are a few places you can get started:\r\n\r\n- Check the issues with the `help wanted` label at the Ready column in our waffle board - https://waffle.io/ipfs/js-ipfs?label=help%20wanted\r\n- Join an IPFS All Hands, introduce yourself and let us know where you would like to contribute - https://github.com/ipfs/pm/#all-hands-call\r\n- 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\r\n- Join the discussion at http://discuss.ipfs.io/ and help users finding their answers.\r\n- Join the [⚡️ⒿⓈ Core Dev Team Weekly Sync 🙌🏽](https://github.com/ipfs/pm/issues/650) and be part of the Sprint action!\r\n\r\n# ⁉️ Do you have questions?\r\n\r\nThe best place to ask your questions about IPFS, how it works and what you can do with it is at [discuss.ipfs.io](http://discuss.ipfs.io). We are also available at the #ipfs channel on Freenode.\r\n"},"comment":{"url":"https://api.github.com/repos/ipfs/js-ipfs/issues/comments/403522861","html_url":"https://github.com/ipfs/js-ipfs/issues/1375#issuecomment-403522861","issue_url":"https://api.github.com/repos/ipfs/js-ipfs/issues/1375","id":403522861,"node_id":"MDEyOklzc3VlQ29tbWVudDQwMzUyMjg2MQ==","user":{"login":"satazor","id":1017236,"node_id":"MDQ6VXNlcjEwMTcyMzY=","avatar_url":"https://avatars2.githubusercontent.com/u/1017236?v=4","gravatar_id":"","url":"https://api.github.com/users/satazor","html_url":"https://github.com/satazor","followers_url":"https://api.github.com/users/satazor/followers","following_url":"https://api.github.com/users/satazor/following{/other_user}","gists_url":"https://api.github.com/users/satazor/gists{/gist_id}","starred_url":"https://api.github.com/users/satazor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/satazor/subscriptions","organizations_url":"https://api.github.com/users/satazor/orgs","repos_url":"https://api.github.com/users/satazor/repos","events_url":"https://api.github.com/users/satazor/events{/privacy}","received_events_url":"https://api.github.com/users/satazor/received_events","type":"User","site_admin":false},"created_at":"2018-07-09T15:39:00Z","updated_at":"2018-07-09T15:39:00Z","author_association":"NONE","body":"❤️🎉"}}
{"actor":{"display_login":"satazor"}}