diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
 # Changelog
 
+
+## [0.11.1.0] - 2025-10-23
+
+### Added
+
+* Windows support by isolating platform-specific terminal code.
+
 ## [0.11.0.0] - 2025-09-29
 
 This is technically a breaking change, but if you don't use any `opt-env-conf`
diff --git a/opt-env-conf.cabal b/opt-env-conf.cabal
--- a/opt-env-conf.cabal
+++ b/opt-env-conf.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           opt-env-conf
-version:        0.11.0.0
+version:        0.11.1.0
 synopsis:       Settings parsing for Haskell: command-line arguments, environment variables, and configuration values.
 homepage:       https://github.com/NorfairKing/opt-env-conf#readme
 bug-reports:    https://github.com/NorfairKing/opt-env-conf/issues
@@ -40,6 +40,7 @@
       OptEnvConf.Reader
       OptEnvConf.Run
       OptEnvConf.Setting
+      OptEnvConf.Terminal
       OptEnvConf.Validation
   other-modules:
       Paths_opt_env_conf
@@ -60,9 +61,11 @@
     , path-io
     , safe-coloured-text >=0.3.0.2
     , safe-coloured-text-layout >=0.2.0.0
-    , safe-coloured-text-terminfo
     , selective
     , text
     , validity
     , validity-containers
   default-language: Haskell2010
+  if !os(windows)
+    build-depends:
+        safe-coloured-text-terminfo
diff --git a/src/OptEnvConf/Completer.hs b/src/OptEnvConf/Completer.hs
--- a/src/OptEnvConf/Completer.hs
+++ b/src/OptEnvConf/Completer.hs
@@ -14,7 +14,6 @@
 import Data.Maybe
 import Path
 import Path.IO
-import Path.Internal.Posix (Path (..))
 
 newtype Completer = Completer {unCompleter :: String -> IO [String]}
 
@@ -149,7 +148,7 @@
         ]
 
 hiddenRel :: Path Rel f -> Bool
-hiddenRel (Path s) = case s of
+hiddenRel p = case toFilePath p of
   ('.' : _) -> True
   _ -> False
 
diff --git a/src/OptEnvConf/Run.hs b/src/OptEnvConf/Run.hs
--- a/src/OptEnvConf/Run.hs
+++ b/src/OptEnvConf/Run.hs
@@ -46,13 +46,13 @@
 import OptEnvConf.Parser
 import OptEnvConf.Reader
 import OptEnvConf.Setting
+import OptEnvConf.Terminal (getTerminalCapabilitiesFromHandle)
 import OptEnvConf.Validation
 import Path
 import System.Environment (getArgs, getEnvironment, getProgName)
 import System.Exit
 import System.IO
 import Text.Colour
-import Text.Colour.Capabilities.FromEnv
 
 -- | Run 'runParser' on your @Settings@' type's 'settingsParser'.
 --
diff --git a/src/OptEnvConf/Terminal.hs b/src/OptEnvConf/Terminal.hs
new file mode 100644
--- /dev/null
+++ b/src/OptEnvConf/Terminal.hs
@@ -0,0 +1,20 @@
+{-# LANGUAGE CPP #-}
+
+module OptEnvConf.Terminal
+  ( getTerminalCapabilitiesFromHandle,
+  )
+where
+
+#if !defined(mingw32_HOST_OS)
+import Text.Colour.Capabilities.FromEnv (getTerminalCapabilitiesFromHandle)
+#else
+import System.IO (Handle, hIsTerminalDevice)
+import Text.Colour.Capabilities (TerminalCapabilities (..))
+
+getTerminalCapabilitiesFromHandle :: Handle -> IO TerminalCapabilities
+getTerminalCapabilitiesFromHandle h = do
+  isTerm <- hIsTerminalDevice h
+  pure $ if isTerm then With8BitColours else WithoutColours
+  -- Note: This may be conservative. Modern Windows terminals (Windows 10+)
+  -- support 24-bit RGB colors when VT processing is enabled.
+#endif
