Feature-gate all heavy dependencies for per-project builds

ober

c39e2b4b695cb125ccdc42770314bef7ee485878

diff --git a/jerboa-native-rs/Cargo.toml b/jerboa-native-rs/Cargo.toml
index dc52bfa..5ed7532 100644
--- a/jerboa-native-rs/Cargo.toml
+++ b/jerboa-native-rs/Cargo.toml
@@ -7,36 +7,62 @@ edition = "2021"
 crate-type = ["cdylib", "staticlib"]
 
 [dependencies]
+libc = "0.2"
+
+# Always-on lightweight deps
 ring = "0.17"
-scrypt = "0.11"
-argon2 = "0.5"
 flate2 = "1"
 regex = "1"
-libc = "0.2"
-httparse = "1"
-rusqlite = { version = "0.32", features = ["bundled"] }
-postgres = "0.19"
-x25519-dalek = { version = "2", features = ["static_secrets"] }
-ed25519-dalek = { version = "2", features = ["hazmat"] }
-hkdf = "0.12"
-sha2 = "0.10"
-rcgen = { version = "0.13", features = ["ring", "pem"] }
-time = "0.3"
-rustls = { version = "0.23", default-features = false, features = ["ring", "logging", "std", "tls12"] }
-rustls-pki-types = "1"
-rustls-pemfile = "2"
-webpki-roots = "0.26"
-wasmi = "0.40"
-getrandom = "0.2"
-duckdb = { version = "1", features = ["bundled"] }
+
+# TLS (rustls + x509/cert generation)
+rustls = { version = "0.23", default-features = false, features = ["ring", "logging", "std", "tls12"], optional = true }
+rustls-pki-types = { version = "1", optional = true }
+rustls-pemfile = { version = "2", optional = true }
+webpki-roots = { version = "0.26", optional = true }
+rcgen = { version = "0.13", features = ["ring", "pem"], optional = true }
+time = { version = "0.3", optional = true }
+httparse = { version = "1", optional = true }
+
+# Crypto (scrypt, argon2, x25519, ed25519)
+scrypt = { version = "0.11", optional = true }
+argon2 = { version = "0.5", optional = true }
+x25519-dalek = { version = "2", features = ["static_secrets"], optional = true }
+ed25519-dalek = { version = "2", features = ["hazmat"], optional = true }
+hkdf = { version = "0.12", optional = true }
+sha2 = { version = "0.10", optional = true }
+
+# Database
+duckdb = { version = "1", features = ["bundled"], optional = true }
+rusqlite = { version = "0.32", features = ["bundled"], optional = true }
+postgres = { version = "0.19", optional = true }
+
+# WASM
+wasmi = { version = "0.40", optional = true }
+getrandom = { version = "0.2", optional = true }
+
+# SpiderMonkey (JS engine)
 mozjs = { git = "https://github.com/servo/mozjs.git", optional = true, default-features = false, features = ["jit", "libz-sys"] }
 mozjs_sys = { git = "https://github.com/servo/mozjs.git", optional = true }
-rscap = "0.3"
+
+# Packet capture
+rscap = { version = "0.3", optional = true }
 
 [features]
-default = []
+default = ["tls"]
+
+# Individual features — pick what your project needs
+tls = ["rustls", "rustls-pki-types", "rustls-pemfile", "webpki-roots", "rcgen", "time", "httparse"]
+crypto = ["scrypt", "argon2", "x25519-dalek", "ed25519-dalek", "hkdf", "sha2"]
+sqlite = ["rusqlite"]
+duckdb_feat = ["duckdb"]
+postgres_feat = ["postgres"]
+wasm = ["wasmi", "getrandom"]
+pcap = ["rscap"]
 spidermonkey = ["mozjs", "mozjs_sys"]
 
+# Full feature set — backward compatible, what jerboa itself uses
+full = ["tls", "crypto", "sqlite", "duckdb_feat", "postgres_feat", "wasm", "pcap"]
+
 [target.'cfg(target_os = "linux")'.dependencies]
 inotify = { version = "0.11", default-features = false }
 
diff --git a/jerboa-native-rs/src/lib.rs b/jerboa-native-rs/src/lib.rs
index c93f341..acd84c7 100644
--- a/jerboa-native-rs/src/lib.rs
+++ b/jerboa-native-rs/src/lib.rs
@@ -1,23 +1,43 @@
 mod panic;
-mod pcap_capture;
-mod crypto;
 mod compress;
-mod duckdb_native;
 mod regex_native;
 mod secure_mem;
-mod sqlite;
-mod postgres_native;
-mod tls;
-mod x509;
 mod antidebug;
 mod integrity;
+mod process_ctl;
+mod socks5_server;
+
+#[cfg(feature = "tls")]
+mod tls;
+#[cfg(feature = "tls")]
+mod x509;
+
+#[cfg(feature = "crypto")]
+mod crypto;
+#[cfg(feature = "crypto")]
 mod x25519;
+#[cfg(feature = "crypto")]
 mod ed25519;
-mod process_ctl;
+#[cfg(feature = "crypto")]
+mod embed_crypto;
+
+#[cfg(feature = "pcap")]
+mod pcap_capture;
+
+#[cfg(feature = "duckdb_feat")]
+mod duckdb_native;
+
+#[cfg(feature = "sqlite")]
+mod sqlite;
+
+#[cfg(feature = "postgres_feat")]
+mod postgres_native;
+
+#[cfg(feature = "wasm")]
 mod wasm;
+
 #[cfg(feature = "spidermonkey")]
 mod wasm_sm;
-mod socks5_server;
 
 #[cfg(target_os = "linux")]
 mod epoll;