diff --git a/README.md b/README.md
index 4c81b61fdf9b64f09cee4b939fd1ff91e4f2a42b..3142e8991246b23048c2e8aa6f8832e324739d91 100644
--- a/README.md
+++ b/README.md
@@ -60,6 +60,10 @@ following commands from the root of each rust workspaces:
 
 ```sh
 cargo depgraph --all-deps --dedup-transitive-deps | dot -Tpng > dependencies.png
+cargo depgraph --all-deps --dedup-transitive-deps --filter-platform x86_64-unknown-linux-gnu | dot -Tpng > dependencies.linux.png
+cargo depgraph --all-deps --dedup-transitive-deps --filter-platform x86_64-pc-windows-msvc   | dot -Tpng > dependencies.win32.png
+cargo depgraph --all-deps --dedup-transitive-deps --filter-platform aarch64-apple-darwin     | dot -Tpng > dependencies.macos.png
+cargo depgraph --all-deps --dedup-transitive-deps --filter-platform x86_64-apple-darwin      | dot -Tpng > dependencies.macos-arm.png
 ```
 
 ### Building instructions
diff --git a/src/rust/Cargo.lock b/src/rust/Cargo.lock
index 72616ca1b8b51ccad3180e1f951791eaaa63f4a2..29e4b2022631299909fd20a7ba8e394026e5fb90 100644
--- a/src/rust/Cargo.lock
+++ b/src/rust/Cargo.lock
@@ -71,9 +71,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
 
 [[package]]
 name = "clap"
-version = "4.1.3"
+version = "4.1.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d8d93d855ce6a0aa87b8473ef9169482f40abaa2e9e0993024c35c902cbd5920"
+checksum = "f13b9c79b5d1dd500d20ef541215a6423c75829ef43117e1b4d17fd8af0b5d76"
 dependencies = [
  "bitflags",
  "clap_derive",
@@ -115,33 +115,6 @@ dependencies = [
  "thiserror",
 ]
 
-[[package]]
-name = "cookie"
-version = "0.16.2"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb"
-dependencies = [
- "percent-encoding",
- "time",
- "version_check",
-]
-
-[[package]]
-name = "cookie_store"
-version = "0.16.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e4b6aa369f41f5faa04bb80c9b1f4216ea81646ed6124d76ba5c49a7aafd9cd"
-dependencies = [
- "cookie",
- "idna 0.2.3",
- "log",
- "publicsuffix",
- "serde",
- "serde_json",
- "time",
- "url",
-]
-
 [[package]]
 name = "core-foundation"
 version = "0.9.3"
@@ -160,9 +133,9 @@ checksum = "5827cebf4670468b8772dd191856768aedcb1b0278a04f989f7766351917b9dc"
 
 [[package]]
 name = "diesel"
-version = "2.0.2"
+version = "2.0.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "68c186a7418a2aac330bb76cde82f16c36b03a66fb91db32d20214311f9f6545"
+checksum = "4391a22b19c916e50bec4d6140f29bdda3e3bb187223fe6e3ea0b6e4d1021c04"
 dependencies = [
  "diesel_derives",
  "libsqlite3-sys",
@@ -191,12 +164,6 @@ dependencies = [
  "migrations_macros",
 ]
 
-[[package]]
-name = "either"
-version = "1.8.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797"
-
 [[package]]
 name = "encoding_rs"
 version = "0.8.31"
@@ -402,17 +369,6 @@ dependencies = [
  "tokio-rustls",
 ]
 
-[[package]]
-name = "idna"
-version = "0.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "418a0a6fab821475f634efe3ccc45c013f742efe03d853e8d3355d5cb850ecf8"
-dependencies = [
- "matches",
- "unicode-bidi",
- "unicode-normalization",
-]
-
 [[package]]
 name = "idna"
 version = "0.3.0"
@@ -468,7 +424,6 @@ dependencies = [
 name = "kurisu_api"
 version = "0.1.0"
 dependencies = [
- "log",
  "serde",
 ]
 
@@ -484,7 +439,6 @@ version = "0.1.0"
 dependencies = [
  "lazy_static",
  "libc",
- "log",
 ]
 
 [[package]]
@@ -492,7 +446,6 @@ name = "lektor_config"
 version = "0.1.0"
 dependencies = [
  "lektor_c_compat",
- "log",
  "serde",
  "thiserror",
 ]
@@ -501,11 +454,11 @@ dependencies = [
 name = "lektor_db"
 version = "0.1.0"
 dependencies = [
+ "commons",
  "diesel",
  "diesel_migrations",
  "kurisu_api",
  "lektor_c_compat",
- "log",
  "serde",
  "thiserror",
 ]
@@ -516,7 +469,6 @@ version = "0.1.0"
 dependencies = [
  "kurisu_api",
  "lektor_c_compat",
- "log",
  "reqwest",
  "serde",
 ]
@@ -531,7 +483,7 @@ dependencies = [
  "lektor_config",
  "lektor_db",
  "lektor_repo",
- "log",
+ "libc",
  "toml",
 ]
 
@@ -578,12 +530,6 @@ dependencies = [
  "cfg-if",
 ]
 
-[[package]]
-name = "matches"
-version = "0.1.10"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2532096657941c2fea9c289d370a250971c689d4f143798ff67113ec042024a5"
-
 [[package]]
 name = "memchr"
 version = "2.5.0"
@@ -617,16 +563,6 @@ version = "0.3.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
 
-[[package]]
-name = "mime_guess"
-version = "2.0.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4192263c238a5f0d0c6bfd21f336a313a4ce1c450542449ca191bb657b4642ef"
-dependencies = [
- "mime",
- "unicase",
-]
-
 [[package]]
 name = "mio"
 version = "0.8.5"
@@ -724,22 +660,6 @@ dependencies = [
  "unicode-ident",
 ]
 
-[[package]]
-name = "psl-types"
-version = "2.0.11"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "33cb294fe86a74cbcf50d4445b37da762029549ebeea341421c7c70370f86cac"
-
-[[package]]
-name = "publicsuffix"
-version = "2.2.3"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "96a8c1bda5ae1af7f99a2962e49df150414a43d62404644d98dd5c3a93d07457"
-dependencies = [
- "idna 0.3.0",
- "psl-types",
-]
-
 [[package]]
 name = "quote"
 version = "1.0.23"
@@ -757,8 +677,6 @@ checksum = "21eed90ec8570952d53b772ecf8f206aa1ec9a3d76b2521c56c42973f2d91ee9"
 dependencies = [
  "base64",
  "bytes",
- "cookie",
- "cookie_store",
  "encoding_rs",
  "futures-core",
  "futures-util",
@@ -771,7 +689,6 @@ dependencies = [
  "js-sys",
  "log",
  "mime",
- "mime_guess",
  "once_cell",
  "percent-encoding",
  "pin-project-lite",
@@ -783,7 +700,6 @@ dependencies = [
  "serde_urlencoded",
  "tokio",
  "tokio-rustls",
- "tokio-socks",
  "tower-service",
  "url",
  "wasm-bindgen",
@@ -891,9 +807,9 @@ dependencies = [
 
 [[package]]
 name = "security-framework"
-version = "2.8.0"
+version = "2.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "645926f31b250a2dca3c232496c2d898d91036e45ca0e97e0e2390c54e11be36"
+checksum = "7c4437699b6d34972de58652c68b98cb5b53a4199ab126db8e20ec8ded29a721"
 dependencies = [
  "bitflags",
  "core-foundation",
@@ -1033,33 +949,6 @@ dependencies = [
  "syn",
 ]
 
-[[package]]
-name = "time"
-version = "0.3.17"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a561bf4617eebd33bca6434b988f39ed798e527f51a1e797d0ee4f61c0a38376"
-dependencies = [
- "itoa",
- "serde",
- "time-core",
- "time-macros",
-]
-
-[[package]]
-name = "time-core"
-version = "0.1.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2e153e1f1acaef8acc537e68b44906d2db6436e2b35ac2c6b42640fff91f00fd"
-
-[[package]]
-name = "time-macros"
-version = "0.2.6"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d967f99f534ca7e495c575c62638eebc2898a8c84c119b89e250477bc4ba16b2"
-dependencies = [
- "time-core",
-]
-
 [[package]]
 name = "tinyvec"
 version = "1.6.0"
@@ -1115,18 +1004,6 @@ dependencies = [
  "webpki",
 ]
 
-[[package]]
-name = "tokio-socks"
-version = "0.5.1"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51165dfa029d2a65969413a6cc96f354b86b464498702f174a4efa13608fd8c0"
-dependencies = [
- "either",
- "futures-util",
- "thiserror",
- "tokio",
-]
-
 [[package]]
 name = "tokio-util"
 version = "0.7.4"
@@ -1183,15 +1060,6 @@ version = "0.2.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "3528ecfd12c466c6f163363caf2d02a71161dd5e1cc6ae7b34207ea2d42d81ed"
 
-[[package]]
-name = "unicase"
-version = "2.6.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6"
-dependencies = [
- "version_check",
-]
-
 [[package]]
 name = "unicode-bidi"
 version = "0.3.10"
@@ -1226,7 +1094,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "0d68c799ae75762b8c3fe375feb6600ef5602c883c5d21eb51c09f22b83c4643"
 dependencies = [
  "form_urlencoded",
- "idna 0.3.0",
+ "idna",
  "percent-encoding",
 ]
 
diff --git a/src/rust/Cargo.toml b/src/rust/Cargo.toml
index f1f98637841e3ec547b8392ffb437d597b7bef38..43721bfc4d33e6a881429cfe28f662de29224dbe 100644
--- a/src/rust/Cargo.toml
+++ b/src/rust/Cargo.toml
@@ -25,7 +25,6 @@ version = "0.1.0"
 license = "MIT"
 
 [workspace.dependencies]
-log = "0.4"
 libc = "0.2"
 lazy_static = "^1"
 thiserror = "^1"
@@ -52,10 +51,6 @@ tokio = { version = "1", features = [
 reqwest = { version = "0.11", default-features = false, features = [
     "rustls-tls",
     "rustls-tls-native-roots",
-    "tokio-rustls",
-    "tokio-socks",
-    "multipart",
-    "cookies",
     "json",
 ] }
 
diff --git a/src/rust/commons/src/log.rs b/src/rust/commons/src/log.rs
index 178e55f5de9c8e41fa890462a7d79891503c6c15..59a74e3f45c221e72cf91dda769e750566fd1cc3 100644
--- a/src/rust/commons/src/log.rs
+++ b/src/rust/commons/src/log.rs
@@ -1 +1 @@
-pub use log::{debug, error, info, log, trace, warn, Level};
+pub use log::{debug, error, info, log, set_logger, trace, warn, Level, Log, Metadata, Record};
diff --git a/src/rust/dependencies.linux.png b/src/rust/dependencies.linux.png
new file mode 100644
index 0000000000000000000000000000000000000000..813b263a5049bd9d463c45891739f8d4201df932
Binary files /dev/null and b/src/rust/dependencies.linux.png differ
diff --git a/src/rust/dependencies.macos-arm.png b/src/rust/dependencies.macos-arm.png
new file mode 100644
index 0000000000000000000000000000000000000000..285a14d35eeb433c366ff8b111c8d21664c51dc7
Binary files /dev/null and b/src/rust/dependencies.macos-arm.png differ
diff --git a/src/rust/dependencies.macos.png b/src/rust/dependencies.macos.png
new file mode 100644
index 0000000000000000000000000000000000000000..35702710a57196fad269bafdd65e384b940bbff3
Binary files /dev/null and b/src/rust/dependencies.macos.png differ
diff --git a/src/rust/dependencies.png b/src/rust/dependencies.png
index 268013298bd10362660fd5f4ec516b9dd0eb9a82..24cc6fb422c696c94cb3e4fb8b91f5a3acb6aad0 100644
Binary files a/src/rust/dependencies.png and b/src/rust/dependencies.png differ
diff --git a/src/rust/dependencies.win32.png b/src/rust/dependencies.win32.png
new file mode 100644
index 0000000000000000000000000000000000000000..88a793df11f253b22a2f835366870027d2fe24d4
Binary files /dev/null and b/src/rust/dependencies.win32.png differ
diff --git a/src/rust/kurisu_api/Cargo.toml b/src/rust/kurisu_api/Cargo.toml
index 32bad39ffee91b571960b90401ee0d23b9c4c84d..869478b11b24d79f3f20040102dc92abaa808168 100644
--- a/src/rust/kurisu_api/Cargo.toml
+++ b/src/rust/kurisu_api/Cargo.toml
@@ -6,5 +6,4 @@ authors.workspace = true
 license.workspace = true
 
 [dependencies]
-log.workspace = true
 serde.workspace = true
diff --git a/src/rust/lektor_c_compat/Cargo.toml b/src/rust/lektor_c_compat/Cargo.toml
index 4a5056876d0f12f802bc896bdcb76f506ab62905..c72901181039ef1b787283a4bf5f5873cfded642 100644
--- a/src/rust/lektor_c_compat/Cargo.toml
+++ b/src/rust/lektor_c_compat/Cargo.toml
@@ -6,7 +6,6 @@ authors.workspace = true
 license.workspace = true
 
 [dependencies]
-log.workspace = true
 libc.workspace = true
 lazy_static.workspace = true
 
diff --git a/src/rust/lektor_config/Cargo.toml b/src/rust/lektor_config/Cargo.toml
index 92cbcd103e368adfd2f63cb5a9d35154c1cfdc25..852930b4209c5b889d69166e5b25d2881e0647f1 100644
--- a/src/rust/lektor_config/Cargo.toml
+++ b/src/rust/lektor_config/Cargo.toml
@@ -6,7 +6,6 @@ authors.workspace = true
 license.workspace = true
 
 [dependencies]
-log.workspace = true
 serde.workspace = true
 thiserror.workspace = true
 
diff --git a/src/rust/lektor_db/Cargo.toml b/src/rust/lektor_db/Cargo.toml
index 85e6ba8276b1643f15d29d8d9414a43f1963fc6a..931adc62892701f0928fda3c09c40e66fdd396d0 100644
--- a/src/rust/lektor_db/Cargo.toml
+++ b/src/rust/lektor_db/Cargo.toml
@@ -6,12 +6,12 @@ authors.workspace = true
 license.workspace = true
 
 [dependencies]
-log.workspace = true
 serde.workspace = true
 thiserror.workspace = true
 
 diesel_migrations = "2"
 diesel = { version = "2", default-features = false, features = ["sqlite"] }
 
+commons = { path = "../commons" }
 kurisu_api = { path = "../kurisu_api" }
 lektor_c_compat = { path = "../lektor_c_compat" }
diff --git a/src/rust/lektor_repo/Cargo.toml b/src/rust/lektor_repo/Cargo.toml
index 138ef90577c15068ffd8d8f5b0708162d5423679..1c4cfb1a70179d3c6b91b757a0ef9e1a4cc011ad 100644
--- a/src/rust/lektor_repo/Cargo.toml
+++ b/src/rust/lektor_repo/Cargo.toml
@@ -6,7 +6,6 @@ authors.workspace = true
 license.workspace = true
 
 [dependencies]
-log.workspace = true
 serde.workspace = true
 reqwest.workspace = true
 
diff --git a/src/rust/lektor_unsafe/Cargo.toml b/src/rust/lektor_unsafe/Cargo.toml
index 8aae3c2fc8dd8d883c0f4424b610ca38dcc006f8..d287ace5a8e32b0717c2b76300b77e0993844207 100644
--- a/src/rust/lektor_unsafe/Cargo.toml
+++ b/src/rust/lektor_unsafe/Cargo.toml
@@ -7,7 +7,7 @@ edition.workspace = true
 crate-type = ["staticlib"]
 
 [dependencies]
-log.workspace = true
+libc.workspace = true
 toml.workspace = true
 lazy_static.workspace = true
 
diff --git a/src/rust/lektor_unsafe/src/db.rs b/src/rust/lektor_unsafe/src/db.rs
index fee96aa6a2d0d08bc35e98edb09c6b887dd5fb4e..c97c708226ee00fa879b000a8adf84a544ac591c 100644
--- a/src/rust/lektor_unsafe/src/db.rs
+++ b/src/rust/lektor_unsafe/src/db.rs
@@ -27,7 +27,7 @@ pub unsafe extern "C" fn lkt_database_establish_connection(
     match LktDatabaseConnection::try_new(PathBuf::from(&path[..])) {
         Ok(db) => Box::leak(Box::new(db)) as *mut _,
         Err(err) => {
-            error!(target: "DB", "failed to establish connexion to {}: {err}", &path[..]);
+            log::error!(target: "DB", "failed to establish connexion to {}: {err}", &path[..]);
             std::ptr::null_mut()
         }
     }
@@ -43,7 +43,7 @@ pub unsafe extern "C" fn lkt_database_establish_connection(
 #[no_mangle]
 pub unsafe extern "C" fn lkt_database_close_connection(db: *mut LktDatabaseConnection) {
     if db.is_null() {
-        error!(target: "DB", "can't clost a connexion to a null database!")
+        log::error!(target: "DB", "can't clost a connexion to a null database!")
     } else {
         let db = Box::from_raw(db);
         drop(db);
@@ -69,7 +69,7 @@ pub unsafe extern "C" fn lkt_database_delete_kara_by_repo(
             repo_id: repo,
             kara_id: kara,
         }))
-        .map_err(|err| error!(target: "DB", "delete_kara_by_repo failed: {err}"))
+        .map_err(|err| log::error!(target: "DB", "delete_kara_by_repo failed: {err}"))
         .is_ok()
 }
 
@@ -89,7 +89,7 @@ pub unsafe extern "C" fn lkt_database_delete_kara_by_local_id(
         .delete_kara(DeleteKaraFilter::ByLocalId(KaraFilterByLocalId {
             local_id,
         }))
-        .map_err(|err| error!(target: "DB", "delete_kara_by_local_id failed: {err}"))
+        .map_err(|err| log::error!(target: "DB", "delete_kara_by_local_id failed: {err}"))
         .is_ok()
 }
 
diff --git a/src/rust/lektor_unsafe/src/lib.rs b/src/rust/lektor_unsafe/src/lib.rs
index 476ce3514543d063ea7f588394be79fd459b2787..9c994fc112e54e21dffe01c2554b6aa139b02b5b 100644
--- a/src/rust/lektor_unsafe/src/lib.rs
+++ b/src/rust/lektor_unsafe/src/lib.rs
@@ -7,6 +7,6 @@ pub mod loging;
 pub mod queue;
 pub mod repo;
 
+pub(crate) use commons::log;
 pub(crate) use lektor_c_compat::{c::*, *};
-pub(crate) use log::error;
 pub(crate) use std::{mem::ManuallyDrop, path::PathBuf};
diff --git a/src/rust/lektor_unsafe/src/loging.rs b/src/rust/lektor_unsafe/src/loging.rs
index ef1682e668fa9c7f7b7fce6b38eb9b7bdefb7e31..0e21db6ebed5a5803bc10dc2842ce1c7e4a4fb72 100644
--- a/src/rust/lektor_unsafe/src/loging.rs
+++ b/src/rust/lektor_unsafe/src/loging.rs
@@ -1,5 +1,5 @@
+use commons::log::{Level, Metadata, Record};
 use lektor_c_compat::*;
-use log::{Level, Metadata, Record};
 use std::{convert::Into, fmt::format, sync::atomic::AtomicU8};
 
 enum LogLevel {
@@ -19,7 +19,7 @@ lazy_static::lazy_static! {
     };
 }
 
-impl log::Log for CLogger {
+impl commons::log::Log for CLogger {
     fn enabled(&self, metadata: &Metadata) -> bool {
         use LogLevel::*;
         let lvl = LogLevel::try_from(LOGGER.level.load(std::sync::atomic::Ordering::SeqCst))
@@ -133,7 +133,7 @@ pub extern "C" fn lektor_init_rust_logging() {
         Into::<u8>::into(LogLevel::try_from(unsafe { lkt_get_log_level() }).unwrap_or_default()),
         std::sync::atomic::Ordering::SeqCst,
     );
-    if let Err(err) = log::set_logger(&*LOGGER) {
+    if let Err(err) = commons::log::set_logger(&*LOGGER) {
         panic!("failed to set logger: {err}")
     }
 }