diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,7 +1,15 @@
 * Hackage: <http://hackage.haskell.org/package/crackNum>
 * GitHub:  <http://github.com/LeventErkok/crackNum/>
 
-* Latest Hackage released version: 3.20, 2026-08-13
+* Latest Hackage released version: 3.21, 2026-08-16
+
+### Version 3.21, 2026-08-16
+
+  * Add support for TF32 (TensorFloat-32), via `-ftf32`. This is the 19-bit format
+    with 8 exponent and 10 significand bits, i.e., the exponent range of single
+    precision with the significand of half precision. Note that we crack the 19
+    architectural bits; hardware typically carries these in a 32-bit container
+    with the remaining bits unused.
 
 ### Version 3.20, 2026-08-13
 
diff --git a/GUI/tclGUI/crackNum.tcl b/GUI/tclGUI/crackNum.tcl
--- a/GUI/tclGUI/crackNum.tcl
+++ b/GUI/tclGUI/crackNum.tcl
@@ -38,6 +38,7 @@
         {fe5m2 "FP8 (E5M2)"  fixed    e5m2}
         {fhp   "Half"        fixed    hp}
         {fbp   "Brain"       fixed    bp}
+        {ftf32 "TF32"        fixed    tf32}
         {fsp   "Single"      fixed    sp}
         {fdp   "Double"      fixed    dp}
         {fcs   "Custom"      customFloat {}}
@@ -453,6 +454,7 @@
                 dp   { set state(selection) fdp }
                 hp   { set state(selection) fhp }
                 bp   { set state(selection) fbp }
+                tf32 { set state(selection) ftf32 }
                 e4m3 { set state(selection) fe4m3 }
                 e5m2 { set state(selection) fe5m2 }
                 fp4  { set state(selection) ffp4 }
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -144,8 +144,7 @@
 
 Then `crackNum --gui` just works. If you want to run a modified copy of the
 script, either put it on your PATH as `crackNum.tcl`, or point at it directly
-with `CRACKNUM_TCL=/path/to/crackNum.tcl`. See
-[`GUI/tclGUI/README.md`](GUI/tclGUI/README.md) for details.
+with `CRACKNUM_TCL=/path/to/crackNum.tcl`.
 
 On both platforms, launch the GUI from the command line via the `--gui` option,
 which forwards any format/rounding flags and value to the app:
@@ -156,8 +155,6 @@
 $ crackNum --gui 0xdeadbeef      -- open it pre-filled with a value to decode
 ```
 
-See [`GUI/swiftGUI/README.md`](GUI/swiftGUI/README.md) for macOS build details and other build targets.
-
 ### Usage info
 ```
 Usage: crackNum value OR binary/hex-pattern
@@ -178,6 +175,7 @@
    crackNum -f3+4  2.5                      -- encode as float with 3 bits exponent, 4 bits significand
    crackNum -f3+4  2.5 -rRTZ                -- encode as above, but use RTZ rounding mode.
    crackNum -fbp   2.5                      -- encode as a brain-precision float
+   crackNum -ftf32 2.5                      -- encode as a TensorFloat-32 float
    crackNum -fdp   2.5                      -- encode as a double-precision float
    crackNum -fe4m3 2.5                      -- encode as an E4M3 FP8 float
    crackNum -fe5m2 2.5                      -- encode as an E5M2 FP8 float
@@ -189,6 +187,7 @@
    crackNum -w4      0xE                   -- decode as 4-bit unsigned integer, from hex
    crackNum -f3+4    0b0111001             -- decode as float with 3 bits exponent, 4 bits significand
    crackNum -fbp     0x000F                -- decode as a brain-precision float
+   crackNum -ftf32   19\'h0000F            -- decode as a TensorFloat-32 float
    crackNum -fdp     0x8000000000000000    -- decode as a double-precision float
    crackNum -fhp     0x8000                -- decode as a half-precision float
    crackNum -ffp4    0b0111                -- decode as an FP4 (E2M1) float
diff --git a/crackNum.cabal b/crackNum.cabal
--- a/crackNum.cabal
+++ b/crackNum.cabal
@@ -1,8 +1,8 @@
 Cabal-version      : 2.2
 Name               : crackNum
-Version            : 3.20
+Version            : 3.21
 Synopsis           : Crack various integer and floating-point data formats
-Description        : Crack IEEE-754 float formats and arbitrary sized words and integers, showing the layout.
+Description        : Crack IEEE-754 and other float formats and arbitrary sized words and integers, showing the layout.
                      .
                      For details, please see: <http://github.com/LeventErkok/crackNum/>
 License            : BSD-3-Clause
diff --git a/src/CrackNum/Main.hs b/src/CrackNum/Main.hs
--- a/src/CrackNum/Main.hs
+++ b/src/CrackNum/Main.hs
@@ -163,6 +163,7 @@
 getFP :: String -> Flag
 getFP "hp"   = Floating $ FP 5 11
 getFP "bp"   = Floating $ FP 8  8
+getFP "tf32" = Floating $ FP 8 11
 getFP "sp"   = Floating SP
 getFP "dp"   = Floating DP
 getFP "qp"   = Floating $ FP 15 113
@@ -178,8 +179,9 @@
                                     , ""
                                     , "    hp: Half float             ( 5 +  11)"
                                     , "    bp: Brain float            ( 8 +   8)"
+                                    , "  tf32: TensorFloat-32         ( 8 +  11)"
                                     , "    sp: Single precision       ( 8 +  24)"
-                                    , "    dp: Single precision       (11 +  53)"
+                                    , "    dp: Double precision       (11 +  53)"
                                     , "    qp: Quad   precision       (15 + 113)"
                                     , "   a+b: Arbitrary IEEE-754     ( a +   b)"
                                     , "  e5m2: FP8 format (IEEE-754)  ( 5 +   3)"
@@ -246,6 +248,7 @@
                             , "   " ++ pn ++ " -f3+4  2.5                      -- encode as float with 3 bits exponent, 4 bits significand"
                             , "   " ++ pn ++ " -f3+4  2.5 -rRTZ                -- encode as above, but use RTZ rounding mode."
                             , "   " ++ pn ++ " -fbp   2.5                      -- encode as a brain-precision float"
+                            , "   " ++ pn ++ " -ftf32 2.5                      -- encode as a TensorFloat-32 float"
                             , "   " ++ pn ++ " -fdp   2.5                      -- encode as a double-precision float"
                             , "   " ++ pn ++ " -fe4m3 2.5                      -- encode as an E4M3 FP8 float"
                             , "   " ++ pn ++ " -fe5m2 2.5                      -- encode as an E5M2 FP8 float"
@@ -257,6 +260,7 @@
                             , "   " ++ pn ++ " -w4      0xE                   -- decode as 4-bit unsigned integer, from hex"
                             , "   " ++ pn ++ " -f3+4    0b0111001             -- decode as float with 3 bits exponent, 4 bits significand"
                             , "   " ++ pn ++ " -fbp     0x000F                -- decode as a brain-precision float"
+                            , "   " ++ pn ++ " -ftf32   19\\'h0000F            -- decode as a TensorFloat-32 float"
                             , "   " ++ pn ++ " -fdp     0x8000000000000000    -- decode as a double-precision float"
                             , "   " ++ pn ++ " -fhp     0x8000                -- decode as a half-precision float"
                             , "   " ++ pn ++ " -ffp4    0b0111                -- decode as an FP4 (E2M1) float"
diff --git a/src/CrackNum/TestSuite.hs b/src/CrackNum/TestSuite.hs
--- a/src/CrackNum/TestSuite.hs
+++ b/src/CrackNum/TestSuite.hs
@@ -71,6 +71,9 @@
              , gold "encode17" "-fsp -- -0x2p3"
              , gold "encode18" "-fdp -- 0x1.3"
              , gold "encode19" "-fhp -- 0x1.3p4"
+             , gold "encode20" "-ftf32 2.5"
+             , gold "encode21" "-ftf32 -- -inf"
+             , gold "encode22" "-ftf32    nan"
             ]
           , testGroup "EncodeE4M3" [
                gold "encodeE4M3_nan"   "-fe4m3    nan"
@@ -128,6 +131,8 @@
             , gold "decode6" "-fhp  -l8 128'hffffffffffffffffbdffaaffdc71fc60"
             , gold "decode7" "-fe5m2    0b01111011"
             , gold "decode8" "-w2 -rRNE 2\'h1"
+            , gold "decode9"  "-ftf32 19\'h0000F"
+            , gold "decode10" "-ftf32 0b0_10000000_0100000000"
             ]
           , testGroup "DecodeE4M3" [
                gold ("decodeE4M3_" ++ show (if sign then (-val :: Int) else val))
