diff --git a/.gitignore b/.gitignore
index d6a1d745420f368b6d1a8433ab2b6f1d00bc5650..49fe468ebf705bc86ebc336ae319c4a1d8339e26 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,6 +2,7 @@
 /.cozy
 /assets/locales/*.po
 !/assets/locales/en.po
+/bin
 /cozy-stack*
 /scripts/cozy-stack*
 /debian
diff --git a/.travis.yml b/.travis.yml
index 75b4525dd98bd4b4dcdfbfdf7e83264ab50eb96b..7f7cb4c8c21313cd73e1c5385ac6d4e756e09563 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -10,19 +10,18 @@ language: go
 matrix:
   include:
     - go: "1.12"
-      env: COMMAND=scripts/lint.sh
+      env: GO111MODULE=on COMMAND=scripts/lint.sh
     - go: "1.12"
-      env: COMMAND=scripts/unit-test.sh
-    - go: "1.11"
-      env: COMMAND=scripts/unit-test.sh
+      env: GO111MODULE=on COMMAND=scripts/unit-test.sh
     - go: "1.12"
-      env: COMMAND=scripts/sharing-test.sh
+      env: GO111MODULE=on COMMAND=scripts/sharing-test.sh
     - go: "1.12"
-      env: COMMAND=scripts/clone-test.sh
+      env: GO111MODULE=on COMMAND=scripts/clone-test.sh
 
-before_install:
+install:
   - docker run -d -p 5984:5984 --net=host --name couch apache/couchdb:2.3
   - nvm use 8.12.0
+  - go install
 
 before_script:
   - curl -X PUT http://127.0.0.1:5984/{_users,_replicator,_global_changes}
diff --git a/appveyor.yml b/appveyor.yml
index b59c48ee0cf4b8c78e0292dc3121d999e46e9d6b..dbab5363400ade2ac4e7ac1cc5864cb3e4007f24 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -7,6 +7,7 @@ clone_folder: c:\gopath\src\github.com\cozy\cozy-stack
 environment:
   GOPATH: c:\gopath
   GOVERSION: 1.12
+  GO111MODULE: "on"
 
 install:
   - rmdir c:\go /s /q
@@ -16,7 +17,6 @@ install:
   - echo %PATH%
   - go version
   - go env
-  - go get -d ./...
 
 build_script:
   - go install
diff --git a/cmd/cmd_test.go b/cmd/cmd_test.go
index 659909fffbcf9de5999673b9a68ea9446799ea24..fe69957e3c7dca2f3375d1398e918714517c234b 100644
--- a/cmd/cmd_test.go
+++ b/cmd/cmd_test.go
@@ -20,7 +20,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/web"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/cmd/swift.go b/cmd/swift.go
index 31197d66d144b4dc69be1a1242dc62858b41f45f..9f72b32a8d71d595b00dc96a9d5e954aa7bdc2d4 100644
--- a/cmd/swift.go
+++ b/cmd/swift.go
@@ -11,7 +11,7 @@ import (
 	"github.com/cozy/cozy-stack/model/instance"
 	"github.com/cozy/cozy-stack/model/instance/lifecycle"
 	"github.com/cozy/cozy-stack/pkg/config/config"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 	"github.com/spf13/cobra"
 )
 
diff --git a/docs/CONTRIBUTING.md b/docs/CONTRIBUTING.md
index 6b67b6592d8aa359610407a5c51ebefdcd5592b5..7ca40b19bfa19d2023a7fbdd6ecdf0f9ccc5c0a1 100644
--- a/docs/CONTRIBUTING.md
+++ b/docs/CONTRIBUTING.md
@@ -44,12 +44,11 @@ there.
 
 #### Step 1: Fork
 
-Fork the project on GitHub and
-[check out your copy locally](http://blog.campoy.cat/2014/03/github-and-go-forking-pull-requests-and.html).
+Fork the project on GitHub and check out your copy locally:
 
 ```
-$ go get -u github.com/cozy/cozy-stack
-$ cd $(go env GOPATH)/src/github.com/cozy/cozy-stack
+$ git clone https://github.com/cozy/cozy-stack.git
+$ cd cozy-stack
 $ git remote add fork git://github.com/username/cozy-stack.git
 ```
 
@@ -99,11 +98,11 @@ is important. A commit message should describe what changed and why.
 
 #### Step 6: Rebase
 
-Use `git rebase` (not `git merge`) to sync your work from time to time.
+Use `git pull --rebase`, or `git rebase` (but not `git merge`), to sync your
+work from time to time:
 
 ```
-$ git fetch origin
-$ git rebase origin/master
+$ git pull origin master --rebase
 ```
 
 #### Step 7: Push
@@ -117,8 +116,6 @@ Go to https://github.com/username/cozy-stack and select your branch. Click the
 
 Pull requests are usually reviewed within a few days. If there are comments to
 address, apply your changes in a separate commit and push that to your branch.
-Post a comment in the pull request afterwards; GitHub does not send out
-notifications when you add commits.
 
 ## Code organization
 
diff --git a/docs/INSTALL.md b/docs/INSTALL.md
index 8274a45b149eddda6bf85538de52c0b7fc93d1e8..bc5b33aa8a165f7f548726ed30bc2c42a025557c 100644
--- a/docs/INSTALL.md
+++ b/docs/INSTALL.md
@@ -37,7 +37,7 @@ executable bit (`chmod +x cozy-stack`) and put it in your `$PATH`.
 
 #### Using `go`
 
-[Install go](https://golang.org/doc/install), version >= 1.11. With `go`
+[Install go](https://golang.org/doc/install), version >= 1.12. With `go`
 installed and configured, you can run the following command:
 
 ```
diff --git a/go.mod b/go.mod
new file mode 100644
index 0000000000000000000000000000000000000000..a7161976c5c042b99329c4d5728fa2f2511f830e
--- /dev/null
+++ b/go.mod
@@ -0,0 +1,61 @@
+module github.com/cozy/cozy-stack
+
+go 1.12
+
+require (
+	github.com/Masterminds/semver v1.4.2
+	github.com/appleboy/go-fcm v0.1.4
+	github.com/cozy/goexif2 v0.0.0-20180125141006-830968571cff
+	github.com/cozy/gomail v0.0.0-20170313100128-1395d9a6a6c0
+	github.com/cozy/httpcache v0.0.0-20180914105234-d3dc4988de66
+	github.com/dhowden/tag v0.0.0-20190519100835-db0c67e351b1
+	github.com/dustin/go-humanize v1.0.0
+	github.com/emersion/go-vcard v0.0.0-20190105225839-8856043f13c5
+	github.com/go-redis/redis v6.15.2+incompatible
+	github.com/gofrs/uuid v3.2.0+incompatible
+	github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721
+	github.com/golang/protobuf v1.3.2 // indirect
+	github.com/google/go-querystring v1.0.0
+	github.com/google/gops v0.3.6
+	github.com/gorilla/websocket v1.4.0
+	github.com/h2non/filetype v1.0.8
+	github.com/hashicorp/go-multierror v1.0.0
+	github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c
+	github.com/justincampbell/bigduration v0.0.0-20160531141349-e45bf03c0666
+	github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
+	github.com/labstack/echo/v4 v4.1.6
+	github.com/leonelquinteros/gotext v1.4.0
+	github.com/magiconair/properties v1.8.1 // indirect
+	github.com/mitchellh/mapstructure v1.1.2
+	github.com/mssola/user_agent v0.5.0
+	github.com/ncw/swift v1.0.47
+	github.com/nightlyone/lockfile v0.0.0-20180618180623-0ad87eef1443
+	github.com/onsi/ginkgo v1.8.0 // indirect
+	github.com/onsi/gomega v1.5.0 // indirect
+	github.com/oschwald/maxminddb-golang v1.3.1
+	github.com/pelletier/go-toml v1.4.0 // indirect
+	github.com/pkg/errors v0.8.1
+	github.com/pquerna/otp v1.2.0
+	github.com/prometheus/client_golang v1.0.0
+	github.com/prometheus/common v0.6.0 // indirect
+	github.com/prometheus/procfs v0.0.3 // indirect
+	github.com/robfig/cron/v3 v3.0.0
+	github.com/sideshow/apns2 v0.16.0
+	github.com/sirupsen/logrus v1.4.2
+	github.com/spf13/afero v1.2.2
+	github.com/spf13/cobra v0.0.5
+	github.com/spf13/jwalterweatherman v1.1.0 // indirect
+	github.com/spf13/viper v1.4.0
+	github.com/stretchr/testify v1.3.0
+	golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4
+	golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9
+	golang.org/x/net v0.0.0-20190628185345-da137c7871d7 // indirect
+	golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
+	golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 // indirect
+	golang.org/x/tools v0.0.0-20190716221150-e98af2309876
+	google.golang.org/appengine v1.6.1 // indirect
+	gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
+	gopkg.in/dgrijalva/jwt-go.v3 v3.2.0
+)
+
+replace github.com/spf13/afero => github.com/cozy/afero v1.2.3
diff --git a/go.sum b/go.sum
new file mode 100644
index 0000000000000000000000000000000000000000..9f43d8839c9272d563020a75d88ca2869ec815c1
--- /dev/null
+++ b/go.sum
@@ -0,0 +1,312 @@
+cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
+github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
+github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
+github.com/Masterminds/semver v1.4.2 h1:WBLTQ37jOCzSLtXNdoo8bNM8876KhNqOKvrlGITgsTc=
+github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
+github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
+github.com/StackExchange/wmi v0.0.0-20170410192909-ea383cf3ba6e/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
+github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
+github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
+github.com/appleboy/go-fcm v0.1.4 h1:p7nwHI75akAi0Yahrkc7zfOgET4v6ylhqfPfGZliXjw=
+github.com/appleboy/go-fcm v0.1.4/go.mod h1:1XhaeJtn9X5nOVPTQkljQfG034bGhm5SUXluohDJ8OI=
+github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
+github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
+github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0=
+github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
+github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc h1:biVzkmvwrH8WK8raXaxBx6fRVTlJILwEwQGL1I/ByEI=
+github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8=
+github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
+github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
+github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
+github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
+github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
+github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
+github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
+github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
+github.com/cozy/afero v1.2.3 h1:o7VaYUHrGDr7AgoIUCxC0xLdRcyS2OK5/btm2GrgjGI=
+github.com/cozy/afero v1.2.3/go.mod h1:1et9YdBqQDeXGpaxOLtmXZoCUB6eaS2L+x7Irs3UktA=
+github.com/cozy/goexif2 v0.0.0-20180125141006-830968571cff h1:l8yiBqr1qT1zOB6LPPOcyvuBxuyo143vlcOU1AJHNcg=
+github.com/cozy/goexif2 v0.0.0-20180125141006-830968571cff/go.mod h1:PWaQhEQb7UWuVUvXxpFBscfsXmUASdlmMgq97QGcTwU=
+github.com/cozy/gomail v0.0.0-20170313100128-1395d9a6a6c0 h1:bQVNaGvnUI7m8J8k3hklFVXRT1F+WJcIV6hYHIgjKHE=
+github.com/cozy/gomail v0.0.0-20170313100128-1395d9a6a6c0/go.mod h1:DlX8Rq7OKA0F9I1e0tz6+PCOXkKZ/l6aD+bWxCC6Qfo=
+github.com/cozy/httpcache v0.0.0-20180914105234-d3dc4988de66 h1:b7VTmlsWlhYzJqGLjfhvIiVOpRpNCsOIoV4h0krSkyE=
+github.com/cozy/httpcache v0.0.0-20180914105234-d3dc4988de66/go.mod h1:rLnjIcybyvs+PoCzi4+GmpOVp0+q+qdcuZKnKUKJoF4=
+github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk=
+github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
+github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
+github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
+github.com/dhowden/tag v0.0.0-20190519100835-db0c67e351b1 h1:HR8W6GvuS20j4kNxa/XQeyVA0vHLKVMCAVJj0RGWauY=
+github.com/dhowden/tag v0.0.0-20190519100835-db0c67e351b1/go.mod h1:SniNVYuaD1jmdEEvi+7ywb1QFR7agjeTdGKyFb0p7Rw=
+github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
+github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
+github.com/emersion/go-vcard v0.0.0-20190105225839-8856043f13c5 h1:n9qx98xiS5V4x2WIpPC2rr9mUM5ri9r/YhCEKbhCHro=
+github.com/emersion/go-vcard v0.0.0-20190105225839-8856043f13c5/go.mod h1:WIi9g8OKJQHXtQbx7GExlo6UAFaui9WDMYabJ+Be4WI=
+github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
+github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
+github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
+github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
+github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
+github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8=
+github.com/go-redis/redis v6.15.2+incompatible h1:9SpNVG76gr6InJGxoZ6IuuxaCOQwDAhzyXg+Bs+0Sb4=
+github.com/go-redis/redis v6.15.2+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA=
+github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
+github.com/gofrs/uuid v3.2.0+incompatible h1:y12jRkkFxsd7GpqdSZ+/KCs/fJbqpEXSGd4+jfEaewE=
+github.com/gofrs/uuid v3.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
+github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
+github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
+github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721 h1:KRMr9A3qfbVM7iV/WcLY/rL5LICqwMHLhwRXKu99fXw=
+github.com/golang/gddo v0.0.0-20190419222130-af0f2af80721/go.mod h1:xEhNfoBDX1hzLm2Nf80qUvZ2sVwoMZ8d6IE2SrsQfh4=
+github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
+github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
+github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
+github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
+github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
+github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
+github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
+github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
+github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
+github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
+github.com/google/gops v0.3.6 h1:6akvbMlpZrEYOuoebn2kR+ZJekbZqJ28fJXTs84+8to=
+github.com/google/gops v0.3.6/go.mod h1:RZ1rH95wsAGX4vMWKmqBOIWynmWisBf4QFdgT/k/xOI=
+github.com/gorilla/websocket v1.4.0 h1:WDFjx/TMzVgy9VdMMQi2K2Emtwi2QcUQsztZ/zLaH/Q=
+github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
+github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
+github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
+github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
+github.com/h2non/filetype v1.0.8 h1:le8gpf+FQA0/DlDABbtisA1KiTS0Xi+YSC/E8yY3Y14=
+github.com/h2non/filetype v1.0.8/go.mod h1:isekKqOuhMj+s/7r3rIeTErIRy4Rub5uBWHfvMusLMU=
+github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
+github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
+github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
+github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
+github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
+github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
+github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c h1:kQWxfPIHVLbgLzphqk3QUflDy9QdksZR4ygR807bpy0=
+github.com/howeyc/gopass v0.0.0-20170109162249-bf9dde6d0d2c/go.mod h1:lADxMC39cJJqL93Duh1xhAs4I2Zs8mKS89XWXFGp9cs=
+github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
+github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
+github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
+github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
+github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
+github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
+github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
+github.com/justincampbell/bigduration v0.0.0-20160531141349-e45bf03c0666 h1:abLciEiilfMf19Q1TFWDrp9j5z5one60dnnpvc6eabg=
+github.com/justincampbell/bigduration v0.0.0-20160531141349-e45bf03c0666/go.mod h1:xqGOmDZzLOG7+q/CgsbXv10g4tgPsbjhmAxyaTJMvis=
+github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1 h1:PJPDf8OUfOK1bb/NeTKd4f1QXZItOX389VN3B6qC8ro=
+github.com/kardianos/osext v0.0.0-20170510131534-ae77be60afb1/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8=
+github.com/keybase/go-ps v0.0.0-20161005175911-668c8856d999/go.mod h1:hY+WOq6m2FpbvyrI93sMaypsttvaIL5nhVR92dTMUcQ=
+github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
+github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
+github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
+github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
+github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
+github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
+github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
+github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
+github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
+github.com/labstack/echo/v4 v4.1.6 h1:WOvLa4T1KzWCRpANwz0HGgWDelXSSGwIKtKBbFdHTv4=
+github.com/labstack/echo/v4 v4.1.6/go.mod h1:kU/7PwzgNxZH4das4XNsSpBSOD09XIF5YEPzjpkGnGE=
+github.com/labstack/gommon v0.2.9 h1:heVeuAYtevIQVYkGj6A41dtfT91LrvFG220lavpWhrU=
+github.com/labstack/gommon v0.2.9/go.mod h1:E8ZTmW9vw5az5/ZyHWCp0Lw4OH2ecsaBP1C/NKavGG4=
+github.com/leonelquinteros/gotext v1.4.0 h1:2NHPCto5IoMXbrT0bldPrxj0qM5asOCwtb1aUQZ1tys=
+github.com/leonelquinteros/gotext v1.4.0/go.mod h1:yZGXREmoGTtBvZHNcc+Yfug49G/2spuF/i/Qlsvz1Us=
+github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
+github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
+github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
+github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-isatty v0.0.8 h1:HLtExJ+uU2HOZ+wI0Tt5DtUDrx8yhUqDcp7fYERX4CE=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU=
+github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
+github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
+github.com/mssola/user_agent v0.5.0 h1:gRF7/x8cKt8qzAosYGsBNyirta+F8fvYDlJrgXws9AQ=
+github.com/mssola/user_agent v0.5.0/go.mod h1:UFiKPVaShrJGW93n4uo8dpPdg1BSVpw2P9bneo0Mtp8=
+github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
+github.com/ncw/swift v1.0.47 h1:4DQRPj35Y41WogBxyhOXlrI37nzGlyEcsforeudyYPQ=
+github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
+github.com/nightlyone/lockfile v0.0.0-20180618180623-0ad87eef1443 h1:+2OJrU8cmOstEoh0uQvYemRGVH1O6xtO2oANUWHFnP0=
+github.com/nightlyone/lockfile v0.0.0-20180618180623-0ad87eef1443/go.mod h1:JbxfV1Iifij2yhRjXai0oFrbpxszXHRx1E5RuM26o4Y=
+github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
+github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/ginkgo v1.8.0 h1:VkHVNpR4iVnU8XQR6DBm8BqYjN7CRzw+xKUbVVbbW9w=
+github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
+github.com/onsi/gomega v1.5.0 h1:izbySO9zDPmjJ8rDjLvkA2zJHIo+HkYXHnf7eN7SSyo=
+github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
+github.com/oschwald/maxminddb-golang v1.3.1 h1:kPc5+ieL5CC/Zn0IaXJPxDFlUxKTQEU8QBTtmfQDAIo=
+github.com/oschwald/maxminddb-golang v1.3.1/go.mod h1:3jhIUymTJ5VREKyIhWm66LJiQt04F0UCDdodShpjWsY=
+github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
+github.com/pelletier/go-toml v1.4.0 h1:u3Z1r+oOXJIkxqw34zVhyPgjBsm6X2wn21NWs/HfSeg=
+github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
+github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/pquerna/otp v1.2.0 h1:/A3+Jn+cagqayeR3iHs/L62m5ue7710D35zl1zJ1kok=
+github.com/pquerna/otp v1.2.0/go.mod h1:dkJfzwRKNiegxyNb54X/3fLwhCynbMspSyWKnvi1AEg=
+github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
+github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
+github.com/prometheus/client_golang v1.0.0 h1:vrDKnkGzuGvhNAL56c7DBz29ZL+KxnoR0x7enabFceM=
+github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
+github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90 h1:S/YWwWx/RA8rT8tKFRuGUZhuA90OyIBpPCXkcbwU8DE=
+github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
+github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
+github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
+github.com/prometheus/common v0.6.0 h1:kRhiuYSXR3+uv2IbVbZhUxK5zVD/2pp3Gd2PpvPkpEo=
+github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
+github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
+github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
+github.com/prometheus/procfs v0.0.3 h1:CTwfnzjQ+8dS6MhHHu4YswVAD99sL2wjPqP+VkURmKE=
+github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
+github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
+github.com/robfig/cron/v3 v3.0.0 h1:kQ6Cb7aHOHTSzNVNEhmp8EcWKLb4CbiMW9h9VyIhO4E=
+github.com/robfig/cron/v3 v3.0.0/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
+github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
+github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
+github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
+github.com/shirou/gopsutil v0.0.0-20180427012116-c95755e4bcd7/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
+github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
+github.com/sideshow/apns2 v0.16.0 h1:OLwkgkse4ZEak+kCIG+B+T4h1e7zLUFxuFFHtyCyTEM=
+github.com/sideshow/apns2 v0.16.0/go.mod h1:f7dArLPLbiZ3qPdzzrZXdCSlMp8FD0p6z7tHssDOLvk=
+github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
+github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
+github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
+github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
+github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
+github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
+github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
+github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s=
+github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
+github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
+github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
+github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
+github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
+github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
+github.com/spf13/viper v1.4.0 h1:yXHLWeravcrgGyFSyCgdYpXQ9dR9c/WED3pg1RhxqEU=
+github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
+github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
+github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
+github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
+github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
+github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
+github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw=
+github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc=
+github.com/valyala/fasttemplate v1.0.1 h1:tY9CJiPnMXf1ERmG2EyK7gNUd+c6RKGD0IfU8WdUSz8=
+github.com/valyala/fasttemplate v1.0.1/go.mod h1:UQGH1tvbgY+Nz5t2n7tXsz52dQxojPUpymEIMZ47gx8=
+github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
+github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
+github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
+go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
+go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
+go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
+go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
+golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4 h1:HuIa8hRrWRSrqYzx1qI49NNxhdi2PrY7gxVSq1JjLDc=
+golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
+golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9 h1:uc17S921SPw5F2gJo7slQ3aqvr2RwpL7eb3+DZncu3s=
+golang.org/x/image v0.0.0-20190703141733-d6a02ce849c9/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
+golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
+golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
+golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
+golang.org/x/net v0.0.0-20190607181551-461777fb6f67/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7 h1:rTIdg5QFRR7XCaK4LCjBiPbx8j4DQRpdYMnGn/bJUEU=
+golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
+golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
+golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20171017063910-8dbc5d05d6ed/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190609082536-301114b31cce/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7 h1:LepdCS8Gf/MVejFIt8lsiexZATdoGVyp5bcyS+rYoUI=
+golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
+golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
+golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
+golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190608022120-eacb66d2a7c3/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
+golang.org/x/tools v0.0.0-20190716221150-e98af2309876 h1:XskQVJACjxHVCFlm4GsSEh6ZLclQPLobzuvB4DQYHtw=
+golang.org/x/tools v0.0.0-20190716221150-e98af2309876/go.mod h1:jcCCGcm9btYwXyDqrUWc6MKQKKGJCWEQ3AfLSRIbEuI=
+google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
+google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
+google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I=
+google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
+google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
+google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
+google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
+gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
+gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc h1:2gGKlE2+asNV9m7xrywl36YYNnBG5ZQ0r/BOOxqPpmk=
+gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc/go.mod h1:m7x9LTH6d71AHyAX77c9yqWCCa3UKHcVEj9y7hAtKDk=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
+gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/dgrijalva/jwt-go.v3 v3.2.0 h1:N46iQqOtHry7Hxzb9PGrP68oovQmj7EhudNoKHvbOvI=
+gopkg.in/dgrijalva/jwt-go.v3 v3.2.0/go.mod h1:hdNXC2Z9yC029rvsQ/on2ZNQ44Z2XToVhpXXbR+J05A=
+gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4=
+gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
+gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
+gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
+gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
+gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
+rsc.io/goversion v1.0.0/go.mod h1:Eih9y/uIBS3ulggl7KNJ09xGSLcuNaLgmvvqa07sgfo=
diff --git a/model/app/fetcher_git.go b/model/app/fetcher_git.go
index db20a155ffc40e729075650e7b1fdc31da8b374b..e68030604ffec22f3ab6b4472ae4e45c358e9f05 100644
--- a/model/app/fetcher_git.go
+++ b/model/app/fetcher_git.go
@@ -17,9 +17,9 @@ import (
 	"strings"
 	"time"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/pkg/appfs"
 	"github.com/sirupsen/logrus"
+	"github.com/spf13/afero"
 )
 
 var cloneTimeout = 30 * time.Second
diff --git a/model/app/installer_konnector_test.go b/model/app/installer_konnector_test.go
index b150bff941186e2fa6a4df874d3c77a7562e13ab..906880bb9ecc99e78e663950ca6b618f29253aef 100644
--- a/model/app/installer_konnector_test.go
+++ b/model/app/installer_konnector_test.go
@@ -7,11 +7,11 @@ import (
 	"path"
 	"testing"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/app"
 	"github.com/cozy/cozy-stack/model/instance/lifecycle"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/consts"
+	"github.com/spf13/afero"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/app/installer_test.go b/model/app/installer_test.go
index 607619121f135b7ec505fb52ecd10f3530dd8836..6ba9963f025d93e9912750e5b4f66c7bab91e3fe 100644
--- a/model/app/installer_test.go
+++ b/model/app/installer_test.go
@@ -12,7 +12,6 @@ import (
 	"testing"
 	"time"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/app"
 	"github.com/cozy/cozy-stack/model/stack"
 	"github.com/cozy/cozy-stack/pkg/appfs"
@@ -20,6 +19,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
+	"github.com/spf13/afero"
 )
 
 var localGitCmd *exec.Cmd
diff --git a/model/app/installer_webapp_test.go b/model/app/installer_webapp_test.go
index aa7e3418c2357ebf2fbdf29cd1e5114432889fdb..6826b7356109528b8aba03bca4bfec97fe299c88 100644
--- a/model/app/installer_webapp_test.go
+++ b/model/app/installer_webapp_test.go
@@ -5,13 +5,13 @@ import (
 	"path"
 	"testing"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/app"
 	"github.com/cozy/cozy-stack/model/instance/lifecycle"
 	"github.com/cozy/cozy-stack/model/permission"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
+	"github.com/spf13/afero"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/app/webapp.go b/model/app/webapp.go
index 1e99dc9b02d4bc92aae63b8fec158ccea8fd62da..ceba9c3af2f20979170a8cf27e96f856067f5680 100644
--- a/model/app/webapp.go
+++ b/model/app/webapp.go
@@ -10,7 +10,6 @@ import (
 	"strings"
 	"time"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/job"
 	"github.com/cozy/cozy-stack/model/notification"
 	"github.com/cozy/cozy-stack/model/permission"
@@ -19,6 +18,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/metadata"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
+	"github.com/spf13/afero"
 )
 
 // Route is a struct to serve a folder inside an app
diff --git a/model/instance/instance.go b/model/instance/instance.go
index 964c06fa7c380ab55f736b630ca979c9edba9010..36dad59edac7675863a20277566a02b474d7a244 100644
--- a/model/instance/instance.go
+++ b/model/instance/instance.go
@@ -22,8 +22,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/lock"
 	"github.com/cozy/cozy-stack/pkg/logger"
 
-	"github.com/cozy/afero"
 	"github.com/sirupsen/logrus"
+	"github.com/spf13/afero"
 	jwt "gopkg.in/dgrijalva/jwt-go.v3"
 )
 
diff --git a/model/job/errors.go b/model/job/errors.go
index 9a1b1d3b9d783314186378a5c3a9b9f95d9dae01..67817da96fcd16238403c12fb97c888f9fb2352b 100644
--- a/model/job/errors.go
+++ b/model/job/errors.go
@@ -4,7 +4,7 @@ import (
 	"errors"
 	"net/http"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 var (
diff --git a/model/job/redis_broker.go b/model/job/redis_broker.go
index c84242be36ccf26bcb10538f5878b0a8dafe2e1d..dfd4adb18e9c15341380ed039d6b30543eba0ad9 100644
--- a/model/job/redis_broker.go
+++ b/model/job/redis_broker.go
@@ -11,7 +11,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/limits"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	multierror "github.com/hashicorp/go-multierror"
 	"github.com/sirupsen/logrus"
 )
diff --git a/model/job/redis_broker_test.go b/model/job/redis_broker_test.go
index 7d89171e7b70569950d0e1b7ba299da770431764..c9aa59f6648d4be10c56ec73653c8af0bc252ff7 100644
--- a/model/job/redis_broker_test.go
+++ b/model/job/redis_broker_test.go
@@ -11,7 +11,7 @@ import (
 
 	jobs "github.com/cozy/cozy-stack/model/job"
 	"github.com/cozy/cozy-stack/pkg/limits"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/job/redis_scheduler.go b/model/job/redis_scheduler.go
index 09172ac33afbe7245a9e90830f6dc1015fa6fda1..00b0d51da96a6426b54b2c587fc36cf22f3962c5 100644
--- a/model/job/redis_scheduler.go
+++ b/model/job/redis_scheduler.go
@@ -15,7 +15,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 	"github.com/cozy/cozy-stack/pkg/realtime"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/sirupsen/logrus"
 )
 
@@ -165,7 +165,7 @@ func (s *redisScheduler) eventLoop(eventsCh <-chan *realtime.Event) {
 				var d time.Duration
 				if d, err = time.ParseDuration(et.Infos().Debounce); err == nil {
 					timestamp := time.Now().Add(d)
-					s.client.ZAddNX(TriggersKey, &redis.Z{
+					s.client.ZAddNX(TriggersKey, redis.Z{
 						Score:  float64(timestamp.UTC().Unix()),
 						Member: redisKey(t),
 					})
@@ -311,7 +311,7 @@ func (s *redisScheduler) addToRedis(t Trigger, prev time.Time) error {
 		return errors.New("Not implemented yet")
 	}
 	pipe := s.client.Pipeline()
-	err := pipe.ZAdd(TriggersKey, &redis.Z{
+	err := pipe.ZAdd(TriggersKey, redis.Z{
 		Score:  float64(timestamp.UTC().Unix()),
 		Member: redisKey(t),
 	}).Err()
diff --git a/model/job/redis_scheduler_test.go b/model/job/redis_scheduler_test.go
index f9b5533a78e9e858dd6c9ad24f74c5d38b0b7aea..be2ac29e9b9abcb560f66154dc5f307447ebd4fd 100644
--- a/model/job/redis_scheduler_test.go
+++ b/model/job/redis_scheduler_test.go
@@ -17,7 +17,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/realtime"
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/tests/testutils"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/stretchr/testify/assert"
 )
 
@@ -257,7 +257,7 @@ func TestRedisPollFromSchedKey(t *testing.T) {
 
 	ts := now.UTC().Unix()
 	key := testInstance.DBPrefix() + "/" + tat.ID()
-	err = client.ZAdd(jobs.SchedKey, &redis.Z{
+	err = client.ZAdd(jobs.SchedKey, redis.Z{
 		Score:  float64(ts + 1),
 		Member: key,
 	}).Err()
diff --git a/model/job/trigger_cron.go b/model/job/trigger_cron.go
index ab281b81865821fbf0602a6bb6c9ea3b28d77699..2c26ad22aa96f6354d7b54cd0aae4ba89e524de4 100644
--- a/model/job/trigger_cron.go
+++ b/model/job/trigger_cron.go
@@ -4,7 +4,7 @@ import (
 	"time"
 
 	"github.com/cozy/cozy-stack/pkg/consts"
-	"github.com/cozy/cron"
+	"github.com/robfig/cron/v3"
 )
 
 // CronTrigger implements the @cron trigger type. It schedules recurring jobs with
diff --git a/model/permission/blacklist.go b/model/permission/blacklist.go
index e68c0724ad061b85050a07186a98040e4185135b..651a854c6b6ac49ecb4f66c315ccbb29addfa3ef 100644
--- a/model/permission/blacklist.go
+++ b/model/permission/blacklist.go
@@ -5,7 +5,7 @@ import (
 	"net/http"
 
 	"github.com/cozy/cozy-stack/pkg/consts"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 var readable = true
diff --git a/model/permission/errors.go b/model/permission/errors.go
index d2c2c3d8b486b1a64d583fb9fdeda10181e49c2c..146f2545465e6bc52618ff710b616dd48dadcd82 100644
--- a/model/permission/errors.go
+++ b/model/permission/errors.go
@@ -3,7 +3,7 @@ package permission
 import (
 	"net/http"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 var (
diff --git a/model/permission/permissions_test.go b/model/permission/permissions_test.go
index e96ca17408bfd0a9db53da1d807de34fe34ef370..ba021a7ebc57223af8ca1fa0b60fdaa2d65756fe 100644
--- a/model/permission/permissions_test.go
+++ b/model/permission/permissions_test.go
@@ -6,7 +6,7 @@ import (
 	"strings"
 	"testing"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/remote/remote.go b/model/remote/remote.go
index 8e7065034318433ea9ef4dfcfff2b836d3b86dc6..e86bb8b4a5ecb36e016de7bed6e5c686289deae5 100644
--- a/model/remote/remote.go
+++ b/model/remote/remote.go
@@ -22,8 +22,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/echo"
 	"github.com/cozy/httpcache"
+	"github.com/labstack/echo/v4"
 )
 
 var (
diff --git a/model/session/code_storage.go b/model/session/code_storage.go
index 6cc3e03150be52ac237368d978350a9a11ff301a..66b43d15509d04571df39e6ae7f82acbf2dc1303 100644
--- a/model/session/code_storage.go
+++ b/model/session/code_storage.go
@@ -6,7 +6,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 type codeStorage interface {
diff --git a/model/session/session.go b/model/session/session.go
index 79436ac8c5c49db361a415ca8b62132adb6755f7..a2557f8a57e5a1bcafe222289579deea5a1d2815 100644
--- a/model/session/session.go
+++ b/model/session/session.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // SessionCookieName is name of the cookie created by cozy
diff --git a/model/sharing/api_sharing.go b/model/sharing/api_sharing.go
index 088186300b3ebf62a03ceb2a3b1460ce5ab3478b..321506ab296c3b96b122fb1d573141cd7f923585 100644
--- a/model/sharing/api_sharing.go
+++ b/model/sharing/api_sharing.go
@@ -6,7 +6,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // InfoByDocTypeData returns the sharings info as data array in the JSON-API format
diff --git a/model/sharing/replicator_test.go b/model/sharing/replicator_test.go
index 7c673141fce17021108dc33972a2849ae072b2d9..bbf884c4c9c82e9832ca1dec302aee58705669fa 100644
--- a/model/sharing/replicator_test.go
+++ b/model/sharing/replicator_test.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/tests/testutils"
-	uuid "github.com/satori/go.uuid"
+	"github.com/gofrs/uuid"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/sharing/upload_store.go b/model/sharing/upload_store.go
index e37e0759d70279eef9fad7b8c1abd37326c09d29..68f14c858272b0a2cb6be2f630922405aaffb65d 100644
--- a/model/sharing/upload_store.go
+++ b/model/sharing/upload_store.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 // A UploadStore is essentially an object to store files metadata by key
diff --git a/model/vfs/store.go b/model/vfs/store.go
index 00c582fc948b8de735cd872e7c89d2cdd3981988..597a380569c45d545f3676bb4bb8c933e9457808 100644
--- a/model/vfs/store.go
+++ b/model/vfs/store.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 // Store is essentially a place to store transient objects between two HTTP
diff --git a/model/vfs/store_test.go b/model/vfs/store_test.go
index c06b0282dce6bcf8dbf158bb9d419fa06bd39b55..6b3a2e1a0769c8fd64f15fd8e71078813bb0cda3 100644
--- a/model/vfs/store_test.go
+++ b/model/vfs/store_test.go
@@ -5,7 +5,7 @@ import (
 	"time"
 
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/vfs/version_test.go b/model/vfs/version_test.go
index 24998da37726adb8cd15fddb800514d2651f49fe..65e7763020566e0369b05a449aca126cc03ece56 100644
--- a/model/vfs/version_test.go
+++ b/model/vfs/version_test.go
@@ -5,7 +5,7 @@ import (
 	"time"
 
 	"github.com/cozy/cozy-stack/pkg/utils"
-	uuid "github.com/satori/go.uuid"
+	"github.com/gofrs/uuid"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/model/vfs/vfsafero/fsck.go b/model/vfs/vfsafero/fsck.go
index 7be411241f87c61b8cc558de3986bfa8b32fd803..1ca632115232f73282ec41cbbf242810c5089769 100644
--- a/model/vfs/vfsafero/fsck.go
+++ b/model/vfs/vfsafero/fsck.go
@@ -9,10 +9,10 @@ import (
 	"path/filepath"
 	"strings"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/vfs"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
+	"github.com/spf13/afero"
 )
 
 func (afs *aferoVFS) Fsck(accumulate func(log *vfs.FsckLog)) error {
diff --git a/model/vfs/vfsafero/impl.go b/model/vfs/vfsafero/impl.go
index 2a96e123f6aa3e2b47e0444f16321d9726dbb341..a89d13d4039502eeb41529eb06ed7288f3f62d1a 100644
--- a/model/vfs/vfsafero/impl.go
+++ b/model/vfs/vfsafero/impl.go
@@ -19,7 +19,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/lock"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 
-	"github.com/cozy/afero"
+	"github.com/spf13/afero"
 )
 
 var memfsMap sync.Map
diff --git a/model/vfs/vfsafero/thumbs.go b/model/vfs/vfsafero/thumbs.go
index ec55c8158d6390a26980b03cc9ec0e05b55b06e0..484841d133d086d6371fc88724f13989e1974b71 100644
--- a/model/vfs/vfsafero/thumbs.go
+++ b/model/vfs/vfsafero/thumbs.go
@@ -6,9 +6,9 @@ import (
 	"os"
 	"path"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/vfs"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/spf13/afero"
 )
 
 // NewThumbsFs creates a new thumb filesystem base on a afero.Fs.
diff --git a/model/vfs/vfsswift/fsck_v1.go b/model/vfs/vfsswift/fsck_v1.go
index d1f355045007257cbc1eb1514f192487c5102f6a..8500f95a71921172f28cb0c55ea086b74c08e7d1 100644
--- a/model/vfs/vfsswift/fsck_v1.go
+++ b/model/vfs/vfsswift/fsck_v1.go
@@ -8,7 +8,7 @@ import (
 
 	"github.com/cozy/cozy-stack/model/vfs"
 	"github.com/cozy/cozy-stack/pkg/consts"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 )
 
 func (sfs *swiftVFS) Fsck(accumulate func(log *vfs.FsckLog)) error {
diff --git a/model/vfs/vfsswift/fsck_v2.go b/model/vfs/vfsswift/fsck_v2.go
index 9f8b4f99fe17876d67601a1a1a1d57829d59c053..c576b5a07d7d5115ca075446a4eff9e50f2ebe97 100644
--- a/model/vfs/vfsswift/fsck_v2.go
+++ b/model/vfs/vfsswift/fsck_v2.go
@@ -7,7 +7,7 @@ import (
 
 	"github.com/cozy/cozy-stack/model/vfs"
 	"github.com/cozy/cozy-stack/pkg/consts"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 )
 
 func (sfs *swiftVFSV2) Fsck(accumulate func(log *vfs.FsckLog)) error {
diff --git a/model/vfs/vfsswift/fsck_v3.go b/model/vfs/vfsswift/fsck_v3.go
index 6f11154b74373fbef89166668ec399b9c50720b3..25cc214041643c5a7f0f71e8db4e8e2b90ffef4e 100644
--- a/model/vfs/vfsswift/fsck_v3.go
+++ b/model/vfs/vfsswift/fsck_v3.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/model/vfs"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 )
 
 func (sfs *swiftVFSV3) Fsck(accumulate func(log *vfs.FsckLog)) error {
diff --git a/model/vfs/vfsswift/impl_v1.go b/model/vfs/vfsswift/impl_v1.go
index b3baffacaea59982656610d1be686b0385e53f38..19f6bf7ac0b10603b99559de4b553dd5f291945a 100644
--- a/model/vfs/vfsswift/impl_v1.go
+++ b/model/vfs/vfsswift/impl_v1.go
@@ -14,8 +14,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/lock"
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/swift"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/ncw/swift"
 	"github.com/sirupsen/logrus"
 )
 
diff --git a/model/vfs/vfsswift/impl_v2.go b/model/vfs/vfsswift/impl_v2.go
index 49c424099d2e8f652a9c96183adec8cfddc8bc8b..fa239b95a29870ccff7b25b96181d0c5a632aeeb 100644
--- a/model/vfs/vfsswift/impl_v2.go
+++ b/model/vfs/vfsswift/impl_v2.go
@@ -16,8 +16,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/lock"
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/swift"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/ncw/swift"
 	"github.com/sirupsen/logrus"
 )
 
diff --git a/model/vfs/vfsswift/impl_v3.go b/model/vfs/vfsswift/impl_v3.go
index 737e1510602c038c4a94d7fea8277220a87cf6af..d7b8821e76241f4c6c92d58e56e17976140119f8 100644
--- a/model/vfs/vfsswift/impl_v3.go
+++ b/model/vfs/vfsswift/impl_v3.go
@@ -17,7 +17,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 	"github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 	"github.com/sirupsen/logrus"
 )
 
diff --git a/model/vfs/vfsswift/swift.go b/model/vfs/vfsswift/swift.go
index 1f29a7611e9d3a59e7cfa8f80ec5647af5ac5614..bf7a772b14a64c9bb4b57475bff3d79f64ed0aed 100644
--- a/model/vfs/vfsswift/swift.go
+++ b/model/vfs/vfsswift/swift.go
@@ -1,8 +1,8 @@
 package vfsswift
 
 import (
-	"github.com/cozy/swift"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/ncw/swift"
 )
 
 // maxNbFilesToDelete is the maximal number of files that we will try to delete
diff --git a/model/vfs/vfsswift/thumbs_v1.go b/model/vfs/vfsswift/thumbs_v1.go
index 677203816dd6de8250925f4c86d4022bb36ed6e0..e4c6d2a1be9a917a772d83b298087f8e31feb783 100644
--- a/model/vfs/vfsswift/thumbs_v1.go
+++ b/model/vfs/vfsswift/thumbs_v1.go
@@ -7,7 +7,7 @@ import (
 	"time"
 
 	"github.com/cozy/cozy-stack/model/vfs"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 )
 
 // NewThumbsFs creates a new thumb filesystem base on swift.
diff --git a/model/vfs/vfsswift/thumbs_v2_v3.go b/model/vfs/vfsswift/thumbs_v2_v3.go
index 98f98edbb395a0e02ec7dcd5ad989423e1b49fc6..bbce14480507b05a43279e14e340ced304c5653b 100644
--- a/model/vfs/vfsswift/thumbs_v2_v3.go
+++ b/model/vfs/vfsswift/thumbs_v2_v3.go
@@ -10,7 +10,7 @@ import (
 
 	"github.com/cozy/cozy-stack/model/vfs"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 )
 
 var unixEpochZero = time.Time{}
diff --git a/pkg/appfs/copier.go b/pkg/appfs/copier.go
index b68105f1b4b853b4fd53e29798b82c055b24996e..87c0f07e424955902de65669e632b648490344bb 100644
--- a/pkg/appfs/copier.go
+++ b/pkg/appfs/copier.go
@@ -9,12 +9,12 @@ import (
 	"strings"
 	"time"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/filetype"
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
+	"github.com/spf13/afero"
 )
 
 // Copier is an interface defining a common set of functions for the installer
diff --git a/pkg/appfs/server.go b/pkg/appfs/server.go
index d63a3d5a5caa4508adf42a1c330e5f34ecc76347..ea26aa4d2259586fbc7ed4cbf2ea50c4d12d72cc 100644
--- a/pkg/appfs/server.go
+++ b/pkg/appfs/server.go
@@ -15,10 +15,10 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	web_utils "github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
+	"github.com/spf13/afero"
 )
 
 // FileServer interface defines a way to access and serve the application's
diff --git a/pkg/assets/dynamic/dynamic.go b/pkg/assets/dynamic/dynamic.go
index 376ed94c41cefaee5f4acfb80fdc8e26f5665ced..9ff420c757a5201e4171ab7336e6fbda7734ff85 100644
--- a/pkg/assets/dynamic/dynamic.go
+++ b/pkg/assets/dynamic/dynamic.go
@@ -16,8 +16,8 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/assets/model"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/swift"
 	"github.com/hashicorp/go-multierror"
+	"github.com/ncw/swift"
 )
 
 var ErrDynAssetNotFound = errors.New("Dynamic asset was not found")
diff --git a/pkg/assets/dynamic/dynamic_test.go b/pkg/assets/dynamic/dynamic_test.go
index 5e6ecca3a4438b0c24f5efbb8c78c71827d60ab6..3fe3e83048b141e1007ec90725e6c5d13f3fb0e8 100644
--- a/pkg/assets/dynamic/dynamic_test.go
+++ b/pkg/assets/dynamic/dynamic_test.go
@@ -13,7 +13,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/assets/model"
 	"github.com/cozy/cozy-stack/pkg/config/config"
-	"github.com/cozy/swift/swifttest"
+	"github.com/ncw/swift/swifttest"
 
 	"github.com/spf13/viper"
 	"github.com/stretchr/testify/assert"
diff --git a/pkg/assets/dynamic/fs.go b/pkg/assets/dynamic/fs.go
index 5c65221ba11f90638ce52e08bf751e4a81c06bb6..7ad57c793fd6a8810d0a3577f8815e0784d80797 100644
--- a/pkg/assets/dynamic/fs.go
+++ b/pkg/assets/dynamic/fs.go
@@ -10,10 +10,10 @@ import (
 	"path/filepath"
 	"strings"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/pkg/assets/model"
 	"github.com/cozy/cozy-stack/pkg/config/config"
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
+	"github.com/spf13/afero"
 )
 
 var assetFS AssetFS
diff --git a/pkg/cache/cache.go b/pkg/cache/cache.go
index a75b49aa72f2a51edb941f5a8e5cf3a99452456b..9f90773d494f9d28412b35e0186626213653e8b4 100644
--- a/pkg/cache/cache.go
+++ b/pkg/cache/cache.go
@@ -7,7 +7,7 @@ import (
 	"sync"
 	"time"
 
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 type cacheEntry struct {
diff --git a/pkg/config/config/config.go b/pkg/config/config/config.go
index 05c2168e10262faf1a952085d94f94dac8d18713..a42c2654812d4ca09ce9088812c96e2ca27af4e7 100644
--- a/pkg/config/config/config.go
+++ b/pkg/config/config/config.go
@@ -24,7 +24,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/tlsclient"
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/gomail"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/spf13/viper"
 )
 
diff --git a/pkg/config/config/swift.go b/pkg/config/config/swift.go
index e235d56772409875e05e7e01ba317837717e8fa3..ba2297f35e5f8f9821d708e10952c8ca860de1cc 100644
--- a/pkg/config/config/swift.go
+++ b/pkg/config/config/swift.go
@@ -5,7 +5,7 @@ import (
 	"net/url"
 	"time"
 
-	"github.com/cozy/swift"
+	"github.com/ncw/swift"
 )
 
 var swiftConn *swift.Connection
diff --git a/pkg/couchdb/proxy.go b/pkg/couchdb/proxy.go
index e55d89755fc140b01563089b5a2feee1acfd15f0..8d5164a67d7f26c6182f55be5844c2de9edf76de 100644
--- a/pkg/couchdb/proxy.go
+++ b/pkg/couchdb/proxy.go
@@ -11,7 +11,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/realtime"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Proxy generate a httputil.ReverseProxy which forwards the request to the
diff --git a/pkg/i18n/i18n.go b/pkg/i18n/i18n.go
index 715f2486f7cb2e489d8aa791b01acd27e967b98b..4e6bf32cbe52bee741c30e3a2056bad57cc8c898 100644
--- a/pkg/i18n/i18n.go
+++ b/pkg/i18n/i18n.go
@@ -6,7 +6,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	gotext "gopkg.in/leonelquinteros/gotext.v1"
+	"github.com/leonelquinteros/gotext"
 )
 
 var translations = make(map[string]*gotext.Po)
diff --git a/pkg/jsonapi/jsonapi.go b/pkg/jsonapi/jsonapi.go
index bf2e1b617e868e63dceddf7c590ec21fb6dc3c80..9f73e96ebc0e24c8f9bb50990a5f5cf5611a2bd3 100644
--- a/pkg/jsonapi/jsonapi.go
+++ b/pkg/jsonapi/jsonapi.go
@@ -10,7 +10,7 @@ import (
 	"strconv"
 
 	"github.com/cozy/cozy-stack/pkg/couchdb"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // ContentType is the official mime-type for JSON-API
diff --git a/pkg/jsonapi/jsonapi_test.go b/pkg/jsonapi/jsonapi_test.go
index 9fd50498c219b6f2d1769b8448b2639d4f9f42fe..d41d1023147d9577486be7ec4a14b0b86b052b25 100644
--- a/pkg/jsonapi/jsonapi_test.go
+++ b/pkg/jsonapi/jsonapi_test.go
@@ -10,7 +10,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/pkg/limits/rate_limiting.go b/pkg/limits/rate_limiting.go
index 1205de6dabae6de2c1e48d1185564ca2e3b6df3b..1d3d6327f4a3232049b0aa687cce925361f4ab95 100644
--- a/pkg/limits/rate_limiting.go
+++ b/pkg/limits/rate_limiting.go
@@ -7,7 +7,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 // CounterType os an enum for the type of counters used by rate-limiting.
diff --git a/pkg/limits/rate_limiting_test.go b/pkg/limits/rate_limiting_test.go
index d817fbd70cb1591c2f64ad5e096e7fd91c4c1a04..c678868115fc14ae325fbd7b4df7058e07932aac 100644
--- a/pkg/limits/rate_limiting_test.go
+++ b/pkg/limits/rate_limiting_test.go
@@ -4,7 +4,7 @@ import (
 	"testing"
 
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/pkg/lock/simple_redis.go b/pkg/lock/simple_redis.go
index 35dd179a04853b8e2174e2cd34854b4cc518d175..bb039c07b9d13438f2c075008b8b0c3fbe11d488 100644
--- a/pkg/lock/simple_redis.go
+++ b/pkg/lock/simple_redis.go
@@ -9,7 +9,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/sirupsen/logrus"
 )
 
diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go
index cc92a7000e5d4fd7b2fdeaec4d55cbbc0296de95..99430eaefc54e24dc734b3c029b9876763d7b51a 100644
--- a/pkg/logger/logger.go
+++ b/pkg/logger/logger.go
@@ -4,7 +4,7 @@ import (
 	"io/ioutil"
 	"sync"
 
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/sirupsen/logrus"
 )
 
diff --git a/pkg/logger/logger_test.go b/pkg/logger/logger_test.go
index be98e99dab68da4577e24d4b61b2f0a33bdad4d8..b7b6b2822be71f3e0dee54d5e0e544ed9353d447 100644
--- a/pkg/logger/logger_test.go
+++ b/pkg/logger/logger_test.go
@@ -4,7 +4,7 @@ import (
 	"testing"
 	"time"
 
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/sirupsen/logrus"
 	"github.com/stretchr/testify/assert"
 )
diff --git a/pkg/metrics/metrics.go b/pkg/metrics/metrics.go
index 19e096efd24487ff2812ee5f9a5a4edf66b5fbe8..db51f6bcbac8fb151cbbb0d074feb293c2e19eff 100644
--- a/pkg/metrics/metrics.go
+++ b/pkg/metrics/metrics.go
@@ -1,7 +1,7 @@
 package metrics
 
 import (
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 
 	"github.com/prometheus/client_golang/prometheus/promhttp"
 )
diff --git a/pkg/realtime/realtime_test.go b/pkg/realtime/realtime_test.go
index 5cac539796c18a9e07dab167d843191e5d84af26..7697f180e4084a18bf85e461de61048b0ed0c246 100644
--- a/pkg/realtime/realtime_test.go
+++ b/pkg/realtime/realtime_test.go
@@ -6,7 +6,7 @@ import (
 	"time"
 
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/pkg/realtime/redis_hub.go b/pkg/realtime/redis_hub.go
index 8ff9f7a4130b67a12549a9af26ae0458c1af1bff..f41d449152b23d31e0d92ce160e706b76f660e77 100644
--- a/pkg/realtime/redis_hub.go
+++ b/pkg/realtime/redis_hub.go
@@ -6,7 +6,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
-	redis "github.com/cozy/redis"
+	redis "github.com/go-redis/redis"
 )
 
 const eventsRedisKey = "realtime:events"
diff --git a/pkg/registry/registry.go b/pkg/registry/registry.go
index 1692eaf83ae38d10d6430735c1245f48234dd0a9..1adf6593ebd99a6d9efb40e257003231e8267181 100644
--- a/pkg/registry/registry.go
+++ b/pkg/registry/registry.go
@@ -13,8 +13,8 @@ import (
 	"strings"
 	"time"
 
-	"github.com/cozy/echo"
 	"github.com/cozy/httpcache"
+	"github.com/labstack/echo/v4"
 )
 
 const defaultLimit = 100
diff --git a/scripts/lint.sh b/scripts/lint.sh
index e76375aadcb61c3c14a1e37a8cbeb5089d8a85b1..0af8450237b91b7e67688ba897b01a36cca52ec2 100755
--- a/scripts/lint.sh
+++ b/scripts/lint.sh
@@ -4,17 +4,14 @@ set -ev
 if git grep -l \
   -e 'github.com/labstack/gommon/log' \
   -e 'github.com/dgrijalva/jwt-go' \
-  -e 'github.com/labstack/echo' \
-  -e 'github.com/spf13/afero' \
   -e 'github.com/cozy/statik' \
-  -e 'github.com/go-redis/redis' \
   -- '*.go'; then
   echo "Forbidden packages"
   exit 1
 fi
 
-go get -u github.com/golangci/golangci-lint/cmd/golangci-lint
-golangci-lint run -E gofmt -E unconvert -E misspell
+curl -sfL https://install.goreleaser.com/github.com/golangci/golangci-lint.sh | sh -s v1.17.1
+bin/golangci-lint run -E gofmt -E unconvert -E misspell
 
 npm install eslint@5.16.0 prettier eslint-plugin-prettier eslint-config-cozy-app
 ./node_modules/.bin/eslint "assets/scripts/**"
diff --git a/tests/testutils/test_utils.go b/tests/testutils/test_utils.go
index 3f776437ff0139b1ca04f510acdf058c369f877d..95bdafd2962cbf323dd8ef834e6c29fd6ca08c4b 100644
--- a/tests/testutils/test_utils.go
+++ b/tests/testutils/test_utils.go
@@ -21,8 +21,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/echo"
-	"github.com/cozy/swift/swifttest"
+	"github.com/labstack/echo/v4"
+	"github.com/ncw/swift/swifttest"
 	"github.com/spf13/viper"
 )
 
diff --git a/web/accounts/oauth.go b/web/accounts/oauth.go
index 5b4a3f9446bdfdf12e8e4417a5e224acb847f239..494eaba5a689b1f80da018377b04a6e4ed96a62e 100644
--- a/web/accounts/oauth.go
+++ b/web/accounts/oauth.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiAccount struct {
diff --git a/web/accounts/oauth_test.go b/web/accounts/oauth_test.go
index 2b8c2fcb7f761cc976df4bdbfb0c2295de161d26..9ba59e1aee7eade732445ec3fcd38195cc665b57 100644
--- a/web/accounts/oauth_test.go
+++ b/web/accounts/oauth_test.go
@@ -18,7 +18,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/tests/testutils"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/accounts/statestore.go b/web/accounts/statestore.go
index 41ca010911c0e85042ad03861368cc60cae617f4..c7f1fd4ac8e70c27f240003c4ed6ae770bcc2435 100644
--- a/web/accounts/statestore.go
+++ b/web/accounts/statestore.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 const stateTTL = 15 * time.Minute
diff --git a/web/apps/apps.go b/web/apps/apps.go
index 6407e2e3f2e76c556e6c6cbf9eb8d5bfd5183b34..59510ff5b36a9d05fa8c7ebaf535e4e1668fc04b 100644
--- a/web/apps/apps.go
+++ b/web/apps/apps.go
@@ -20,7 +20,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // JSMimeType is the content-type for javascript
diff --git a/web/apps/apps_test.go b/web/apps/apps_test.go
index 6e9a2404c797c98f112c419c2eae81f5e0cbcd62..34ac5ece201e66abd8e1e26cc140d97308320c60 100644
--- a/web/apps/apps_test.go
+++ b/web/apps/apps_test.go
@@ -36,7 +36,7 @@ import (
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web"
 	webApps "github.com/cozy/cozy-stack/web/apps"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 
 	"github.com/stretchr/testify/assert"
 )
diff --git a/web/apps/serve.go b/web/apps/serve.go
index d1503e8dea62cf7e8aaac2d3fb8e0e2ea0b81ed0..af214ce2f4cab4cc526f9da9f09ca2d2b853d55c 100644
--- a/web/apps/serve.go
+++ b/web/apps/serve.go
@@ -24,7 +24,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/web/middlewares"
 	"github.com/cozy/cozy-stack/web/statik"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Serve is an handler for serving files from the VFS for a client-side app
diff --git a/web/auth/auth.go b/web/auth/auth.go
index aa260b7175dad563d12d07947773f77c493dd057..e6468b426cdb97ed6428ce8708330b6f2e9ab197 100644
--- a/web/auth/auth.go
+++ b/web/auth/auth.go
@@ -16,8 +16,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/limits"
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
-	"github.com/cozy/echo/middleware"
+	"github.com/labstack/echo/v4"
+	"github.com/labstack/echo/v4/middleware"
 )
 
 const (
diff --git a/web/auth/auth_test.go b/web/auth/auth_test.go
index e35cf59ea6bc701f8594477dc8e6cfc1a92e2351..edb279df1c428efebbaa1602c772633924b9cec5 100644
--- a/web/auth/auth_test.go
+++ b/web/auth/auth_test.go
@@ -36,7 +36,7 @@ import (
 	"github.com/cozy/cozy-stack/web/auth"
 	"github.com/cozy/cozy-stack/web/errors"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 	jwt "gopkg.in/dgrijalva/jwt-go.v3"
 )
diff --git a/web/auth/oauth.go b/web/auth/oauth.go
index f1f6d51757ccaebd5399c5b8306877166ee7d844..e6519ee788c61da8a98519b08ded8f63463bccea 100644
--- a/web/auth/oauth.go
+++ b/web/auth/oauth.go
@@ -21,7 +21,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/pkg/registry"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type webappParams struct {
diff --git a/web/auth/passphrase.go b/web/auth/passphrase.go
index 94c728a6bf8d05b3c373b8db4044329bab71b44d..7f4e43d1e9be6f49276ab1c57d8da6cfa9f74e37 100644
--- a/web/auth/passphrase.go
+++ b/web/auth/passphrase.go
@@ -8,7 +8,7 @@ import (
 	"github.com/cozy/cozy-stack/model/instance/lifecycle"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func passphraseResetForm(c echo.Context) error {
diff --git a/web/auth/register.go b/web/auth/register.go
index 6de1b0efc3949758862e73da6ece89725bea1786..dbde19c2af505fa420edc3c560ae0bd73e9f84b5 100644
--- a/web/auth/register.go
+++ b/web/auth/register.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/limits"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func registerClient(c echo.Context) error {
diff --git a/web/auth/twofactor.go b/web/auth/twofactor.go
index a9c5904734547c50cd235a9ca7a0194df4ca49b6..c14e9e6c091c39c89bd7d541ede429f34d698085 100644
--- a/web/auth/twofactor.go
+++ b/web/auth/twofactor.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/model/oauth"
 	"github.com/cozy/cozy-stack/pkg/limits"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 const (
diff --git a/web/compat/compat.go b/web/compat/compat.go
index ad1badd1c4a106404e30a3a979e497fab7b2682b..db7fda9869e2e2406253e1de2811618acd25061c 100644
--- a/web/compat/compat.go
+++ b/web/compat/compat.go
@@ -4,7 +4,7 @@ import (
 	"net/http"
 
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Compat display a page with web browsers compatibility informations
diff --git a/web/data/accounts.go b/web/data/accounts.go
index 851f68878de9d79c6841bb6e796808d59c03d679..24e80441b31ad63635a3e45fc727c8a33ffffd9f 100644
--- a/web/data/accounts.go
+++ b/web/data/accounts.go
@@ -12,7 +12,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // TODO: make specific routes for managing accounts. The overriding of the
diff --git a/web/data/data.go b/web/data/data.go
index d32225381a826f604f96059d1bd6235ff581b4ce..6eac4aa297b3c8d0d9f4a6502e465e1bf89ab6b5 100644
--- a/web/data/data.go
+++ b/web/data/data.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/files"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func paramIsTrue(c echo.Context, param string) bool {
diff --git a/web/data/replication.go b/web/data/replication.go
index dd1193fab712bb844ce52cad791aa9913d5b9ed5..a1e7ce94812aac3b735dfd2e76a619717be0fbde 100644
--- a/web/data/replication.go
+++ b/web/data/replication.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/pkg/lock"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func proxy(c echo.Context, path string) error {
diff --git a/web/dev.go b/web/dev.go
index 6efc8735595aec725b9de4c71ee5f2a5285b0009..3169b1a5b2b5a1893e8e9a795a5c6d8549e9775b 100644
--- a/web/dev.go
+++ b/web/dev.go
@@ -11,7 +11,7 @@ import (
 	"github.com/cozy/cozy-stack/web/middlewares"
 	"github.com/cozy/cozy-stack/web/statik"
 	"github.com/cozy/cozy-stack/worker/mails"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // devMailHandler allow to easily render a mail from a route of the stack. The
diff --git a/web/errors/errors.go b/web/errors/errors.go
index 14c26eaaddc8fe180bebb0be5a06c8162f1ac19a..b38bd949b79d2eacb59cdbf3a522af29bf58b561 100644
--- a/web/errors/errors.go
+++ b/web/errors/errors.go
@@ -15,7 +15,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/web/middlewares"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/sirupsen/logrus"
 )
 
@@ -95,12 +95,12 @@ func HTMLErrorHandler(err error, c echo.Context) {
 	var he *echo.HTTPError
 	if he, ok = err.(*echo.HTTPError); ok {
 		status = he.Code
-		if he.Inner != nil {
-			err = he.Inner
+		if he.Internal != nil {
+			err = he.Internal
 		}
 	} else {
 		he = echo.NewHTTPError(status, err)
-		he.Inner = err
+		he.Internal = err
 	}
 
 	var title, value string
diff --git a/web/files/files.go b/web/files/files.go
index 4032fb593dc5ed6a5ef686f4ddb051557367f35d..dbce1a143994536708c12deec1443cc80e4776e1 100644
--- a/web/files/files.go
+++ b/web/files/files.go
@@ -32,7 +32,7 @@ import (
 	web_utils "github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/web/middlewares"
 	"github.com/cozy/cozy-stack/worker/thumbnail"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type docPatch struct {
diff --git a/web/files/files_test.go b/web/files/files_test.go
index bf52d65fe4b9067a3c265d408d6af7f3ad1fc5cb..807a9bdc0d2cef732b8ecb4209a866764f3cbda1 100644
--- a/web/files/files_test.go
+++ b/web/files/files_test.go
@@ -24,7 +24,7 @@ import (
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web/errors"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 
 	_ "github.com/cozy/cozy-stack/worker/thumbnail"
@@ -1204,7 +1204,8 @@ func TestArchiveNoFiles(t *testing.T) {
 	assert.Equal(t, 400, res.StatusCode)
 	msg, err := ioutil.ReadAll(res.Body)
 	assert.NoError(t, err)
-	assert.Equal(t, `"Can't create an archive with no files"`, string(msg))
+	actual := strings.TrimSpace(string(msg))
+	assert.Equal(t, `"Can't create an archive with no files"`, actual)
 }
 
 func TestArchiveDirectDownload(t *testing.T) {
diff --git a/web/files/paginated.go b/web/files/paginated.go
index 8c50310d476365ecc4c9e641831af5caf7193226..64038f2247ff116064494d3e360cef7ed9e71038 100644
--- a/web/files/paginated.go
+++ b/web/files/paginated.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 const (
diff --git a/web/files/permissions_test.go b/web/files/permissions_test.go
index 35a5dcccabd30d64855bfe3c33e7764a4bf84ab4..e47169df056b38482af8644f6354e36295534da2 100644
--- a/web/files/permissions_test.go
+++ b/web/files/permissions_test.go
@@ -8,7 +8,7 @@ import (
 	"time"
 
 	"github.com/cozy/cozy-stack/pkg/consts"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/files/referencedby.go b/web/files/referencedby.go
index f25128f249c2712c916963b99556713281dea174..1ee6b06a1d4ec0bfdb473b8adeb4d0c06dec8cca 100644
--- a/web/files/referencedby.go
+++ b/web/files/referencedby.go
@@ -7,7 +7,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // AddReferencedHandler is the echo.handler for adding referenced_by to
diff --git a/web/files/referencedby_test.go b/web/files/referencedby_test.go
index dc8fa5e5a41731662e8f922592c62e257fb358e3..1d82ecfe8b937726cd3c9db775c57c0c14f213e7 100644
--- a/web/files/referencedby_test.go
+++ b/web/files/referencedby_test.go
@@ -8,7 +8,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/files/references.go b/web/files/references.go
index 4f66fd7ebdb3f3aa3e6d7bc22efd2efe967282bd..ab08eab73bb60a12e6be9a5e55558dba4bfee684 100644
--- a/web/files/references.go
+++ b/web/files/references.go
@@ -14,7 +14,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 const (
diff --git a/web/instances/client.go b/web/instances/client.go
index 43025c2998f6eeca93891d288e966890205dc0ce..277d3b2a6c78f6231954f762637193a0e7ef0fbf 100644
--- a/web/instances/client.go
+++ b/web/instances/client.go
@@ -8,7 +8,7 @@ import (
 	"github.com/cozy/cozy-stack/model/instance/lifecycle"
 	"github.com/cozy/cozy-stack/model/oauth"
 	"github.com/cozy/cozy-stack/pkg/consts"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func createToken(c echo.Context) error {
diff --git a/web/instances/instances.go b/web/instances/instances.go
index 4262ea8b2771fa5ddbb10d0311c4c5b2ba845ab9..02d9188c842d4060bccd4343a3c9f1078b46bc0a 100644
--- a/web/instances/instances.go
+++ b/web/instances/instances.go
@@ -27,7 +27,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/worker/updates"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiInstance struct {
diff --git a/web/instances/move.go b/web/instances/move.go
index e1701de50b227a864055e70c7716530a14e62eca..33c5a5f8470b77215988ab371885f705d9c818c1 100644
--- a/web/instances/move.go
+++ b/web/instances/move.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/model/job"
 	"github.com/cozy/cozy-stack/model/move"
 	"github.com/cozy/cozy-stack/pkg/mail"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func exporter(c echo.Context) error {
diff --git a/web/intents/intents.go b/web/intents/intents.go
index c83499e0b9c2402fdbf98a04e08d9167e1883313..2c6a74c3191236b567842a80b48454c36dd70ac5 100644
--- a/web/intents/intents.go
+++ b/web/intents/intents.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiIntent struct {
diff --git a/web/intents/intents_test.go b/web/intents/intents_test.go
index 3220260603b1eb3d28af89aace5b9db3de52be20..18ec837955505466c5802264ed2c8dbdd258d32c 100644
--- a/web/intents/intents_test.go
+++ b/web/intents/intents_test.go
@@ -18,7 +18,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web/errors"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/jobs/jobs.go b/web/jobs/jobs.go
index fbd0318b2ed3efa53bd43dac8e8a641bf9c4e52f..30b0009408cae27bc69f5904b9dda4623ccd6d30 100644
--- a/web/jobs/jobs.go
+++ b/web/jobs/jobs.go
@@ -20,8 +20,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/metadata"
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/labstack/echo/v4"
 
 	// import workers
 	_ "github.com/cozy/cozy-stack/worker/archive"
diff --git a/web/jobs/jobs_test.go b/web/jobs/jobs_test.go
index cb6b49def61b4a348166bb24a1e7f350c47bfacc..08d0489793f9dde2d3e03c7d745c3e8f09b9db85 100644
--- a/web/jobs/jobs_test.go
+++ b/web/jobs/jobs_test.go
@@ -18,7 +18,7 @@ import (
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web/errors"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/middlewares/assets.go b/web/middlewares/assets.go
index 501557979de3d6e7f84ef80f7e3c4cdc0ca6b652..113812098cadee31c29f875fde346d9c6bcc0db7 100644
--- a/web/middlewares/assets.go
+++ b/web/middlewares/assets.go
@@ -5,7 +5,7 @@ import (
 	"html/template"
 
 	"github.com/cozy/cozy-stack/model/instance"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // FuncsMap is a the helper functions used in templates.
diff --git a/web/middlewares/assets_test.go b/web/middlewares/assets_test.go
index 87e484e103716a8c9777cea9960e5677912dc4e2..f2626e92e3d62c7a02d5f51a3ede3058ca5eb8bc 100644
--- a/web/middlewares/assets_test.go
+++ b/web/middlewares/assets_test.go
@@ -19,7 +19,7 @@ import (
 	"github.com/cozy/cozy-stack/web"
 	"github.com/cozy/cozy-stack/web/apps"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 
 	"github.com/stretchr/testify/assert"
 )
diff --git a/web/middlewares/basic_auth.go b/web/middlewares/basic_auth.go
index cd422b24e21fd795eb1fc0a95b2e43dfa9d9fcb8..815f94cb2048501a60a88f63ddfb2b2627391ded 100644
--- a/web/middlewares/basic_auth.go
+++ b/web/middlewares/basic_auth.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // BasicAuth use HTTP basic authentication to authenticate a user. The secret
diff --git a/web/middlewares/cache.go b/web/middlewares/cache.go
index 04bc119f361edbf86da22f23d53964b887d05866..c5794c2fbd1ac0c5543cb2ab6883ce5c68b95381 100644
--- a/web/middlewares/cache.go
+++ b/web/middlewares/cache.go
@@ -4,7 +4,7 @@ import (
 	"fmt"
 	"time"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // CacheMode is an enum to define a cache-control mode
diff --git a/web/middlewares/cors.go b/web/middlewares/cors.go
index 9c51ab55cb1e4d32a11aee15dce6de40839b839b..228b19172a0550897d4937c0fcea6b3fecf16c3e 100644
--- a/web/middlewares/cors.go
+++ b/web/middlewares/cors.go
@@ -6,7 +6,7 @@ import (
 	"strings"
 	"time"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // MaxAgeCORS is used to cache the CORS header for 12 hours
diff --git a/web/middlewares/cors_test.go b/web/middlewares/cors_test.go
index 02cc33d8969fe9af6151563f98ce667b63a2ec93..6139323d7bd234bd6494f85072f754f85b71d01c 100644
--- a/web/middlewares/cors_test.go
+++ b/web/middlewares/cors_test.go
@@ -5,7 +5,7 @@ import (
 	"net/http/httptest"
 	"testing"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/middlewares/instance.go b/web/middlewares/instance.go
index 9044f3990ce7197fd13636eda1f94a3abb80f851..69bab64c893993ae0f64005802a82db08d8cea51 100644
--- a/web/middlewares/instance.go
+++ b/web/middlewares/instance.go
@@ -7,7 +7,7 @@ import (
 	"github.com/cozy/cozy-stack/model/instance/lifecycle"
 	"github.com/cozy/cozy-stack/model/permission"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // NeedInstance is an echo middleware which will display an error
@@ -28,7 +28,7 @@ func NeedInstance(next echo.HandlerFunc) echo.HandlerFunc {
 			default:
 				errHTTP = echo.NewHTTPError(http.StatusInternalServerError, err)
 			}
-			errHTTP.Inner = err
+			errHTTP.Internal = err
 			return errHTTP
 		}
 		c.Set("instance", i.WithContextualDomain(c.Request().Host))
diff --git a/web/middlewares/json_headers.go b/web/middlewares/json_headers.go
index c63c43161ff212a6d90b6ebd1307b103b5b707ca..0bd0b13611c6c5d9b3b5b5a058c6cad74fb83d58 100644
--- a/web/middlewares/json_headers.go
+++ b/web/middlewares/json_headers.go
@@ -5,7 +5,7 @@ import (
 	"strings"
 
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 
 	"github.com/golang/gddo/httputil"
 )
diff --git a/web/middlewares/middlewares.go b/web/middlewares/middlewares.go
index ffcf493b03376fb5ce39a1c0064bb21801037d23..77bc415a29af94afbd2f6e277700a0e65a000d8f 100644
--- a/web/middlewares/middlewares.go
+++ b/web/middlewares/middlewares.go
@@ -4,7 +4,7 @@ import (
 	"strings"
 
 	"github.com/cozy/cozy-stack/pkg/config/config"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Compose can be used to compose a list of middlewares together with a main
diff --git a/web/middlewares/permissions.go b/web/middlewares/permissions.go
index 2ca5613a75b16e7510ed2461cd1a2ebbe0d7f253..e22988a33d8d544b15ef781de461201ea5c367ee 100644
--- a/web/middlewares/permissions.go
+++ b/web/middlewares/permissions.go
@@ -17,7 +17,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/crypto"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	jwt "gopkg.in/dgrijalva/jwt-go.v3"
 )
 
diff --git a/web/middlewares/recover.go b/web/middlewares/recover.go
index 00fbee15c79f3877cc8a39eaafdec3da8cc53ae8..571fb7a6834c69e4da0a5d4de17183a69c5c6bb8 100644
--- a/web/middlewares/recover.go
+++ b/web/middlewares/recover.go
@@ -5,8 +5,8 @@ import (
 	"runtime"
 
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/echo"
-	"github.com/cozy/echo/middleware"
+	"github.com/labstack/echo/v4"
+	"github.com/labstack/echo/v4/middleware"
 )
 
 // RecoverConfig defines the config for Recover middleware.
diff --git a/web/middlewares/secure.go b/web/middlewares/secure.go
index 1cc2d3bc3b8e70249fa5ea699619ec56e6bfce4a..150a8fa66c4aefdef90c72c44c2548e5b4e708db 100644
--- a/web/middlewares/secure.go
+++ b/web/middlewares/secure.go
@@ -7,7 +7,7 @@ import (
 	"time"
 
 	build "github.com/cozy/cozy-stack/pkg/config"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type (
diff --git a/web/middlewares/secure_test.go b/web/middlewares/secure_test.go
index a8a8bc08534b6afef6c8a0e018894a5d55e8c591..2a78884cd53a2dbe949dbdb5067dd479ab1130d3 100644
--- a/web/middlewares/secure_test.go
+++ b/web/middlewares/secure_test.go
@@ -6,7 +6,7 @@ import (
 	"testing"
 	"time"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/middlewares/session.go b/web/middlewares/session.go
index bb84a23cb38509879e3d7ba898d56d4b19959b0a..6fb55fdb1526477a4711cdac0b7baa10c02f36fc 100644
--- a/web/middlewares/session.go
+++ b/web/middlewares/session.go
@@ -2,7 +2,7 @@ package middlewares
 
 import (
 	"github.com/cozy/cozy-stack/model/session"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 const sessionKey = "session"
diff --git a/web/middlewares/user_agent.go b/web/middlewares/user_agent.go
index e1e3ed08807ad3983c019d9ba92632f7f0a43af0..0d44e05b244aef7def60342fea16f41eecc91dda 100644
--- a/web/middlewares/user_agent.go
+++ b/web/middlewares/user_agent.go
@@ -5,7 +5,7 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/mssola/user_agent"
 )
 
diff --git a/web/middlewares/user_agent_test.go b/web/middlewares/user_agent_test.go
index e45b0541437b3b09375827f745bc23b77fd0cd1e..199ea9d15117e3d24c22d49ca8cd9b2552900bf1 100644
--- a/web/middlewares/user_agent_test.go
+++ b/web/middlewares/user_agent_test.go
@@ -7,7 +7,7 @@ import (
 	"testing"
 
 	"github.com/cozy/cozy-stack/model/instance"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/move/move.go b/web/move/move.go
index 5a7e11c919c8f68cdafb4423712fdcddb51030f7..b749ec3d85237e1772466655092a09affacc1c75 100644
--- a/web/move/move.go
+++ b/web/move/move.go
@@ -11,7 +11,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
 	"github.com/cozy/cozy-stack/worker/move"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func exportHandler(c echo.Context) error {
diff --git a/web/notifications/notifications.go b/web/notifications/notifications.go
index 4bf49e01f43b5a2a8b5a4ae23c0ee99a172233e3..9df353bb1cbc125d59b32cb0c771843a98a35f94 100644
--- a/web/notifications/notifications.go
+++ b/web/notifications/notifications.go
@@ -11,7 +11,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiNotif struct {
diff --git a/web/oidc/oidc.go b/web/oidc/oidc.go
index 385a95b9be948a69ebf025e7d959e70ec7b1c86f..a23a337c821336ec341e8b003f08c4c629f125c3 100644
--- a/web/oidc/oidc.go
+++ b/web/oidc/oidc.go
@@ -22,7 +22,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/logger"
 	"github.com/cozy/cozy-stack/web/auth"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Start is the route to start the OpenID Connect dance.
diff --git a/web/oidc/oidc_test.go b/web/oidc/oidc_test.go
index 387ce61a85668e57505e03cf66b8ae51415b0b16..c68139b3d46044cb3215f7235a811e4a07f00445 100644
--- a/web/oidc/oidc_test.go
+++ b/web/oidc/oidc_test.go
@@ -16,7 +16,7 @@ import (
 	"github.com/cozy/cozy-stack/web/errors"
 	"github.com/cozy/cozy-stack/web/middlewares"
 	"github.com/cozy/cozy-stack/web/statik"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/oidc/statestore.go b/web/oidc/statestore.go
index 6c9f0eaa37041ab11f303214fd7939ea7232f74c..3cfed5e3b3936ef93b600bb7dac95b0b335e09ad 100644
--- a/web/oidc/statestore.go
+++ b/web/oidc/statestore.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/redis"
+	"github.com/go-redis/redis"
 )
 
 const stateTTL = 15 * time.Minute
diff --git a/web/permissions/permissions.go b/web/permissions/permissions.go
index 8f7e9a5e428b4a4c502a28962d0db609bba1a6fc..3e8736afe7df4629442aa503662f8ce58fd6cd00 100644
--- a/web/permissions/permissions.go
+++ b/web/permissions/permissions.go
@@ -16,8 +16,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/metadata"
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
 	"github.com/justincampbell/bigduration"
+	"github.com/labstack/echo/v4"
 )
 
 // ErrPatchCodeOrSet is returned when an attempt is made to patch both
diff --git a/web/permissions/permissions_test.go b/web/permissions/permissions_test.go
index 179af99a9f369343ffc26cc6473cd49362c29934..b33dc8679f43044e6ef483f00221669f3d301635 100644
--- a/web/permissions/permissions_test.go
+++ b/web/permissions/permissions_test.go
@@ -24,7 +24,7 @@ import (
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web/errors"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 	jwt "gopkg.in/dgrijalva/jwt-go.v3"
 )
diff --git a/web/public/public.go b/web/public/public.go
index 3a1ddab68bcc94ec1d6eee0b88294e89fdf01cae..b376bc9c1573c838f9494cbe6d31cbf13431287a 100644
--- a/web/public/public.go
+++ b/web/public/public.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/assets"
 	"github.com/cozy/cozy-stack/web/middlewares"
 	"github.com/cozy/cozy-stack/web/statik"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Avatar returns the default avatar currently.
diff --git a/web/realtime/realtime.go b/web/realtime/realtime.go
index b906dca5ddde50a4591667db7a953fce61913960..d0b7440ceecf9417a49ea39b448277a57e7823f2 100644
--- a/web/realtime/realtime.go
+++ b/web/realtime/realtime.go
@@ -14,8 +14,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 	"github.com/cozy/cozy-stack/pkg/realtime"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
 	"github.com/gorilla/websocket"
+	"github.com/labstack/echo/v4"
 )
 
 const (
diff --git a/web/registry/registry.go b/web/registry/registry.go
index 9b4fc0dbc229fc8e1e712c115360a30714394650..2362bc1a0ee54414873f8d7c36fedd64de9b52b1 100644
--- a/web/registry/registry.go
+++ b/web/registry/registry.go
@@ -7,8 +7,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/registry"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
-	"github.com/cozy/echo/middleware"
+	"github.com/labstack/echo/v4"
+	"github.com/labstack/echo/v4/middleware"
 )
 
 type authType int
diff --git a/web/remote/remote.go b/web/remote/remote.go
index 9f8d37d962139075660a4cace7d1c18901212d6b..b5a54ed00f88ae6e10c54387d053305c4cb0537c 100644
--- a/web/remote/remote.go
+++ b/web/remote/remote.go
@@ -5,7 +5,7 @@ import (
 	"github.com/cozy/cozy-stack/model/remote"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func remoteGet(c echo.Context) error {
diff --git a/web/routing.go b/web/routing.go
index 7ba5b3962c1ef6f24f6b91445e571338ba384eff..63882e07c5ec2b3e5fb6170ae0f387500ff48af0 100644
--- a/web/routing.go
+++ b/web/routing.go
@@ -35,8 +35,8 @@ import (
 	"github.com/cozy/cozy-stack/web/statik"
 	"github.com/cozy/cozy-stack/web/status"
 	"github.com/cozy/cozy-stack/web/version"
-	"github.com/cozy/echo"
-	"github.com/cozy/echo/middleware"
+	"github.com/labstack/echo/v4"
+	"github.com/labstack/echo/v4/middleware"
 	"github.com/prometheus/client_golang/prometheus"
 )
 
diff --git a/web/routing_test.go b/web/routing_test.go
index 96580c3552e67998603740dc2535c022cb8db1c9..5730dc38c4d5aeb9b1da562b03ac5fe0ffbfea6b 100644
--- a/web/routing_test.go
+++ b/web/routing_test.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/server.go b/web/server.go
index f0baeb806bbf9b87d7cd58ed9ff185e7b4025100..e309ec9e13fa6cd8c36b04fb959741229a942196 100644
--- a/web/server.go
+++ b/web/server.go
@@ -21,8 +21,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/web/apps"
 
-	"github.com/cozy/echo"
-	"github.com/cozy/echo/middleware"
+	"github.com/labstack/echo/v4"
+	"github.com/labstack/echo/v4/middleware"
 )
 
 // ReadHeaderTimeout is the amount of time allowed to read request headers for
diff --git a/web/settings/clients.go b/web/settings/clients.go
index cf4b552cce48be4207561769f414f0e69dd1f2f3..20bc8aa295fbd543d03266244d48f61fa484fdee 100644
--- a/web/settings/clients.go
+++ b/web/settings/clients.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/crypto"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	jwt "gopkg.in/dgrijalva/jwt-go.v3"
 )
 
diff --git a/web/settings/context.go b/web/settings/context.go
index 73450ac7afa883922da81d19e8df692c0b9a0583..a2395244c6e49938d583d7683801dfec75aa7685 100644
--- a/web/settings/context.go
+++ b/web/settings/context.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiContext struct {
diff --git a/web/settings/disk_usage.go b/web/settings/disk_usage.go
index dbfc08fbb1ea9477ce1f4dbedfe90f026d96e0bd..8d6a827b3a1be729c67a49cc38ea55ff4ff1eaf7 100644
--- a/web/settings/disk_usage.go
+++ b/web/settings/disk_usage.go
@@ -10,7 +10,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiDiskUsage struct {
diff --git a/web/settings/instance.go b/web/settings/instance.go
index ae63a9f9de8980d776535fbd90f8e98b45b6e211..0cece507c40958a1cb102ac66b97d8d322d5e70b 100644
--- a/web/settings/instance.go
+++ b/web/settings/instance.go
@@ -13,7 +13,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiInstance struct {
diff --git a/web/settings/passphrase.go b/web/settings/passphrase.go
index bd8d9514209e4e8740fc6a7432cc38ec4d6aba7e..2a00a07320d4dc1dc9c60f3e02f94c1dfdd899df 100644
--- a/web/settings/passphrase.go
+++ b/web/settings/passphrase.go
@@ -16,7 +16,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/auth"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 func registerPassphrase(c echo.Context) error {
diff --git a/web/settings/settings.go b/web/settings/settings.go
index 89a8d9087d1e968b8e9c518f8f443ea80d65f38b..70073cfa8c973b3f1c83c71e8927b91190290187 100644
--- a/web/settings/settings.go
+++ b/web/settings/settings.go
@@ -12,7 +12,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 type apiSession struct {
diff --git a/web/settings/settings_test.go b/web/settings/settings_test.go
index 39e816f9d7f22a275782e361c87eef719939e2ba..321d2f8f746863ac3a78b5b2c61fc4865455635a 100644
--- a/web/settings/settings_test.go
+++ b/web/settings/settings_test.go
@@ -20,7 +20,7 @@ import (
 	"github.com/cozy/cozy-stack/tests/testutils"
 	"github.com/cozy/cozy-stack/web/auth"
 	"github.com/cozy/cozy-stack/web/errors"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 
 	_ "github.com/cozy/cozy-stack/worker/mails"
diff --git a/web/sharings/readonly.go b/web/sharings/readonly.go
index b269aa7742e84421ee05047855d64c41a32d2920..d4ec78dd1fe0525c25727f467f6dcbd2bf550159 100644
--- a/web/sharings/readonly.go
+++ b/web/sharings/readonly.go
@@ -8,7 +8,7 @@ import (
 	"github.com/cozy/cozy-stack/model/sharing"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // AddReadOnly is used to downgrade a read-write member to read-only
diff --git a/web/sharings/replicator.go b/web/sharings/replicator.go
index 5db5111406de4d2774bafa9a06d294d6fbfd53de..fe91979e68cc18ec3b60f5fd0f7372ebe5310466 100644
--- a/web/sharings/replicator.go
+++ b/web/sharings/replicator.go
@@ -8,7 +8,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // RevsDiff is part of the replicator
diff --git a/web/sharings/replicator_test.go b/web/sharings/replicator_test.go
index d863cf06109cc9add78909d39ea17b59d6e60108..34b76e15bbbb9fafd8456b768754e13617912b40 100644
--- a/web/sharings/replicator_test.go
+++ b/web/sharings/replicator_test.go
@@ -15,8 +15,8 @@ import (
 	"github.com/cozy/cozy-stack/model/vfs"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
-	"github.com/cozy/echo"
-	uuid "github.com/satori/go.uuid"
+	"github.com/gofrs/uuid"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/sharings/revoke.go b/web/sharings/revoke.go
index e6304930c0b322dfa1817f64f15f604817ed054f..78f58919f3271fec69af228c49f775d68dc87bea 100644
--- a/web/sharings/revoke.go
+++ b/web/sharings/revoke.go
@@ -8,7 +8,7 @@ import (
 	"github.com/cozy/cozy-stack/model/sharing"
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // RevokeSharing is used to revoke a sharing by the sharer, for all recipients
diff --git a/web/sharings/sharings.go b/web/sharings/sharings.go
index 34b2ec729f6ed979db43a8372117641c9285eb2f..ecdecf576204b08576c9bec536c0a925b69ff37b 100644
--- a/web/sharings/sharings.go
+++ b/web/sharings/sharings.go
@@ -17,7 +17,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/pkg/limits"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // CreateSharing initializes a new sharing (on the sharer)
diff --git a/web/sharings/sharings_test.go b/web/sharings/sharings_test.go
index 3d38fd2427e613b49fed7615785fad95b578f8ae..68455250dcaae9309e755ba138751877746dac3a 100644
--- a/web/sharings/sharings_test.go
+++ b/web/sharings/sharings_test.go
@@ -32,7 +32,7 @@ import (
 	"github.com/cozy/cozy-stack/web/permissions"
 	"github.com/cozy/cozy-stack/web/sharings"
 	"github.com/cozy/cozy-stack/web/statik"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/statik/handler.go b/web/statik/handler.go
index 0cd9e64be163b17e3d876da170b6bf2182c205c0..206a78946d069f4ce5449e9c0506e22344d196aa 100644
--- a/web/statik/handler.go
+++ b/web/statik/handler.go
@@ -23,7 +23,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/utils"
 	web_utils "github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/web/middlewares"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 
 	"github.com/sirupsen/logrus"
 )
diff --git a/web/status/status.go b/web/status/status.go
index e0901eb74c5844c955360ba37e1136053de85607..2ea5c220b46439d63476863ca8f3321a1dadde26 100644
--- a/web/status/status.go
+++ b/web/status/status.go
@@ -9,7 +9,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/assets/dynamic"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/couchdb"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Status responds with the status of the service
diff --git a/web/status/status_test.go b/web/status/status_test.go
index 0ea1370851a23882b951009042afcb0d0cdf1185..b6db3317e49d6cea8908802359f95384560b1f31 100644
--- a/web/status/status_test.go
+++ b/web/status/status_test.go
@@ -10,7 +10,7 @@ import (
 
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/web/errors"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 	"github.com/stretchr/testify/assert"
 )
 
diff --git a/web/version/version.go b/web/version/version.go
index 4e576771c6e3802743634bd38d38271858c8eede..38208c0592aaf07237eea4fddc60de4b23973bcc 100644
--- a/web/version/version.go
+++ b/web/version/version.go
@@ -6,7 +6,7 @@ import (
 	"runtime"
 
 	build "github.com/cozy/cozy-stack/pkg/config"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 // Version responds with the git commit used at the build
diff --git a/worker/exec/konnector.go b/worker/exec/konnector.go
index 3346fd26dea77de75b907fcb201a8d554de3da44..86316caaf500c5794dd90ce5e4086b4860288548 100644
--- a/worker/exec/konnector.go
+++ b/worker/exec/konnector.go
@@ -12,7 +12,6 @@ import (
 	"strings"
 	"time"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/account"
 	"github.com/cozy/cozy-stack/model/app"
 	"github.com/cozy/cozy-stack/model/instance"
@@ -28,6 +27,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/realtime"
 	"github.com/cozy/cozy-stack/pkg/registry"
 	"github.com/sirupsen/logrus"
+	"github.com/spf13/afero"
 )
 
 const (
diff --git a/worker/exec/konnector_test.go b/worker/exec/konnector_test.go
index cd64fc47d13505ea479aacee70e5a8bb026b4ea9..56be9d7dc6eda311dd0d950f367079fc99f23d4a 100644
--- a/worker/exec/konnector_test.go
+++ b/worker/exec/konnector_test.go
@@ -7,7 +7,6 @@ import (
 	"sync"
 	"testing"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/account"
 	"github.com/cozy/cozy-stack/model/app"
 	"github.com/cozy/cozy-stack/model/instance"
@@ -20,6 +19,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/prefixer"
 	"github.com/cozy/cozy-stack/pkg/realtime"
 	"github.com/cozy/cozy-stack/tests/testutils"
+	"github.com/spf13/afero"
 	"github.com/stretchr/testify/assert"
 	jwt "gopkg.in/dgrijalva/jwt-go.v3"
 )
diff --git a/worker/exec/service.go b/worker/exec/service.go
index 17434aac1844a49b35162965e307cd1685ed9274..317ec36efb9088c29b40828791eb42dc3c0712c1 100644
--- a/worker/exec/service.go
+++ b/worker/exec/service.go
@@ -8,13 +8,13 @@ import (
 	"os"
 	"path"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/app"
 	"github.com/cozy/cozy-stack/model/instance"
 	"github.com/cozy/cozy-stack/model/job"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/consts"
 	"github.com/sirupsen/logrus"
+	"github.com/spf13/afero"
 )
 
 // ServiceOptions contains the options to execute a service.
diff --git a/worker/mails/exec.go b/worker/mails/exec.go
index 287ba2b5acc7f940d0326dd46c1cab100cb114eb..a227cbdb89a7ee8a00f3477b59e5e068768d207e 100644
--- a/worker/mails/exec.go
+++ b/worker/mails/exec.go
@@ -5,12 +5,12 @@ import (
 	"io"
 	"os"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/job"
 	"github.com/cozy/cozy-stack/pkg/assets"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/utils"
 	"github.com/cozy/cozy-stack/worker/exec"
+	"github.com/spf13/afero"
 )
 
 func execMjml(ctx *job.WorkerContext, template []byte) ([]byte, error) {
diff --git a/worker/migrations/migrations.go b/worker/migrations/migrations.go
index 55882c37793b294883989bc3d92ac9bb73371229..e862fed85555f60f7629c0850540f6b12454b017 100644
--- a/worker/migrations/migrations.go
+++ b/worker/migrations/migrations.go
@@ -14,8 +14,8 @@ import (
 	"github.com/cozy/cozy-stack/pkg/couchdb"
 	"github.com/cozy/cozy-stack/pkg/lock"
 	"github.com/cozy/cozy-stack/pkg/logger"
-	"github.com/cozy/swift"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/ncw/swift"
 )
 
 const (
diff --git a/worker/move/archiver.go b/worker/move/archiver.go
index 04f34d66d7d307fb6f0305d3139236c5dc350b24..1d7e6c37842b6bd101d1ccb7d81124dc47a8e8b0 100644
--- a/worker/move/archiver.go
+++ b/worker/move/archiver.go
@@ -8,12 +8,12 @@ import (
 	"strconv"
 	"time"
 
-	"github.com/cozy/afero"
 	"github.com/cozy/cozy-stack/model/instance"
 	"github.com/cozy/cozy-stack/pkg/config/config"
 	"github.com/cozy/cozy-stack/pkg/crypto"
-	"github.com/cozy/swift"
 	multierror "github.com/hashicorp/go-multierror"
+	"github.com/ncw/swift"
+	"github.com/spf13/afero"
 )
 
 var (
diff --git a/worker/move/export.go b/worker/move/export.go
index a76a21e42c149f576faeee0d35d63663796758ea..b6343918b2538bd62a2fb91bdd0fe8ccc80d5754 100644
--- a/worker/move/export.go
+++ b/worker/move/export.go
@@ -25,7 +25,7 @@ import (
 	"github.com/cozy/cozy-stack/pkg/jsonapi"
 	"github.com/cozy/cozy-stack/pkg/realtime"
 	"github.com/cozy/cozy-stack/pkg/utils"
-	"github.com/cozy/echo"
+	"github.com/labstack/echo/v4"
 )
 
 const (