Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
925a4d1
chore: bump version to 0.36.0-dev
lidel May 7, 2025
8c2c500
chore(deps): bump codecov/codecov-action from 5.4.0 to 5.4.2 (#10783)
dependabot[bot] May 8, 2025
6f37df7
ci: uci/copy-templates (#10787)
web3-bot May 9, 2025
2ab3f58
fix(config): wire up `Provider.Enabled` flag (#10804)
lidel May 15, 2025
f84fb28
fix(fuse): ipns error handling and friendly errors (#10807)
lidel May 15, 2025
20d9660
chore: use go-log/v2 (#10801)
gammazero May 19, 2025
1c11ad6
Upgrade go-libp2p-kad-dht to v0.33.0 (#10811)
gammazero May 20, 2025
3290afc
fix: p2p-forge v0.5.1 ignoring /p2p-circuit (#10813)
lidel May 20, 2025
46b2e60
fix: go-libp2p-kad-dht v0.33.1 (#10814)
lidel May 21, 2025
d271920
chore: CHANGELOG.md for 0.36
lidel May 21, 2025
1a0c1a6
Merge branch 'master' into merge-release-v0.35.0
lidel May 21, 2025
5b8f088
chore: spellcheck to avoid ai fix prs
lidel May 21, 2025
6058519
Merge pull request #10815 from ipfs/merge-release-v0.35.0
lidel May 21, 2025
4144fa1
Upgrade to Boxo v0.31.0 (#10819)
gammazero May 28, 2025
cf096c2
fix(gateway): gateway-conformance v0.8 (#10818)
lidel May 28, 2025
bb91273
Minor wording fixes in docs (#10822)
gammazero May 30, 2025
8f87a69
chore(deps): bump codecov/codecov-action from 5.4.2 to 5.4.3 (#10810)
dependabot[bot] May 30, 2025
e491ee9
Update fuse docs with FreeBSD specifics (#10820)
gammazero Jun 2, 2025
78ef5e9
wrap user-facing mfs.Lookup error (#10821)
gammazero Jun 2, 2025
d39cb7f
Ivan386/filestore fix (#7474)
ivan386 Jun 4, 2025
6b76ff0
docs/env variables: Document LIBP2P_SWARM_FD_LIMIT
hsanjuan Jun 6, 2025
4dd0990
chore: triage label for feature requests
lidel Jun 9, 2025
df2d1c7
test: fix "invert" commands in sharness tests (#9652)
laurentsenta Jun 9, 2025
34cf318
Merge pull request #10828 from ipfs/docs-swarm-fd-limit
hsanjuan Jun 10, 2025
c4c70cb
commands: add `--force` option to `files cp` command (#10823)
gammazero Jun 10, 2025
d70f642
feat: AutoTLS with AutoNATv2 client (#10835)
sukunrt Jun 16, 2025
b45ed8a
feat: HTTP retrieval enabled by default (#10836)
lidel Jun 16, 2025
20566bc
Upgrade to Boxo v0.32.0 (#10839)
gammazero Jun 17, 2025
0cf1b22
bitswap/client: configurable broadcast reduction (#10825)
gammazero Jun 17, 2025
eb6cc02
feat(config): connmgr: expose silence period (#10827)
hsanjuan Jun 17, 2025
002d981
chore: deduplicate 0.36 changelog
lidel Jun 17, 2025
127da7c
chore: v0.36.0-rc1
lidel Jun 18, 2025
aabedff
Replace use of go-car v1 with go-car/v2 (#10845)
gammazero Jun 23, 2025
917466b
docs: fix minor typos (#10849)
gammazero Jun 25, 2025
1fa8dfc
chore: p2p-forge v0.6.0 + go-libp2p 0.42.0 (#10840)
sukunrt Jun 26, 2025
1269b0c
core:constructor: add a log line about http retrieval
hsanjuan Jun 26, 2025
647aa2f
chore: Upgrade github.com/cockroachdb/pebble/v2 to v2.0.6 for Go 1.25…
stefanb Jul 2, 2025
120ea0d
Upgrade to Boxo v0.33.0 (#10857)
gammazero Jul 8, 2025
ca2b8f6
refactor: use slices.Sort where appropriate (#10858)
gammazero Jul 8, 2025
9545368
fix: handling of EDITOR env var (#10855)
gammazero Jul 8, 2025
d3a4558
test: TestEditorParsing
lidel Jul 8, 2025
f17f89e
chore: changelog
lidel Jul 8, 2025
9d19996
feat(httpnet): gather metrics for allowlist
lidel Jul 8, 2025
ee9a76f
chore: 0.36.0-rc2
lidel Jul 8, 2025
12144db
chore: update links in markdown
lidel Jul 14, 2025
0276b3f
chore: 0.36.0
lidel Jul 14, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/enhancement.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name: Enhancement
description: Suggest an improvement to an existing kubo feature.
labels:
- kind/enhancement
- need/triage
body:
- type: markdown
attributes:
Expand Down
1 change: 1 addition & 0 deletions .github/ISSUE_TEMPLATE/feature.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name: Feature
description: Suggest a new feature in Kubo.
labels:
- kind/feature
- need/triage
body:
- type: markdown
attributes:
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/gateway-conformance.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ jobs:
steps:
# 1. Download the gateway-conformance fixtures
- name: Download gateway-conformance fixtures
uses: ipfs/gateway-conformance/.github/actions/extract-fixtures@v0.7
uses: ipfs/gateway-conformance/.github/actions/extract-fixtures@v0.8
with:
output: fixtures

Expand Down Expand Up @@ -94,7 +94,7 @@ jobs:

# 6. Run the gateway-conformance tests
- name: Run gateway-conformance tests
uses: ipfs/gateway-conformance/.github/actions/test@v0.7
uses: ipfs/gateway-conformance/.github/actions/test@v0.8
with:
gateway-url: http://127.0.0.1:8080
subdomain-url: http://localhost:8080
Expand Down Expand Up @@ -128,7 +128,7 @@ jobs:
steps:
# 1. Download the gateway-conformance fixtures
- name: Download gateway-conformance fixtures
uses: ipfs/gateway-conformance/.github/actions/extract-fixtures@v0.7
uses: ipfs/gateway-conformance/.github/actions/extract-fixtures@v0.8
with:
output: fixtures

Expand Down Expand Up @@ -201,7 +201,7 @@ jobs:

# 9. Run the gateway-conformance tests over libp2p
- name: Run gateway-conformance tests over libp2p
uses: ipfs/gateway-conformance/.github/actions/test@v0.7
uses: ipfs/gateway-conformance/.github/actions/test@v0.8
with:
gateway-url: http://127.0.0.1:8092
args: --specs "trustless-gateway,-trustless-ipns-gateway" -skip 'TestGatewayCar/GET_response_for_application/vnd.ipld.car/Header_Content-Length'
Expand Down
14 changes: 14 additions & 0 deletions .github/workflows/generated-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: Close Generated PRs

on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:

permissions:
issues: write
pull-requests: write

jobs:
stale:
uses: ipdxco/unified-github-workflows/.github/workflows/reusable-generated-pr.yml@v1
2 changes: 1 addition & 1 deletion .github/workflows/gotest.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ jobs:
make -j "$PARALLEL" test/unit/gotest.junit.xml &&
[[ ! $(jq -s -c 'map(select(.Action == "fail")) | .[]' test/unit/gotest.json) ]]
- name: Upload coverage to Codecov
uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 # v5.4.0
uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3
if: failure() || success()
with:
name: unittests
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/sharness.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ jobs:
# increasing parallelism beyond 10 doesn't speed up the tests much
PARALLEL: ${{ github.repository == 'ipfs/kubo' && 10 || 3 }}
- name: Upload coverage report
uses: codecov/codecov-action@0565863a31f2c772f9f0395002a31e3f06189574 # v5.4.0
uses: codecov/codecov-action@18283e04ce6e62d37312384ff67231eb8fd56d24 # v5.4.3
if: failure() || success()
with:
name: sharness
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/stale.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
name: Close and mark stale issue
name: Close Stale Issues

on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:

permissions:
issues: write
pull-requests: write

jobs:
stale:
uses: pl-strflt/.github/.github/workflows/reusable-stale-issue.yml@v0.3
uses: ipdxco/unified-github-workflows/.github/workflows/reusable-stale-issue.yml@v1
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# Kubo Changelogs

- [v0.36](docs/changelogs/v0.36.md)
- [v0.35](docs/changelogs/v0.35.md)
- [v0.34](docs/changelogs/v0.34.md)
- [v0.33](docs/changelogs/v0.33.md)
Expand Down
22 changes: 13 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -168,15 +168,15 @@ From there:
- Open/extract the archive.
- Move kubo (`ipfs`) to your path (`install.sh` can do it for you).

If you are unable to access [dist.ipfs.tech](https://dist.ipfs.tech#kubo), you can also download kubo (go-ipfs) from:
If you are unable to access [dist.ipfs.tech](https://dist.ipfs.tech#kubo), you can also download kubo from:
- this project's GitHub [releases](https://github.com/ipfs/kubo/releases/latest) page
- `/ipns/dist.ipfs.tech` at [dweb.link](https://dweb.link/ipns/dist.ipfs.tech#kubo) gateway

#### Updating

##### Downloading builds using IPFS

List the available versions of Kubo (go-ipfs) implementation:
List the available versions of Kubo implementation:

```console
$ ipfs cat /ipns/dist.ipfs.tech/kubo/versions
Expand Down Expand Up @@ -224,7 +224,7 @@ $ ipfs get /ipns/dist.ipfs.tech/kubo/$VERSION/kubo_$VERSION_windows-amd64.zip
# pacman -S kubo
```

[![kubo-git via AUR](https://img.shields.io/static/v1?label=kubo-git&message=latest%40master&color=1793d1&logo=arch-linux&style=flat-square&cacheSeconds=3600)](https://aur.archlinux.org/packages/kubo/)
[![kubo-git via AUR](https://img.shields.io/static/v1?label=kubo-git&message=latest%40master&color=1793d1&logo=arch-linux&style=flat-square&cacheSeconds=3600)](https://archlinux.org/packages/kubo/)

#### <a name="gentoo-linux">Gentoo Linux</a>

Expand All @@ -238,7 +238,7 @@ https://packages.gentoo.org/packages/net-p2p/kubo

#### <a name="nix-linux">Nix</a>

With the purely functional package manager [Nix](https://nixos.org/nix/) you can install kubo (go-ipfs) like this:
With the purely functional package manager [Nix](https://nixos.org/nix/) you can install kubo like this:

```
$ nix-env -i kubo
Expand All @@ -258,11 +258,11 @@ You can also install it through the Solus software center.

#### openSUSE

[Community Package for go-ipfs](https://software.opensuse.org/package/go-ipfs)
[Community Package for kubo](https://software.opensuse.org/package/kubo)

#### Guix

[Community Package for go-ipfs](https://packages.guix.gnu.org/packages/go-ipfs/0.11.0/) is now out-of-date.
[Community Package for kubo](https://packages.guix.gnu.org/search/?query=kubo) is available.

#### Snap

Expand Down Expand Up @@ -323,7 +323,7 @@ PS> scoop install kubo

#### MacPorts

The package [ipfs](https://ports.macports.org/port/ipfs) currently points to kubo (go-ipfs) and is being maintained.
The package [ipfs](https://ports.macports.org/port/ipfs) currently points to kubo and is being maintained.

```
$ sudo port install ipfs
Expand Down Expand Up @@ -383,7 +383,7 @@ $ cd kubo
$ make install
```

Alternatively, you can run `make build` to build the go-ipfs binary (storing it in `cmd/ipfs/ipfs`) without installing it.
Alternatively, you can run `make build` to build the kubo binary (storing it in `cmd/ipfs/ipfs`) without installing it.

**NOTE:** If you get an error along the lines of "fatal error: stdlib.h: No such file or directory", you're missing a C compiler. Either re-run `make` with `CGO_ENABLED=0` or install GCC.

Expand All @@ -400,7 +400,7 @@ make build GOOS=myTargetOS GOARCH=myTargetArchitecture
- Separate [instructions are available for building on Windows](docs/windows.md).
- `git` is required in order for `go get` to fetch all dependencies.
- Package managers often contain out-of-date `golang` packages.
Ensure that `go version` reports at least 1.10. See above for how to install go.
Ensure that `go version` reports the minimum version required (see go.mod). See above for how to install go.
- If you are interested in development, please install the development
dependencies as well.
- Shell command completions can be generated with one of the `ipfs commands completion` subcommands. Read [docs/command-completion.md](docs/command-completion.md) to learn more.
Expand All @@ -418,6 +418,8 @@ system, this is done with `ipfs init`. See `ipfs init --help` for information on
the optional arguments it takes. After initialization is complete, you can use
`ipfs mount`, `ipfs add` and any of the other commands to explore!

For detailed configuration options, see [docs/config.md](https://github.com/ipfs/kubo/blob/master/docs/config.md).

### Some things to try

Basic proof of 'ipfs working' locally:
Expand All @@ -436,6 +438,8 @@ For programmatic interaction with Kubo, see our [list of HTTP/RPC clients](docs/

If you have previously installed IPFS before and you are running into problems getting a newer version to work, try deleting (or backing up somewhere else) your IPFS config directory (~/.ipfs by default) and rerunning `ipfs init`. This will reinitialize the config file to its defaults and clear out the local datastore of any bad entries.

For more information about configuration options, see [docs/config.md](https://github.com/ipfs/kubo/blob/master/docs/config.md).

Please direct general questions and help requests to our [forums](https://discuss.ipfs.tech).

If you believe you've found a bug, check the [issues list](https://github.com/ipfs/kubo/issues) and, if you don't see your problem there, either come talk to us on [Matrix chat](https://docs.ipfs.tech/community/chat/), or file an issue of your own!
Expand Down
6 changes: 2 additions & 4 deletions cmd/ipfs/kubo/pinmfs.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,14 @@ import (
"os"
"time"

"github.com/libp2p/go-libp2p/core/host"
peer "github.com/libp2p/go-libp2p/core/peer"

pinclient "github.com/ipfs/boxo/pinning/remote/client"
cid "github.com/ipfs/go-cid"
ipld "github.com/ipfs/go-ipld-format"
logging "github.com/ipfs/go-log/v2"

config "github.com/ipfs/kubo/config"
"github.com/ipfs/kubo/core"
"github.com/libp2p/go-libp2p/core/host"
peer "github.com/libp2p/go-libp2p/core/peer"
)

// mfslog is the logger for remote mfs pinning.
Expand Down
16 changes: 2 additions & 14 deletions cmd/ipfs/kubo/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,11 @@ import (
"time"

"github.com/blang/semver/v4"
"github.com/google/uuid"
u "github.com/ipfs/boxo/util"
cmds "github.com/ipfs/go-ipfs-cmds"
"github.com/ipfs/go-ipfs-cmds/cli"
cmdhttp "github.com/ipfs/go-ipfs-cmds/http"
logging "github.com/ipfs/go-log"
logging "github.com/ipfs/go-log/v2"
ipfs "github.com/ipfs/kubo"
"github.com/ipfs/kubo/client/rpc/auth"
"github.com/ipfs/kubo/cmd/ipfs/util"
Expand Down Expand Up @@ -89,16 +88,6 @@ func printErr(err error) int {
return 1
}

func newUUID(key string) logging.Metadata {
ids := "#UUID-ERROR#"
if id, err := uuid.NewRandom(); err == nil {
ids = id.String()
}
return logging.Metadata{
key: ids,
}
}

func BuildDefaultEnv(ctx context.Context, req *cmds.Request) (cmds.Environment, error) {
return BuildEnv(nil)(ctx, req)
}
Expand Down Expand Up @@ -157,8 +146,7 @@ func BuildEnv(pl PluginPreloader) func(ctx context.Context, req *cmds.Request) (
// - output the response
// - if anything fails, print error, maybe with help.
func Start(buildEnv func(ctx context.Context, req *cmds.Request) (cmds.Environment, error)) (exitCode int) {
ctx := logging.ContextWithLoggable(context.Background(), newUUID("session"))

ctx := context.Background()
tp, err := tracing.NewTracerProvider(ctx)
if err != nil {
return printErr(err)
Expand Down
2 changes: 1 addition & 1 deletion cmd/ipfs/util/ulimit.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"strconv"
"syscall"

logging "github.com/ipfs/go-log"
logging "github.com/ipfs/go-log/v2"
)

var log = logging.Logger("ulimit")
Expand Down
2 changes: 1 addition & 1 deletion commands/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
loader "github.com/ipfs/kubo/plugin/loader"

cmds "github.com/ipfs/go-ipfs-cmds"
logging "github.com/ipfs/go-log"
logging "github.com/ipfs/go-log/v2"
config "github.com/ipfs/kubo/config"
coreiface "github.com/ipfs/kubo/core/coreiface"
options "github.com/ipfs/kubo/core/coreiface/options"
Expand Down
2 changes: 1 addition & 1 deletion config/http_retrieval.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type HTTPRetrieval struct {
}

const (
DefaultHTTPRetrievalEnabled = false // opt-in for now, until we figure out https://github.com/ipfs/specs/issues/496
DefaultHTTPRetrievalEnabled = true
DefaultHTTPRetrievalNumWorkers = 16
DefaultHTTPRetrievalTLSInsecureSkipVerify = false // only for testing with self-signed HTTPS certs
DefaultHTTPRetrievalMaxBlockSize = "2MiB" // matching bitswap: https://specs.ipfs.tech/bitswap-protocol/#block-sizes
Expand Down
3 changes: 3 additions & 0 deletions config/init.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,9 @@ const DefaultConnMgrLowWater = 32
// grace period.
const DefaultConnMgrGracePeriod = time.Second * 20

// DefaultConnMgrSilencePeriod controls how often the connection manager enforces the limits.
const DefaultConnMgrSilencePeriod = time.Second * 10

// DefaultConnMgrType is the default value for the connection managers
// type.
const DefaultConnMgrType = "basic"
Expand Down
47 changes: 47 additions & 0 deletions config/internal.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,51 @@ type InternalBitswap struct {
ProviderSearchDelay OptionalDuration
ProviderSearchMaxResults OptionalInteger
WantHaveReplaceSize OptionalInteger
BroadcastControl *BitswapBroadcastControl
}

type BitswapBroadcastControl struct {
// EnableEnables or disables broadcast control functionality. Setting this
// to false disables broadcast control functionality and restores the
// previous broadcast behavior of sending broadcasts to all peers. When
// disabled, all other BroadcastControl configuration items are ignored.
// Default is [DefaultBroadcastControlEnable].
Enable Flag `json:",omitempty"`
// MaxPeers sets a hard limit on the number of peers to send broadcasts to.
// A value of 0 means no broadcasts are sent. A value of -1 means there is
// no limit. Default is [DefaultBroadcastControlMaxPeers].
MaxPeers OptionalInteger `json:",omitempty"`
// LocalPeers enables or disables broadcast control for peers on the local
// network. If false, than always broadcast to peers on the local network.
// If true, apply broadcast control to local peers. Default is
// [DefaultBroadcastControlLocalPeers].
LocalPeers Flag `json:",omitempty"`
// PeeredPeers enables or disables broadcast reduction for peers configured
// for peering. If false, than always broadcast to peers configured for
// peering. If true, apply broadcast reduction to peered peers. Default is
// [DefaultBroadcastControlPeeredPeers].
PeeredPeers Flag `json:",omitempty"`
// MaxRandomPeers is the number of peers to broadcast to anyway, even
// though broadcast reduction logic has determined that they are not
// broadcast targets. Setting this to a non-zero value ensures at least
// this number of random peers receives a broadcast. This may be helpful in
// cases where peers that are not receiving broadcasts my have wanted
// blocks. Default is [DefaultBroadcastControlMaxRandomPeers].
MaxRandomPeers OptionalInteger `json:",omitempty"`
// SendToPendingPeers enables or disables sending broadcasts to any peers
// to which there is a pending message to send. When enabled, this sends
// broadcasts to many more peers, but does so in a way that does not
// increase the number of separate broadcast messages. There is still the
// increased cost of the recipients having to process and respond to the
// broadcasts. Default is [DefaultBroadcastControlSendToPendingPeers].
SendToPendingPeers Flag `json:",omitempty"`
}

const (
DefaultBroadcastControlEnable = true // Enabled
DefaultBroadcastControlMaxPeers = -1 // Unlimited
DefaultBroadcastControlLocalPeers = false // No control of local
DefaultBroadcastControlPeeredPeers = false // No control of peered
DefaultBroadcastControlMaxRandomPeers = 0 // No randoms
DefaultBroadcastControlSendToPendingPeers = false // Disabled
)
9 changes: 5 additions & 4 deletions config/swarm.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,10 +104,11 @@ type Transports struct {

// ConnMgr defines configuration options for the libp2p connection manager.
type ConnMgr struct {
Type *OptionalString `json:",omitempty"`
LowWater *OptionalInteger `json:",omitempty"`
HighWater *OptionalInteger `json:",omitempty"`
GracePeriod *OptionalDuration `json:",omitempty"`
Type *OptionalString `json:",omitempty"`
LowWater *OptionalInteger `json:",omitempty"`
HighWater *OptionalInteger `json:",omitempty"`
GracePeriod *OptionalDuration `json:",omitempty"`
SilencePeriod *OptionalDuration `json:",omitempty"`
}

// ResourceMgr defines configuration options for the libp2p Network Resource Manager
Expand Down
4 changes: 2 additions & 2 deletions core/commands/active.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ package commands
import (
"fmt"
"io"
"sort"
"slices"
"text/tabwriter"
"time"

Expand Down Expand Up @@ -60,7 +60,7 @@ Lists running and recently run commands.
for k := range req.Options {
keys = append(keys, k)
}
sort.Strings(keys)
slices.Sort(keys)

for _, k := range keys {
fmt.Fprintf(tw, "%s=%v,", k, req.Options[k])
Expand Down
Loading
Loading