minio-hs: A Minio Haskell Library for Amazon S3 compatible cloud storage.

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.


The Minio Haskell client library provides simple APIs to access Minio, Amazon S3 and other API compatible cloud storage servers.

[Skip to ReadMe]


Versions0.0.1, 0.1.0, 0.2.0, 0.2.1, 0.3.0, 0.3.1, 0.3.2, 1.0.0, 1.0.0, 1.0.1, 1.1.0, 1.2.0
Dependenciesaeson, base (>=4.7 && <5), base64-bytestring, bytestring, case-insensitive, conduit, conduit-extra, containers, cryptonite, cryptonite-conduit, data-default, exceptions, filepath, http-client, http-conduit, http-types, memory, protolude (>=0.1.6), resourcet, text, text-format, time, transformers, unliftio, unliftio-core, xml-conduit [details]
AuthorMinio Dev Team
CategoryNetwork, AWS, Object Storage
Home page
Source repositoryhead: git clone
UploadedMon Apr 23 22:57:07 UTC 2018 by MinioDevTeam





Use -f <flag> to enable a flag, or -f -<flag> to disable that flag. More info


Maintainers' corner

For package maintainers and hackage trustees

Readme for minio-hs-1.0.0

[back to package description]

Minio Client SDK for Haskell Build StatusHackageSlack

The Minio Haskell Client SDK provides simple APIs to access Minio and Amazon S3 compatible object storage server.

Minimum Requirements


git clone

cd minio-hs/

stack install

Tests can be run with:

stack test

A section of the tests use the remote Minio Play server at by default. For library development, using this remote server maybe slow. To run the tests against a locally running Minio live server at http://localhost:9000, just set the environment MINIO_LOCAL to any value (and unset it to switch back to Play).

Documentation can be locally built with:

stack haddock

Quick-Start Example - File Uploader


#!/usr/bin/env stack
-- stack --resolver lts-9.1 runghc --package minio-hs --package optparse-applicative --package filepath

{-# Language OverloadedStrings, ScopedTypeVariables #-}
import Network.Minio

import Control.Monad.Catch (catchIf)
import Control.Monad.IO.Class (liftIO)
import Data.Monoid ((<>))
import Data.Text (pack)
import Options.Applicative
import Prelude
import System.FilePath.Posix

-- | The following example uses minio's play server at
--  The endpoint and associated
-- credentials are provided via the libary constant,
-- > minioPlayCI :: ConnectInfo

-- optparse-applicative package based command-line parsing.
fileNameArgs :: Parser FilePath
fileNameArgs = strArgument
               (metavar "FILENAME"
                <> help "Name of file to upload to AWS S3 or a Minio server")

cmdParser = info
            (helper <*> fileNameArgs)
             <> progDesc "FileUploader"
             <> header
             "FileUploader - a simple file-uploader program using minio-hs")

ignoreMinioErr :: ServiceErr -> Minio ()
ignoreMinioErr = return . const ()

main :: IO ()
main = do
  let bucket = "my-bucket"

  -- Parse command line argument, namely --filename.
  filepath <- execParser cmdParser
  let object = pack $ takeBaseName filepath

  res <- runMinio minioPlayCI $ do
    -- Make a bucket; catch bucket already exists exception if thrown.
    catchIf (== BucketAlreadyOwnedByYou) (makeBucket bucket Nothing) ignoreMinioErr

    -- Upload filepath to bucket; object is derived from filepath.
    fPutObject bucket object filepath

  case res of
    Left e -> putStrLn $ "file upload failed due to " ++ (show e)
    Right () -> putStrLn "file upload succeeded."

Run FileUploader

./FileUploader.hs "path/to/my/file"


Contributors Guide