diff --git a/src/rust/Cargo.lock b/src/rust/Cargo.lock
index 79624569c87ab6a1231400e6ae134b88e2a1ba09..742eb3574fb2a774a689193b3487843ead2501eb 100644
--- a/src/rust/Cargo.lock
+++ b/src/rust/Cargo.lock
@@ -228,9 +228,9 @@ checksum = "0d261e256854913907f67ed06efbc3338dfe6179796deefc1ff763fc1aee5535"
 
 [[package]]
 name = "bytemuck"
-version = "1.13.0"
+version = "1.13.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c041d3eab048880cb0b86b256447da3f18859a163c3b8d8893f4e6368abe6393"
+checksum = "17febce684fd15d89027105661fec94afb475cb995fbc59d2865198446ba2eea"
 dependencies = [
  "bytemuck_derive",
 ]
@@ -291,9 +291,9 @@ checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
 
 [[package]]
 name = "clap"
-version = "4.1.6"
+version = "4.1.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec0b0588d44d4d63a87dbd75c136c166bbfd9a86a31cb89e09906521c7d3f5e3"
+checksum = "c3d7ae14b20b94cb02149ed21a86c423859cbe18dc7ed69845cace50e52b40a5"
 dependencies = [
  "bitflags",
  "clap_derive",
@@ -304,9 +304,9 @@ dependencies = [
 
 [[package]]
 name = "clap_derive"
-version = "4.1.0"
+version = "4.1.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "684a277d672e91966334af371f1a7b5833f9aa00b07c84e92fbce95e00208ce8"
+checksum = "44bec8e5c9d09e439c4335b1af0abaab56dcf3b94999a936e1bb47b9134288f0"
 dependencies = [
  "heck",
  "proc-macro-error",
@@ -512,9 +512,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-channel"
-version = "0.5.6"
+version = "0.5.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c2dd04ddaf88237dc3b8d8f9a3c1004b506b54b3313403944054d23c0870c521"
+checksum = "cf2b3e8478797446514c91ef04bafcb59faba183e621ad488df88983cc14128c"
 dependencies = [
  "cfg-if",
  "crossbeam-utils",
@@ -522,9 +522,9 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-deque"
-version = "0.8.2"
+version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "715e8152b692bba2d374b53d4875445368fdf21a94751410af607a5ac677d1fc"
+checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
 dependencies = [
  "cfg-if",
  "crossbeam-epoch",
@@ -533,22 +533,22 @@ dependencies = [
 
 [[package]]
 name = "crossbeam-epoch"
-version = "0.9.13"
+version = "0.9.14"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "01a9af1f4c2ef74bb8aa1f7e19706bc72d03598c8a570bb5de72243c7a9d9d5a"
+checksum = "46bd5f3f85273295a9d14aedfb86f6aadbff6d8f5295c4a9edb08e819dcf5695"
 dependencies = [
  "autocfg",
  "cfg-if",
  "crossbeam-utils",
- "memoffset 0.7.1",
+ "memoffset 0.8.0",
  "scopeguard",
 ]
 
 [[package]]
 name = "crossbeam-utils"
-version = "0.8.14"
+version = "0.8.15"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
+checksum = "3c063cd8cc95f5c377ed0d4b49a4b21f632396ff690e8470c29b3359b346984b"
 dependencies = [
  "cfg-if",
 ]
@@ -1294,9 +1294,9 @@ dependencies = [
 
 [[package]]
 name = "h2"
-version = "0.3.15"
+version = "0.3.16"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f9f29bc9dda355256b2916cf526ab02ce0aeaaaf2bad60d65ef3f12f11dd0f4"
+checksum = "5be7b54589b581f624f566bf5d8eb2bab1db736c51528720b6bd36b96b55924d"
 dependencies = [
  "bytes",
  "fnv",
@@ -1896,9 +1896,9 @@ dependencies = [
 
 [[package]]
 name = "memoffset"
-version = "0.7.1"
+version = "0.8.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5de893c32cde5f383baa4c04c5d6dbdd735cfd4a794b0debdb2bb1b421da5ff4"
+checksum = "d61c719bcfbcf5d62b3a09efa6088de8c54bc0bfcd3ea7ae39fcc186108b8de1"
 dependencies = [
  "autocfg",
 ]
@@ -3201,9 +3201,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
 
 [[package]]
 name = "tokio"
-version = "1.25.0"
+version = "1.26.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8e00990ebabbe4c14c08aca901caed183ecd5c09562a12c824bb53d3c3fd3af"
+checksum = "03201d01c3c27a29c8a5cee5b55a93ddae1ccf6f08f65365c2c918f8c1b76f64"
 dependencies = [
  "autocfg",
  "bytes",
@@ -3215,7 +3215,7 @@ dependencies = [
  "socket2",
  "tokio-macros",
  "tracing",
- "windows-sys 0.42.0",
+ "windows-sys 0.45.0",
 ]
 
 [[package]]
diff --git a/src/rust/Cargo.toml b/src/rust/Cargo.toml
index a2765b896091871a57d7ff67ecc2c3a55cad7187..18899aa31d686faa654dd20098bbeb21fab20541 100644
--- a/src/rust/Cargo.toml
+++ b/src/rust/Cargo.toml
@@ -24,7 +24,7 @@ members = [
 [workspace.package]
 edition = "2021"
 authors = ["Maël MARTIN <mael.martin@protonmail.com>"]
-version = "0.1.0"
+version = "0.0.0-git"
 license = "MIT"
 
 [workspace.dependencies]
diff --git a/src/rust/commons/build.rs b/src/rust/commons/build.rs
new file mode 100644
index 0000000000000000000000000000000000000000..61dc1b1a9351a6d640fa0f303925fea4c76ace98
--- /dev/null
+++ b/src/rust/commons/build.rs
@@ -0,0 +1,40 @@
+use std::{
+    env::var_os,
+    fs,
+    path::Path,
+    process::{Command, Stdio},
+};
+
+fn main() {
+    let out_dir = var_os("OUT_DIR").expect("failed to get OUT_DIR");
+    let src_file = Path::new(&out_dir).join("commons_build_infos.rs");
+
+    let output = Command::new("git")
+        .args(["describe", "--abbrev=1", "--tags", "--dirty=-dirty"])
+        .stdout(Stdio::piped())
+        .spawn()
+        .expect("failed to run git to describe the git repo")
+        .wait_with_output()
+        .expect("failed to wait for git describe command...");
+    let version = match String::from_utf8(output.stdout)
+        .expect("git didn't return a correct UTF8 string")
+        .trim()
+        .split("-")
+        .collect::<Vec<_>>()[..]
+    {
+        [tag] => tag.to_string(),
+        [tag, hash] => format!("{tag}+{hash}"),
+        [tag, post, hash] => format!("{tag}.post{post}+{hash}"),
+        [tag, post, hash, dirty] => format!("{tag}.post{post}+{hash}-{dirty}"),
+        _ => panic!(),
+    };
+
+    let build_infos = format!(
+        r#"
+pub const fn version() -> &'static str {{ "{version}" }}
+        "#
+    );
+
+    fs::write(src_file, build_infos).expect("failed to write the build info file");
+    println!("cargo:rerun-if-changed=build.rs");
+}
diff --git a/src/rust/commons/src/lib.rs b/src/rust/commons/src/lib.rs
index a0f0d33f8941e82d72595c3ca3ae555726aa950f..67949b19aa618180a3d5865bd6aeff8bdd08de5b 100644
--- a/src/rust/commons/src/lib.rs
+++ b/src/rust/commons/src/lib.rs
@@ -10,6 +10,8 @@ pub mod logger;
 
 pub use error::*;
 
+include!(concat!(env!("OUT_DIR"), "/commons_build_infos.rs"));
+
 /// Returns the home folder of the user. If no home folder is found log the
 /// error and panic. This function check in order the following env variables to
 /// determine the home folder:
diff --git a/src/rust/lkt/src/args.rs b/src/rust/lkt/src/args.rs
index 512abd963d09d5255eb216c3281e35b278d12e8f..9460bde4e13d09348926de01b13cc3d83a09e79a 100644
--- a/src/rust/lkt/src/args.rs
+++ b/src/rust/lkt/src/args.rs
@@ -4,7 +4,13 @@ use clap::{Parser, Subcommand};
 use std::ops::Range;
 
 #[derive(Parser, Debug)]
-#[command(author, version, about, long_about = None, disable_help_subcommand = true, args_conflicts_with_subcommands = true)]
+#[command( author
+         , version = commons::version()
+         , about
+         , long_about = None
+         , disable_help_subcommand = true
+         , args_conflicts_with_subcommands = true
+)]
 struct Args {
     #[command(subcommand)]
     action: SubCommand,