diff --git a/arbor-datadog.cabal b/arbor-datadog.cabal
--- a/arbor-datadog.cabal
+++ b/arbor-datadog.cabal
@@ -1,9 +1,6 @@
--- This file has been generated from package.yaml by hpack version 0.18.1.
---
--- see: https://github.com/sol/hpack
-
+cabal-version:  2.2
 name:           arbor-datadog
-version:        0.0.0.1
+version:        0.1.0.0
 synopsis:       Datadog client for Haskell.
 description:    Datadog client for Haskell. Supports both the HTTP API and StatsD.
 category:       Network
@@ -13,60 +10,59 @@
 license:        MIT
 license-file:   LICENSE
 build-type:     Simple
-cabal-version:  >= 1.10
 
 source-repository head
   type: git
   location: git://github.com/arbor/arbor-datadog.git
 
 library
-  hs-source-dirs:
-      src
+  exposed-modules:
+      Arbor.Network.StatsD
+      Arbor.Network.StatsD.Datadog
+      Arbor.Network.StatsD.Internal.Lens
+      Arbor.Network.StatsD.Monad
+      Arbor.Network.StatsD.Type
+      Arbor.Network.StatsD.Options
+  other-modules:
+  hs-source-dirs: src
   other-extensions: OverloadedStrings GeneralizedNewtypeDeriving TemplateHaskell FunctionalDependencies MultiParamTypeClasses FlexibleInstances
   ghc-options: -Wall
   build-depends:
-      generic-lens
-    , lens
-    , network
-    , resourcet
-    , time
-    , transformers
-    , base >=4.7 && <5
-    , aeson
+      aeson
     , auto-update
+    , base >=4.7 && <5
     , buffer-builder
     , bytestring
     , dlist
+    , generic-lens
+    , lens
     , mtl
+    , network <3
+    , optparse-applicative
     , random
+    , resourcet
     , text
+    , time
+    , transformers
     , unordered-containers
     , vector
-  exposed-modules:
-      Arbor.Network.StatsD
-      Arbor.Network.StatsD.Datadog
-      Arbor.Network.StatsD.Internal.Lens
-      Arbor.Network.StatsD.Monad
-      Arbor.Network.StatsD.Type
-  other-modules:
-      Paths_arbor_datadog
   default-language: Haskell2010
 
 test-suite datadog-api-test
   type: exitcode-stdio-1.0
   main-is: Spec.hs
-  hs-source-dirs:
-      test
+  other-modules:
+  hs-source-dirs: test
   ghc-options: -Wall -O3 -threaded -rtsopts -with-rtsopts=-N
   build-depends:
-      generic-lens
+      Cabal
+    , arbor-datadog
+    , base
+    , generic-lens
+    , hspec
     , lens
     , network
     , resourcet
     , time
     , transformers
-    , base
-    , Cabal
-    , arbor-datadog
-    , hspec
   default-language: Haskell2010
diff --git a/src/Arbor/Network/StatsD/Options.hs b/src/Arbor/Network/StatsD/Options.hs
new file mode 100644
--- /dev/null
+++ b/src/Arbor/Network/StatsD/Options.hs
@@ -0,0 +1,57 @@
+{-# LANGUAGE DeriveGeneric #-}
+module Arbor.Network.StatsD.Options
+( StatsTag(..)
+, StatsConfig(..)
+, SampleRate(..)
+, statsConfigParser
+)
+where
+
+import Arbor.Network.StatsD.Type (SampleRate (..))
+import Data.Monoid               ((<>))
+import Data.Text                 (Text)
+import GHC.Generics              (Generic)
+import Network.Socket            (HostName)
+import Options.Applicative
+
+import qualified Data.Text as Text
+
+newtype StatsTag = StatsTag (Text, Text) deriving (Show, Eq, Generic)
+
+data StatsConfig = StatsConfig
+  { host       :: HostName
+  , port       :: Int
+  , tags       :: [StatsTag]
+  , sampleRate :: SampleRate
+  } deriving (Show, Generic)
+
+statsConfigParser :: Parser StatsConfig
+statsConfigParser = StatsConfig
+  <$> strOption
+    (  long "statsd-host"
+    <> metavar "HOST_NAME"
+    <> showDefault <> value "localhost"
+    <> help "StatsD host name or IP address"
+    <> hidden)
+  <*> option auto
+    (  long "statsd-port"
+    <> metavar "PORT"
+    <> showDefault <> value 8125
+    <> help "StatsD port"
+    <> hidden)
+  <*> ( string2Tags <$> strOption
+    (  long "statsd-tags"
+    <> metavar "TAGS"
+    <> showDefault <> value []
+    <> help "StatsD tags"))
+  <*> ( SampleRate <$> option auto
+    (  long "statsd-sample-rate"
+    <> metavar "SAMPLE_RATE"
+    <> showDefault <> value 0.01
+    <> help "StatsD sample rate"
+    <> hidden))
+
+string2Tags :: String -> [StatsTag]
+string2Tags s = StatsTag . splitTag <$> splitTags
+  where splitTags = Text.split (==',') (Text.pack s)
+        splitTag t = Text.drop 1 <$> Text.break (==':') t
diff --git a/src/Arbor/Network/StatsD/Type.hs b/src/Arbor/Network/StatsD/Type.hs
--- a/src/Arbor/Network/StatsD/Type.hs
+++ b/src/Arbor/Network/StatsD/Type.hs
@@ -8,7 +8,7 @@
 import Data.Text               (Text)
 import Data.Time.Clock         (UTCTime)
 import GHC.Generics
-import Network                 (HostName)
+import Network.Socket          (HostName)
 import System.IO               (Handle)
 
 -- | Tags are a Datadog specific extension to StatsD. They allow you to tag a metric with a
