diff --git a/pure-magic/Cargo.toml b/pure-magic/Cargo.toml
index 9f6cc18..c61800c 100644
--- a/pure-magic/Cargo.toml
+++ b/pure-magic/Cargo.toml
@@ -9,6 +9,10 @@ repository.workspace = true
keywords = ["magic", "file", "mime", "identification", "libmagic"]
description = "Safe Rust re-implementation of libmagic"
+[features]
+default = []
+sync = []
+
[dependencies]
chrono = "0.4.41"
dyf = { version = "0.1.1", features = ["serde"] }
diff --git a/pure-magic/src/dou.rs b/pure-magic/src/dou.rs
new file mode 100644
index 0000000..4ff4255
--- /dev/null
+++ b/pure-magic/src/dou.rs
@@ -0,0 +1,162 @@
+#[cfg(not(feature = "sync"))]
+pub(crate) use default::*;
+
+#[cfg(feature = "sync")]
+pub(crate) use sync::*;
+
+#[cfg(not(feature = "sync"))]
+mod default {
+ use std::cell::{OnceCell, RefCell};
+
+ use serde::{Deserialize, Serialize};
+
+ use crate::EntryNode;
+
+ /// Deserialize-on-Use wrapper for an `EntryNode`.
+ ///
+ /// This struct implements the "Deserialize on Use" pattern, where the `EntryNode` is
+ /// deserialized only when first accessed via `get_or_de()`. The serialized form is stored
+ /// in a `RefCell