diff --git a/..md b/..md
new file mode 100644
index 000000000..0e49c836c
--- /dev/null
+++ b/..md
@@ -0,0 +1,3 @@
+# JSON for Modern C++
+
+
diff --git a/api/adl_serializer.md b/api/adl_serializer.md
new file mode 100644
index 000000000..e83b66dec
--- /dev/null
+++ b/api/adl_serializer.md
@@ -0,0 +1,35 @@
+# nlohmann::adl_serializer
+
+```cpp
+template
+struct adl_serializer;
+```
+
+Serializer that uses ADL ([Argument-Dependent Lookup](https://en.cppreference.com/w/cpp/language/adl)) to choose
+`to_json`/`from_json` functions from the types' namespaces.
+
+It is implemented similarly to
+
+```cpp
+template
+struct adl_serializer {
+ template
+ static void to_json(BasicJsonType& j, const T& value) {
+ // calls the "to_json" method in T's namespace
+ }
+
+ template
+ static void from_json(const BasicJsonType& j, T& value) {
+ // same thing, but with the "from_json" method
+ }
+};
+```
+
+## Member functions
+
+- [**from_json**](from_json.md) - convert a JSON value to any value type
+- [**to_json**](to_json.md) - convert any value type to a JSON value
+
+## Version history
+
+- Added in version 2.1.0.
diff --git a/api/adl_serializer/from_json.md b/api/adl_serializer/from_json.md
new file mode 100644
index 000000000..72df961f4
--- /dev/null
+++ b/api/adl_serializer/from_json.md
@@ -0,0 +1,74 @@
+# nlohmann::adl_serializer::from_json
+
+```cpp
+// (1)
+template
+static auto from_json(BasicJsonType && j, TargetType& val) noexcept(
+ noexcept(::nlohmann::from_json(std::forward(j), val)))
+-> decltype(::nlohmann::from_json(std::forward(j), val), void())
+
+// (2)
+template
+static auto from_json(BasicJsonType && j) noexcept(
+noexcept(::nlohmann::from_json(std::forward(j), detail::identity_tag {})))
+-> decltype(::nlohmann::from_json(std::forward(j), detail::identity_tag {}))
+```
+
+This function is usually called by the [`get()`](../basic_json/get.md) function of the [basic_json](../basic_json/index.md)
+class (either explicitly or via the conversion operators).
+
+1. This function is chosen for default-constructible value types.
+2. This function is chosen for value types which are not default-constructible.
+
+## Parameters
+
+`j` (in)
+: JSON value to read from
+
+`val` (out)
+: value to write to
+
+## Return value
+
+1. (none) -- the converted value is written to the output parameter `val`.
+2. the JSON value `j` converted to `TargetType`
+
+## Examples
+
+??? example "Example: (1) Default-constructible type"
+
+ The example below shows how a `from_json` function can be implemented for a user-defined type. This function is
+ called by the `adl_serializer` when `get()` is called.
+
+ ```cpp
+ --8<-- "examples/from_json__default_constructible.cpp"
+ ```
+
+ Output:
+
+ ```json
+ --8<-- "examples/from_json__default_constructible.output"
+ ```
+
+??? example "Example: (2) Non-default-constructible type"
+
+ The example below shows how a `from_json` is implemented as part of a specialization of the `adl_serializer` to
+ realize the conversion of a non-default-constructible type.
+
+ ```cpp
+ --8<-- "examples/from_json__non_default_constructible.cpp"
+ ```
+
+ Output:
+
+ ```json
+ --8<-- "examples/from_json__non_default_constructible.output"
+ ```
+
+## See also
+
+- [to_json](to_json.md)
+
+## Version history
+
+- Added in version 2.1.0.
diff --git a/api/adl_serializer/from_json/index.html b/api/adl_serializer/from_json/index.html
index eee1fd1fd..01224f738 100644
--- a/api/adl_serializer/from_json/index.html
+++ b/api/adl_serializer/from_json/index.html
@@ -101,4 +101,4 @@
std::cout<<p.name<<" ("<<p.age<<") lives in "<<p.address<<std::endl;}