diff --git a/language-docker.cabal b/language-docker.cabal
--- a/language-docker.cabal
+++ b/language-docker.cabal
@@ -2,10 +2,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 07ef36c63d55fe09579fa173145f7258f240ae908b7e7bdeb96f4b088c21b709
+-- hash: 70e47067ca87323030f8daa6fd4e2848e695e6068ef611c71c89d5bd5694da25
 
 name:           language-docker
-version:        3.0.1
+version:        4.0.0
 synopsis:       Dockerfile parser, pretty-printer and embedded DSL
 description:    All functions for parsing, printing and writting Dockerfiles are exported through @Language.Docker@. For more fine-grained operations look for specific modules that implement a certain functionality.
                 See the <https://github.com/hadolint/language-docker GitHub project> for the source-code and examples.
@@ -36,7 +36,6 @@
   exposed-modules:
       Language.Docker
       Language.Docker.Parser
-      Language.Docker.Predef
       Language.Docker.PrettyPrint
       Language.Docker.Normalize
       Language.Docker.Syntax
@@ -46,17 +45,13 @@
       Language.Docker.EDSL.Quasi
       Language.Docker.EDSL.Types
   other-modules:
-      Language.Docker.EDSL.Plugins
       Paths_language_docker
   hs-source-dirs:
       src
   ghc-options: -Wall -fno-warn-unused-do-bind -fno-warn-orphans
   build-depends:
-      Glob
-    , aeson
-    , base >=4.8 && <5
+      base >=4.8 && <5
     , bytestring >=0.10
-    , directory
     , filepath
     , free
     , mtl
@@ -69,16 +64,12 @@
     , th-lift
     , th-lift-instances
     , time
-    , transformers
-    , unordered-containers
-    , yaml
   default-language: Haskell2010
 
 test-suite hspec
   type: exitcode-stdio-1.0
   main-is: Spec.hs
   other-modules:
-      Language.Docker.EDSL.PluginsSpec
       Language.Docker.EDSL.QuasiSpec
       Language.Docker.EDSLSpec
       Language.Docker.ExamplesSpec
@@ -90,7 +81,6 @@
       Glob
     , HUnit >=1.2
     , QuickCheck
-    , aeson
     , base >=4.8 && <5
     , bytestring >=0.10
     , directory
@@ -109,7 +99,4 @@
     , th-lift
     , th-lift-instances
     , time
-    , transformers
-    , unordered-containers
-    , yaml
   default-language: Haskell2010
diff --git a/src/Language/Docker/EDSL/Plugins.hs b/src/Language/Docker/EDSL/Plugins.hs
deleted file mode 100644
--- a/src/Language/Docker/EDSL/Plugins.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-module Language.Docker.EDSL.Plugins where
-
diff --git a/src/Language/Docker/Predef.hs b/src/Language/Docker/Predef.hs
deleted file mode 100644
--- a/src/Language/Docker/Predef.hs
+++ /dev/null
@@ -1,104 +0,0 @@
-{-# LANGUAGE FlexibleContexts #-}
-{-# LANGUAGE MultiParamTypeClasses #-}
-{-# LANGUAGE OverloadedStrings #-}
-{-# LANGUAGE OverloadedLists #-}
-
-module Language.Docker.Predef where
-
-import Control.Monad
-import Control.Monad.Free.Class
-import Control.Monad.IO.Class
-import Data.Aeson (Value(..))
-import qualified Data.HashMap.Strict as HashMap
-import Data.List.NonEmpty (fromList)
-import Data.Maybe
-import Data.Monoid
-import Data.Text (Text)
-import qualified Data.Text as Text
-import qualified Data.Text.IO as Text
-import qualified Data.Yaml as Yaml
-import System.Directory
-import System.FilePath
-import qualified System.FilePath.Glob as Glob
-
-import Language.Docker
-import Language.Docker.EDSL.Types
-
-appendLnIfMissing :: FilePath -> Text -> IO ()
-appendLnIfMissing fp cts = do
-    e <- doesFileExist fp
-    unless e (Text.writeFile fp "")
-    txt <- Text.lines <$> Text.readFile fp
-    unless (cts `elem` txt) $ Text.writeFile fp (Text.unlines (txt <> [cts]))
-
-dockerIgnore :: Text -> IO ()
-dockerIgnore = appendLnIfMissing ".dockerignore"
-
-addGlob :: (MonadIO m, MonadFree EInstruction m) => String -> TargetPath -> m ()
-addGlob pattern dest = do
-    fs <-
-        liftIO $ do
-            fs <- Glob.glob pattern
-            cwd <- getCurrentDirectory
-            let fs' = map (makeRelative cwd . normalise) fs
-            forM fs' $ \f -> do
-                isdir <- doesDirectoryExist f
-                return $
-                    if isdir
-                        then (SourcePath $ f <> "/")
-                        else (SourcePath f)
-    case fs of
-      [] -> return ()
-      _ -> add (fromList fs) dest
-
-copyGlob :: (MonadIO m, MonadFree EInstruction m) => String -> TargetPath -> m ()
-copyGlob = addGlob
-
-stackBuild :: (Monad m, MonadIO m, MonadFree EInstruction m) => m ()
-stackBuild = do
-    sts <- liftIO getStackYamlResolver
-    stackBuild' sts (return ())
-  where
-    getStackYamlResolver = do
-        mhm <- Yaml.decodeFile "./stack.yaml" :: IO (Maybe Value)
-        return $
-            fromMaybe "latest" $ do
-                hm <- mhm
-                o <-
-                    case hm of
-                        Object o -> return o
-                        _ -> Nothing
-                rs <- HashMap.lookup "resolver" o
-                toString rs
-      where
-        toString (String m) = Just (Text.unpack m)
-        toString _ = Nothing
-
-stackBuild' :: (Monad m, MonadIO m, MonadFree EInstruction m) => String -> m () -> m ()
-stackBuild' tag extra = do
-    liftIO $ dockerIgnore ".stack-work"
-    liftIO $ dockerIgnore ".cabal-sandbox"
-    from ("fpco" `tagged` tag)
-    extra
-    add ["./package.yaml"] "/app/package.yaml"
-    addGlob "./*.cabal" "/app/"
-    add ["./stack.yaml"] "/app/stack.yaml"
-    workdir "/app/"
-    run "stack build --only-dependencies"
-    add ["."] "/app/stack.yaml"
-    run "stack build"
-
-nodejs :: (Monad m, MonadIO m, MonadFree EInstruction m) => m ()
-nodejs = nodejs' "6" (return ())
-
-nodejs' :: (Monad m, MonadIO m, MonadFree EInstruction m) => String -> m () -> m ()
-nodejs' tag extra = do
-    liftIO $ dockerIgnore "node_modules"
-    liftIO $ dockerIgnore "bower_components"
-    from ("node" `tagged` tag)
-    extra
-    add ["./package.json"] "/app/package.json"
-    workdir "/app/"
-    run "npm install"
-    add ["."] "/app/"
-    cmd "npm start"
diff --git a/test/Language/Docker/EDSL/PluginsSpec.hs b/test/Language/Docker/EDSL/PluginsSpec.hs
deleted file mode 100644
--- a/test/Language/Docker/EDSL/PluginsSpec.hs
+++ /dev/null
@@ -1,19 +0,0 @@
-module Language.Docker.EDSL.PluginsSpec
-  where
-
--- import           Language.Docker.EDSL
--- import           Language.Docker.EDSL.Plugins
-import           Test.Hspec
-
-spec =
-    describe "listPlugins" $
-        it "lists docker images matching language-docker-*" pending
-            -- str <- toDockerFileStrIO $ do
-            --     ds <- liftIO (glob "./test/*.hs")
-            --     from "ubuntu"
-            --     mapM_ add ds
-            -- str `shouldBe` unlines [ "FROM ubuntu"
-            --                        , "ADD Spec.hs"
-            --                        , "ADD SanitySpec.hs"
-            --                        , "ADD Test.hs"
-            --                        ]
