diff --git a/adb_client/README.md b/adb_client/README.md
index 40e4911..cc01cc9 100644
--- a/adb_client/README.md
+++ b/adb_client/README.md
@@ -27,9 +27,15 @@ To deactivate some features you can use the `default-features = false` option in
```toml
[dependencies]
-adb_client = { version = "*", default-features = false, features=[""] }
+adb_client = { version = "*" }
```
+## Examples
+
+Usage examples can be found in the `examples/` directory of this repository.
+
+Some example are also provided in the various `README.md` files of modules.
+
## Benchmarks
Benchmarks run on `v2.0.6`, on a **Samsung S10 SM-G973F** device and an **Intel i7-1265U** CPU laptop
@@ -43,84 +49,3 @@ Benchmarks run on `v2.0.6`, on a **Samsung S10 SM-G973F** device and an **Intel
| 10 MB | 100 | 350,79 ms | 356,30 ms |
-1,57 %
|
| 500 MB | 50 | 15,60 s | 15,64 s | -0,25 %
|
| 1 GB | 20 | 31,09 s | 31,12 s | -0,10 %
|
-
-## Examples
-
-### Get available ADB devices
-
-```rust no_run
-use adb_client::server::ADBServer;
-use std::net::{SocketAddrV4, Ipv4Addr};
-
-// A custom server address can be provided
-let server_ip = Ipv4Addr::new(127, 0, 0, 1);
-let server_port = 5037;
-
-let mut server = ADBServer::new(SocketAddrV4::new(server_ip, server_port));
-server.devices();
-```
-
-### Using ADB server as bridge
-
-#### Launch a command on device
-
-```rust no_run
-use adb_client::{server::ADBServer, ADBDeviceExt};
-
-let mut server = ADBServer::default();
-let mut device = server.get_device().expect("cannot get device");
-device.shell_command(&["df", "-h"], &mut std::io::stdout());
-```
-
-#### Push a file to the device
-
-```rust no_run
-use adb_client::server::ADBServer;
-use std::net::Ipv4Addr;
-use std::fs::File;
-use std::path::Path;
-
-let mut server = ADBServer::default();
-let mut device = server.get_device().expect("cannot get device");
-let mut input = File::open(Path::new("/tmp/f")).expect("Cannot open file");
-device.push(&mut input, "/data/local/tmp");
-```
-
-### Interact directly with end devices
-
-#### (USB) Launch a command on device
-
-```rust no_run
-use adb_client::{usb::ADBUSBDevice, ADBDeviceExt};
-
-let vendor_id = 0x04e8;
-let product_id = 0x6860;
-let mut device = ADBUSBDevice::new(vendor_id, product_id).expect("cannot find device");
-device.shell_command(&["df", "-h"], &mut std::io::stdout());
-```
-
-#### (USB) Push a file to the device
-
-```rust no_run
-use adb_client::{usb::ADBUSBDevice, ADBDeviceExt};
-use std::fs::File;
-use std::path::Path;
-
-let vendor_id = 0x04e8;
-let product_id = 0x6860;
-let mut device = ADBUSBDevice::new(vendor_id, product_id).expect("cannot find device");
-let mut input = File::open(Path::new("/tmp/f")).expect("Cannot open file");
-device.push(&mut input, &"/data/local/tmp");
-```
-
-#### (TCP) Get a shell from device
-
-```rust no_run
-use std::net::{SocketAddr, IpAddr, Ipv4Addr};
-use adb_client::{tcp::ADBTcpDevice, ADBDeviceExt};
-
-let device_ip = IpAddr::V4(Ipv4Addr::new(192, 168, 0, 10));
-let device_port = 43210;
-let mut device = ADBTcpDevice::new(SocketAddr::new(device_ip, device_port)).expect("cannot find device");
-device.shell(&mut std::io::stdin(), Box::new(std::io::stdout()));
-```
diff --git a/adb_client/src/message_devices/tcp/README.md b/adb_client/src/message_devices/tcp/README.md
new file mode 100644
index 0000000..cc24b1f
--- /dev/null
+++ b/adb_client/src/message_devices/tcp/README.md
@@ -0,0 +1,13 @@
+# Examples
+
+## Get a shell from device
+
+```rust no_run
+use std::net::{SocketAddr, IpAddr, Ipv4Addr};
+use adb_client::{tcp::ADBTcpDevice, ADBDeviceExt};
+
+let device_ip = IpAddr::V4(Ipv4Addr::new(192, 168, 0, 10));
+let device_port = 43210;
+let mut device = ADBTcpDevice::new(SocketAddr::new(device_ip, device_port)).expect("cannot find device");
+device.shell(&mut std::io::stdin(), Box::new(std::io::stdout()));
+```
diff --git a/adb_client/src/message_devices/tcp/mod.rs b/adb_client/src/message_devices/tcp/mod.rs
index cd9a81d..17b1267 100644
--- a/adb_client/src/message_devices/tcp/mod.rs
+++ b/adb_client/src/message_devices/tcp/mod.rs
@@ -1,3 +1,5 @@
+#![doc = include_str!("./README.md")]
+
mod adb_tcp_device;
mod tcp_transport;
diff --git a/adb_client/src/message_devices/usb/README.md b/adb_client/src/message_devices/usb/README.md
new file mode 100644
index 0000000..bc9bfd9
--- /dev/null
+++ b/adb_client/src/message_devices/usb/README.md
@@ -0,0 +1,26 @@
+# Examples
+
+## Launch a command on device
+
+```rust no_run
+use adb_client::{usb::ADBUSBDevice, ADBDeviceExt};
+
+let vendor_id = 0x04e8;
+let product_id = 0x6860;
+let mut device = ADBUSBDevice::new(vendor_id, product_id).expect("cannot find device");
+device.shell_command(&["df", "-h"], &mut std::io::stdout());
+```
+
+## Push a file to the device
+
+```rust no_run
+use adb_client::{usb::ADBUSBDevice, ADBDeviceExt};
+use std::fs::File;
+use std::path::Path;
+
+let vendor_id = 0x04e8;
+let product_id = 0x6860;
+let mut device = ADBUSBDevice::new(vendor_id, product_id).expect("cannot find device");
+let mut input = File::open(Path::new("/tmp/file.txt")).expect("Cannot open file");
+device.push(&mut input, &"/data/local/tmp");
+```
diff --git a/adb_client/src/message_devices/usb/mod.rs b/adb_client/src/message_devices/usb/mod.rs
index 29d3490..6463a93 100644
--- a/adb_client/src/message_devices/usb/mod.rs
+++ b/adb_client/src/message_devices/usb/mod.rs
@@ -1,3 +1,5 @@
+#![doc = include_str!("./README.md")]
+
mod adb_rsa_key;
mod adb_usb_device;
mod usb_transport;
diff --git a/adb_client/src/server/README.md b/adb_client/src/server/README.md
new file mode 100644
index 0000000..845da97
--- /dev/null
+++ b/adb_client/src/server/README.md
@@ -0,0 +1,15 @@
+# Examples
+
+## Get available ADB devices
+
+```rust no_run
+use adb_client::server::ADBServer;
+use std::net::{SocketAddrV4, Ipv4Addr};
+
+// A custom server address can be provided
+let server_ip = Ipv4Addr::new(127, 0, 0, 1);
+let server_port = 5037;
+
+let mut server = ADBServer::new(SocketAddrV4::new(server_ip, server_port));
+server.devices();
+```
diff --git a/adb_client/src/server/mod.rs b/adb_client/src/server/mod.rs
index 30d7341..a47dfe2 100644
--- a/adb_client/src/server/mod.rs
+++ b/adb_client/src/server/mod.rs
@@ -1,3 +1,5 @@
+#![doc = include_str!("./README.md")]
+
mod adb_server;
mod adb_server_command;
mod commands;
diff --git a/adb_client/src/server_device/README.md b/adb_client/src/server_device/README.md
new file mode 100644
index 0000000..27bf621
--- /dev/null
+++ b/adb_client/src/server_device/README.md
@@ -0,0 +1,25 @@
+# Examples
+
+## Launch a command on device
+
+```rust no_run
+use adb_client::{server::ADBServer, ADBDeviceExt};
+
+let mut server = ADBServer::default();
+let mut device = server.get_device().expect("cannot get device");
+device.shell_command(&["df", "-h"], &mut std::io::stdout());
+```
+
+## Push a file to the device
+
+```rust no_run
+use adb_client::server::ADBServer;
+use std::net::Ipv4Addr;
+use std::fs::File;
+use std::path::Path;
+
+let mut server = ADBServer::default();
+let mut device = server.get_device().expect("cannot get device");
+let mut input = File::open(Path::new("/tmp/file.txt")).expect("Cannot open file");
+device.push(&mut input, "/data/local/tmp");
+```
diff --git a/adb_client/src/server_device/mod.rs b/adb_client/src/server_device/mod.rs
index c783001..286c69d 100644
--- a/adb_client/src/server_device/mod.rs
+++ b/adb_client/src/server_device/mod.rs
@@ -1,3 +1,5 @@
+#![doc = include_str!("./README.md")]
+
mod adb_server_device;
mod adb_server_device_commands;
mod commands;