v0.16.0
🗣 Discuss
If you have comments, questions, or feedback on this release, please post here.
If you experienced any bugs with the release, please post an issue.
🔦 Highlights
🛣️ More configurable delegated routing system
Since Kubo v0.14.0 Reframe protocol has been supported as a new routing system.
Now, we allow to configure several routers working together, so you can have several reframe
and dht
routers making queries. You can use the special parallel
and sequential
routers to fill your needs.
Example configuration usage using the Filecoin Network Indexer and the DHT, making first a query to the indexer, and timing out after 3 seconds.
$ ipfs config Routing.Type --json '"custom"'
$ ipfs config Routing.Routers.CidContact --json '{
"Type": "reframe",
"Parameters": {
"Endpoint": "https://cid.contact/reframe"
}
}'
$ ipfs config Routing.Routers.WanDHT --json '{
"Type": "dht",
"Parameters": {
"Mode": "auto",
"PublicIPNetwork": true,
"AcceleratedDHTClient": false
}
}'
$ ipfs config Routing.Routers.ParallelHelper --json '{
"Type": "parallel",
"Parameters": {
"Routers": [
{
"RouterName" : "CidContact",
"IgnoreErrors" : true,
"Timeout": "3s"
},
{
"RouterName" : "WanDHT",
"IgnoreErrors" : false,
"Timeout": "5m",
"ExecuteAfter": "2s"
}
]
}
}'
$ ipfs config Routing.Methods --json '{
"find-peers": {
"RouterName": "ParallelHelper"
},
"find-providers": {
"RouterName": "ParallelHelper"
},
"get-ipns": {
"RouterName": "ParallelHelper"
},
"provide": {
"RouterName": "WanDHT"
},
"put-ipns": {
"RouterName": "ParallelHelper"
}
}'
🌍 WebTransport new experimental Transport
A new feature of go-libp2p
is WebTransport.
For now it is disabled by default and considered experimental.
If you find issues running it please report them to us.
In the future Kubo will listen on WebTransport by default for anyone already listening on QUIC addresses.
WebTransport is a new transport protocol currently under development by the IETF and the W3C, and already implemented by Chrome.
Conceptually, it’s like WebSocket run over QUIC instead of TCP. Most importantly, it allows browsers to establish (secure!) connections to WebTransport servers without the need for CA-signed certificates,
thereby enabling any js-libp2p node running in a browser to connect to any kubo node, with zero manual configuration involved.
The previous alternative is websocket secure, which require installing a reverse proxy and TLS certificates manually.
How to enable WebTransport
Thoses steps are temporary and wont be needed once we make it enabled by default.
- Enable the WebTransport transport:
ipfs config Swarm.Transports.Network.WebTransport --json true
- Add a listener address for WebTransport to your
Addresses.Swarm
key, for example:[ "/ip4/0.0.0.0/tcp/4001", "/ip4/0.0.0.0/udp/4001/quic", "/ip4/0.0.0.0/udp/4002/quic/webtransport" ]
- Restart your daemon to apply the config changes.
🗃️ Hardened IPNS record verification
Records that do not have a valid IPNS V2 signature, or exceed the max size
limit, will no longer pass verification, and will be ignored by Kubo when
resolving /ipns/{libp2p-key}
content paths.
Kubo continues publishing backward-compatible V1+V2 records that can be
resolved by V1-only (go-ipfs <0.9.0) clients.
More details can be found in Backward Compatibility, Record Creation, and
Record Verification sections of the updated IPNS
specification.
🌉 Web Gateways now support _redirects
files
This feature enables support for redirects, single-page applications (SPA),
custom 404 pages, and moving to IPFS-backed website hosting
without breaking existing HTTP links.
It is limited to websites hosted in web contexts with unique
Origins, such as
subdomain and
DNSLink gateways.
Redirect logic is evaluated only if the requested path is not in the DAG.
See more details and usage examples see
docs.ipfs.tech: Redirects, custom 404s, and SPA support.
😻 Add files to MFS with ipfs add --to-files
Users no longer need to call ipfs files cp
after ipfs add
to create a
reference in MFS, or deal with
low level pins if they do not wish to do so. It is now possible to pass MFS
path in an optional --to-files
to add data directly to MFS, without creating
a low level pin.
Before (Kubo <0.16.0):
$ ipfs add cat.jpg
QmCID
$ ipfs files cp /ipfs/QmCID /mfs-cats/cat.jpg
$ ipfs pin rm QmCID # removing low level pin, since MFS is protecting from gc
Kubo 0.16.0 collapses the above steps into one:
$ ipfs add --pin=false cat.jpg --to-files /mfs-cats/
A recursive add to MFS works too (below line will create /lots-of-cats/
directory in MFS):
$ ipfs add -r ./lots-of-cats/ --to-files /
For more information, see ipfs add --help
and ipfs files --help
.
Changelog
Full Changelog
- github.com/ipfs/kubo:
- fix: Set default Methods value to nil
- docs: document remaining 0.16.0 features
- docs: add WebTransport docs (ipfs/kubo#9308)
- chore: bump version to 0.16.0-rc1
- fix: ensure hasher is registered when using a hashing function
- feat: add webtransport as an optin transport (ipfs/kubo#9293)
- feat(gateway): _redirects file support (#8890) (ipfs/kubo#8890)
- docs: fix typo in changelog-v0.16.0.md
- Readme: Rewrite introduction and featureset (#9211) (ipfs/kubo#9211)
- feat: Delegated routing with custom configuration. (#9274) (ipfs/kubo#9274)
- Add to
ipfs id -h
options (#9229) (ipfs/kubo#9229) - chore: bump go-libp2p v0.23.1 (ipfs/kubo#9285)
- feat(cmds/add): --to-files option automates files cp (#8927) (ipfs/kubo#8927)
- docs: fix broken ENS DoH example (#9281) (ipfs/kubo#9281)
- (ipfs/kubo#9258)
- (ipfs/kubo#9213)
- docs: small typo in Dockerfile
- feat: ipfs-webui v2.18.1
- feat: ipfs-webui v2.18.0 (#9262) (ipfs/kubo#9262)
- bump go-libp2p v0.22.0 & go1.18&go1.19 (ipfs/kubo#9244)
- docs: change windows choco install command to point to go-ipfs
- fix: pass the repo directory into the ignored_commit function
- docs(cmds): daemon: update DHTClient description
- fix(gw): send 200 for empty files
- docs(readme): official vs unofficial packages
- chore: remove Gateway.PathPrefixes
- docs(readme): update Docker section
- docs: fix markdown syntax typo in v0.15's changelog
- chore: Release v0.15.0 (ipfs/kubo#9236)
- chore: fix undiallable api and gateway files (ipfs/kubo#9233)
- chore: Bump version to 0.16.0-dev
- github.com/ipfs/go-bitswap (v0.9.0 -> v0.10.2):
- chore: release v0.10.2
- fix: create a copy of the protocol slice in network.processSettings
- chore: release v0.10.1
- fix: incorrect type in the WithTracer polyfill option
- chore: fix incorrect log message when a bad option is passed
- chore: release v0.10.0
- chore: update go-libp2p v0.22.0
- github.com/ipfs/go-cid (v0.2.0 -> v0.3.2):
- chore: release v0.3.2
- Revert "fix: bring back, but deprecate CodecToStr and Codecs"
- chore: release v0.2.1
- fix: bring back, but deprecate CodecToStr and Codecs
- run gofmt -s
- bump go.mod to Go 1.18 and run go fix
- chore: release v0.3.0
- fix: return nil Bytes() if the Cid in undef
- Add MustParse (ipfs/go-cid#139)
- github.com/ipfs/go-datastore (v0.5.1 -> v0.6.0):
- Release v0.6.0 (#194) (ipfs/go-datastore#194)
- feat: add Features + datastore scoping
- chore: Fix comment typo (#191) (ipfs/go-datastore#191)
- github.com/ipfs/go-delegated-routing (v0.3.0 -> v0.6.0):
- (ipfs/go-delegated-routing#53)
- (ipfs/go-delegated-routing#52)
- Release v0.5.2 (#50) (ipfs/go-delegated-routing#50)
- Fixed serialisation issue with multiadds (#49) (ipfs/go-delegated-routing#49)
- Upgrade to IPLD
0.18.0
- Release v0.5.0 (#47) (ipfs/go-delegated-routing#47)
- feat: use GET for FindProviders (#46) (ipfs/go-delegated-routing#46)
- Update provide to take an array of keys, per spec (#45) (ipfs/go-delegated-routing#45)
- (ipfs/go-delegated-routing#44)
- fix: upgrade edelweiss and rerun 'go generate' (#42) (ipfs/go-delegated-routing#42)
- ci: add check to ensure generated files are up-to-date (#41) (ipfs/go-delegated-routing#41)
- Add Provide RPC (#37) (ipfs/go-delegated-routing#37)
- upgrade to go-log/v2 (#34) (ipfs/go-delegated-routing#34)
- github.com/ipfs/go-ipns (v0.1.2 -> v0.3.0):
- fix: require V2 signatures (ipfs/go-ipns#41)
- update go-libp2p to v0.22.0, release v0.2.0 (#39) (ipfs/go-ipns#39)
- use peer.IDFromBytes instead of peer.IDFromString (#38) (ipfs/go-ipns#38)
- sync: update CI config files (#34) (ipfs/go-ipns#34)
- github.com/ipfs/go-pinning-service-http-client (v0.1.1 -> v0.1.2):
- chore: release v0.1.2
- fix: send up to nanosecond precision
- refactor: cleanup Sprintf for Bearer token
- sync: update CI config files (ipfs/go-pinning-service-http-client#21)
- github.com/ipld/edelweiss (v0.1.4 -> v0.2.0):
- Release v0.2.0 (#60) (ipld/edelweiss#60)
- feat: add cachable modifier to methods (#48) (ipld/edelweiss#48)
- adding licenses (#52) (ipld/edelweiss#52)
- sync: update CI config files (ipld/edelweiss#56)
- chore: replace deprecated ioutil with io/os (ipld/edelweiss#59)
- Release v0.1.6
- fix: iterate over BlueMap in deterministic order (#57) (ipld/edelweiss#57)
- fix: wrap DAG-JSON serialization error (#55) (ipld/edelweiss#55)
- update examples and harness
- upgrade to go-log/v2 (#53) (ipld/edelweiss#53)
- github.com/ipld/go-ipld-prime (v0.17.0 -> v0.18.0):
- Prepare v0.18.0
- feat(bindnode): add a BindnodeRegistry utility (#437) (ipld/go-ipld-prime#437)
- feat(bindnode): support full uint64 range
- chore(bindnode): remove typed functions for options
- chore(bindnode): docs and minor tweaks
- feat(bindnode): make Any converters work for List and Map values
- fix(bindnode): shorten converter option names, minor perf improvements
- fix(bindnode): only custom convert AssignNull for Any converter
- feat(bindnode): pass Null on to nullable custom converters
- chore(bindnode): config helper refactor w/ short-circuit
- feat(bindnode): add AddCustomTypeAnyConverter() to handle
Any
fields - feat(bindnode): add AddCustomTypeXConverter() options for most scalar kinds
- chore(bindnode): back out of reflection for converters
- feat(bindnode): switch to converter functions instead of type
- feat(bindnode): allow custom type conversions with options
- feat: add release checklist (#442) (ipld/go-ipld-prime#442)
- github.com/libp2p/go-flow-metrics (v0.0.3 -> v0.1.0):
- introduce an API to set a mock clock (#20) (libp2p/go-flow-metrics#20)
- chore: skip slow tests when short testing is specified (libp2p/go-flow-metrics#16)
- github.com/libp2p/go-libp2p (v0.21.0 -> v0.23.2):
- release v0.23.2 (#1781) (libp2p/go-libp2p#1781)
- webtransport: return error before wrapping opened / accepted streams (#1775) (libp2p/go-libp2p#1775)
- release v0.23.1 (#1773) (libp2p/go-libp2p#1773)
- websocket: fix nil pointer in tlsClientConf (#1770) (libp2p/go-libp2p#1770)
- release v0.23.0 (#1764) (libp2p/go-libp2p#1764)
- noise: switch to proto2, use the new NoiseExtensions protobuf (libp2p/go-libp2p#1762)
- webtransport: add custom resolver to add SNI (#1761) (libp2p/go-libp2p#1761)
- swarm: skip dialing WebTransport addresses when we have QUIC addresses (#1756) (libp2p/go-libp2p#1756)
- webtransport: have the server send the certificates (#1757) (libp2p/go-libp2p#1757)
- noise: make it possible for the server to send early data (#1750) (libp2p/go-libp2p#1750)
- swarm: fix selection of transport for dialing (#1653) (libp2p/go-libp2p#1653)
- autorelay: Add a context.Context to WithPeerSource callback (#1736) (libp2p/go-libp2p#1736)
- webtransport: add and check the ?type=noise URL parameter (#1749) (libp2p/go-libp2p#1749)
- webtransport: disable HTTP origin check (#1752) (libp2p/go-libp2p#1752)
- noise: don't fail handshake when early data is received without handler (#1746) (libp2p/go-libp2p#1746)
- Add Resolver interface to transport (#1719) (libp2p/go-libp2p#1719)
- use new /libp2p/go-libp2p/core pkg (#1745) (libp2p/go-libp2p#1745)
- yamux: pass constructors for peer resource scopes to session constructor (#1739) (libp2p/go-libp2p#1739)
- tcp: add an option to enable metrics (disabled by default) (#1734) (libp2p/go-libp2p#1734)
- move go-libp2p-webtransport to p2p/transport/webtransport (libp2p/go-libp2p#1737)
- autorelay: fix race condition in TestBackoff (#1731) (libp2p/go-libp2p#1731)
- rcmgr: increase default connection memory limit to 32 MB (#1740) (libp2p/go-libp2p#1740)
- quic: update quic-go to v0.29.0 (#1723) (libp2p/go-libp2p#1723)
- noise: implement an API to send and receive early data (libp2p/go-libp2p#1728)
- identify: make the protocol version configurable (#1724) (libp2p/go-libp2p#1724)
- Fix threshold calculation (#1722) (libp2p/go-libp2p#1722)
- connmgr: use clock interface (#1720) (libp2p/go-libp2p#1720)
- quic: increase the buffer size used for encoding qlogs (#1715) (libp2p/go-libp2p#1715)
- quic: add a WithMetrics option (#1716) (libp2p/go-libp2p#1716)
- add default listen addresses for QUIC (#1615) (libp2p/go-libp2p#1615)
- feat: inject DNS resolver (#1607) (libp2p/go-libp2p#1607)
- connmgr: prefer peers with no streams when closing connections (#1675) (libp2p/go-libp2p#1675)
- quic: add DisableReuseport option (#1476) (libp2p/go-libp2p#1476)
- release v0.22.0 (libp2p/go-libp2p#1688)
- fix: don't prefer local ports from other addresses when dialing (#1673) (libp2p/go-libp2p#1673)
- crypto: add better support for alternative backends (#1686) (libp2p/go-libp2p#1686)
- crypto/secp256k1: Remove btcsuite intermediary. (#1689) (libp2p/go-libp2p#1689)
- Update resource manager README (#1684) (libp2p/go-libp2p#1684)
- move go-libp2p-core here (libp2p/go-libp2p#1683)
- rcmgr: make scaling changes more intuitive (#1685) (libp2p/go-libp2p#1685)
- move go-eventbus here (libp2p/go-libp2p#1681)
- basichost: remove usage of MultistreamServerMatcher in test (#1680) (libp2p/go-libp2p#1680)
- sync: update CI config files (#1678) (libp2p/go-libp2p#1678)
- move go-libp2p-resource-manager to p2p/host/resource-manager (libp2p/go-libp2p#1677)
- chore: preallocate slices with known final size (#1679) (libp2p/go-libp2p#1679)
- autorelay: fix flaky TestMaxAge (#1676) (libp2p/go-libp2p#1676)
- move go-libp2p-peerstore to p2p/host/peerstore (libp2p/go-libp2p#1667)
- examples: remove ipfs components from echo (#1672) (libp2p/go-libp2p#1672)
- chore: update libp2p to v0.21 in examples (#1674) (libp2p/go-libp2p#1674)
- change the default key type to Ed25519 (#1576) (libp2p/go-libp2p#1576)
- autorelay: poll for new candidates when needed (libp2p/go-libp2p#1587)
- examples: fix unresponsive pubsub chat example (#1652) (libp2p/go-libp2p#1652)
- routed: respect force direct dial context (#1665) (libp2p/go-libp2p#1665)
- pstoremanager: fix flaky TestClose (#1649) (libp2p/go-libp2p#1649)
- Allow adding prologue to noise connections (#1663) (libp2p/go-libp2p#1663)
- connmgr: add nowatchdog go build tag (#1666) (libp2p/go-libp2p#1666)
- mdns: don't discover ourselves (#1661) (libp2p/go-libp2p#1661)
- Support generating custom x509 certificates (#1481) (libp2p/go-libp2p#1481)
- github.com/libp2p/go-libp2p-core (v0.19.1 -> v0.20.1):
- chore: release v0.20.1
- feat: forward crypto/pb
- release v0.20.0
- deprecate this repo
- stop using the deprecated io/ioutil package (#279) (libp2p/go-libp2p-core#279)
- use a mock clock in bandwidth tests (#276) (libp2p/go-libp2p-core#276)
- remove unused MultistreamSemverMatcher (#277) (libp2p/go-libp2p-core#277)
- remove peer.IDFromString (#274) (libp2p/go-libp2p-core#274)
- deprecate peer.Encode in favor of peer.ID.String (#275) (libp2p/go-libp2p-core#275)
- deprecate peer.ID.Pretty (#273) (libp2p/go-libp2p-core#273)
- github.com/libp2p/go-libp2p-kad-dht (v0.17.0 -> v0.18.0):
- update go-libp2p to v0.22.0, release v0.18.0 (libp2p/go-libp2p-kad-dht#788)
- sync: update CI config files (#789) (libp2p/go-libp2p-kad-dht#789)
- github.com/libp2p/go-libp2p-peerstore (v0.7.1 -> v0.8.0):
- release v0.8.0
- deprecate this repo
- fix flaky TestGCDelay (#206) (libp2p/go-libp2p-peerstore#206)
- fix flaky EWMA test (#205) (libp2p/go-libp2p-peerstore#205)
- github.com/libp2p/go-libp2p-record (v0.1.3 -> v0.2.0):
- update go-libp2p to v0.22.0, release v0.2.0 (libp2p/go-libp2p-record#50)
- sync: update CI config files (#47) (libp2p/go-libp2p-record#47)
- increase RSA key sizes in tests (libp2p/go-libp2p-record#44)
- cleanup: fix staticcheck failures (libp2p/go-libp2p-record#43)
- github.com/libp2p/go-libp2p-routing-helpers (v0.2.3 -> v0.4.0):
- (libp2p/go-libp2p-routing-helpers#62)
- (libp2p/go-libp2p-routing-helpers#58)
- Update version.json (libp2p/go-libp2p-routing-helpers#60)
- update go-libp2p to v0.22.0 (libp2p/go-libp2p-routing-helpers#59)
- sync: update CI config files (#53) (libp2p/go-libp2p-routing-helpers#53)
- fix staticcheck (libp2p/go-libp2p-routing-helpers#49)
- fix error handling in Parallel.search (libp2p/go-libp2p-routing-helpers#48)
- github.com/libp2p/go-libp2p-testing (v0.11.0 -> v0.12.0):
- release v0.12.0 (#67) (libp2p/go-libp2p-testing#67)
- chore: update to go-libp2p v0.22.0 (#66) (libp2p/go-libp2p-testing#66)
- remove the resource manager mocks (#65) (libp2p/go-libp2p-testing#65)
- github.com/libp2p/go-openssl (v0.0.7 -> v0.1.0):
- release v0.1.0 (#31) (libp2p/go-openssl#31)
- Fix build with OpenSSL 3.0 (#25) (libp2p/go-openssl#25)
- sync: update CI config files (libp2p/go-openssl#24)
- Add openssl.DialTimeout(network, addr, timeout, ctx, flags) call (libp2p/go-openssl#26)
- Add Ctx.SetMinProtoVersion and Ctx.SetMaxProtoVersion wrappers (libp2p/go-openssl#27)
- sync: update CI config files (libp2p/go-openssl#17)
- fix: unsafe pointer passing (libp2p/go-openssl#18)
- Update test RSA cert (libp2p/go-openssl#15)
- Fix tests (libp2p/go-openssl#16)
- Address
staticcheck
issues (libp2p/go-openssl#14) - Enabled PEM files with CRLF line endings to be used (#10) (libp2p/go-openssl#11)
- github.com/libp2p/zeroconf/v2 (v2.1.1 -> v2.2.0):
- Fix windows libp2p (#29) (libp2p/zeroconf#29)
- Fix compatibility with some IoT devices using avahi 0.8-rc1 (#27) (libp2p/zeroconf#27)
- Add TTL server option (#23) (libp2p/zeroconf#23)
- github.com/lucas-clemente/quic-go (v0.28.0 -> v0.29.1):
- http3: fix double close of chan when using DontCloseRequestStream
- add a logging.NullTracer and logging.NullConnectionTracer (lucas-clemente/quic-go#3512)
- add support for providing a custom Connection ID generator via Config (#3452) (lucas-clemente/quic-go#3452)
- fix typo in README
- fix datagram support detection (#3511) (lucas-clemente/quic-go#3511)
- use a single Go routine to send copies of CONNECTION_CLOSE packets (lucas-clemente/quic-go#3514)
- add YoMo to list of projects in README (#3513) (lucas-clemente/quic-go#3513)
- http3: fix listening on both QUIC and TCP (#3465) (lucas-clemente/quic-go#3465)
- Disable anti-amplification limit by address validation token (#3326) (lucas-clemente/quic-go#3326)
- fix typo in README
- implement a new API to let servers control client address verification (lucas-clemente/quic-go#3501)
- use a generic streams map for incoming streams (lucas-clemente/quic-go#3489)
- fix unreachable code after log.Fatal in fuzzing corpus generator (#3496) (lucas-clemente/quic-go#3496)
- use generic Min and Max functions (lucas-clemente/quic-go#3483)
- add QPACK (RFC 9204) to the list of supported RFCs (#3485) (lucas-clemente/quic-go#3485)
- add a function to distinguish between long and short header packets (#3498) (lucas-clemente/quic-go#3498)
- use a generic streams map for outgoing streams (#3488) (lucas-clemente/quic-go#3488)
- update golangci-lint action to v3, golangci-lint to v1.48.0 (#3499) (lucas-clemente/quic-go#3499)
- use a generic linked list (#3487) (lucas-clemente/quic-go#3487)
- drop support for Go 1.16 and 1.17 (#3482) (lucas-clemente/quic-go#3482)
- optimize FirstOutstanding in the sent packet history (#3467) (lucas-clemente/quic-go#3467)
- update supported RFCs in README (#3456) (lucas-clemente/quic-go#3456)
- http3: ignore context after response when using DontCloseRequestStream (#3473) (lucas-clemente/quic-go#3473)
- github.com/marten-seemann/webtransport-go (null -> v0.1.1):
- release v0.1.1 (#31) (marten-seemann/webtransport-go#31)
- fix double close of chan when using DontCloseRequestStream
- github.com/multiformats/go-base32 (v0.0.4 -> v0.1.0):
- chore: bump version to 0.1.0
- fix: fix staticcheck complaints
- run gofmt -s
- sync: update CI config files (#5) (multiformats/go-base32#5)
- github.com/multiformats/go-multiaddr (v0.6.0 -> v0.7.0):
- Release v0.7.0 (multiformats/go-multiaddr#183)
- use decimal numbers for multicodecs (multiformats/go-multiaddr#184)
- Fix comment on Decapsulate (multiformats/go-multiaddr#181)
- (multiformats/go-multiaddr#182)
- sync: update CI config files (#180) (multiformats/go-multiaddr#180)
- Add webrtc (#179) (multiformats/go-multiaddr#179)
- github.com/multiformats/go-multicodec (v0.5.0 -> v0.6.0):
- chore: version bump 0.6.0
- fix: replace io/ioutil with io
- bump go.mod to Go 1.18 and run go fix
Contributors
Contributor | Commits | Lines ± | Files Changed |
---|---|---|---|
Marten Seemann | 236 | +12637/-24326 | 1152 |
Raúl Kripalani | 118 | +11626/-4136 | 422 |
vyzo | 144 | +10129/-3665 | 230 |
galargh | 9 | +5293/-5298 | 26 |
Marco Munizaga | 83 | +7502/-3080 | 147 |
Antonio Navarro Perez | 33 | +4074/-1240 | 78 |
Steven Allen | 98 | +1974/-1693 | 202 |
Cole Brown | 57 | +2169/-1338 | 95 |
Rod Vagg | 21 | +2588/-768 | 56 |
Gus Eggert | 16 | +2011/-1226 | 36 |
Yusef Napora | 6 | +2738/-187 | 43 |
Raúl Kripalani | 2 | +1000/-889 | 18 |
Łukasz Magiera | 26 | +1312/-500 | 54 |
Will | 2 | +1593/-200 | 18 |
Jorropo | 31 | +924/-712 | 204 |
Juan Batiz-Benet | 2 | +1531/-9 | 21 |
Jeromy | 14 | +691/-468 | 51 |
Petar Maymounkov | 4 | +469/-285 | 25 |
Jeromy Johnson | 24 | +474/-204 | 116 |
Justin Johnson | 1 | +582/-93 | 7 |
Aarsh Shah | 24 | +377/-105 | 34 |
web3-bot | 18 | +246/-228 | 93 |
Masih H. Derkani | 2 | +197/-213 | 21 |
Marcin Rataj | 9 | +211/-176 | 16 |
adam | 4 | +235/-49 | 9 |
Jakub Sztandera | 9 | +203/-73 | 13 |
Guilhem Fanton | 1 | +216/-48 | 5 |
Lucas Molas | 1 | +219/-9 | 3 |
Peter Argue | 1 | +166/-36 | 3 |
Vibhav Pant | 4 | +186/-12 | 7 |
Adrian Lanzafame | 3 | +180/-16 | 5 |
Lars Gierth | 5 | +151/-41 | 25 |
João Oliveirinha | 1 | +124/-38 | 11 |
dignifiedquire | 3 | +122/-33 | 6 |
Chinmay Kousik | 2 | +128/-4 | 7 |
Toby | 1 | +89/-36 | 4 |
Oleg Jukovec | 3 | +111/-14 | 8 |
Whyrusleeping | 2 | +120/-0 | 6 |
KevinZønda | 1 | +81/-20 | 2 |
wzp | 2 | +86/-3 | 2 |
Benedikt Spies | 1 | +75/-12 | 8 |
nisainan | 1 | +33/-43 | 12 |
Tshaka Eric Lekholoane | 1 | +57/-19 | 6 |
cpuchip | 1 | +65/-6 | 2 |
Roman Proskuryakov | 2 | +69/-0 | 2 |
Arceliar | 2 | +36/-28 | 2 |
Maxim Merzhanov | 1 | +29/-24 | 1 |
Richard Ramos | 1 | +51/-0 | 2 |
Dave Collins | 1 | +25/-25 | 4 |
Leo Balduf | 2 | +37/-10 | 3 |
David Aronchick | 1 | +42/-0 | 3 |
Didrik Nordström | 1 | +35/-6 | 1 |
Vasco Santos | 1 | +20/-20 | 7 |
Jesse Bouwman | 1 | +19/-21 | 1 |
Ivan Schasny | 2 | +22/-14 | 4 |
MGMCN | 1 | +9/-24 | 2 |
Brian Meek | 1 | +14/-17 | 4 |
Ian Davis | 3 | +21/-9 | 5 |
Mars Zuo | 1 | +7/-18 | 1 |
RubenKelevra | 1 | +10/-10 | 1 |
mojatter | 1 | +9/-8 | 1 |
Cory Schwartz | 1 | +0/-17 | 1 |
Steve Loeppky | 6 | +7/-6 | 6 |
Matt Joiner | 2 | +10/-3 | 2 |
Winterhuman | 2 | +7/-5 | 2 |
Dmitry Yu Okunev | 1 | +5/-7 | 5 |
corverroos | 1 | +7/-4 | 2 |
Marcel Gregoriadis | 1 | +9/-0 | 1 |
Ignacio Hagopian | 2 | +7/-2 | 2 |
Julien Muret | 1 | +4/-4 | 2 |
Eclésio Junior | 1 | +8/-0 | 1 |
Stephan Eberle | 1 | +4/-3 | 1 |
muXxer | 1 | +3/-3 | 1 |
eth-limo | 1 | +3/-3 | 2 |
Russell Dempsey | 2 | +4/-2 | 2 |
Sergey | 1 | +1/-3 | 1 |
Jun10ng | 2 | +2/-2 | 2 |
Jorik Schellekens | 1 | +2/-2 | 1 |
Eli Wang | 1 | +2/-2 | 1 |
Andreas Linde | 1 | +4/-0 | 1 |
whyrusleeping | 1 | +2/-1 | 1 |
xiabin | 1 | +1/-1 | 1 |
star | 1 | +0/-2 | 1 |
fanweixiao | 1 | +1/-1 | 1 |
dbadoy4874 | 1 | +1/-1 | 1 |
bigs | 1 | +1/-1 | 1 |
Tarun Bansal | 1 | +1/-1 | 1 |
Mikerah | 1 | +1/-1 | 1 |
Mike Goelzer | 1 | +2/-0 | 1 |
Max Inden | 1 | +1/-1 | 1 |
Kevin Mai-Husan Chia | 1 | +1/-1 | 1 |
John B Nelson | 1 | +1/-1 | 1 |
Eli Bailey | 1 | +1/-1 | 1 |
Bryan Stenson | 1 | +1/-1 | 1 |
Alex Stokes | 1 | +1/-1 | 1 |
Abirdcfly | 1 | +1/-1 | 1 |