diff --git a/Cargo.toml b/Cargo.toml
index f5dbfb5..f8b0f75 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -11,7 +11,7 @@ license = "MIT"
 [dependencies]
 osmpbfreader = "0.16.1"
 csv = "1.3.0"
-docopt = "1.1.1"
+clap = { version = "4.4", features = ["derive"] }
 serde = "1.0"
 
 [lib]
diff --git a/src/main.rs b/src/main.rs
index a93b12a..dd17966 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,12 +1,14 @@
+use clap::Parser;
+
+#[derive(Parser)]
+#[command(author, version, about, long_about = None)]
+struct Cli {
+    source_pbf: String,
+}
 fn main() {
-    const USAGE: &str = "
-Usage: osm4routing <source.osm.pbf>";
-    let args = docopt::Docopt::new(USAGE)
-        .unwrap()
-        .parse()
-        .unwrap_or_else(|e| e.exit());
-    let filename = args.get_str("<source.osm.pbf>");
-    match osm4routing::read(filename) {
+    let cli = Cli::parse();
+
+    match osm4routing::read(&cli.source_pbf) {
         Ok((nodes, edges)) => osm4routing::writers::csv(nodes, edges),
         Err(error) => println!("Error: {}", error),
     }