diff --git a/configifier.cabal b/configifier.cabal
--- a/configifier.cabal
+++ b/configifier.cabal
@@ -1,5 +1,5 @@
 name:                configifier
-version:             0.0.6
+version:             0.0.7
 synopsis:            parser for config files, shell variables, command line args.
 description:         See <https://github.com/zerobuzz/configifier/blob/master/README.md README>
 license:             AGPL-3
@@ -36,7 +36,9 @@
     , bytestring >=0.10 && <0.11
     , case-insensitive >=1.2 && <1.3
     , containers >=0.5 && <0.6
+    , directory >=1.2 && <1.3
     , either >=4.3 && <4.5
+    , functor-infix >=0.0.3 && <0.1
     , mtl >=2.1 && <2.3
     , regex-easy >=0.1.0.0 && <0.2
     , safe >=0.3 && <0.4
diff --git a/src/Data/Configifier.hs b/src/Data/Configifier.hs
--- a/src/Data/Configifier.hs
+++ b/src/Data/Configifier.hs
@@ -24,11 +24,13 @@
 
 import Control.Applicative ((<$>), (<|>))
 import Control.Exception (Exception, throwIO)
+import Control.Monad (filterM)
 import Data.ByteString.Char8 (pack)
 import Data.CaseInsensitive (mk)
 import Data.Char (toUpper)
 import Data.Either.Combinators (mapLeft)
 import Data.Function (on)
+import Data.Functor.Infix ((<$$>))
 import Data.List (nubBy, intercalate, isPrefixOf)
 import Data.Maybe (catMaybes)
 import Data.Monoid (Monoid, (<>), mempty, mappend, mconcat)
@@ -39,6 +41,7 @@
 import GHC.TypeLits (Symbol, KnownSymbol, symbolVal)
 import Language.Haskell.TH.Quote (QuasiQuoter(..))
 import Language.Haskell.TH (runQ)
+import System.Directory (doesFileExist)
 import System.Environment (getEnvironment, getArgs, getProgName)
 import System.IO.Unsafe (unsafePerformIO)
 
@@ -218,11 +221,14 @@
 -- processes shell environment variables (with `getProgName` as
 -- prefix), and finally (3) processes command line args, turning
 -- @--config@ arguments into further recursive config file loads.
+--
+-- File path arguments are optiona; config paths to non-existent
+-- files are silently dropped.
 defaultSources :: [FilePath] -> IO [Source]
 defaultSources filePaths = do
-    let files = YamlFile <$> filePaths
-    env  <- ShellEnv     <$> (getEnvironment >>= withShellEnvPrefix)
-    args <- CommandLine  <$> getArgs
+    files <- YamlFile   <$$> filterM doesFileExist filePaths
+    env   <- ShellEnv    <$> (getEnvironment >>= withShellEnvPrefix)
+    args  <- CommandLine <$> getArgs
     return $ files ++ [env] ++ readUserConfigFiles [args]
 
 -- | Require that all shell env variables start with executable name.
