Releases: n0-computer/iroh
v0.5.1 - Connectivity Intensifies
First you have to find one another, before you can interact.
This release is all about finding and connecting with your peers. Before iroh
could only connect with peers that were directly reachable, eg. static IP address or local LAN peers. Thanks to NATs and the various complications of IPv4 and IPv6 these are not that many machines in the world, and especially mobile devices are hard to discover.
So we are proud to present the first version of iroh
with builtin NAT traversal, hole punching and automatic relaying when everything fails.
If you want to find out the details on how all of this works, header over to the [Iroh Hole Punching](https://www.notion.so/Iroh-Hole-Punching-b9a38cc228fb47328a73e71d10520418?pvs=21).
Of course that is not all, we have also fixed some pesky bugs, as well added some more features, like generic collections and pluggable authentication.
On a practical side, iroh
is now split into multiple crates:
iroh
- The CLI and main library entry point.iroh-bytes
- The core data transfer protocol, including resume.iroh-net
- Nat traversal, peer management and general networking tools.iroh-metrics
- Metrics collection using prometheus
This should open up more possibilities when integrating just the pieces you need from iroh
into your app.
[Note: this ended up being 0.5.1
for iroh
and iroh-net
due to a publish issue with [email protected]
]
v0.4.1
v0.4.0
Bug Fixes
- Avoid other output between contents when printing (#786) (9076443)
- ci: format output as table (#791) (7fb888d)
- ci: move from sendme to iroh (#788) (6a5c13e)
- Do not send duplicate NotFound responses (#802) (c0d4984)
- fix netsim bin paths (#881) (3291291)
- Improve listening addr output (#789) (33c0482)
- Output writing (#804) (eb18a89)
- provider: ensure postcard buffers are appropriately sized (c28e0a8)
- update to new default-net (e2584c0)
- use absolute paths everywhere (#836) (b2730ee)
Features
- Add run_ticket to dial all addresses stored in a Ticket (#888) (91c7e2a)
- ci netsim integration tests (#877) (8fe1d81)
- ci: push data to metro (#794) (1a68106)
- cmd to list provide addrs (#859) (2c0663a)
- custom configs for netsim (#862) (1078762)
- get-ticket: Contact provider on all listening addrs (#893) (adbb2bf)
- net: implement local address detection (#822) (9323e10)
- provider: emit events about outgoing transfers (f05ec8c)
- release builds (#863) (7b91c9a)
- Set multiple addrs in the ticket (#820) (9ac4cf6)
- Show more numbers in human readable form (#790) (a0b7c26)
- ticket: Ensure a ticket always has at least one address (#892) (0c17958)
- use chunk groups feature (#798) (d68f05d)
v0.3.0 - A New Beginning
Thus far, Iroh has been built as an implementation of the InterPlanetary File System (IPFS) focused on interoperability with Kubo, the reference implementation of IPFS. Starting with this release Iroh breaks interoperability with Kubo. Iroh will still be an IPFS implementation in a loose sense of the term, but moving forward our exclusive focus is on hitting numbers that make Iroh a reliable piece of technology that just works. Rather than delete the IPFS implementation we’ve built so far we will rename the project to Beetle, and put it into maintenance mode. Our rationale is outlined in this blog post
This is the first release in our ground up rebuild of Iroh. This sets an initial foundation of functionality that we intend to layer onto as we go.
The following crates are removed:
- iroh-api
- iroh-bitswap
- iroh-car
- iroh-embed
- iroh-gateway
- iroh-localops
- iroh-metrics
- iroh-one
- iroh-p2p
- iroh-resolver
- iroh-rpc-client
- iroh-rpc-types
- iroh-share
- iroh-store
- iroh-util
- iroh-unixfs
The following crates still exist, but have completely different APIs:
- iroh
v0.2.0
First steps for iroh as a library
Many folks have asked for iroh as a library embeddable in other rust projects, and with this release we land the the first version of iroh-embed
. Check the example for an initial guide.
We still have a lot of work to do on iroh-api
to expose a clean API to consume as a library, but if you're the kind of project that's intersted in embedded IPFS, and willing to roll up your sleeves on a moving API, Iroh is ready for you to use today.
Gateway Subdomain & ETH domain support
Our gateway spec compatibility continues to grow. Both of these features were outside contributions by @ppodolsky, for which we're super grateful. Be sure to check out their work on summa!
QUIC Support
The majority of traffic on public IPFS networks runs over QUIC, which we now support within iroh thanks to a massive push by the rust-libp2p team. Huge thanks to the libp2p team!
Bug Fixes
- actually resolve and check paths (#623) (8b6844f)
- ci: Call cargo with beta toolchain from env var (#622) (b62030d)
- ci: Set the protoc-arch matrix for weekly job (#619) (22d68df), closes #618
- ci: Use beta toolchain for the clippy run (#620) (03624b5)
- iroh-one: Wire up mem addresses to each other (#555) (ee9677d)
- iroh: do not use self version dep (6f6fee0)
- iroh: exclude tests and fixtures from publishing (6ebee5f)
- only use name if name is set (#605) (4dda2d0)
- unixfs seeking (#606) (51e3ddf)
- update quic-rpc to get rid of debug output (bf4128b)
- use http when creating hyper URL (#591) (e9e932d)
- version handling in tests & git_version (59c5dc7)
Features
- ci: improve protoc install & add code coverage checks (#538) (bcc20ce)
- enable quic transport (18e2f40)
- gateway: add info page (35955d6)
- minimal iroh-embed (#565) (c216440)
- Send all the things (#617) (214d9ce)
- Support
eth
domains (1d6b825) - support of Gateway Subdomain spec (#546) (dfe3134)
- switch to released [email protected] (ae30f9e)
- unixfs: add rabin based chunking (b0a5783)
v0.1.3
v0.1.2
This relase brings about a couple of highlights, the first of which is the first relase of all iroh-*
crates to crates.io. The second one being that we now support the experimental quic transport in libp2p.
Bug Fixes
Features
v0.1.1
Bitswap client mode
Iroh can now run in "client mode", which can fetch content from bitswap, but not provide content. This is useful if you're running on a lower-powered device or have limited bandwidth. To use client mode change your p2p.config.toml
:
bitswap_server = false
Use indexer nodes to find content providers
Iroh can use network indexers like cid.contact to find providers of a given CID. To use the cid.contact indexer adjust your gateway.config.toml
to add an indexer_endpoint
URL:
indexer_endpoint = https://cid.contact/cid/
Docker support
Iroh now ships with docker images! Spin iroh up locally with:
$ cd iroh/docker
$ docker-compose up
then run iroh status
from another terminal if you already have iroh installed. Now you're backing iroh with docker! docker-compose down
to stop. The docker compose file also includes helpful guidance on which ports to expose from each iroh service.
We're shipping multi-arch distroless builds for amd64 & arm64 architectures.
Fixed a critical bug adding files
We fixed a known bug in iroh v0.1.0 that would break iroh add
if files referenced the same CID on the way in. It's now fixed, and now we can happily do roundtrip add/get of the linux kernel, which is always fun 😊.
iroh_add_linux_kernel.mp4
Benchmarks
Benchmarks for this release coming soon. We'll update here once they're up.
Production Readiness
Is this production ready? Maybe. Numerous projects are now using iroh in the wild. You'll need to judge for yourself if iroh meets your needs. Please reach out on our discussion forums if you have questions. We're going to keep the status at "Maybe" until we release a v1.0. v1.0 is currently slated for Q4 2023.
v0.1.0
We’re on the board 🎉! This first release of iroh brings a new implementation of IPFS to the world.
Key things to highlight about the first release of iroh:
- Exchange Data with Kubo. Iroh can interoperate with kubo nodes on the IPFS network, pushing & fetching data.
- Service Oriented architecture. Don't want p2p? Turn it off! Iroh will still work without it.
- Single CLI to control all services.
- Built for efficiency. Iroh's memory footprint & CPU usage are either on par or better than the best interoperable IPFS implementations out there.
- Runs well on a laptop. We have a custom installer script that will configure iroh for your laptop. See our install docs
v0.1.0 ships as 4 binaries for Linux & macOS with zero external dependencies:
- iroh - command line client
- iroh-store - data storage daemon
- iroh-p2p - peer 2 peer networking
- iroh-gateway - IPFS-to-HTTP bridge
You'll need to download all of them & put them on your $PATH to work with iroh. Our install docs have more info.
Please do give iroh a try, we'd love to hear your feedback. Thanks!
Benchmarks
We're runnning benchmarks on a relatively stock AWS box for ease-of-replication. We don't have benchmarks for IPFS network retrieval this round.
Adding Single Files
Add a single file with iroh add --no-wrap --offline
:
file size | real (s) | user(s) | sys(s) | cpu % | cpu/total % |
---|---|---|---|---|---|
100K | 0.0102 | 0.0162 | 0.0317 | 469.6078431 | 7.337622549 |
1M | 0.0167 | 0.004 | 0.0519 | 334.7305389 | 5.230164671 |
10M | 0.01345 | 0.0101 | 0.0418 | 385.87 | 6.03 |
100M | 0.01345 | 0.0101 | 0.0418 | 385.87 | 6.03 |
1G | 0.01345 | 0.0101 | 0.0418 | 385.87 | 6.03 |
Fetching Cached Gateway Content
Repeatedly request the same CID of different file sizes to measure cached content throughput via HTTP request
File size | cpu/total (%) | rps | throughput/s | avg latency |
---|---|---|---|---|
100K | 90.48072917 | 40,064.27 | 3.85GB | 5.08ms |
1M | 87.66614583 | 6,926.95 | 6.77GB | 29.08ms |
10M | 87.34010417 | 711.55 | 6.98GB | 278.86ms |
100M | 88.00885417 | 66.52 | 6.82GB | 2.85s |
1G | 87.84947917 | 6.65 | 6.85GB | 0.00s |
Production Readiness
Is this production ready? No. We need your help to kick tires & find bugs!.
The v0.1.0 moniker should testify to just how new this software is. Please don't deploy it anywhere mission critical until we've had at least a month or two to address bugs & write tests.
Things you should know about this release:
There are two problems we couldn't properly address
- There is no delete command. Data added to iroh will stay there until a future release where we add content removal. See issue #432 for details. The workaround for now is to blow away the storage database.
- We have one particularly nasty known bug that can cause iroh to not persist data for highly nested directories upon add we plan to address ASAP in a patch release. See issue #423.