diff --git a/Cargo.lock b/Cargo.lock
index 1ba28742a5..ba52e4f028 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -72,12 +72,6 @@ dependencies = [
  "winapi 0.3.8",
 ]
 
-[[package]]
-name = "anyhow"
-version = "1.0.31"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "85bb70cc08ec97ca5450e6eba421deeea5f172c0fc61f78b5357b2a8e8be195f"
-
 [[package]]
 name = "anymap"
 version = "0.12.1"
@@ -111,7 +105,7 @@ checksum = "0609c78bd572f4edc74310dfb63a01f5609d53fa8b4dd7c4d98aef3b3e8d72d1"
 dependencies = [
  "proc-macro-hack",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -154,7 +148,7 @@ dependencies = [
  "crossbeam-utils 0.7.2",
  "futures-core",
  "futures-io",
- "futures-timer 2.0.2",
+ "futures-timer",
  "kv-log-macro",
  "log",
  "memchr",
@@ -465,16 +459,6 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "chashmap"
-version = "2.2.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ff41a3c2c1e39921b9003de14bf0439c7b63a9039637c291e1a64925d8ddfa45"
-dependencies = [
- "owning_ref",
- "parking_lot 0.4.8",
-]
-
 [[package]]
 name = "chrono"
 version = "0.4.11"
@@ -614,13 +598,13 @@ dependencies = [
 
 [[package]]
 name = "const-tweaker"
-version = "0.2.6"
+version = "0.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fbe3e1d2fccd896d451adb486910a0bfc233fd6dcafdb4e13bac7de72f8f250"
+checksum = "297be2ecc39b6e680c7bb03d8d053a483c32a61d95bd758fca76e9b95ce7e276"
 dependencies = [
- "anyhow",
  "async-std",
  "const-tweaker-attribute",
+ "ctor",
  "dashmap",
  "horrorshow",
  "lazy_static",
@@ -630,14 +614,14 @@ dependencies = [
 
 [[package]]
 name = "const-tweaker-attribute"
-version = "0.4.1"
+version = "0.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a43d28ffebd3bb949c8c274de94fb84826134a023c5e6dac528c38a0f1cf1ba"
+checksum = "2d709e38f0f6100c0c8c0b3aefb0aa1f83af865d7b6b267e8402820513a0c0d8"
 dependencies = [
  "darling",
  "proc-macro2 1.0.18",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -720,18 +704,18 @@ dependencies = [
 
 [[package]]
 name = "cpal"
-version = "0.10.0"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3ded070249be850b5b59e1e3a44a70b8ae395e0e5c65b487131d8909a8208120"
+checksum = "6b55d55d69f403f62a95bd3c04b431e0aedf5120c70f15d07a8edd234443dd59"
 dependencies = [
  "alsa-sys",
  "core-foundation-sys",
  "coreaudio-rs",
- "failure",
  "lazy_static",
  "libc",
  "num-traits",
  "stdweb 0.1.3",
+ "thiserror",
  "winapi 0.3.8",
 ]
 
@@ -755,7 +739,7 @@ dependencies = [
  "clap",
  "criterion-plot",
  "csv",
- "itertools 0.9.0",
+ "itertools",
  "lazy_static",
  "num-traits",
  "oorandom",
@@ -776,7 +760,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "ddeaf7989f00f2e1d871a26a110f3ed713632feac17f65f03ca938c542618b60"
 dependencies = [
  "cast",
- "itertools 0.9.0",
+ "itertools",
 ]
 
 [[package]]
@@ -915,6 +899,16 @@ dependencies = [
  "memchr",
 ]
 
+[[package]]
+name = "ctor"
+version = "0.1.15"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "39858aa5bac06462d4dd4b9164848eb81ffc4aa5c479746393598fd193afa227"
+dependencies = [
+ "quote 1.0.7",
+ "syn 1.0.33",
+]
+
 [[package]]
 name = "daggy"
 version = "0.5.0"
@@ -945,7 +939,7 @@ dependencies = [
  "proc-macro2 1.0.18",
  "quote 1.0.7",
  "strsim",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -956,7 +950,7 @@ checksum = "d9b5a2f4ac4969822c62224815d069952656cadc7084fdca9751e6d959189b72"
 dependencies = [
  "darling_core",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -1011,7 +1005,7 @@ checksum = "45f5098f628d02a7a0f68ddba586fb61e80edec3bdc1be3b921f4ceec60858d3"
 dependencies = [
  "proc-macro2 1.0.18",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -1025,20 +1019,20 @@ dependencies = [
 ]
 
 [[package]]
-name = "directories"
-version = "2.0.2"
+name = "directories-next"
+version = "1.0.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "551a778172a450d7fc12e629ca3b0428d00f6afa9a43da1b630d54604e97371c"
+checksum = "21eaa04e945bec7e2dc7383817c566881d9a83d20a07cc949b54585873585a48"
 dependencies = [
  "cfg-if",
- "dirs-sys",
+ "dirs-sys-next",
 ]
 
 [[package]]
-name = "dirs-sys"
-version = "0.3.5"
+name = "dirs-sys-next"
+version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8e93d7f5705de3e49895a2b5e0b8855a1c27f080192ae9c32a6432d50741a57a"
+checksum = "9c60f7b8a8953926148223260454befb50c751d3c50e1c178c4fd1ace4083c9a"
 dependencies = [
  "libc",
  "redox_users",
@@ -1053,9 +1047,9 @@ checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0"
 
 [[package]]
 name = "dispatch"
-version = "0.1.4"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "04e93ca78226c51902d7aa8c12c988338aadd9e85ed9c6be8aaac39192ff3605"
+checksum = "bd0c93bb4b0c6d9b77f4435b0ae98c24d17f1c45b2ff844c6151a07256ca923b"
 
 [[package]]
 name = "dlib"
@@ -1162,7 +1156,7 @@ checksum = "aa4da3c766cd7a0db8242e326e9e4e081edd567072893ed320008189715366a4"
 dependencies = [
  "proc-macro2 1.0.18",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
  "synstructure",
 ]
 
@@ -1326,7 +1320,7 @@ dependencies = [
  "proc-macro-hack",
  "proc-macro2 1.0.18",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -1350,12 +1344,6 @@ version = "2.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a1de7508b218029b0f01662ed8f61b1c964b3ae99d6f25462d0f55a595109df6"
 
-[[package]]
-name = "futures-timer"
-version = "3.0.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e64b03909df88034c26dc1547e8970b91f98bdb65165d6a4e9110d94263dbb2c"
-
 [[package]]
 name = "futures-util"
 version = "0.3.5"
@@ -1586,9 +1574,9 @@ dependencies = [
 
 [[package]]
 name = "git2"
-version = "0.10.2"
+version = "0.13.6"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c1af51ea8a906616af45a4ce78eacf25860f7a13ae7bf8a814693f0f4037a26"
+checksum = "11e4b2082980e751c4bf4273e9cbb4a02c655729c8ee8a79f66cad03c8f4d31e"
 dependencies = [
  "bitflags",
  "libc",
@@ -2061,15 +2049,6 @@ dependencies = [
  "libc",
 ]
 
-[[package]]
-name = "itertools"
-version = "0.8.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
-dependencies = [
- "either",
-]
-
 [[package]]
 name = "itertools"
 version = "0.9.0"
@@ -2142,13 +2121,13 @@ checksum = "b294d6fa9ee409a054354afc4352b0b9ef7ca222c69b8812cbea9e7d2bf3783f"
 
 [[package]]
 name = "lewton"
-version = "0.9.4"
+version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8d542c1a317036c45c2aa1cf10cc9d403ca91eb2d333ef1a4917e5cb10628bd0"
+checksum = "be42bea7971f4ba0ea1e215730c29bc1ff9bd2a9c10013912f42a8dcf8d77c0d"
 dependencies = [
  "byteorder 1.3.4",
  "ogg",
- "smallvec 0.6.13",
+ "tinyvec",
 ]
 
 [[package]]
@@ -2159,9 +2138,9 @@ checksum = "9457b06509d27052635f90d6466700c65095fdf75409b3fbdd903e988b886f49"
 
 [[package]]
 name = "libgit2-sys"
-version = "0.9.2"
+version = "0.12.7+1.0.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4870c781f6063efb83150cd22c1ddf6ecf58531419e7570cdcced46970f64a16"
+checksum = "bcd07968649bcb7b9351ecfde53ca4d27673cccfdf57c84255ec18710f3153e0"
 dependencies = [
  "cc",
  "libc",
@@ -2192,9 +2171,9 @@ dependencies = [
 
 [[package]]
 name = "libsqlite3-sys"
-version = "0.9.3"
+version = "0.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d3711dfd91a1081d2458ad2d06ea30a8755256e74038be2ad927d94e1c955ca8"
+checksum = "1e704a02bcaecd4a08b93a23f6be59d0bd79cd161e0963e9499165a0a35df7bd"
 dependencies = [
  "cc",
  "pkg-config",
@@ -2362,7 +2341,7 @@ dependencies = [
  "migrations_internals",
  "proc-macro2 1.0.18",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -2531,13 +2510,12 @@ dependencies = [
 
 [[package]]
 name = "notify"
-version = "5.0.0-pre.2"
+version = "5.0.0-pre.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b00c0b65188bffb5598c302e19b062feb94adef02c31f15622a163c95d673c3"
+checksum = "77d03607cf88b4b160ba0e9ed425fff3cee3b55ac813f0c685b3a3772da37d0e"
 dependencies = [
  "anymap",
  "bitflags",
- "chashmap",
  "crossbeam-channel 0.4.2",
  "filetime",
  "fsevent",
@@ -2598,9 +2576,9 @@ dependencies = [
 
 [[package]]
 name = "num-integer"
-version = "0.1.42"
+version = "0.1.43"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f6ea62e9d81a77cd3ee9a2a5b9b609447857f3d358704331e4ef39eb247fcba"
+checksum = "8d59457e662d541ba17869cf51cf177c0b5f0cbf476c66bdc90bf1edac4f875b"
 dependencies = [
  "autocfg 1.0.0",
  "num-traits",
@@ -2608,9 +2586,9 @@ dependencies = [
 
 [[package]]
 name = "num-iter"
-version = "0.1.40"
+version = "0.1.41"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dfb0800a0291891dd9f4fe7bd9c19384f98f7fbe0cd0f39a2c6b88b9868bbc00"
+checksum = "7a6e6b7c748f995c4c29c5f5ae0248536e04a5739927c74ec0fa564805094b9f"
 dependencies = [
  "autocfg 1.0.0",
  "num-integer",
@@ -2631,9 +2609,9 @@ dependencies = [
 
 [[package]]
 name = "num-traits"
-version = "0.2.11"
+version = "0.2.12"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c62be47e61d1842b9170f0fdeec8eba98e60e90e5446449a0545e5152acd7096"
+checksum = "ac267bcc07f48ee5f8935ab0d24f316fb722d7a1292e2913f0cc196b29ffd611"
 dependencies = [
  "autocfg 1.0.0",
 ]
@@ -2751,15 +2729,6 @@ dependencies = [
  "shared_library",
 ]
 
-[[package]]
-name = "owning_ref"
-version = "0.3.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cdf84f41639e037b484f93433aa3897863b561ed65c6e59c7073d7c561710f37"
-dependencies = [
- "stable_deref_trait",
-]
-
 [[package]]
 name = "packed_simd"
 version = "0.3.3"
@@ -2796,16 +2765,6 @@ dependencies = [
  "pkg-config",
 ]
 
-[[package]]
-name = "parking_lot"
-version = "0.4.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "149d8f5b97f3c1133e3cfcd8886449959e856b557ff281e292b733d7c69e005e"
-dependencies = [
- "owning_ref",
- "parking_lot_core 0.2.14",
-]
-
 [[package]]
 name = "parking_lot"
 version = "0.9.0"
@@ -2827,18 +2786,6 @@ dependencies = [
  "parking_lot_core 0.7.2",
 ]
 
-[[package]]
-name = "parking_lot_core"
-version = "0.2.14"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4db1a8ccf734a7bce794cc19b3df06ed87ab2f3907036b693c68f56b4d4537fa"
-dependencies = [
- "libc",
- "rand 0.4.6",
- "smallvec 0.6.13",
- "winapi 0.3.8",
-]
-
 [[package]]
 name = "parking_lot_core"
 version = "0.6.2"
@@ -2912,7 +2859,7 @@ checksum = "10b4b44893d3c370407a1d6a5cfde7c41ae0478e31c516c85f67eb3adc51be6d"
 dependencies = [
  "proc-macro2 1.0.18",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -3010,15 +2957,6 @@ version = "0.1.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0afe1bd463b9e9ed51d0e0f0b50b6b146aec855c56fd182bb242388710a9b6de"
 
-[[package]]
-name = "proc-macro2"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1b06e2f335f48d24442b35a19df506a835fb3547bc3c06ef27340da9acf5cae7"
-dependencies = [
- "unicode-xid 0.1.0",
-]
-
 [[package]]
 name = "proc-macro2"
 version = "0.4.30"
@@ -3039,27 +2977,15 @@ dependencies = [
 
 [[package]]
 name = "prometheus"
-version = "0.7.0"
+version = "0.9.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5567486d5778e2c6455b1b90ff1c558f29e751fc018130fa182e15828e728af1"
+checksum = "dd0ced56dee39a6e960c15c74dc48849d614586db2eaada6497477af7c7811cd"
 dependencies = [
  "cfg-if",
  "fnv",
  "lazy_static",
- "quick-error",
  "spin",
-]
-
-[[package]]
-name = "prometheus-static-metric"
-version = "0.2.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1baa57413523cff73783204f73299a3f602ebcf51a5e64752b32bc1b3c376013"
-dependencies = [
- "lazy_static",
- "proc-macro2 0.3.8",
- "quote 0.5.2",
- "syn 0.13.11",
+ "thiserror",
 ]
 
 [[package]]
@@ -3077,15 +3003,6 @@ version = "1.2.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0"
 
-[[package]]
-name = "quote"
-version = "0.5.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9949cfe66888ffe1d53e6ec9d9f3b70714083854be20fd5e271b232a017401e8"
-dependencies = [
- "proc-macro2 0.3.8",
-]
-
 [[package]]
 name = "quote"
 version = "0.6.13"
@@ -3110,19 +3027,6 @@ version = "0.3.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "def50a86306165861203e7f84ecffbbdfdea79f0e51039b33de1e952358c47ac"
 
-[[package]]
-name = "rand"
-version = "0.4.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "552840b97013b1a26992c11eac34bdd778e464601a4c2054b5f0bff7c6761293"
-dependencies = [
- "fuchsia-cprng",
- "libc",
- "rand_core 0.3.1",
- "rdrand",
- "winapi 0.3.8",
-]
-
 [[package]]
 name = "rand"
 version = "0.5.6"
@@ -3397,9 +3301,9 @@ dependencies = [
 
 [[package]]
 name = "rodio"
-version = "0.10.0"
+version = "0.11.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1e0e0dfa7c8b17c6428f6e992a22ea595922cc86f946191b6b59e7ce96b77262"
+checksum = "73bbf260262fd5501b7a17d6827e0d25c1127e921eb177150a060faf6e217a70"
 dependencies = [
  "cpal",
  "hound",
@@ -3604,22 +3508,22 @@ checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
 
 [[package]]
 name = "serde"
-version = "1.0.111"
+version = "1.0.114"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c9124df5b40cbd380080b2cc6ab894c040a3070d995f5c9dc77e18c34a8ae37d"
+checksum = "5317f7588f0a5078ee60ef675ef96735a1442132dc645eb1d12c018620ed8cd3"
 dependencies = [
  "serde_derive",
 ]
 
 [[package]]
 name = "serde_derive"
-version = "1.0.111"
+version = "1.0.114"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3f2c3ac8e6ca1e9c80b8be1023940162bf81ae3cffbb1809474152f2ce1eb250"
+checksum = "2a0be94b04690fbaed37cddffc5c134bf537c8e3329d53e982fe04c374978f8e"
 dependencies = [
  "proc-macro2 1.0.18",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -3699,7 +3603,7 @@ checksum = "a1f37080f2751fbf091dbdebaa95bd6cf9dbf74ad1d50396b1908518a1747fdf"
 dependencies = [
  "proc-macro2 1.0.18",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -3802,12 +3706,6 @@ version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
 
-[[package]]
-name = "stable_deref_trait"
-version = "1.1.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "dba1a27d3efae4351c8051072d619e3ade2820635c3958d826bfea39d59b54c8"
-
 [[package]]
 name = "static_assertions"
 version = "1.1.0"
@@ -3855,7 +3753,7 @@ dependencies = [
  "quote 1.0.7",
  "serde",
  "serde_derive",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -3871,7 +3769,7 @@ dependencies = [
  "serde_derive",
  "serde_json",
  "sha1",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -3907,17 +3805,6 @@ version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "20e5f95e89d737f30cd1f98a9af9a85c2a1cc162cfedfba5a0c54cf92d7206fc"
 
-[[package]]
-name = "syn"
-version = "0.13.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "14f9bf6292f3a61d2c716723fdb789a41bbe104168e6f496dc6497e531ea1b9b"
-dependencies = [
- "proc-macro2 0.3.8",
- "quote 0.5.2",
- "unicode-xid 0.1.0",
-]
-
 [[package]]
 name = "syn"
 version = "0.15.44"
@@ -3931,9 +3818,9 @@ dependencies = [
 
 [[package]]
 name = "syn"
-version = "1.0.31"
+version = "1.0.33"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5304cfdf27365b7585c25d4af91b35016ed21ef88f17ced89c7093b43dba8b6"
+checksum = "e8d5d96e8cbb005d6959f119f773bfaebb5684296108fb32600c00cde305b2cd"
 dependencies = [
  "proc-macro2 1.0.18",
  "quote 1.0.7",
@@ -3948,7 +3835,7 @@ checksum = "b834f2d66f734cb897113e34aaff2f1ab4719ca946f9a7358dba8f8064148701"
 dependencies = [
  "proc-macro2 1.0.18",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
  "unicode-xid 0.2.0",
 ]
 
@@ -3961,6 +3848,26 @@ dependencies = [
  "unicode-width",
 ]
 
+[[package]]
+name = "thiserror"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7dfdd070ccd8ccb78f4ad66bf1982dc37f620ef696c6b5028fe2ed83dd3d0d08"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "1.0.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd80fc12f73063ac132ac92aceea36734f04a1d93c1240c6944e23a3b8841793"
+dependencies = [
+ "proc-macro2 1.0.18",
+ "quote 1.0.7",
+ "syn 1.0.33",
+]
+
 [[package]]
 name = "thread_local"
 version = "1.0.1"
@@ -4024,6 +3931,12 @@ dependencies = [
  "serde_json",
 ]
 
+[[package]]
+name = "tinyvec"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "53953d2d3a5ad81d9f844a32f14ebb121f50b650cd59d0ee2a07cf13c617efed"
+
 [[package]]
 name = "tokio"
 version = "0.1.22"
@@ -4195,7 +4108,7 @@ checksum = "99bbad0de3fd923c9c3232ead88510b783e5a4d16a6154adffa3d53308de984c"
 dependencies = [
  "proc-macro2 1.0.18",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
 ]
 
 [[package]]
@@ -4443,7 +4356,7 @@ dependencies = [
  "authc",
  "byteorder 1.3.4",
  "futures-executor",
- "futures-timer 3.0.2",
+ "futures-timer",
  "futures-util",
  "hashbrown",
  "image",
@@ -4461,7 +4374,6 @@ name = "veloren-common"
 version = "0.6.0"
 dependencies = [
  "authc",
- "bincode",
  "criterion",
  "crossbeam",
  "dot_vox",
@@ -4470,15 +4382,12 @@ dependencies = [
  "image",
  "indexmap",
  "lazy_static",
- "lz4-compress",
- "mio",
  "notify",
  "parking_lot 0.9.0",
  "rand 0.7.3",
  "rayon",
  "ron",
  "serde",
- "serde_derive",
  "serde_json",
  "specs",
  "specs-idvs",
@@ -4498,19 +4407,17 @@ dependencies = [
  "diesel_migrations",
  "dotenv",
  "futures-executor",
- "futures-timer 3.0.2",
+ "futures-timer",
  "futures-util",
  "hashbrown",
  "lazy_static",
  "libsqlite3-sys",
  "portpicker",
  "prometheus",
- "prometheus-static-metric",
  "rand 0.7.3",
  "ron",
  "scan_fmt",
  "serde",
- "serde_derive",
  "serde_json",
  "specs",
  "specs-idvs",
@@ -4548,7 +4455,7 @@ dependencies = [
  "criterion",
  "crossbeam",
  "deunicode",
- "directories",
+ "directories-next",
  "dispatch",
  "dot_vox",
  "euc",
@@ -4611,7 +4518,7 @@ dependencies = [
  "fxhash",
  "hashbrown",
  "image",
- "itertools 0.8.2",
+ "itertools",
  "lazy_static",
  "minifb",
  "noise",
@@ -4624,7 +4531,6 @@ dependencies = [
  "ron",
  "roots",
  "serde",
- "serde_derive",
  "tracing",
  "tracing-subscriber",
  "vek",
@@ -4717,7 +4623,7 @@ dependencies = [
  "log",
  "proc-macro2 1.0.18",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
  "wasm-bindgen-shared",
 ]
 
@@ -4739,7 +4645,7 @@ checksum = "3156052d8ec77142051a533cdd686cba889537b213f948cd1d20869926e68e92"
 dependencies = [
  "proc-macro2 1.0.18",
  "quote 1.0.7",
- "syn 1.0.31",
+ "syn 1.0.33",
  "wasm-bindgen-backend",
  "wasm-bindgen-shared",
 ]
diff --git a/client/Cargo.toml b/client/Cargo.toml
index 13219e28a2..8059f6abf1 100644
--- a/client/Cargo.toml
+++ b/client/Cargo.toml
@@ -12,8 +12,8 @@ byteorder = "1.3.2"
 uvth = "3.1.1"
 futures-util = "0.3"
 futures-executor = "0.3"
-futures-timer = "3.0"
-image = { version = "0.22.3", default-features = false, features = ["png"] }
+futures-timer = "2.0"
+image = { version = "0.22.5", default-features = false, features = ["png"] }
 num_cpus = "1.10.1"
 tracing = { version = "0.1", default-features = false }
 specs = "0.16.1"
diff --git a/common/Cargo.toml b/common/Cargo.toml
index ebe2941209..929390bc5e 100644
--- a/common/Cargo.toml
+++ b/common/Cargo.toml
@@ -13,23 +13,19 @@ specs-idvs = { git = "https://gitlab.com/veloren/specs-idvs.git", branch = "spec
 specs = { version = "0.16.1", features = ["serde", "storage-event-control"] }
 vek = { version = "0.11.0", features = ["serde"] }
 dot_vox = "4.0"
-image = { version = "0.22.3", default-features = false, features = ["png"] }
-mio = "0.6"
-serde = "1.0"
-serde_derive = "1.0"
-serde_json = "1.0.41"
+image = { version = "0.22.5", default-features = false, features = ["png"] }
+serde = { version = "1.0.110", features = ["derive"] }
+serde_json = "1.0.50"
 ron = { version = "0.6", default-features = false }
-bincode = "1.2.0"
 tracing = { version = "0.1", default-features = false }
 rand = "0.7"
-rayon = "^1.3.0"
+rayon = "1.3.0"
 lazy_static = "1.4.0"
-lz4-compress = "0.1.1"
 hashbrown = { version = "0.7.2", features = ["rayon", "serde", "nightly"] }
 find_folder = "0.3.0"
 parking_lot = "0.9.0"
 crossbeam = "0.7"
-notify = "5.0.0-pre.2"
+notify = "5.0.0-pre.3"
 indexmap = "1.3.0"
 sum_type = "0.2.0"
 authc = { git = "https://gitlab.com/veloren/auth.git", rev = "223a4097f7ebc8d451936dccb5e6517194bbf086" }
diff --git a/common/src/character.rs b/common/src/character.rs
index 6056b90017..09ed09fbfb 100644
--- a/common/src/character.rs
+++ b/common/src/character.rs
@@ -1,7 +1,7 @@
 //! Structs representing a playable Character
 
 use crate::comp;
-use serde_derive::{Deserialize, Serialize};
+use serde::{Deserialize, Serialize};
 
 /// The limit on how many characters that a player can have
 pub const MAX_CHARACTERS_PER_PLAYER: usize = 8;
diff --git a/common/src/comp/ability.rs b/common/src/comp/ability.rs
index 2eadd81053..cb5bba0419 100644
--- a/common/src/comp/ability.rs
+++ b/common/src/comp/ability.rs
@@ -6,6 +6,7 @@ use crate::{
     states::{triple_strike::*, *},
     sys::character_behavior::JoinData,
 };
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage};
 use specs_idvs::IdvStorage;
 use std::time::Duration;
diff --git a/common/src/comp/agent.rs b/common/src/comp/agent.rs
index 8c87de7b6a..d8bf6336db 100644
--- a/common/src/comp/agent.rs
+++ b/common/src/comp/agent.rs
@@ -1,4 +1,5 @@
 use crate::{path::Chaser, sync::Uid};
+use serde::{Deserialize, Serialize};
 use specs::{Component, Entity as EcsEntity, FlaggedStorage};
 use specs_idvs::IdvStorage;
 use vek::*;
diff --git a/common/src/comp/body.rs b/common/src/comp/body.rs
index f25d0a6b65..8f1b7482a0 100644
--- a/common/src/comp/body.rs
+++ b/common/src/comp/body.rs
@@ -16,6 +16,7 @@ use crate::{
     assets::{self, Asset},
     npc::NpcKind,
 };
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage};
 use specs_idvs::IdvStorage;
 use std::{fs::File, io::BufReader};
diff --git a/common/src/comp/body/biped_large.rs b/common/src/comp/body/biped_large.rs
index 6e26f4300e..0d79798692 100644
--- a/common/src/comp/body/biped_large.rs
+++ b/common/src/comp/body/biped_large.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng};
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 pub struct Body {
diff --git a/common/src/comp/body/bird_medium.rs b/common/src/comp/body/bird_medium.rs
index a66d9f2e0d..80522daf1e 100644
--- a/common/src/comp/body/bird_medium.rs
+++ b/common/src/comp/body/bird_medium.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng};
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 pub struct Body {
diff --git a/common/src/comp/body/bird_small.rs b/common/src/comp/body/bird_small.rs
index 92584d1aa0..8441f41b8f 100644
--- a/common/src/comp/body/bird_small.rs
+++ b/common/src/comp/body/bird_small.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng};
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 pub struct Body {
diff --git a/common/src/comp/body/critter.rs b/common/src/comp/body/critter.rs
index 6170515512..0c67b0218f 100644
--- a/common/src/comp/body/critter.rs
+++ b/common/src/comp/body/critter.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng};
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 pub struct Body {
diff --git a/common/src/comp/body/dragon.rs b/common/src/comp/body/dragon.rs
index 942e80e4e7..d4dae25a7d 100644
--- a/common/src/comp/body/dragon.rs
+++ b/common/src/comp/body/dragon.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng};
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 pub struct Body {
diff --git a/common/src/comp/body/fish_medium.rs b/common/src/comp/body/fish_medium.rs
index 47d715fd55..a3c2ee931e 100644
--- a/common/src/comp/body/fish_medium.rs
+++ b/common/src/comp/body/fish_medium.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng};
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 pub struct Body {
diff --git a/common/src/comp/body/fish_small.rs b/common/src/comp/body/fish_small.rs
index 18d3c5f5e2..6a2a46786a 100644
--- a/common/src/comp/body/fish_small.rs
+++ b/common/src/comp/body/fish_small.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng};
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 pub struct Body {
diff --git a/common/src/comp/body/golem.rs b/common/src/comp/body/golem.rs
index e4f430887b..455007f169 100644
--- a/common/src/comp/body/golem.rs
+++ b/common/src/comp/body/golem.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng};
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 pub struct Body {
diff --git a/common/src/comp/body/humanoid.rs b/common/src/comp/body/humanoid.rs
index d5105f250e..3785be2dbb 100644
--- a/common/src/comp/body/humanoid.rs
+++ b/common/src/comp/body/humanoid.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng, Rng};
+use serde::{Deserialize, Serialize};
 use vek::Rgb;
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
diff --git a/common/src/comp/body/object.rs b/common/src/comp/body/object.rs
index 865c4992e5..a591582980 100644
--- a/common/src/comp/body/object.rs
+++ b/common/src/comp/body/object.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng};
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 #[repr(u32)]
diff --git a/common/src/comp/body/quadruped_low.rs b/common/src/comp/body/quadruped_low.rs
index 9cd2999152..de08a7da58 100644
--- a/common/src/comp/body/quadruped_low.rs
+++ b/common/src/comp/body/quadruped_low.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng};
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 pub struct Body {
diff --git a/common/src/comp/body/quadruped_medium.rs b/common/src/comp/body/quadruped_medium.rs
index 7d19091065..1298be162d 100644
--- a/common/src/comp/body/quadruped_medium.rs
+++ b/common/src/comp/body/quadruped_medium.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng};
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 pub struct Body {
diff --git a/common/src/comp/body/quadruped_small.rs b/common/src/comp/body/quadruped_small.rs
index b44958ffb1..c190aa9e29 100644
--- a/common/src/comp/body/quadruped_small.rs
+++ b/common/src/comp/body/quadruped_small.rs
@@ -1,4 +1,5 @@
 use rand::{seq::SliceRandom, thread_rng};
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 pub struct Body {
diff --git a/common/src/comp/chat.rs b/common/src/comp/chat.rs
index 3bbd3014bc..589d808ad8 100644
--- a/common/src/comp/chat.rs
+++ b/common/src/comp/chat.rs
@@ -1,4 +1,5 @@
 use crate::{msg::ServerMsg, sync::Uid};
+use serde::{Deserialize, Serialize};
 use specs::Component;
 use specs_idvs::IdvStorage;
 use std::time::{Duration, Instant};
diff --git a/common/src/comp/controller.rs b/common/src/comp/controller.rs
index 606fcd9c14..ca8bcda1b0 100644
--- a/common/src/comp/controller.rs
+++ b/common/src/comp/controller.rs
@@ -1,4 +1,5 @@
 use crate::{comp::inventory::slot::Slot, sync::Uid, util::Dir};
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage};
 use specs_idvs::IdvStorage;
 use std::time::Duration;
diff --git a/common/src/comp/energy.rs b/common/src/comp/energy.rs
index 66e05b4faa..55f7017f16 100644
--- a/common/src/comp/energy.rs
+++ b/common/src/comp/energy.rs
@@ -1,3 +1,4 @@
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage};
 use specs_idvs::IdvStorage;
 
diff --git a/common/src/comp/inputs.rs b/common/src/comp/inputs.rs
index 4a1807ddc0..27b2a02907 100644
--- a/common/src/comp/inputs.rs
+++ b/common/src/comp/inputs.rs
@@ -1,3 +1,4 @@
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage, NullStorage};
 
 #[derive(Clone, Debug, Default, PartialEq, Serialize, Deserialize)]
diff --git a/common/src/comp/inventory/item/armor.rs b/common/src/comp/inventory/item/armor.rs
index da24abb905..3715c88b0b 100644
--- a/common/src/comp/inventory/item/armor.rs
+++ b/common/src/comp/inventory/item/armor.rs
@@ -1,3 +1,5 @@
+use serde::{Deserialize, Serialize};
+
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
 #[repr(u32)]
 pub enum Chest {
diff --git a/common/src/comp/inventory/item/lottery.rs b/common/src/comp/inventory/item/lottery.rs
index b1f94769b1..6cbeed52d7 100644
--- a/common/src/comp/inventory/item/lottery.rs
+++ b/common/src/comp/inventory/item/lottery.rs
@@ -1,5 +1,6 @@
 use crate::assets::{self, Asset};
 use rand::prelude::*;
+use serde::{Deserialize, Serialize};
 use std::{fs::File, io::BufReader};
 
 // Generate a random float between 0 and 1
diff --git a/common/src/comp/inventory/item/mod.rs b/common/src/comp/inventory/item/mod.rs
index e47ec5c533..8ebb2ba2b7 100644
--- a/common/src/comp/inventory/item/mod.rs
+++ b/common/src/comp/inventory/item/mod.rs
@@ -10,6 +10,7 @@ use crate::{
     effect::Effect,
     terrain::{Block, BlockKind},
 };
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage};
 use specs_idvs::IdvStorage;
 use std::{fs::File, io::BufReader};
diff --git a/common/src/comp/inventory/item/tool.rs b/common/src/comp/inventory/item/tool.rs
index 2f2dc32f81..19b741eed8 100644
--- a/common/src/comp/inventory/item/tool.rs
+++ b/common/src/comp/inventory/item/tool.rs
@@ -5,6 +5,7 @@ use crate::comp::{
     body::object, projectile, Body, CharacterAbility, Gravity, HealthChange, HealthSource,
     LightEmitter, Projectile,
 };
+use serde::{Deserialize, Serialize};
 use std::time::Duration;
 
 #[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
diff --git a/common/src/comp/inventory/mod.rs b/common/src/comp/inventory/mod.rs
index 2a0586eb9b..657386fec5 100644
--- a/common/src/comp/inventory/mod.rs
+++ b/common/src/comp/inventory/mod.rs
@@ -3,6 +3,7 @@ pub mod slot;
 
 use crate::assets;
 use item::{Consumable, Item, ItemKind};
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage, HashMapStorage};
 use specs_idvs::IdvStorage;
 use std::ops::Not;
diff --git a/common/src/comp/inventory/slot.rs b/common/src/comp/inventory/slot.rs
index d993fef01a..312a81ac3c 100644
--- a/common/src/comp/inventory/slot.rs
+++ b/common/src/comp/inventory/slot.rs
@@ -1,5 +1,6 @@
 use crate::{comp, comp::item};
 use comp::{Inventory, Loadout};
+use serde::{Deserialize, Serialize};
 use tracing::warn;
 
 #[derive(Clone, Copy, PartialEq, Debug, Serialize, Deserialize)]
diff --git a/common/src/comp/last.rs b/common/src/comp/last.rs
index dd10781530..53acdfb562 100644
--- a/common/src/comp/last.rs
+++ b/common/src/comp/last.rs
@@ -1,3 +1,4 @@
+use serde::{Deserialize, Serialize};
 use specs::{Component, VecStorage};
 use std::marker::Send;
 
diff --git a/common/src/comp/location.rs b/common/src/comp/location.rs
index 2bd3b48c6f..af22683abf 100644
--- a/common/src/comp/location.rs
+++ b/common/src/comp/location.rs
@@ -1,4 +1,5 @@
 use crate::state::Time;
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage};
 use specs_idvs::IdvStorage;
 use vek::*;
diff --git a/common/src/comp/misc.rs b/common/src/comp/misc.rs
index 5e27c698b0..14eecab757 100644
--- a/common/src/comp/misc.rs
+++ b/common/src/comp/misc.rs
@@ -1,4 +1,5 @@
 use crate::sync::Uid;
+use serde::{Deserialize, Serialize};
 use specs::Component;
 use specs_idvs::IdvStorage;
 
diff --git a/common/src/comp/phys.rs b/common/src/comp/phys.rs
index 34fc9a2c3e..e9496f047c 100644
--- a/common/src/comp/phys.rs
+++ b/common/src/comp/phys.rs
@@ -1,4 +1,5 @@
 use crate::{sync::Uid, util::Dir};
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage, NullStorage};
 use specs_idvs::IdvStorage;
 use vek::*;
diff --git a/common/src/comp/player.rs b/common/src/comp/player.rs
index 28f665d434..0527b20284 100644
--- a/common/src/comp/player.rs
+++ b/common/src/comp/player.rs
@@ -1,4 +1,5 @@
 use authc::Uuid;
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage, NullStorage};
 use specs_idvs::IdvStorage;
 
diff --git a/common/src/comp/projectile.rs b/common/src/comp/projectile.rs
index 9bfd5aeb81..d029075850 100644
--- a/common/src/comp/projectile.rs
+++ b/common/src/comp/projectile.rs
@@ -1,4 +1,5 @@
 use crate::{comp, sync::Uid};
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage};
 use specs_idvs::IdvStorage;
 use std::time::Duration;
diff --git a/common/src/comp/skills.rs b/common/src/comp/skills.rs
index 640da842cc..6c552fee60 100644
--- a/common/src/comp/skills.rs
+++ b/common/src/comp/skills.rs
@@ -1,4 +1,5 @@
 use lazy_static::lazy_static;
+use serde::{Deserialize, Serialize};
 use std::{
     collections::{HashMap, HashSet},
     hash::Hash,
diff --git a/common/src/comp/stats.rs b/common/src/comp/stats.rs
index ff3c370d16..3ddf2fc108 100644
--- a/common/src/comp/stats.rs
+++ b/common/src/comp/stats.rs
@@ -3,6 +3,7 @@ use crate::{
     comp::{body::humanoid::Species, skills::SkillSet, Body},
     sync::Uid,
 };
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage};
 use specs_idvs::IdvStorage;
 use std::{error::Error, fmt};
diff --git a/common/src/comp/visual.rs b/common/src/comp/visual.rs
index 7d4f4c59f5..013f27aa2c 100644
--- a/common/src/comp/visual.rs
+++ b/common/src/comp/visual.rs
@@ -1,3 +1,4 @@
+use serde::{Deserialize, Serialize};
 use specs::{Component, FlaggedStorage};
 use specs_idvs::IdvStorage;
 use vek::*;
diff --git a/common/src/effect.rs b/common/src/effect.rs
index 46b09261c3..2fb644e7f6 100644
--- a/common/src/effect.rs
+++ b/common/src/effect.rs
@@ -1,4 +1,5 @@
 use crate::comp;
+use serde::{Deserialize, Serialize};
 
 /// An effect that may be applied to an entity
 #[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, Serialize, Deserialize)]
diff --git a/common/src/lib.rs b/common/src/lib.rs
index 5111e5a346..c2d04628e3 100644
--- a/common/src/lib.rs
+++ b/common/src/lib.rs
@@ -11,8 +11,6 @@
     option_zip
 )]
 
-#[macro_use] extern crate serde_derive;
-
 pub mod assets;
 pub mod astar;
 pub mod character;
diff --git a/common/src/msg/client.rs b/common/src/msg/client.rs
index 59022b9a78..2b076fe504 100644
--- a/common/src/msg/client.rs
+++ b/common/src/msg/client.rs
@@ -3,6 +3,7 @@ use crate::{
     comp::{Skill, SkillGroupType},
     terrain::block::Block,
 };
+use serde::{Deserialize, Serialize};
 use vek::*;
 
 /// Messages sent from the client to the server
diff --git a/common/src/msg/ecs_packet.rs b/common/src/msg/ecs_packet.rs
index 08cd5f52ad..1df92d9382 100644
--- a/common/src/msg/ecs_packet.rs
+++ b/common/src/msg/ecs_packet.rs
@@ -1,5 +1,5 @@
 use crate::{comp, sync};
-use serde_derive::{Deserialize, Serialize};
+use serde::{Deserialize, Serialize};
 use std::marker::PhantomData;
 use sum_type::sum_type;
 
diff --git a/common/src/msg/mod.rs b/common/src/msg/mod.rs
index dc3ff97552..f7d8c3d118 100644
--- a/common/src/msg/mod.rs
+++ b/common/src/msg/mod.rs
@@ -11,6 +11,7 @@ pub use self::{
         RequestStateError, ServerInfo, ServerMsg,
     },
 };
+use serde::{Deserialize, Serialize};
 
 #[derive(Debug, Clone, Copy, PartialEq, Serialize, Deserialize)]
 pub enum ClientState {
diff --git a/common/src/msg/server.rs b/common/src/msg/server.rs
index f771ed40ad..a766a7ef37 100644
--- a/common/src/msg/server.rs
+++ b/common/src/msg/server.rs
@@ -7,6 +7,7 @@ use crate::{
 };
 use authc::AuthClientError;
 use hashbrown::HashMap;
+use serde::{Deserialize, Serialize};
 use vek::*;
 
 #[derive(Debug, Clone, Serialize, Deserialize)]
diff --git a/common/src/npc.rs b/common/src/npc.rs
index 03727b6917..15ddc96a2e 100644
--- a/common/src/npc.rs
+++ b/common/src/npc.rs
@@ -4,6 +4,7 @@ use crate::{
 };
 use lazy_static::lazy_static;
 use rand::seq::SliceRandom;
+use serde::Deserialize;
 use std::{str::FromStr, sync::Arc};
 
 #[derive(Clone, Copy, PartialEq)]
diff --git a/common/src/state.rs b/common/src/state.rs
index d932b57ef7..edae2d01b0 100644
--- a/common/src/state.rs
+++ b/common/src/state.rs
@@ -9,7 +9,7 @@ use crate::{
 };
 use hashbrown::{HashMap, HashSet};
 use rayon::{ThreadPool, ThreadPoolBuilder};
-use serde_derive::{Deserialize, Serialize};
+use serde::{Deserialize, Serialize};
 use specs::{
     shred::{Fetch, FetchMut},
     storage::{MaskedStorage as EcsMaskedStorage, Storage as EcsStorage},
diff --git a/common/src/states/basic_block.rs b/common/src/states/basic_block.rs
index b60b7e548f..c0b78bf004 100644
--- a/common/src/states/basic_block.rs
+++ b/common/src/states/basic_block.rs
@@ -3,6 +3,7 @@ use crate::{
     comp::StateUpdate,
     sys::character_behavior::{CharacterBehavior, JoinData},
 };
+use serde::{Deserialize, Serialize};
 
 // const BLOCK_ACCEL: f32 = 30.0;
 // const BLOCK_SPEED: f32 = 75.0;
diff --git a/common/src/states/basic_melee.rs b/common/src/states/basic_melee.rs
index d67681cc0c..3fe1bcf9e6 100644
--- a/common/src/states/basic_melee.rs
+++ b/common/src/states/basic_melee.rs
@@ -3,6 +3,7 @@ use crate::{
     states::utils::*,
     sys::character_behavior::*,
 };
+use serde::{Deserialize, Serialize};
 use std::time::Duration;
 
 #[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
diff --git a/common/src/states/basic_ranged.rs b/common/src/states/basic_ranged.rs
index 6596283491..5b1f7cf0d7 100644
--- a/common/src/states/basic_ranged.rs
+++ b/common/src/states/basic_ranged.rs
@@ -4,6 +4,7 @@ use crate::{
     states::utils::*,
     sys::character_behavior::*,
 };
+use serde::{Deserialize, Serialize};
 use std::time::Duration;
 
 #[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
diff --git a/common/src/states/boost.rs b/common/src/states/boost.rs
index 71d1e948a2..3916109536 100644
--- a/common/src/states/boost.rs
+++ b/common/src/states/boost.rs
@@ -3,6 +3,7 @@ use crate::{
     states::utils::*,
     sys::character_behavior::*,
 };
+use serde::{Deserialize, Serialize};
 use std::time::Duration;
 
 #[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize)]
diff --git a/common/src/states/climb.rs b/common/src/states/climb.rs
index 21be05230b..3a5ca7093e 100644
--- a/common/src/states/climb.rs
+++ b/common/src/states/climb.rs
@@ -7,6 +7,7 @@ use crate::{
     },
     util::Dir,
 };
+use serde::{Deserialize, Serialize};
 use vek::{
     vec::{Vec2, Vec3},
     Lerp,
diff --git a/common/src/states/dance.rs b/common/src/states/dance.rs
index 1d1b9c49c1..263fca3f67 100644
--- a/common/src/states/dance.rs
+++ b/common/src/states/dance.rs
@@ -3,6 +3,7 @@ use crate::{
     comp::{CharacterState, StateUpdate},
     sys::character_behavior::{CharacterBehavior, JoinData},
 };
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)]
 pub struct Data;
diff --git a/common/src/states/dash_melee.rs b/common/src/states/dash_melee.rs
index 8964b35638..75f9efded4 100644
--- a/common/src/states/dash_melee.rs
+++ b/common/src/states/dash_melee.rs
@@ -3,6 +3,7 @@ use crate::{
     states::utils::*,
     sys::character_behavior::*,
 };
+use serde::{Deserialize, Serialize};
 use std::time::Duration;
 use vek::Vec3;
 
diff --git a/common/src/states/equipping.rs b/common/src/states/equipping.rs
index 29cf1d8453..ebc91062ff 100644
--- a/common/src/states/equipping.rs
+++ b/common/src/states/equipping.rs
@@ -3,6 +3,7 @@ use crate::{
     comp::{CharacterState, StateUpdate},
     sys::character_behavior::{CharacterBehavior, JoinData},
 };
+use serde::{Deserialize, Serialize};
 use std::time::Duration;
 
 #[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)]
diff --git a/common/src/states/glide.rs b/common/src/states/glide.rs
index d49619c67f..c8c06b68be 100644
--- a/common/src/states/glide.rs
+++ b/common/src/states/glide.rs
@@ -4,6 +4,7 @@ use crate::{
     sys::character_behavior::{CharacterBehavior, JoinData},
     util::Dir,
 };
+use serde::{Deserialize, Serialize};
 use vek::Vec2;
 
 // Gravity is 9.81 * 4, so this makes gravity equal to .15
diff --git a/common/src/states/leap_melee.rs b/common/src/states/leap_melee.rs
index 8906c94f46..44bc647f54 100644
--- a/common/src/states/leap_melee.rs
+++ b/common/src/states/leap_melee.rs
@@ -3,6 +3,7 @@ use crate::{
     states::utils::*,
     sys::character_behavior::*,
 };
+use serde::{Deserialize, Serialize};
 use std::time::Duration;
 use vek::Vec3;
 
diff --git a/common/src/states/roll.rs b/common/src/states/roll.rs
index 3c28ea1005..3dc7887e7f 100644
--- a/common/src/states/roll.rs
+++ b/common/src/states/roll.rs
@@ -3,6 +3,7 @@ use crate::{
     sys::character_behavior::{CharacterBehavior, JoinData},
     util::Dir,
 };
+use serde::{Deserialize, Serialize};
 use std::time::Duration;
 use vek::Vec3;
 
diff --git a/common/src/states/sit.rs b/common/src/states/sit.rs
index d471e390e2..1d34d0fc44 100644
--- a/common/src/states/sit.rs
+++ b/common/src/states/sit.rs
@@ -3,6 +3,7 @@ use crate::{
     comp::{CharacterState, StateUpdate},
     sys::character_behavior::{CharacterBehavior, JoinData},
 };
+use serde::{Deserialize, Serialize};
 
 #[derive(Copy, Clone, Debug, PartialEq, Serialize, Deserialize, Eq, Hash)]
 pub struct Data;
diff --git a/common/src/states/triple_strike.rs b/common/src/states/triple_strike.rs
index 2ac16f678e..a89e9a8756 100644
--- a/common/src/states/triple_strike.rs
+++ b/common/src/states/triple_strike.rs
@@ -3,6 +3,7 @@ use crate::{
     states::utils::*,
     sys::character_behavior::{CharacterBehavior, JoinData},
 };
+use serde::{Deserialize, Serialize};
 use std::time::Duration;
 use vek::vec::Vec3;
 use HoldingState::*;
diff --git a/common/src/sync/uid.rs b/common/src/sync/uid.rs
index 985c6a57b8..cff2dc9664 100644
--- a/common/src/sync/uid.rs
+++ b/common/src/sync/uid.rs
@@ -1,4 +1,4 @@
-use serde_derive::{Deserialize, Serialize};
+use serde::{Deserialize, Serialize};
 use specs::{
     saveload::{Marker, MarkerAllocator},
     world::EntitiesRes,
diff --git a/common/src/terrain/biome.rs b/common/src/terrain/biome.rs
index 4c5b29aacf..8e196d4e4b 100644
--- a/common/src/terrain/biome.rs
+++ b/common/src/terrain/biome.rs
@@ -1,4 +1,4 @@
-use serde_derive::{Deserialize, Serialize};
+use serde::{Deserialize, Serialize};
 
 #[derive(Debug, Copy, Clone, Serialize, Deserialize)]
 pub enum BiomeKind {
diff --git a/common/src/terrain/block.rs b/common/src/terrain/block.rs
index c80a7e3bf4..6c69a9ee35 100644
--- a/common/src/terrain/block.rs
+++ b/common/src/terrain/block.rs
@@ -1,5 +1,5 @@
 use crate::vol::Vox;
-use serde_derive::{Deserialize, Serialize};
+use serde::{Deserialize, Serialize};
 use std::ops::Deref;
 use vek::*;
 
diff --git a/common/src/terrain/chonk.rs b/common/src/terrain/chonk.rs
index 0394184bde..bda7d955e9 100644
--- a/common/src/terrain/chonk.rs
+++ b/common/src/terrain/chonk.rs
@@ -5,7 +5,7 @@ use crate::{
     },
     volumes::chunk::{Chunk, ChunkError, ChunkPosIter, ChunkVolIter},
 };
-use serde_derive::{Deserialize, Serialize};
+use serde::{Deserialize, Serialize};
 use std::marker::PhantomData;
 use vek::*;
 
diff --git a/common/src/terrain/mod.rs b/common/src/terrain/mod.rs
index 0b9a348325..55e7b56013 100644
--- a/common/src/terrain/mod.rs
+++ b/common/src/terrain/mod.rs
@@ -9,9 +9,9 @@ pub use self::{
     block::{Block, BlockKind},
     structure::Structure,
 };
+use serde::{Deserialize, Serialize};
 
 use crate::{vol::RectVolSize, volumes::vol_grid_2d::VolGrid2d};
-use serde_derive::{Deserialize, Serialize};
 use vek::*;
 
 // TerrainChunkSize
diff --git a/common/src/terrain/structure.rs b/common/src/terrain/structure.rs
index 3242c4deac..315e70065e 100644
--- a/common/src/terrain/structure.rs
+++ b/common/src/terrain/structure.rs
@@ -5,6 +5,7 @@ use crate::{
     volumes::dyna::{Dyna, DynaError},
 };
 use dot_vox::DotVoxData;
+use serde::Deserialize;
 use std::{fs::File, io::BufReader, sync::Arc};
 use vek::*;
 
diff --git a/common/src/util/dir.rs b/common/src/util/dir.rs
index 41bfe0ffbd..22aa1b0fe6 100644
--- a/common/src/util/dir.rs
+++ b/common/src/util/dir.rs
@@ -1,3 +1,4 @@
+use serde::{Deserialize, Serialize};
 use tracing::warn;
 use vek::*;
 
diff --git a/common/src/volumes/chunk.rs b/common/src/volumes/chunk.rs
index 233f3974da..54e8453b3b 100644
--- a/common/src/volumes/chunk.rs
+++ b/common/src/volumes/chunk.rs
@@ -1,7 +1,7 @@
 use crate::vol::{
     BaseVol, IntoPosIterator, IntoVolIterator, RasterableVol, ReadVol, VolSize, Vox, WriteVol,
 };
-use serde_derive::{Deserialize, Serialize};
+use serde::{Deserialize, Serialize};
 use std::{iter::Iterator, marker::PhantomData};
 use vek::*;
 
diff --git a/common/src/volumes/dyna.rs b/common/src/volumes/dyna.rs
index 5e2c6bc17b..617643a038 100644
--- a/common/src/volumes/dyna.rs
+++ b/common/src/volumes/dyna.rs
@@ -2,7 +2,7 @@ use crate::vol::{
     BaseVol, DefaultPosIterator, DefaultVolIterator, IntoPosIterator, IntoVolIterator, ReadVol,
     SizedVol, Vox, WriteVol,
 };
-use serde_derive::{Deserialize, Serialize};
+use serde::{Deserialize, Serialize};
 use vek::*;
 
 #[derive(Debug, Clone)]
diff --git a/network/Cargo.toml b/network/Cargo.toml
index eac162448b..72bdde9ebc 100644
--- a/network/Cargo.toml
+++ b/network/Cargo.toml
@@ -14,11 +14,12 @@ bincode = "1.2"
 serde = { version = "1.0" }
 #sending
 crossbeam-channel = "0.4.2"
+# NOTE: Upgrading async-std can trigger spontanious crashes for `network`ing. Consider elaborate tests before upgrading
 async-std = { version = "~1.5", default-features = false, features = ["std", "async-task", "default"] }
 #tracing and metrics
 tracing = { version = "0.1", default-features = false }
 tracing-futures = "0.2"
-prometheus = { version = "0.7", default-features = false }
+prometheus = { version = "0.9", default-features = false }
 #async
 futures = { version = "0.3", features = ["thread-pool"] }
 #mpsc channel registry
@@ -27,4 +28,5 @@ rand = { version = "0.7" }
 
 [dev-dependencies]
 tracing-subscriber = { version = "0.2.3", default-features = false, features = ["env-filter", "fmt", "chrono", "ansi", "smallvec"] }
+# `uvth` needed for doc tests
 uvth = { version = ">= 3.0, <= 4.0", default-features = false }
\ No newline at end of file
diff --git a/network/examples/network-speed/Cargo.toml b/network/examples/network-speed/Cargo.toml
index 10ec82e375..fe00f5f352 100644
--- a/network/examples/network-speed/Cargo.toml
+++ b/network/examples/network-speed/Cargo.toml
@@ -15,6 +15,6 @@ futures = { version = "0.3", default-features = false }
 tracing = { version = "0.1", default-features = false }
 tracing-subscriber = { version = "0.2.3", default-features = false, features = ["env-filter", "fmt", "chrono", "ansi", "smallvec"] }
 bincode = "1.2"
-prometheus = "0.7"
+prometheus = "0.9"
 tiny_http = "0.7.0"
 serde = { version = "1.0", features = ["derive"] }
\ No newline at end of file
diff --git a/server/Cargo.toml b/server/Cargo.toml
index 2621f15a00..c19e454878 100644
--- a/server/Cargo.toml
+++ b/server/Cargo.toml
@@ -21,23 +21,21 @@ vek = "0.11.0"
 uvth = "3.1.1"
 futures-util = "0.3"
 futures-executor = "0.3"
-futures-timer = "3.0"
+futures-timer = "2.0"
 lazy_static = "1.4.0"
 scan_fmt = "0.2.4"
 ron = { version = "0.6", default-features = false }
-serde = "1.0"
-serde_derive = "1.0"
-serde_json = "1.0"
+serde = { version = "1.0.110", features = ["derive"] }
+serde_json = "1.0.50"
 rand = { version = "0.7", features = ["small_rng"] }
 chrono = "0.4.9"
 hashbrown = { version = "0.7.2", features = ["rayon", "serde", "nightly"] }
-crossbeam = "=0.7.2"
-prometheus = { version = "0.7", default-features = false}
-prometheus-static-metric = "0.2"
+crossbeam = "0.7.2"
+prometheus = { version = "0.9", default-features = false}
 tiny_http = "0.7.0"
 portpicker = { git = "https://github.com/xMAC94x/portpicker-rs" }
 authc = { git = "https://gitlab.com/veloren/auth.git", rev = "223a4097f7ebc8d451936dccb5e6517194bbf086" }
-libsqlite3-sys = { version = "0.9.1", features = ["bundled"] }
+libsqlite3-sys = { version = "0.18", features = ["bundled"] }
 diesel = { version = "1.4.3", features = ["sqlite"] }
 diesel_migrations = "1.4.0"
 dotenv = "0.15.0"
diff --git a/server/src/settings.rs b/server/src/settings.rs
index 11ce752c8c..9e0d0f637a 100644
--- a/server/src/settings.rs
+++ b/server/src/settings.rs
@@ -1,5 +1,5 @@
 use portpicker::pick_unused_port;
-use serde_derive::{Deserialize, Serialize};
+use serde::{Deserialize, Serialize};
 use std::{fs, io::prelude::*, net::SocketAddr, path::PathBuf};
 use tracing::{error, warn};
 use world::sim::FileOpts;
diff --git a/voxygen/Cargo.toml b/voxygen/Cargo.toml
index e16d06f1a3..01bce81ce9 100644
--- a/voxygen/Cargo.toml
+++ b/voxygen/Cargo.toml
@@ -55,13 +55,13 @@ serde_derive = "1.0"
 ron = { version = "0.6", default-features = false }
 guillotiere = { git = "https://github.com/Imberflur/guillotiere" }
 msgbox = { git = "https://github.com/bekker/msgbox-rs.git", default-features = false, rev = "68fe39a", optional = true }
-directories = "2.0.2"
-num = "0.2.0"
+directories-next = "1.0.1"
+num = "0.2"
 backtrace = "0.3.40"
 rand = "0.7"
 treeculler = { git = "https://gitlab.com/yusdacra/treeculler.git" }
-rodio = { version = "0.10", default-features = false, features = ["wav", "vorbis"] }
-cpal = "0.10"
+rodio = { version = "0.11", default-features = false, features = ["wav", "vorbis"] }
+cpal = "0.11"
 crossbeam = "=0.7.2"
 hashbrown = { version = "0.7.2", features = ["rayon", "serde", "nightly"] }
 chrono = "0.4.9"
@@ -69,7 +69,7 @@ bincode = "1.2"
 deunicode = "1.0"
 uvth = "3.1.1"
 authc = { git = "https://gitlab.com/veloren/auth.git", rev = "223a4097f7ebc8d451936dccb5e6517194bbf086" }
-const-tweaker = { version = "0.2.5", optional = true }
+const-tweaker = { version = "0.3.1", optional = true }
 
 # Logging
 tracing = "0.1" 
@@ -78,14 +78,14 @@ tracing-log = "0.1.1"
 tracing-appender = "0.1"
 
 [target.'cfg(target_os = "macos")'.dependencies]
-dispatch = "0.1.4"
+dispatch = "0.2"
 
 [target.'cfg(windows)'.build-dependencies]
 winres = "0.1"
 
 [dev-dependencies]
 criterion = "0.3"
-git2 = "0.10"
+git2 = "0.13"
 world = { package = "veloren-world", path = "../world" }
 gfx_window_glutin = { version = "0.31.0", features = ["headless"] }
 
diff --git a/voxygen/src/profile.rs b/voxygen/src/profile.rs
index 75d6ee9573..9ebb3d480d 100644
--- a/voxygen/src/profile.rs
+++ b/voxygen/src/profile.rs
@@ -1,5 +1,5 @@
 use crate::hud;
-use directories::ProjectDirs;
+use directories_next::ProjectDirs;
 use hashbrown::HashMap;
 use serde_derive::{Deserialize, Serialize};
 use std::{fs, io::prelude::*, path::PathBuf};
diff --git a/voxygen/src/settings.rs b/voxygen/src/settings.rs
index 64b51eb2df..589f3a109c 100644
--- a/voxygen/src/settings.rs
+++ b/voxygen/src/settings.rs
@@ -5,7 +5,7 @@ use crate::{
     ui::ScaleMode,
     window::{GameInput, KeyMouse},
 };
-use directories::{ProjectDirs, UserDirs};
+use directories_next::{ProjectDirs, UserDirs};
 use glutin::{MouseButton, VirtualKeyCode};
 use hashbrown::{HashMap, HashSet};
 use serde_derive::{Deserialize, Serialize};
diff --git a/world/Cargo.toml b/world/Cargo.toml
index 9474e99bbc..238df2bc13 100644
--- a/world/Cargo.toml
+++ b/world/Cargo.toml
@@ -9,11 +9,11 @@ bincode = "1.2.0"
 common = { package = "veloren-common", path = "../common" }
 bitvec = "0.17.4"
 fxhash = "0.2.1"
-image = { version = "0.22.3", default-features = false, features = ["png"] }
-itertools = "0.8.2"
+image = { version = "0.22.5", default-features = false, features = ["png"] }
+itertools = "0.9"
 vek = "0.11.0"
 noise = { version = "0.6.0", default-features = false }
-num = "0.2.0"
+num = "0.2"
 ordered-float = "1.0"
 hashbrown = { version = "0.7.2", features = ["rayon", "serde", "nightly"] }
 lazy_static = "1.4.0"
@@ -24,8 +24,7 @@ arr_macro = "0.1.2"
 packed_simd = "0.3.3"
 rayon = "^1.3.0"
 roots = "0.0.5"
-serde = "1.0"
-serde_derive = "1.0"
+serde = { version = "1.0.110", features = ["derive"] }
 ron = { version = "0.6", default-features = false }
 
 [dev-dependencies]
diff --git a/world/src/sim/mod.rs b/world/src/sim/mod.rs
index 61ed2602f8..fc53e3a06f 100644
--- a/world/src/sim/mod.rs
+++ b/world/src/sim/mod.rs
@@ -44,7 +44,7 @@ use num::{Float, Signed};
 use rand::{Rng, SeedableRng};
 use rand_chacha::ChaChaRng;
 use rayon::prelude::*;
-use serde_derive::{Deserialize, Serialize};
+use serde::{Deserialize, Serialize};
 use std::{
     f32, f64,
     fs::File,