diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+# 0.3.0
+
+* Add default completion support from optparse-applicative
+* Add windows support. Credits to @ShrykeWindgrace.
+
 # 0.2.5
 
 * Fix eager cloning
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,10 @@
 # tldr
 
-[![Build Status](https://travis-ci.org/psibi/tldr-hs.svg?branch=master)](https://travis-ci.org/psibi/tldr-hs)
+[![Linux build](https://travis-ci.org/psibi/tldr-hs.svg?branch=master)](https://travis-ci.org/psibi/tldr-hs)
+[![Window build](https://ci.appveyor.com/api/projects/status/wlqa2ndsquk1psqs/branch/master?svg=true)](https://ci.appveyor.com/project/psibi/tldr-hs/branch/master)
+[![Hackage](https://img.shields.io/hackage/v/tldr.svg)](https://hackage.haskell.org/package/tldr)
+[![Stackage Nightly](http://stackage.org/package/tldr/badge/nightly)](http://stackage.org/nightly/package/tldr)
+[![Stackage LTS](http://stackage.org/package/tldr/badge/lts)](http://stackage.org/lts/package/tldr)
 
 Haskell client for tldr
 
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -9,7 +9,7 @@
 import Control.Monad
 import System.Directory
 import System.FilePath
-import Data.Conduit.Shell hiding (info)
+import System.Process.Typed
 import System.Environment (getArgs, withArgs)
 import Paths_tldr (version)
 import Data.Version (showVersion)
@@ -39,22 +39,21 @@
 initializeTldrPages :: IO ()
 initializeTldrPages = do
   initialized <- tldrInitialized
-  if initialized
-    then return ()
-    else do
-      homeDir <- getHomeDirectory
-      run $
-        do mkdir (homeDir </> tldrDirName)
-           cd (homeDir </> tldrDirName)
-           git "clone" repoHttpsUrl
+  initialized <- tldrInitialized
+  unless initialized $ do
+    homeDir <- getHomeDirectory
+    let cloneDir = homeDir </> tldrDirName
+    runProcess_ $ proc "mkdir" [cloneDir]
+    runProcess_ $ setWorkingDir cloneDir $ proc "git" ["clone", repoHttpsUrl]
 
+
 updateTldrPages :: IO ()
 updateTldrPages = do
   homeDir <- getHomeDirectory
   let repoDir = homeDir </> tldrDirName </> "tldr"
-  run $
-    do cd repoDir
-       git "pull" ["origin", "master"]
+  repoExists <- doesDirectoryExist repoDir
+  when repoExists $ do
+    runProcess_ $ setWorkingDir repoDir $ proc "git" ["pull", "origin", "master"] 
 
 updateOption :: Parser (a -> a)
 updateOption = infoOption "update" (long "update" <> help "Update tldr pages")
@@ -108,4 +107,4 @@
          let page = pageName opts
          fname <- getPagePath page
          maybe (putStrLn ("No tldr entry for " <> page)) renderPage fname
-    _ -> return ()
+    compOpts@(CompletionInvoked _) -> handleParseResult compOpts >> return ()
diff --git a/tldr.cabal b/tldr.cabal
--- a/tldr.cabal
+++ b/tldr.cabal
@@ -1,5 +1,5 @@
 name:                tldr
-version:             0.2.5
+version:             0.3.0
 synopsis:            Haskell tldr client
 description:         Haskell tldr client with support for updating and viewing tldr pages.
 homepage:            https://github.com/psibi/tldr-hs#readme
@@ -33,7 +33,7 @@
                      , optparse-applicative
                      , directory
                      , filepath
-                     , shell-conduit >= 4.6.0
+                     , typed-process
                      , semigroups
   default-language:    Haskell2010
 
