diff --git a/src/developer/ffx/plugins/target/list/src/lib.rs b/src/developer/ffx/plugins/target/list/src/lib.rs
index b0a3cdc..666fd79 100644
--- a/src/developer/ffx/plugins/target/list/src/lib.rs
+++ b/src/developer/ffx/plugins/target/list/src/lib.rs
@@ -39,7 +39,9 @@
                 _ => {
                     let formatter = TargetFormatter::try_from(r)
                         .map_err(|e| anyhow!("target malformed: {:?}", e))?;
-                    writeln!(writer, "{}", formatter.lines().join("\n"))?;
+                    let v: Option<ffx_config::Value> = ffx_config::get("target.default").await.ok();
+                    let default = v.as_ref().map(|s| s.as_str()).flatten();
+                    writeln!(writer, "{}", formatter.lines(default).join("\n"))?;
                 }
             };
             Ok(())
diff --git a/src/developer/ffx/plugins/target/list/src/target_formatter.rs b/src/developer/ffx/plugins/target/list/src/target_formatter.rs
index ef059ea..0872683 100644
--- a/src/developer/ffx/plugins/target/list/src/target_formatter.rs
+++ b/src/developer/ffx/plugins/target/list/src/target_formatter.rs
@@ -54,10 +54,17 @@
         make_structs_and_support_functions!(@print_func $($field,)*);
     };
 
-    (@print_func $last_field:ident, $($field:ident),* $(,)?) => {
+    (@print_func $nodename:ident, $last_field:ident, $($field:ident),* $(,)?) => {
         #[inline]
-        fn format_fields(target: &StringifiedTarget, limits: &Limits) -> String {
+        fn format_fields(target: &StringifiedTarget, limits: &Limits, default_nodename: &str) -> String {
             let mut s = String::with_capacity(limits.capacity());
+            write!(s, "{:width$}",
+                   if target.$nodename == default_nodename {
+                       format!("{}*", target.$nodename)
+                   } else {
+                       target.$nodename.clone()
+                   },
+                   width = limits.$nodename + PADDING_SPACES).unwrap();
             $(
                 write!(s, "{:width$}", target.$field, width = limits.$field + PADDING_SPACES).unwrap();
             )*
@@ -68,8 +75,8 @@
     };
 }
 
-// First field is printed last in this implementation, everything else is printed in order.
-make_structs_and_support_functions!(rcs_state, nodename, target_type, target_state, addresses, age,);
+// Second field is printed last in this implementation, everything else is printed in order.
+make_structs_and_support_functions!(nodename, rcs_state, target_type, target_state, addresses, age,);
 
 #[derive(Debug, PartialEq, Eq)]
 pub enum StringifyError {
@@ -150,8 +157,11 @@
 }
 
 impl TargetFormatter {
-    pub fn lines(&self) -> Vec<String> {
-        self.targets.iter().map(|t| format_fields(t, &self.limits)).collect()
+    pub fn lines(&self, default_nodename: Option<&str>) -> Vec<String> {
+        self.targets
+            .iter()
+            .map(|t| format_fields(t, &self.limits, default_nodename.unwrap_or("")))
+            .collect()
     }
 }
 
@@ -213,14 +223,14 @@
     #[test]
     fn test_empty_formatter() {
         let formatter = TargetFormatter::try_from(Vec::<bridge::Target>::new()).unwrap();
-        let lines = formatter.lines();
+        let lines = formatter.lines(None);
         assert_eq!(lines.len(), 1);
         assert_eq!(lines[0].len(), 47); // Just some manual math.
         assert_eq!(&lines[0], "NAME    TYPE    STATE    ADDRS/IP    AGE    RCS");
     }
 
-    #[test]
-    fn test_formatter_one_target() {
+    #[fuchsia_async::run_singlethreaded(test)]
+    async fn test_formatter_one_target() {
         let formatter = TargetFormatter::try_from(vec![
             make_valid_target(),
             bridge::Target {
@@ -238,7 +248,7 @@
             },
         ])
         .unwrap();
-        let lines = formatter.lines();
+        let lines = formatter.lines(Some("fooberdoober"));
         assert_eq!(lines.len(), 3);
 
         // TODO(awdavies): This can probably function better via golden files.
@@ -246,6 +256,16 @@
                    "NAME            TYPE       STATE      ADDRS/IP                                           AGE     RCS");
         assert_eq!(
             &lines[1],
+            "fooberdoober*   Unknown    Unknown    [101:101:101:101:101:101:101:101, 122.24.25.25]    1m2s    N"
+        );
+        assert_eq!(&lines[2], "lorberding      Unknown    Unknown    [fe80::101:101:101:101%2]                          2m0s    N");
+
+        let lines = formatter.lines(None);
+        assert_eq!(lines.len(), 3);
+        assert_eq!(&lines[0],
+                   "NAME            TYPE       STATE      ADDRS/IP                                           AGE     RCS");
+        assert_eq!(
+            &lines[1],
             "fooberdoober    Unknown    Unknown    [101:101:101:101:101:101:101:101, 122.24.25.25]    1m2s    N"
         );
         assert_eq!(&lines[2], "lorberding      Unknown    Unknown    [fe80::101:101:101:101%2]                          2m0s    N");
