Changelog History
Page 5
-
v0.4.19 Changes
March 01, 2019๐ We're happy to announce go 0.4.19. This release contains a bunch of important fixes and a slew of new and improved features. Get pumped and upgrade ASAP to benefit from all the new goodies! ๐
๐ Features
๐ฑ ๐ Initializing With Random Ports
Go-ipfs can now be configured to listen on a random but stable port (across restarts) using the new
randomports
configuration profile. This should be helpful when testing and/or running multiple go-ipfs instances on a single machine.To initialize a go-ipfs instance with a randomly chosen port, run:
\> ipfs init --profile=randomports
๐ฑ ๐ Gateway Directory Listing
IPNS (and/or DNSLink) directory listings on the gateway, e.g. https://ipfs.io/ipns/dist.ipfs.io/go-ipfs/, will now display the ipfs hash of the current directory. This way users can more easily create permanent links to otherwise mutable data.
๐ฑ ๐ก AutoRelay and AutoNAT
๐ This release introduces two new experimental features (courtesy of libp2p): AutoRelay and AutoNAT.
AutoRelay is a new service that automatically chooses a public relay when it detects that the go-ipfs node is behind a NAT. While relaying connections through a third-party node isn't the most efficient way to route around NATs, it's a reliable fallback.
To enable AutoRelay, set the
Swarm.EnableAutoRelay
option in the config.AutoNAT is the service AutoRelay uses to detect if the node is behind a NAT. You don't have to set any special config flags to enable it.
In this same config section, you may also notice options like
EnableRelayHop
,EnableAutoNATService
, etc. You do not need to enable these:EnableRelayHop
-- Allow other nodes to use your node as a relay (disabled by default).EnableAutoNATService
-- Help other nodes detect if they're behind a NAT (disabled by default).
๐ต Offline Operation
๐ There are two new "offline" features in this release: a global
--offline
flag and an option to configure the gateway to not fetch files.๐ Most go-ipfs commands now support the
--offline
flag. This causes IPFS to avoid network operations when performing the requested operation. If you've ever used the--local
flag, the--offline
flag is the (almost) universally supported replacement.For example:
- If the daemon is started with
ipfs daemon --offline
, it won't even connect to the network. (note: this feature isn't new, just an example). ipfs add --offline some_file
won't send out provider records.ipfs cat --offline Qm...
won't fetch any blocks from the network.ipfs block stat --offline Qm...
is a great way to tell if a block is locally available.
Note: It doesn't yet work with the
refs
,urlstore
, ortar
commands (#6002).On to the gateway, there's a new
Gateway.NoFetch
option to configure the gateway to only serve locally present files. This makes it possible to run an IPFS node as a gateway to serve content of your choosing without acting like a public proxy. ๐คซ๐ฑ ๐ Adding And Pinning Content
๐ There's a new
--pin
flag for bothipfs block put
andipfs urlstore add
to match the--pin
flag inipfs add
. This allows one to atomically add and pin content with these APIs.NOTE 1: For
ipfs urlstore add
,--pin
has been enabled by default to match the behavior inipfs add
. However,ipfs block put
does not pin by default to match the current behavior.NOTE 2: If you had previously used the urlstore and weren't explicitly pinning content after adding it, it isn't pinned and running the garbage collector will delete it. While technically documented in the
ipfs urlstore add
helptext, this behavior was non-obvious and bears mentioning.๐ File Listing
The
ipfs ls
command has two significant changes this release: it reports file sizes instead of dag sizes and has gained a new--stream
flag.First up,
ipfs ls
now reports file sizes instead of dag sizes. Previously, for historical reasons,ipfs ls
would report the size of a file/directory as seen by IPFS including all the filesystem datastructures and metadata. However, this meant thatls -l
andipfs ls
would print different sizes:\> ipfs ls /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv QmZTR5bcpQD7cFgTorqxZDYaew1Wqgfbd2ud9QqGPAkK2V 1688 about QmYCvbfNbCwFR45HiNP45rwJgvatpiW38D961L5qAhUM5Y 200 contact QmY5heUM5qgRubMDD1og9fhCPA6QdkMp3QCwd4s7gJsyE7 322 helpQmejvEPop4D7YUadeGqYWmZxHhLc4JBUCzJJHWMzdcMe2y 12 ping QmXgqKTbzdh83pQtKFb19SpMCpDDcKR2ujqk3pKph9aCNF 1692 quick-start QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB 1102 readme QmQ5vhrL7uv6tuoN9KeVBwd4PwfQkXdVVmDLUZuTNxqgvm 1173 security-notes\> ipfs get /ipfs/QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv Saving file(s) to QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv 6.39 KiB / 6.39 KiB [================================] 100.00% 0s\> ls -l QmS4ustL54uo8FzR9455qaxZwuMiUhyvMcX9Ba8nUH4uVv total 28 -rw------- 1 user group 1677 Feb 14 17:03 about -rw------- 1 user group 189 Feb 14 17:03 contact -rw------- 1 user group 311 Feb 14 17:03 help-rw------- 1 user group 4 Feb 14 17:03 ping -rw------- 1 user group 1681 Feb 14 17:03 quick-start -rw------- 1 user group 1091 Feb 14 17:03 readme -rw------- 1 user group 1162 Feb 14 17:03 security-notes
This is now no longer the case.
ipfs ls
andls -l
now return the same sizes. ๐Second up,
ipfs ls
now has a new--stream
flag. In IPFS, very large directories (e.g., Wikipedia) are split up into multiple chunks (shards) as there are too many entries to fit in a single block. Unfortunately,ipfs ls
buffers the entire file list in memory and then sorts it. This means thatipfs ls /ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki
(wikipedia) will take a very long time to return anything (it'll also use quite a bit of memory).However, the new
--stream
flag makes it possible to stream a directory listing as new chunks are fetched from the network. To test this, you can runipfs ls --stream --size=false --resolve-type=false /ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco/wiki
. You probably won't want to wait for that command to finish, Wikipedia has a lot of entries. ๐๐ฑ ๐ HTTP Proxy
๐ This release sees a new (experimental) feature contributed by our friends at Peergos: HTTP proxy over libp2p. When enabled, the local gateway can act as an HTTP proxy and forward HTTP requests to libp2p peers. When combined with the
ipfs p2p
command, users can use this to expose HTTP services to other go-ipfs nodes via their gateways. For details, check out the documentation.๐ Performance And Reliability
๐ This release introduces quite a few performance/reliability improvements and, as usual, fixes several memory leaks. Below is a non-exhaustive list of noticeable changes.
๐ฑ ๐ DHT
๐ This release includes an important DHT fix that should significantly:
- Reduce dialing.
- Speed up DHT queries. ๐ 3. Improve performance of the gateways.
Basically, in the worst case, a DHT query would turn into a random walk of the entire IPFS network. Yikes!
Relevant PR: libp2p/go-libp2p-kad-dht#237
๐ฑ ๐ธ Bitswap
Bitswap sessions have improved and are now used for all requests. Sessions allow us to group related content and ask peers most likely to have the content instead of broadcasting the request to all connected peers. This gives us two significant benefits:
- Less wasted upload bandwidth. Instead of broadcasting which blocks we want to everyone, we can ask fewer peers thus reducing the number of requests we send out.
- Less wasted download bandwidth. Because we know which peers likely have content, we can ask an individual peer for a block and expect to get an answer. In the past, we'd ask every peer at the same time to optimize for latency at the expense of bandwidth (getting the same block from multiple peers). We had to do this because we had to assume that most peers didn't have the requested block.
๐ฑ โผ๏ธ Pubsub
This release includes some significant reliability improvements in pubsub subscription handling. If you've previously had issues with connected pubsub peers not seeing each-other's messages, please upgrade ASAP.
๐ฑ โป๏ธ Reuseport
In this release, we've rewritten our previously error-prone
go-reuseport
library to not duplicate a significant portion of Go's low-level networking code. This was made possible by Go's newControl
net.Dialer
option.In the past, our first suggestion to anyone experiencing weird resource or connectivity issues was to disable
REUSEPORT
(setIPFS_REUSEPORT
to false). This should no longer be necessary.๐ฑ ๐บ Badger Datastore
๐ Badger has reached 1.0. This release brings an audit and numerous reliability fixes. We are now reasonably confident that badger will become the default datastore in a future release. ๐
โ This release also adds a new
Truncate
configuration option for the badger datastore (enabled by default for new IPFS nodes). When enabled, badger will delete any un-synced data on start instead of simply refusing to start. This should be safe on all filesystems where thesync
operation is safe and removes the need for manual intervention when restarting an IPFS node after a crash.Assuming you initialized your badger repo with
ipfs init --profile=badgerds
, you can enable truncate on an existing repo by running:ipfs config --json "Datastore.Spec.child.truncate" true
.๐จ Refactors and Endeavors
๐ฑ ๐น Commands Library
๐ The legacy commands library shim has now been completely removed. This won't mean much for many users but the go-ipfs team is happy to have this behind them.
๐ Base32 CIDs
This release can now encode CIDs in responses in bases other than base58. This is primarily useful for web-browser integration as it allows us to (a) encode CIDs in a lower-case base (e.g., base32) and then use them in the origin part of URLs. The take away is: this release brings us a step closer to better browser integration.
๐ Specifically, this release adds two flags:
--cid-base
: When specified, the IPFS CLI will encode all CIDv1 CIDs using the requested base. โฌ๏ธ 2.--upgrade-cidv0-in-output
: When specified, the IPFS CLI will upgrade CIDv0 CIDs to CIDv1 CIDs when returning them to the user. This upgrade is necessary because CIDv0 doesn't support multibase however, it's off by default as it changes the binary representation of the CIDs (which could have unintended consequences).
๐ฑ ๐ CoreAPI
๐ The work on the CoreAPI refactor (ipfs/go-ipfs#4498) has progressed leaps and bounds this release. The CoreAPI is a comprehensive programmatic interface designed to allow go-ipfs be used as a daemon or a library interchangeably.
๐ As of this release, go-ipfs now has:
- External interface definitions in ipfs/interface-go-ipfs-core.
- A work-in-progress implementation (ipfs/go-ipfs-http-client) of these interfaces that uses the IPFS HTTP API. This will replace the (ipfs/go-ipfs-api) library.
- ๐ A new plugin type "Daemon". Daemon plugins are started and stopped along with the go-ipfs daemon and are instantiated with a copy of the CoreAPI. This allows them to control and extend the go-ipfs daemon from within the daemon itself.
The next steps are:
- Finishing the remaining API surface area. At the moment, the two key missing parts are:
- Config manipulation.
- The
ipfs files
API. - Finalizing the ipfs/go-ipfs-http-client implementation.
- Creating a simple way to construct and initialize a go-ipfs node when using go-ipfs as a library.
๐ Changelogs
- github.com/ipfs/go-ipfs:
- fix: show interactive output from install.sh (ipfs/go-ipfs#6024)
- fix: return the shortest, completely resolved path in the resolve command (ipfs/go-ipfs#5704)
- fix a few interop test issues (ipfs/go-ipfs#6004)
- fix HAMT bookmark ln (ipfs/go-ipfs#6005)
- docs: document Gateway.NoFetch (ipfs/go-ipfs#5999)
- Improve "name publish" ttl option documentation (ipfs/go-ipfs#5979)
- fix(cmd/mv): dst filename error (ipfs/go-ipfs#5964)
- coreapi: extract interface (ipfs/go-ipfs#5978)
- coreapi: cleanup non-gx references (ipfs/go-ipfs#5976)
- coreapi: fix seek test on http impl (ipfs/go-ipfs#5971)
- block put --pin (ipfs/go-ipfs#5969)
- Port
ipfs ls
to CoreAPI (ipfs/go-ipfs#5962) - docs: duplicate default helptext in
name publish
(ipfs/go-ipfs#5960) - plugin: add a daemon plugin with access to the CoreAPI (ipfs/go-ipfs#5955)
- coreapi: add some seeker tests (ipfs/go-ipfs#5934)
- Refactor ipfs get to use CoreAPI (ipfs/go-ipfs#5943)
- refact(cmd/init): change string option to const (ipfs/go-ipfs#5949)
- cmds/pin: use coreapi/pin (ipfs/go-ipfs#5843)
- Only perform DNSLink lookups on fully qualified domain names (FQDN) (ipfs/go-ipfs#5950)
- Fix DontCheckOSXFUSE config command example (ipfs/go-ipfs#5951)
- refact(cmd/config): change string option to const (ipfs/go-ipfs#5948)
- clarification the document of --resolve flag in name.publish (ipfs/go-ipfs#5651)
- Drop some coreunix code (ipfs/go-ipfs#5938)
- commands: fix verbose flag (ipfs/go-ipfs#5940)
- Fixes #4558 (ipfs/go-ipfs#5937)
- Port dag commansds to CoreAPI (ipfs/go-ipfs#5939)
- mfs: make sure to flush after mv and chcid (ipfs/go-ipfs#5936)
- docs/code-flow : Add code flow documentation for add cmd. (ipfs/go-ipfs#5864)
- coreapi: few more error check fixes (ipfs/go-ipfs#5935)
- Fixed and cleaned up TestIpfsStressRead (ipfs/go-ipfs#5920)
- Clarify that chunker sizes are in bytes (ipfs/go-ipfs#5923)
- refact(cmd/patch): change string to const (ipfs/go-ipfs#5931)
- refact(cmd/object): change option string to const (ipfs/go-ipfs#5932)
- coreapi: replace coreiface.DagAPI with ipld.DAGService (ipfs/go-ipfs#5922)
- Add global option to specify the multibase encoding (server side) (ipfs/go-ipfs#5789)
- coreapi: Adjust some tests for go-ipfs-http-api (ipfs/go-ipfs#5926)
- chore: update to Web UI v2.3.3 (ipfs/go-ipfs#5928)
- ls: Report real file size (ipfs/go-ipfs#5906)
- Improve the Filestore document (ipfs/go-ipfs#5927)
- [CORS] Bubble go-ipfs-cmds 2.0.10 - Updates CORS library (ipfs/go-ipfs#5919)
- reduce verbosity of daemon start (ipfs/go-ipfs#5904)
- feat: update to Web UI v2.3.2 (ipfs/go-ipfs#5899)
- CoreAPI: Don't panic when testing incomplete implementions (ipfs/go-ipfs#5900)
- gateway: fix CORs headers (ipfs/go-ipfs#5893)
- Local Gateway option (ipfs/go-ipfs#5649)
- Show hash on gateway (ipfs/go-ipfs#5830)
- fix: ulimit docs mistake (ipfs/go-ipfs#5894)
- Move coreapi tests to the interface (ipfs/go-ipfs#5865)
- Move checkHelptextRecursive forward a bit (ipfs/go-ipfs#5889)
- coreapi/unixfs: Use path instead of raw hash in AddEvent (ipfs/go-ipfs#5854)
- Fix name resolve --offline (ipfs/go-ipfs#5885)
- testing: slow down republisher sharness test (ipfs/go-ipfs#5856)
- docs: flesh out plugin documentation (ipfs/go-ipfs#5876)
- main: move InterruptHandler to util (ipfs/go-ipfs#5872)
- make: fix building source tarball on macos (ipfs/go-ipfs#5860)
- fix config data race (ipfs/go-ipfs#5634)
- CoreAPI: Global offline option (ipfs/go-ipfs#5825)
- Update for go-ipfs-files refactor (ipfs/go-ipfs#5661)
- feat: update Web UI to v2.3.0 (ipfs/go-ipfs#5855)
- Stateful plugin loading (ipfs/go-ipfs#4806)
- startup: always load the private key (ipfs/go-ipfs#5844)
- add --dereference-args parameter (ipfs/go-ipfs#5801)
- config: document the connection manager (ipfs/go-ipfs#5839)
- add pinning support to the urlstore (ipfs/go-ipfs#5834)
- refact(cmd/cat): remove useless code (ipfs/go-ipfs#5836)
- Really run as non-root user in docker container (ipfs/go-ipfs#5048)
- README: document guix package (ipfs/go-ipfs#5832)
- docs: Improve config documentation (ipfs/go-ipfs#5829)
- block: rm extra output (ipfs/go-ipfs#5751)
- merge github-issue-guide with the issue template (ipfs/go-ipfs#4636)
- docs: fix inconsistent capitalization of "API". (ipfs/go-ipfs#5824)
- Update README.md (ipfs/go-ipfs#5818)
- CONTRIBUTING.md link (ipfs/go-ipfs#5811)
- README: Update required Go version (ipfs/go-ipfs#5813)
- p2p: report-peer-id option for listen (ipfs/go-ipfs#5771)
- really fix netcat race (ipfs/go-ipfs#5803)
- [http_proxy_over_p2p] (ipfs/go-ipfs#5526)
- coreapi/pin: Use CID's directly in maps instead of converting to string (ipfs/go-ipfs#5809)
- Gx update go-merkledag and related deps. (ipfs/go-ipfs#5802)
- cmds: rm old lib (ipfs/go-ipfs#5786)
- badger: add truncate flag (ipfs/go-ipfs#5625)
- docker: allow IPFS_PROFILE to choose the profile for
ipfs init
(ipfs/go-ipfs#5473) - Add --stream option to
ls
command (ipfs/go-ipfs#5611) - Switch to using request.Context() (ipfs/go-ipfs#5782)
- Update go-ipfs-delay and assoc deps (ipfs/go-ipfs#5762)
- Suppress bootstrap error (ipfs/go-ipfs#5769)
- ISSUE_TEMPLATE: move the support question comment to the very top (ipfs/go-ipfs#5770)
- cmds: use MakeTypedEncoder (ipfs/go-ipfs#5760)
- cmds/bitswap: sort wantlist (ipfs/go-ipfs#5759)
- cmds/update: use new cmds lib (ipfs/go-ipfs#5730)
- cmds/file: use new cmds lib (ipfs/go-ipfs#5756)
- cmds: remove reduntant func (ipfs/go-ipfs#5750)
- commands/refs: use new cmds (ipfs/go-ipfs#5679)
- commands/pin: use new cmds lib (ipfs/go-ipfs#5674)
- commands/boostrap: use new cmds (ipfs/go-ipfs#5678)
- fix(cmd/add): progressbar output error when input is read from stdin (ipfs/go-ipfs#5743)
- unexport GOFLAGS (ipfs/go-ipfs#5747)
- refactor(cmds): use new cmds (ipfs/go-ipfs#5659)
- commands/filestore: use new cmds lib (ipfs/go-ipfs#5673)
- Fix broken links (ipfs/go-ipfs#5721)
- fix
ipfs help
bug #5557 (ipfs/go-ipfs#5573) - commands/bitswap: use new cmds lib (ipfs/go-ipfs#5676)
- refact(cmd/repo): repo's sub cmds uses new cmd lib (ipfs/go-ipfs#5677)
- fix the maketarball script (ipfs/go-ipfs#5718)
- output link to WebUI on daemon startup (ipfs/go-ipfs#5729)
- Move persistent datastores to plugins (ipfs/go-ipfs#5695)
- Update IPTB test (ipfs/go-ipfs#5636)
- enhance(cmd/verify): add goroutine count to improve verify speed (ipfs/go-ipfs#5710)
- Update go-mfs and go-unixfs (ipfs/go-ipfs#5714)
- fix(flag/version): flag
all
should have a higher priority (ipfs/go-ipfs#5719) - commands/p2p: use new cmds lib (ipfs/go-ipfs#5672)
- commands/dht: use new cmds lib (ipfs/go-ipfs#5671)
- commands/object: use new cmds (ipfs/go-ipfs#5666)
- commands/files: use new cmds (ipfs/go-ipfs#5665)
- cmds/env: add a config path helper (ipfs/go-ipfs#5712)
- github.com/ipfs/dir-index-html:
- show hash if given (ipfs/dir-index-html#21)
- Add "jpeg" as an alias to "jpg". (ipfs/dir-index-html#16)
- github.com/libp2p/go-addr-util:
- Improve test coverage (libp2p/go-addr-util#14)
- github.com/ipfs/go-bitswap:
- fix(prq): fix a bunch of goroutine leaks and deadlocks (ipfs/go-bitswap#87)
- remove allocations round two (ipfs/go-bitswap#84)
- fix(bitswap): remove CancelWants function (ipfs/go-bitswap#80)
- Avoid allocating for wantlist entries (ipfs/go-bitswap#79)
- ci(Jenkins): remove Jenkinsfile (ipfs/go-bitswap#83)
- More specific wantlists (ipfs/go-bitswap#74)
- fix(wantlist): remove races on setup (ipfs/go-bitswap#72)
- fix multiple data races (ipfs/go-bitswap#76)
- ci: add travis (ipfs/go-bitswap#75)
- providers: don't add every connected node as a provider (ipfs/go-bitswap#59)
- refactor(GetBlocks): Merge session/non-session (ipfs/go-bitswap#64)
- Feat: A more robust provider finder for sessions (for now) and soon for all bitswap (ipfs/go-bitswap#60)
- fix(tests): stabilize session tests (ipfs/go-bitswap#63)
- contexts: make sure to abort when a context is canceled (ipfs/go-bitswap#58)
- fix(sessions): explicitly connect found peers (ipfs/go-bitswap#56)
- Speed up sessions Round #1 (ipfs/go-bitswap#27)
- Fix debug log formatting issues (ipfs/go-bitswap#37)
- Feat/bandwidth limited tests (ipfs/go-bitswap#42)
- fix(tests): stabilize unreliable session tests (ipfs/go-bitswap#44)
- Bitswap Refactor #4: Extract session peer manager from sessions (ipfs/go-bitswap#26)
- Bitswap Refactor #3: Extract sessions to package (ipfs/go-bitswap#30)
- docs(comments): end comment sentences to have full-stop (ipfs/go-bitswap#33)
- Bitswap Refactor #2: Extract PeerManager From Want Manager + Unit Test (ipfs/go-bitswap#29)
- Bitswap Refactor #1: Session Manager & Extract Want Manager (ipfs/go-bitswap#28)
- fix(Receiver): Ignore unwanted blocks (ipfs/go-bitswap#24)
- feat(Benchmarks): Add real world dup blocks test (ipfs/go-bitswap#25)
- Feat/bitswap pr improvements (ipfs/go-bitswap#19)
- github.com/ipfs/go-blockservice:
- Don't return errors on closed exchange (ipfs/go-blockservice#15)
- github.com/ipfs/go-cid:
- fix inline CIDs generated by Prefix.Sum (ipfs/go-cid#84)
- Let Cid implement Binary[Un]Marshaler and Text[Un]Marshaler interfaces. (ipfs/go-cid#81)
- fix typo in comment (ipfs/go-cid#80)
- add codecs for Dash blocks, tx (ipfs/go-cid#78)
- github.com/ipfs/go-cidutil:
- Fix Travis CI to run all tests. (ipfs/go-cidutil#11)
- Changes needed for
--cid-base
option in go-ipfs (simplified vesion) (ipfs/go-cidutil#10) - add a utility method for sorting CID slices (ipfs/go-cidutil#5)
- ๐ github.com/libp2p/go-conn-security:
- fix link to usage example in README (libp2p/go-conn-security#4)
- github.com/ipfs/go-datastore:
- interfaces: make GetBacked* take a Read instead of a Datastore (ipfs/go-datastore#115)
- remove closer type assertions (ipfs/go-datastore#112)
- remove io.Closer from the transaction interface (ipfs/go-datastore#113)
- feat(datastore): expose datastore Close() (ipfs/go-datastore#111)
- query: make datastore ordering act like a user would expect (ipfs/go-datastore#110)
- delayed: implement io.Closer and export datastore type. (ipfs/go-datastore#108)
- split the datastore into a read and a write interface (ipfs/go-datastore#107)
- Describe behavior of Batching datastores (ipfs/go-datastore#105)
- handle concurrent puts/deletes in BasicBatch (ipfs/go-datastore#103)
- add a GetSize method (ipfs/go-datastore#99)
- github.com/ipfs/go-ds-badger:
- removed additional/wasteful Prefix conversion (ipfs/go-ds-badger#45)
- Enable Jenkins (ipfs/go-ds-badger#35)
- fix application or ordering for interface change (ipfs/go-ds-badger#44)
- Update badger (ipfs/go-ds-badger#40)
- github.com/ipfs/go-ds-flatfs:
- fix a goroutine leak killing the gateways (ipfs/go-ds-flatfs#51)
- github.com/ipfs/go-ds-leveldb:
- Expose Datastore type (ipfs/go-ds-leveldb#20)
- fix application or ordering for interface change (ipfs/go-ds-leveldb#23)
- github.com/ipfs/go-ipfs-cmds:
- fix sync error with go1.12 on darwin (ipfs/go-ipfs-cmds#147)
- cli: fix ignoring std{out,err} sync errors on windows (ipfs/go-ipfs-cmds#146)
- roundup of cleanup fixes (ipfs/go-ipfs-cmds#144)
- Update cors library (ipfs/go-ipfs-cmds#139)
- expand on the api error (ipfs/go-ipfs-cmds#138)
- set the connection close header if we have a body to read (ipfs/go-ipfs-cmds#116)
- print a nicer error on timeout/cancel (ipfs/go-ipfs-cmds#137)
- Add link traversal option (ipfs/go-ipfs-cmds#96)
- Don't skip stdin test on Windows (ipfs/go-ipfs-cmds#136)
- MakeTypedEncoder: accept results by pointer or value (ipfs/go-ipfs-cmds#134)
- github.com/ipfs/go-ipfs-config:
- Gateway.NoFetch (ipfs/go-ipfs-config#19)
- add a Clone function (ipfs/go-ipfs-config#16)
- randomports: give user ability to init ipfs using random port for swarm. (ipfs/go-ipfs-config#17)
- Allow the use of the User-Agent header (ipfs/go-ipfs-config#15)
- autorelay options (ipfs/go-ipfs-config#21)
- profile: add badger truncate option (ipfs/go-ipfs-config#20)
- github.com/ipfs/go-ipfs-delay:
- Feat/refactor wait time (ipfs/go-ipfs-delay#1)
- github.com/ipfs/go-ipfs-files:
- multipart: fix handling of common prefixes (ipfs/go-ipfs-files#7)
- create implicit directories from multipart requests (ipfs/go-ipfs-files#6)
- TarWriter (ipfs/go-ipfs-files#4)
- Refactor filename - file relation (ipfs/go-ipfs-files#2)
- github.com/ipfs/go-ipld-cbor:
- cbor: decode undefined as null (ipfs/go-ipld-cbor#54)
- error when trying to encode an empty link (ipfs/go-ipld-cbor#52)
- test for struct with both a cid and a bigint (ipfs/go-ipld-cbor#51)
- github.com/ipfs/go-ipld-format:
- Add a DAG walker with support for IPLD
Node
s (ipfs/go-ipld-format#39) - Add BufferedDAG wrapping Batch as a DAGService. (ipfs/go-ipld-format#48)
- Add a DAG walker with support for IPLD
- github.com/ipfs/go-ipld-git:
- Fix blob marshalling (ipfs/go-ipld-git#37)
- Re-enable assertion on commit size -- it is correct after #31 (ipfs/go-ipld-git#33)
- Use OS path separator in testing, fixes #30 (ipfs/go-ipld-git#34)
- Use rawdata length for size, fixes #7 (ipfs/go-ipld-git#31)
- Cache RawData for Commit, Tag, & Tree, fixes #6 (ipfs/go-ipld-git#28)
- Precompute Blob CID, fixes #21 (ipfs/go-ipld-git#27)
- Enable Jenkins (ipfs/go-ipld-git#29)
- github.com/ipfs/go-ipns:
- fix community/CONTRIBUTING.md link in README.md (ipfs/go-ipns#20)
- fix typo in README.md (ipfs/go-ipns#21)
- testing: disable inline peer ID test (ipfs/go-ipns#19)
- github.com/libp2p/go-libp2p:
- Fixed race conditions in mock package mock_stream and mock_conn (libp2p/go-libp2p#535)
- increase initial relay advertisement delay to 30s (libp2p/go-libp2p#534)
- Use PeerRouting in autorelay to find relay peer addresses (libp2p/go-libp2p#531)
- docs: update broken links in NEWS.md (libp2p/go-libp2p#517)
- don't advertise the raw public address in autorelay (libp2p/go-libp2p#511)
- mock: export ratelimiter as RateLimiter (libp2p/go-libp2p#507)
- readme: remove duplicate repo entries in README and package-list.json (libp2p/go-libp2p#506)
- explicit option to enable autorelay (libp2p/go-libp2p#500)
- Add delay in initial relay advertisement to allow the dht time to bootstrap (libp2p/go-libp2p#495)
- suppressing error msg for NoSecurity option (libp2p/go-libp2p#498)
- pulling updates (libp2p/go-libp2p#4)
- fix contributing link in README (libp2p/go-libp2p#494)
- Fix badges and links on README.md (libp2p/go-libp2p#485)
- mocknet: fix NewStream and self dials (libp2p/go-libp2p#480)
- deflake identify test (libp2p/go-libp2p#479)
- mocknet: use peer ID in peer address (libp2p/go-libp2p#476)
- autorelay (libp2p/go-libp2p#454)
- Getting updates (libp2p/go-libp2p#3)
- github.com/libp2p/go-libp2p-autonat:
- track autonat peer addresses (libp2p/go-libp2p-autonat#7)
- github.com/libp2p/go-libp2p-circuit:
- Don't log raw binary (libp2p/go-libp2p-circuit#53)
- github.com/libp2p/go-libp2p-connmgr:
- Fix concurrency and silence period not being honoured (libp2p/go-libp2p-connmgr#26)
- github.com/libp2p/go-libp2p-crypto:
- Fix: Remove redundant Ed25519 public key (#36). (libp2p/go-libp2p-crypto#54)
- libp2p badges, remove IPFS (libp2p/go-libp2p-crypto#52)
- Fix broken contribute link in README (libp2p/go-libp2p-crypto#46)
- forbid RSA keys smaller than 512 bits (libp2p/go-libp2p-crypto#43)
- Added ECDSA; Added RSA tests; Fixed linting errors; Handling all un-handled errors (libp2p/go-libp2p-crypto#35)
- switch to the go-crypto ed25519 implementation (libp2p/go-libp2p-crypto#38)
- update gogo protobuf (libp2p/go-libp2p-crypto#37)
- github.com/libp2p/go-libp2p-discovery:
- add a timeout to Provide in routing.Advertise (libp2p/go-libp2p-discovery#12)
- correctly encode ns to CID (libp2p/go-libp2p-discovery#11)
- use 6hrs as ttl for routing based advertisements (libp2p/go-libp2p-discovery#8)
- github.com/libp2p/go-libp2p-host:
- Helper to get PeerInfo from Host (libp2p/go-libp2p-host#20)
- github.com/libp2p/go-libp2p-kad-dht:
- fix(dialQueue): account for failed dials (libp2p/go-libp2p-kad-dht#277)
- Fix Bootstrap sub-queries (libp2p/go-libp2p-kad-dht#264)
- dial queue: fix possible goroutine leak (libp2p/go-libp2p-kad-dht#262)
- Alter some logging (libp2p/go-libp2p-kad-dht#269)
- Revert #236: Test go mod in travis and use major versioning in import paths (libp2p/go-libp2p-kad-dht#259)
- fix tests on freebsd (libp2p/go-libp2p-kad-dht#255)
- Fix "no protocol with name dnsaddr" error (libp2p/go-libp2p-kad-dht#247)
- Fix a race in dial queue (libp2p/go-libp2p-kad-dht#248)
- Fix races with DialQueue variables (libp2p/go-libp2p-kad-dht#241)
- Fix CircleCI (libp2p/go-libp2p-kad-dht#238)
- Adaptive queue for staging dials (libp2p/go-libp2p-kad-dht#237)
- Add the full libp2p default bootstrap peer list (libp2p/go-libp2p-kad-dht#226)
- Revert "Tidy up bootstrapping" (libp2p/go-libp2p-kad-dht#232)
- Tidy up bootstrapping (libp2p/go-libp2p-kad-dht#225)
- Revert "Remove signal bootstrapping" (libp2p/go-libp2p-kad-dht#227)
- Remove signal bootstrapping (libp2p/go-libp2p-kad-dht#224)
- fix a potential DHT query hang (libp2p/go-libp2p-kad-dht#219)
- docs: duplicate pkg documentation (libp2p/go-libp2p-kad-dht#218)
- tests: skip key inlining test (libp2p/go-libp2p-kad-dht#212)
- Rephrase "betterPeersToQuery" method comment to be less cryptic (libp2p/go-libp2p-kad-dht#206)
- github.com/libp2p/go-libp2p-loggables:
- test: add unit tests (libp2p/go-libp2p-loggables#21)
- github.com/libp2p/go-libp2p-netutil:
- Add tests (libp2p/go-libp2p-netutil#28)
- github.com/libp2p/go-libp2p-peer:
- fix: re-enable peer ID inlining but make it configurable (libp2p/go-libp2p-peer#42)
- Protobuf and JSON (un-)marshalling methods for peer.ID (libp2p/go-libp2p-peer#41)
- disable key inlining (libp2p/go-libp2p-peer#40)
- github.com/libp2p/go-libp2p-peerstore:
- Add unit test to verify AddAddr doesn't shorten TTL (libp2p/go-libp2p-peerstore#52)
- disable inline-peer id test (libp2p/go-libp2p-peerstore#49)
- README: Update contributing guideline linkrot. (libp2p/go-libp2p-peerstore#48)
- Deterministic benchmark order; Keybook interface benchmarks (libp2p/go-libp2p-peerstore#43)
- PeerInfo UnMarshal Error #393 (libp2p/go-libp2p-peerstore#45)
- fix the inline key test (libp2p/go-libp2p-peerstore#44)
- github.com/libp2p/go-libp2p-pubsub:
- move timecache check/update after validation (libp2p/go-libp2p-pubsub#156)
- fix nonsensical check (libp2p/go-libp2p-pubsub#154)
- Extend validator interface to include message source (libp2p/go-libp2p-pubsub#151)
- Implement peer blacklist (libp2p/go-libp2p-pubsub#149)
- make timecache duration configurable (libp2p/go-libp2p-pubsub#148)
- godoc is not html either (libp2p/go-libp2p-pubsub#147)
- godoc documentation is not markdown (libp2p/go-libp2p-pubsub#146)
- Add documentation for subscribe's non-instanteneous semantics (libp2p/go-libp2p-pubsub#145)
- Some documentation (libp2p/go-libp2p-pubsub#140)
- rework peer tracking logic to handle multiple connections (libp2p/go-libp2p-pubsub#132)
- github.com/libp2p/go-libp2p-pubsub-router:
- encode record-store keys in pubsub (libp2p/go-libp2p-pubsub-router#17)
- github.com/libp2p/go-libp2p-quic-transport:
- fix badges in README (libp2p/go-libp2p-quic-transport#39)
- Fix missing transport parameter in dialed connection (libp2p/go-libp2p-quic-transport#38)
- github.com/libp2p/go-libp2p-routing:
- Update the comment on IpfsRouting.Bootstrap (libp2p/go-libp2p-routing#36)
- github.com/libp2p/go-libp2p-swarm:
- Make FD limits configurable by environment property (libp2p/go-libp2p-swarm#102)
- Fix logging race (libp2p/go-libp2p-swarm#100)
- Add CircleCI config (libp2p/go-libp2p-swarm#99)
- Enhance debug logging in dial limiter (libp2p/go-libp2p-swarm#98)
- dialer: handle dial cancel and/or completion before trying new addresses (libp2p/go-libp2p-swarm#96)
- avoid spawning goroutines for canceled dials (libp2p/go-libp2p-swarm#95)
- warn when we encounter a useless transport (libp2p/go-libp2p-swarm#90)
- github.com/libp2p/go-libp2p-transport:
- fix transport tests for quic (libp2p/go-libp2p-transport#39)
- fix: fully close streams before returning (libp2p/go-libp2p-transport#37)
- fix typo in README (libp2p/go-libp2p-transport#36)
- โฌ๏ธ github.com/libp2p/go-libp2p-transport-upgrader:
- annotate errors (libp2p/go-libp2p-transport-upgrader#11)
- ๐ฒ github.com/ipfs/go-log:
- uglify the (event) logs (ipfs/go-log#53)
- add environment variable for writing tracing information to a file (ipfs/go-log#52)
- correctly display the line number when FinishWithErr fails (ipfs/go-log#51)
- github.com/libp2p/go-maddr-filter:
- test: extend test to improve coverage (libp2p/go-maddr-filter#7)
- github.com/ipfs/go-merkledag:
- Increase FetchGraphConcurrency to 32 (ipfs/go-merkledag#29)
- Enable CI (ipfs/go-merkledag#9)
- fix a fetch deadlock on error (ipfs/go-merkledag#21)
- Wait for all go routines to finish before function returns (ipfs/go-merkledag#19)
- github.com/ipfs/go-metrics-prometheus:
- use prometheus instead of gxed (ipfs/go-metrics-prometheus#3)
- github.com/ipfs/go-mfs:
- fix(mv): dst filename error (ipfs/go-mfs#62)
- fix over-wait in WaitPub (ipfs/go-mfs#53)
- Fix/32/pr ports from go-ipfs to go-mfs (ipfs/go-mfs#49)
- remove the
fullSync
option fromupdateChildEntry
(ipfs/go-mfs#45) - Various refactorings (ipfs/go-mfs#36)
- use RW lock for the
File
's lock (ipfs/go-mfs#43) - add documentation links in README (ipfs/go-mfs#41)
- [WIP] documentation notes (ipfs/go-mfs#27)
- feat(inode): add inode struct (ipfs/go-mfs#12)
- github.com/libp2p/go-mplex:
- fix deadlock (libp2p/go-mplex#39)
- When a stream is closed, cancel pending writes (libp2p/go-mplex#35)
- make sure to but the buffer back in the pool (libp2p/go-mplex#34)
- reduce the packet count (libp2p/go-mplex#29)
- github.com/ipfs/go-path:
- fix: no components error (ipfs/go-path#18)
- nit: validate CIDs in IPLD paths (ipfs/go-path#16)
- github.com/libp2p/go-reuseport:
- Fix build on wasm (libp2p/go-reuseport#59)
- Use Go Control API (libp2p/go-reuseport#56)
- Support WASM (libp2p/go-reuseport#54)
- github.com/libp2p/go-reuseport-transport:
- Update to go-reuseport 0.2.0 (libp2p/go-reuseport-transport#6)
- github.com/libp2p/go-stream-muxer:
- add standard reset error (libp2p/go-stream-muxer#23)
- ci: fix (libp2p/go-stream-muxer#24)
- Document Reset versus Close (libp2p/go-stream-muxer#18)
- WIP document Conn.Close (libp2p/go-stream-muxer#19)
- github.com/libp2p/go-tcp-transport:
- Deprecate IPFS_REUSEPORT, use LIBP2P_TCP_REUSEPORT (libp2p/go-tcp-transport#27)
- github.com/ipfs/go-unixfs:
- unixfile: precalc dir size (ipfs/go-unixfs#61)
- Archive refactor (ipfs/go-unixfs#59)
- decouple the DAG traversal logic from the DAG reader (local branch) (ipfs/go-unixfs#60)
- Unixfs: enforce refs on files when using nocopy (ipfs/go-unixfs#56)
- Fix/handle overflow (ipfs/go-unixfs#53)
- feat(Directory): Add EnumLinksAsync method (ipfs/go-unixfs#39)
-
v0.4.19-rc2
February 27, 2019 -
v0.4.18 Changes
October 26, 2018๐ This is probably one of the largest go-ipfs releases in recent history, 3 months in the making.
๐ Features
๐ The headline features this release are experimental QUIC support, the gossipsub ๐จ pubsub routing algorithm, pubsub message signing, and a refactored
ipfs p2p
command. However, that's just scratching the surface.QUIC
๐ First up, on the networking front, this release has also introduced experimental ๐ support for the QUIC protocol. QUIC is a new UDP-based network transport that solves many of the long standing issues with TCP.
For us, this means (eventually):
- Fewer local resources. TCP requires a file-descriptor per connection while QUIC (and most UDP based transports) can share a single file descriptor between all connections. This should allow us to dial faster and keep more connections open.
- Faster connection establishment. When client authentication is included, QUIC has a three-way handshake like TCP. However, unlike TCP, this handshake brings us from all the way from 0 to a fully encrypted, authenticated, and multiplexed connection. In theory (not yet in practice), this should significantly reduce the latency of DHT queries.
- ๐ Behaves better on lossy networks. When multiplexing multiple requests over a single TCP connection, a single dropped packet will bring the entire connection to a halt while the packet is re-transmitted. However, because QUIC handles multiplexing internally, dropping a single packets affects only the related stream.
- ๐ Better NAT traversal. TL;DR: NAT hole-punching is significantly easier and, in many cases, more reliable with UDP than with TCP.
โ However, we still have a long way to go. While we encourage users to test this, the IETF QUIC protocol is still being actively developed and will change. You can find instructions for enabling it ๐ here.
Pubsub
๐ In terms of pubsub, go-ipfs now supports the gossipsub routing algorithm and message signing.
The gossipsub routing algorithm is significantly more efficient than the ๐ current floodsub routing algorithm. Even better, it's fully backwards compatible so you can enable it and still talk to nodes using the floodsub algorithm. You can find instructions to enable gossipsub in go-ipfs ๐ here.
Messages are now signed by their authors. While signing has now been enabled by 0๏ธโฃ default, strict signature verification has not been and will not be for at least ๐ one release (probably multiple) to avoid breaking existing applications. You can ๐ง read about how to configure this feature ๐ here.
Commands
๐ In terms of new toys, this release introduces a new
ipfs cid
subcommand for ๐จ working with CIDs, a completely refactoredipfs p2p
command, streaming name ๐ resolution, and complete inline block support.The new
ipfs cid
command allows users to both inspect CIDs and convert them between various formats and versions. For example: -
v0.4.17 Changes
July 27, 2018๐ Ipfs 0.4.17 is a quick release to fix a major performance regression in bitswap (mostly affecting go-ipfs -> js-ipfs transfers). However, while motivated by ๐ this fix, this release contains a few other goodies that will excite some users.
๐ The headline feature in this release is [urlstore][] support. Urlstore is a generalization of the filestore backend that can fetch file blocks from remote URLs on-demand instead of storing them in the local datastore.
โ Additionally, we've added support for extracting inline blocks from CIDs (blocks inlined into CIDs using the identity hash function). However, go-ipfs won't yet create such CIDs so you're unlikely to see any in the wild.
๐ [urlstore]: https://github.com/ipfs/go-ipfs/blob/master/docs/experimental-features.md#ipfs-urlstore
๐ Features:
- URLStore (ipfs/go-ipfs#4896)
- โ Add trickle-dag support to the urlstore (ipfs/go-ipfs#5245).
- ๐ Allow specifying how the data field in the
object get
is encoded (ipfs/go-ipfs#5139) - โ Add a
-U
flag tofiles ls
to disable sorting (ipfs/go-ipfs#5219) - โ Add an efficient
--size-only
flag to therepo stat
(ipfs/go-ipfs#5010) - Inline blocks in CIDs (ipfs/go-ipfs#5117)
๐ Changes/Fixes:
- ๐ Make
ipfs files ls -l
correctly report the hash and size of files (ipfs/go-ipfs#5045) - ๐ Fix sorting of
files ls
(ipfs/go-ipfs#5219) - ๐ Improve prefetching in
ipfs cat
and related commands (ipfs/go-ipfs#5162) - ๐ Better error message when
ipfs cp
fails (ipfs/go-ipfs#5218) - Don't wait for the peer to close it's end of a bitswap stream before considering the block "sent" (ipfs/go-ipfs#5258)
- ๐ Fix resolving links in sharded directories via the gateway (ipfs/go-ipfs#5271)
- ๐ Fix building when there's a space in the current directory (ipfs/go-ipfs#5261)
๐ Documentation:
- ๐ Improve documentation about the bloomfilter config options (ipfs/go-ipfs#4924)
๐จ General refactorings and internal bug fixes:
- โ Remove the
Offset()
method from the DAGReader (ipfs/go-ipfs#5190) - ๐ Fix TestLargeWriteChunks seek behavior (ipfs/go-ipfs#5276)
- โ Add a build tag to disable dynamic plugins (ipfs/go-ipfs#5274)
- ๐ Use FSNode instead of the Protobuf structure in PBDagReader (ipfs/go-ipfs#5189)
- โ Remove support for non-directory MFS roots (ipfs/go-ipfs#5170)
- โ Remove
UnixfsNode
from the balanced builder (ipfs/go-ipfs#5118) - ๐ Fix truncating files (internal) when already at the correct size (ipfs/go-ipfs#5253)
- ๐ Fix
dagTruncate
(internal) to preserve the node type (ipfs/go-ipfs#5216) - โ Add an internal interface for unixfs directories (ipfs/go-ipfs#5160)
- ๐จ Refactor the CoreAPI path types and interfaces (ipfs/go-ipfs#4672)
- ๐จ Refactor
precalcNextBuf
in the dag reader (ipfs/go-ipfs#5237) - โก๏ธ Update a bunch of dependencies that haven't been updated for a while (ipfs/go-ipfs#5268)
-
v0.4.16 Changes
July 13, 2018๐ Ipfs 0.4.16 is a fairly small release in terms of changes to the ipfs codebase, but it contains a huge amount of changes and improvements from the libraries we depend on, notably libp2p.
๐ This release includes small a repo migration to account for some changes to the ๐ง DHT. It should only take a second to run but, depending on your configuration, you may need to run it manually.
You can run a migration by either:
- Selecting "Yes" when the daemon prompts you to migrate.
- Running the daemon with the
--migrate=true
flag. - Manually running the migration.
Libp2p
This version of ipfs contains the changes made in libp2p from v5.0.14 through v6.0.5. In that time, we have made significant changes to the codebase to allow for easier integration of future transports and modules along with the usual ๐ performance and reliability improvements. You can find many of these ๐ improvements in the libp2p 6.0 release blog post.
๐จ The primary motivation for this refactor was adding support for network ๐ transports like QUIC that have built-in support for encryption, authentication, ๐ and stream multiplexing. It will also allow us to plug-in new security transports (like TLS) without hard-coding them.
For example, our QUIC transport currently works, and can be plugged into libp2p manually (though note that it is still experimental, as the upstream spec is still in flux). Further work is needed to ๐ make enabling this inside ipfs easy and not require recompilation.
On the user-visible side of things, we've improved our dialing logic and timeouts. We now abort dials to local subnets after 5 seconds and abort all dials if the TCP handshake takes longer than 5 seconds. This should ๐ significantly improve performance in some cases as we limit the number of ๐ฑ concurrent dials and slow dials to non-responsive peers have been known to clog the dialer, blocking dials to reachable peers. Importantly, this should improve ๐ DHT performance as it tends to spend a disproportional amount of time connecting to peers.
We have also made a few noticeable changes to the DHT: we've significantly ๐ improved the chances of finding a value on the DHT, tightened up some of our ๐ validation logic, and fixed some issues that should reduce traffic to nodes โ running in dhtclient mode over time.
๐ Of these, the first one will likely see the most impact. In the past, when putting a value (e.g., an IPNS entry) into the DHT, we'd try to put the value to K peers (where K for us is 20). However, we'd often fail to connect to many of these peers so we'd end up putting the value to significantly fewer than K peers. We now try to put the value to the K peers we can actually connect to.
๐ Finally, we've fixed JavaScript interoperability in go-multiplex, the one stream muxer that both go-libp2p and js-libp2p implement. This should significantly ๐ improve go-libp2p and js-libp2p interoperability.
Multiformats
We are also changing the way that people write 'ipfs' multiaddrs. Currently, ipfs multiaddrs look something like
/ip4/104.131.131.82/tcp/4001/ipfs/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
. However, calling them 'ipfs' multiaddrs is a bit misleading, as this is actually the multiaddr of a libp2p peer that happens to run ipfs. Other protocols built on libp2p right now still have to use multiaddrs that say 'ipfs', even if they have nothing to do with ipfs. Therefore, we are renaming them to 'p2p' multiaddrs. Moving forward, these addresses will be written as:/ip4/104.131.131.82/tcp/4001/p2p/QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ
.๐ This release adds support for parsing both types of addresses (
.../ipfs/...
and.../p2p/...
) into the same network format, and the network format is ๐ remaining exactly the same. A future release will have the ipfs daemon switch to ๐จ printing out addresses this way once a large enough portion of the network โฌ๏ธ has upgraded.N.B., these addresses are not related to IPFS file names (
/ipfs/Qm...
). Disambiguating the two was yet another motivation to switch the protocol name to/p2p/
.IPFS
On the ipfs side of things, we've started embedding public keys inside IPNS 0๏ธโฃ records and have enabled the Git plugin by default.
Embedding public keys inside IPNS records allows lookups to be faster as we only need to fetch the record itself (and not the public key separately). It also ๐ fixes an issue where DHT peers wouldn't store a record for a peer if they didn't ๐ have their public key already. Combined with some of the DHT and dialing fixes, ๐ this should improve the performance of IPNS (once a majority of the network โก๏ธ updates).
๐ Second, our public builds now include the Git plugin (in past builds, you could โ add it yourself, but doing so was not easy). With this, ipfs can ingest and operate over Git repositories and commit graphs directly. For more information ๐ on this, see the go-ipld-git repo.
๐ Finally, we've included many smaller bugfixes, refactorings, improved ๐ documentation, and a good bit more. For the full details, see the changelog below.
-
v0.4.16-rc3 Changes
July 09, 2018- ๐ Bugfixes
- Fix dht commands when ipns over pubsub is enabled (ipfs/go-ipfs#5200)
- Fix content routing when ipns over pubsub is enabled (ipfs/go-ipfs#5200)
- Correctly handle multi-hop dnslink resolution (ipfs/go-ipfs#5202)
- ๐ Bugfixes
-
v0.4.16-rc2 Changes
July 05, 2018- ๐ Bugfixes
- Fix usage of file name vs path name in adder (ipfs/go-ipfs#5167)
- Fix
ipfs update
working with migrations (ipfs/go-ipfs#5194)
- ๐ Documentation
- Grammar fix in fuse docs (ipfs/go-ipfs#5164)
- ๐ Bugfixes
-
v0.4.16-rc1 Changes
June 27, 2018- ๐ Features
- Embed public keys inside ipns records, use for validation (ipfs/go-ipfs#5079)
- Preload git plugin by default (ipfs/go-ipfs#4991)
- ๐ Improvements
- Only resolve dnslinks once in the gateway (ipfs/go-ipfs#4977)
- Libp2p transport refactor update (ipfs/go-ipfs#4817)
- Improve swarm connect/disconnect commands (ipfs/go-ipfs#5107)
- ๐ Documentation
- Fix typo of sudo install command (ipfs/go-ipfs#5001)
- Fix experimental features Table of Contents (ipfs/go-ipfs#4976)
- Fix link to systemd init scripts in the README (ipfs/go-ipfs#4968)
- Add package overview comments to coreapi (ipfs/go-ipfs#5108)
- Add README to docs folder (ipfs/go-ipfs#5095)
- Add system requirements to README (ipfs/go-ipfs#5137)
- ๐ Bugfixes
- Fix goroutine leak in pin verify (ipfs/go-ipfs#5011)
- Fix commit string in version (ipfs/go-ipfs#4982)
- Fix
key rename
command output error (ipfs/go-ipfs#4962) - Report error source when failing to construct private network (ipfs/go-ipfs#4952)
- Fix build on DragonFlyBSD (ipfs/go-ipfs#5031)
- Fix goroutine leak in dag put (ipfs/go-ipfs#5016)
- Fix goroutine leaks in refs.go (ipfs/go-ipfs#5018)
- Fix panic, Don't handle errors with fallthrough (ipfs/go-ipfs#5072)
- Fix how filestore is hooked up with caching (ipfs/go-ipfs#5122)
- Add record validation to offline routing (ipfs/go-ipfs#5116)
- Fix
ipfs update
working with migrations (ipfs/go-ipfs#5194)
- ๐จ General Changes and Refactorings
- Remove leftover bits of dead code (ipfs/go-ipfs#5022)
- Remove fuse platform build constraints (ipfs/go-ipfs#5033)
- Warning when legacy NoSync setting is set (ipfs/go-ipfs#5036)
- Clean up and refactor namesys module (ipfs/go-ipfs#5007)
- When raw-leaves are used for empty files use 'Raw' nodes (ipfs/go-ipfs#4693)
- Update dist_root in build scripts (ipfs/go-ipfs#5093)
- Integrate
pb.Data
intoFSNode
to avoid duplicating fields (ipfs/go-ipfs#5098) - Reduce log level when we can't republish (ipfs/go-ipfs#5091)
- Extract ipns record logic to go-ipns (ipfs/go-ipfs#5124)
- โ
Testing
- Collect test times for sharness (ipfs/go-ipfs#4959)
- Fix sharness iptb connect timeout (ipfs/go-ipfs#4966)
- Add more timeouts to the jenkins pipeline (ipfs/go-ipfs#4958)
- Use go 1.10 on jenkins (ipfs/go-ipfs#5009)
- Speed up multinode sharness test (ipfs/go-ipfs#4967)
- Print out iptb logs on iptb test failure (for debugging CI) (ipfs/go-ipfs#5069)
- Disable the MacOS tests in jenkins (ipfs/go-ipfs#5119)
- Make republisher test robust against timing issues (ipfs/go-ipfs#5125)
- Archive sharness trash dirs in jenkins (ipfs/go-ipfs#5071)
- Fixup DHT sharness tests (ipfs/go-ipfs#5114)
- Dependencies
- Update go-ipld-git to fix mergetag resolving (ipfs/go-ipfs#4988)
- Fix duplicate /x/sys imports (ipfs/go-ipfs#5068)
- Update stream multiplexers (ipfs/go-ipfs#5075)
- Update dependencies: go-log, sys, go-crypto (ipfs/go-ipfs#5100)
- Explicitly import go-multiaddr-dns in config/bootstrap_peers (ipfs/go-ipfs#5144)
- Gx update with dht and dialing improvements (ipfs/go-ipfs#5158)
- ๐ Features
-
v0.4.15 Changes
May 09, 2018๐ This release is significantly smaller than the last as much of the work on ๐ improving our datastores, and other libraries libp2p has yet to be merged. However, it still includes many welcome improvements.
๐ As with 0.4.12 and 0.4.14 (0.4.13 was a patch), this release has a negative diff-stat. Unfortunately, much of this code isn't actually going away but at ๐ least it's being moved out into separate repositories.
๐ Much of the work that made it into this release is under the hood. We've cleaned ๐ฆ up some code, extracted several packages into their own repositories, and made some long neglected optimizations (e.g., handling of sharded directories). โ Additionally, this release includes a bunch of tests for our CLI commands that ๐ should help us avoid some of the issues we've seen in the past few releases.
๐ More visibly, thanks to @djdv's efforts, this release includes some significant ๐ Windows improvements (with more on the way). Specifically, this release includes ๐ better handling of repo lockfiles (no more
ipfs repo fsck
), stdin command-line ๐ support, and, last but not least, IPFS no longer writes random files with scary ๐ garbage in the drive root. To read more about future windows improvements, take ๐ a look at this blog post.๐ To better support low-power devices, we've added a low-power config profile. This can be enabled when initializing a repo by running
ipfs init
with the--profile=lowpower
flag or later by runningipfs config profile apply lowpower
.๐ Finally, with this release we have begun distributing self-contained source archives of go-ipfs and its dependencies. This should be a welcome improvement ๐ฆ for both packagers and those living in countries with harmonized internet access.
๐ Features
- Add options for record count and timeout for resolving DHT paths (ipfs/go-ipfs#4733)
- Add low power init profile (ipfs/go-ipfs#4154)
- Add Opentracing plugin support (ipfs/go-ipfs#4506)
- Add make target to build source tarballs (ipfs/go-ipfs#4920)
๐ Improvements
- Add BlockedFetched/Added/Removed events to Blockservice (ipfs/go-ipfs#4649)
- Improve performance of HAMT code (ipfs/go-ipfs#4889)
- Avoid unnecessarily resolving child nodes when listing a sharded directory (ipfs/go-ipfs#4884)
- Tar writer now supports sharded ipfs directories (ipfs/go-ipfs#4873)
- Infer type from CID when possible in
ipfs ls
(ipfs/go-ipfs#4890) - Deduplicate keys in GetMany (ipfs/go-ipfs#4888)
๐ Documentation
- Fix spelling of retrieval (ipfs/go-ipfs#4819)
- Update broken links (ipfs/go-ipfs#4798)
- Remove roadmap.md (ipfs/go-ipfs#4834)
- Remove link to IPFS paper in contribute.md (ipfs/go-ipfs#4812)
- Fix broken todo link in readme.md (ipfs/go-ipfs#4865)
- Document ipns pubsub (ipfs/go-ipfs#4903)
- Fix missing profile docs (ipfs/go-ipfs#4846)
- Fix a few typos (ipfs/go-ipfs#4835)
- Fix typo in fsrepo error message (ipfs/go-ipfs#4933)
- Remove go-ipfs version from issue template (ipfs/go-ipfs#4943)
- Add docs for --profile=lowpower (ipfs/go-ipfs#4970)
- Improve Windows build documentation (ipfs/go-ipfs#4691)
๐ Bugfixes
- Check CIDs in base case when diffing nodes (ipfs/go-ipfs#4767)
- Support for CIDv1 with custom mhtype in
ipfs block put
(ipfs/go-ipfs#4563) - Clean path in DagArchive (ipfs/go-ipfs#4743)
- Set the prefix for MFS root in
ipfs add --hash-only
(ipfs/go-ipfs#4755) - Fix get output path (ipfs/go-ipfs#4809)
- Fix incorrect Read calls (ipfs/go-ipfs#4792)
- Use prefix in bootstrapWritePeers (ipfs/go-ipfs#4832)
- Fix mfs Directory.Path not working (ipfs/go-ipfs#4844)
- Remove header in
ipfs stats bw
if not polling (ipfs/go-ipfs#4856) - Match Go's GOPATH defaults behaviour in build scripts (ipfs/go-ipfs#4678)
- Fix default-net profile not reverting bootstrap config (ipfs/go-ipfs#4845)
- Fix excess goroutines in bitswap caused by insecure CIDs (ipfs/go-ipfs#4946)
๐จ General Changes and Refactorings
- Refactor trickle DAG builder (ipfs/go-ipfs#4730)
- Split the coreapi interface into multiple files (ipfs/go-ipfs#4802)
- Make
ipfs init
command use new cmds lib (ipfs/go-ipfs#4732) - Extract thirdparty/tar package (ipfs/go-ipfs#4857)
- Reduce log level when for disconnected peers to info (ipfs/go-ipfs#4811)
- Only visit nodes in EnumerateChildrenAsync when asked (ipfs/go-ipfs#4885)
- Refactor coreapi options (ipfs/go-ipfs#4807)
- Fix error style for most errors (ipfs/go-ipfs#4829)
- Ensure
--help
always works, even with /dev/null stdin (ipfs/go-ipfs#4849) - Deduplicate AddNodeLinkClean into AddNodeLink (ipfs/go-ipfs#4940)
- Remove some dead code (ipfs/go-ipfs#4833)
- Remove unused imports (ipfs/go-ipfs#4955)
- Fix go vet warnings (ipfs/go-ipfs#4859)
โ Testing
- Generate JUnit test reports for sharness tests (ipfs/go-ipfs#4530)
- Fix t0063-daemon-init.sh by adding test profile to daemon (ipfs/go-ipfs#4816)
- Remove circular dependencies in merkledag package tests (ipfs/go-ipfs#4704)
- Check that all the commands fail when passed a bad flag (ipfs/go-ipfs#4848)
- Allow for some small margin of code coverage dropping on commit (ipfs/go-ipfs#4867)
- Add confirmation to archive-branches script (ipfs/go-ipfs#4797)
Dependencies
- Update lock package (ipfs/go-ipfs#4855)
- Update to latest go-datastore. Remove thirdparty/datastore2 (ipfs/go-ipfs#4742)
- Extract fs lock into go-fs-lock (ipfs/go-ipfs#4631)
- Extract: exchange/interface.go, blocks/blocksutil, exchange/offline (ipfs/go-ipfs#4912)
- Remove unused lock dep (ipfs/go-ipfs#4971)
- Update iptb (ipfs/go-ipfs#4965)
- Update go-ipfs-cmds to fix stdin on windows (ipfs/go-ipfs#4975)
- Update go-ds-flatfs to fix windows corruption issue (ipfs/go-ipfs#4872)
-
v0.4.14 Changes
March 22, 2018๐ Ipfs 0.4.14 is a big release with a large number of improvements and bugfixes. ๐ It is also the first release of 2018, and our first release in over three ๐ months. The release took longer than expected due to our refactoring and ๐จ extracting of our commands library. This refactor had two stages. The first ๐จ round of the refactor disentangled the commands code from core ipfs code, ๐ allowing us to move it out into a separate repository. The code was previously very entangled with the go-ipfs codebase and not usable for other projects. ๐จ The second round of the refactor had the goal of fixing several major issues around streaming outputs, progress bars, and error handling. It also paved the way for us to more easily provide an API over other transports, such as websockets and unix domain sockets. It took a while to flush out all the kinks on such a massive change. We're pretty sure we've got most of them, but if you ๐ notice anything weird, please let us know.
Beyond that, we've added a new experimental way to use IPNS. With the new โก๏ธ pubsub IPNS resolver and publisher, you can subscribe to updates of an IPNS entry, and the owner can publish out changes in real time. With this, IPNS can become nearly instantaneous. To make use of this, simply start your ipfs daemon with the
--enable-namesys-pubsub
option, and all IPNS resolution and publishing will use pubsub. Note that resolving an IPNS name via pubsub without someone publishing it via pubsub will result in a fallback to using the DHT. Please give this a try and let us know how it goes!๐ Memory and CPU usage should see a noticeable improvement in this release. We have spent considerable time fixing excess memory usage throughout the codebase ๐ and down into libp2p. Fixes in peer tracking, bitswap allocation, pinning, and many other places have brought down both peak and average memory usage. An โฌ๏ธ upgraded hashing library, base58 encoding library, and improved allocation ๐ patterns all contribute to overall lower CPU usage across the board. See the full changelist below for more memory and CPU usage improvements.
๐ This release also brings the beginning of the ipfs 'Core API'. Once finished, the Core API will be the primary way to interact with go-ipfs using go. Both embedded nodes and nodes accessed over the http API will have the same ๐ interface. Stay tuned for future updates and documentation.
๐ These are only a sampling of the changes that made it into this release, the full list (almost 100 PRs!) is below.
๐ Finally, I'd like to thank everyone who contributed to this release, whether you're just contributing a typo fix or driving new features. We are really grateful to everyone who has spent their their time pushing ipfs forward.
๐ SECURITY NOTE:
๐ This release of ipfs disallows the usage of insecure hash functions and lengths. Ipfs does not create these insecure objects for any purpose, but it did allow manually creating them and fetching them from other peers. If you currently have objects using insecure hashes in your local ipfs repo, please โ remove them before updating.
๐ Changes from rc2 to rc3
- ๐ Fix bug in stdin argument parsing (ipfs/go-ipfs#4827)
- โช Revert commands back to sending a single response (ipfs/go-ipfs#4822)
๐ Changes from rc1 to rc2
๐ Fix issue in ipfs get caused by go1.10 changes (ipfs/go-ipfs#4790)
๐ Features
- Pubsub IPNS Publisher and Resolver (experimental) (ipfs/go-ipfs#4047)
- Implement coreapi Dag interface (ipfs/go-ipfs#4471)
- Add --offset flag to ipfs cat (ipfs/go-ipfs#4538)
- Command to apply config profile after init (ipfs/go-ipfs#4195)
- Implement coreapi Name and Key interfaces (ipfs/go-ipfs#4477)
- Add --length flag to ipfs cat (ipfs/go-ipfs#4553)
- Implement coreapi Object interface (ipfs/go-ipfs#4492)
- Implement coreapi Block interface (ipfs/go-ipfs#4548)
- Implement coreapi Pin interface (ipfs/go-ipfs#4575)
- Add a --with-local flag to ipfs files stat (ipfs/go-ipfs#4638)
- Disallow usage of blocks with insecure hashes (ipfs/go-ipfs#4751)
๐ Improvements
- Add uuid to event logs (ipfs/go-ipfs#4392)
- Add --quiet flag to object put (ipfs/go-ipfs#4411)
- Pinning memory improvements and fixes (ipfs/go-ipfs#4451)
- Update WebUI version (ipfs/go-ipfs#4449)
- Check strong and weak ETag validator (ipfs/go-ipfs#3983)
- Improve and refactor FD limit handling (ipfs/go-ipfs#3801)
- Support linking to non-dagpb objects in ipfs object patch (ipfs/go-ipfs#4460)
- Improve allocation patterns of slices in bitswap (ipfs/go-ipfs#4458)
- Secio handshake now happens synchronously (libp2p/go-libp2p-secio#25)
- Don't block closing connections on pending writes (libp2p/go-msgio#7)
- Improve memory usage of multiaddr parsing (multiformats/go-multiaddr#56)
- Don't lock up 256KiB buffers when adding small files (ipfs/go-ipfs#4508)
- Clear out memory after reads from the dagreader (ipfs/go-ipfs#4525)
- Improve error handling in ipfs ping (ipfs/go-ipfs#4546)
- Allow install.sh to be run without being the script dir (ipfs/go-ipfs#4547)
- Much faster base58 encoding (libp2p/go-libp2p-peer#24)
- Use faster sha256 and blake2b libs (multiformats/go-multihash#63)
- Greatly improve peerstore memory usage (libp2p/go-libp2p-peerstore#22)
- Improve dht memory usage and peer tracking (libp2p/go-libp2p-kad-dht#111)
- New libp2p metrics lib with lower overhead (libp2p/go-libp2p-metrics#8)
- Fix memory leak that occurred when dialing many peers (libp2p/go-libp2p-swarm#51)
- Wire up new dag interfaces to make sessions easier (ipfs/go-ipfs#4641)
๐ Documentation
- Correct StorageMax config description (ipfs/go-ipfs#4388)
- Add how to download IPFS with IPFS doc (ipfs/go-ipfs#4390)
- Document gx release checklist item (ipfs/go-ipfs#4480)
- Add some documentation to CoreAPI (ipfs/go-ipfs#4493)
- Add interop tests to the release checklist (ipfs/go-ipfs#4501)
- Add badgerds to experimental-features ToC (ipfs/go-ipfs#4537)
- Fix typos and inconsistencies in commands documentation (ipfs/go-ipfs#4552)
- Add a document to help troubleshoot data transfers (ipfs/go-ipfs#4332)
- Add a bunch of documentation on public interfaces (ipfs/go-ipfs#4599)
- Expand the issue template and remove the severity field (ipfs/go-ipfs#4624)
- Add godocs for importers module (ipfs/go-ipfs#4640)
- Document make targets (ipfs/go-ipfs#4653)
- Add godocs for merkledag module (ipfs/go-ipfs#4665)
- Add godocs for unixfs module (ipfs/go-ipfs#4664)
- Add sharding to experimental features list (ipfs/go-ipfs#4569)
- Add godocs for routing module (ipfs/go-ipfs#4676)
- Add godocs for path module (ipfs/go-ipfs#4689)
- Add godocs for pin module (ipfs/go-ipfs#4696)
- Update link to filestore experimental status (ipfs/go-ipfs#4557)
๐ Bugfixes
- Remove trailing slash in ipfs get paths, fixes #3729 (ipfs/go-ipfs#4365)
- fix deadlock in bitswap sessions (ipfs/go-ipfs#4407)
- Fix two race conditions (and possibly go routine leaks) in commands (ipfs/go-ipfs#4406)
- Fix output delay in ipfs pubsub sub (ipfs/go-ipfs#4402)
- Use correct context in AddWithContext (ipfs/go-ipfs#4433)
- Fix various IPNS republisher issues (ipfs/go-ipfs#4440)
- Fix error handling in commands add and get (ipfs/go-ipfs#4454)
- Fix hamt (sharding) delete issue (ipfs/go-ipfs#4398)
- More correctly check for reuseport support (libp2p/go-reuseport#40)
- Fix goroutine leak in websockets transport (libp2p/go-ws-transport#21)
- Update badgerds to fix i386 windows build (ipfs/go-ipfs#4464)
- Only construct bitswap event loggable if necessary (ipfs/go-ipfs#4533)
- Ensure that flush on the mfs root flushes its directory (ipfs/go-ipfs#4509)
- Fix deferred unlock of pin lock in AddR (ipfs/go-ipfs#4562)
- Fix iOS builds (ipfs/go-ipfs#4610)
- Calling repo gc now frees up space with badgerds (ipfs/go-ipfs#4578)
- Fix leak in bitswap sessions shutdown (ipfs/go-ipfs#4658)
- Fix make on windows (ipfs/go-ipfs#4682)
- Ignore invalid key files in keystore directory (ipfs/go-ipfs#4700)
๐จ General Changes and Refactorings
- Extract and refactor commands library (ipfs/go-ipfs#3856)
- Remove all instances of
Default(false)
(ipfs/go-ipfs#4042) - Build for all supported platforms when testing (ipfs/go-ipfs#4445)
- Refine gateway and namesys logging (ipfs/go-ipfs#4428)
- Demote bitswap error to an info (ipfs/go-ipfs#4472)
- Extract posinfo package to github.com/ipfs/go-ipfs-posinfo (ipfs/go-ipfs#4669)
- Move signature verification to ipns validator (ipfs/go-ipfs#4628)
- Extract importers/chunk module as go-ipfs-chunker (ipfs/go-ipfs#4661)
- Extract go-detect-race from Godeps (ipfs/go-ipfs#4686)
- Extract flags, delay, ds-help (ipfs/go-ipfs#4685)
- Extract routing package to go-ipfs-routing (ipfs/go-ipfs#4703)
- Extract blocks/blockstore package to go-ipfs-blockstore (ipfs/go-ipfs#4707)
- Add exchange.SessionExchange interface for exchanges that support sessions (ipfs/go-ipfs#4709)
- Extract thirdparty/pq to go-ipfs-pq (ipfs/go-ipfs#4711)
- Separate "path" from "path/resolver" (ipfs/go-ipfs#4713)
โ Testing
- Increase verbosity of t0088-repo-stat-symlink.sh test (ipfs/go-ipfs#4434)
- Make repo size test pass deterministically (ipfs/go-ipfs#4443)
- Always set IPFS_PATH in test-lib.sh (ipfs/go-ipfs#4469)
- Fix sharness docker (ipfs/go-ipfs#4489)
- Fix loops in sharness tests to fail the test if the inner command fails (ipfs/go-ipfs#4482)
- Improve bitswap tests, fix race conditions (ipfs/go-ipfs#4499)
- Fix circleci cache directory list (ipfs/go-ipfs#4564)
- Only run the build test on test_go_expensive (ipfs/go-ipfs#4645)
- Fix go test on Windows (ipfs/go-ipfs#4632)
- Fix some tests on FreeBSD (ipfs/go-ipfs#4662)