diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/chell-hunit.cabal b/chell-hunit.cabal
new file mode 100644
--- /dev/null
+++ b/chell-hunit.cabal
@@ -0,0 +1,29 @@
+name: chell-hunit
+version: 0.1
+synopsis: Quiet test runner (HUnit support)
+license: MIT
+license-file: license.txt
+author: John Millikin <jmillikin@gmail.com>
+build-type: Simple
+cabal-version: >= 1.6
+category: Testing
+bug-reports: mailto:jmillikin@gmail.com
+homepage: https://john-millikin.com/software/chell/
+tested-with: GHC==6.12.1
+
+source-repository head
+  type: bazaar
+  location: https://john-millikin.com/software/chell/
+
+library
+  ghc-options: -Wall
+  hs-source-dirs: src
+
+  build-depends:
+      base >= 4 && < 5
+    , chell >= 0.1 && < 0.2
+    , HUnit >= 1.1 && < 1.3
+    , text
+
+  exposed-modules:
+    Test.Chell.HUnit
diff --git a/license.txt b/license.txt
new file mode 100644
--- /dev/null
+++ b/license.txt
@@ -0,0 +1,22 @@
+Copyright (c) 2011 John Millikin
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/src/Test/Chell/HUnit.hs b/src/Test/Chell/HUnit.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/Chell/HUnit.hs
@@ -0,0 +1,34 @@
+module Test.Chell.HUnit
+	( hunit
+	) where
+
+import           Data.Text (Text, pack)
+
+import qualified Test.Chell as Chell
+import           Test.HUnit.Lang (Assertion, performTestCase)
+
+-- | Convert a sequence of HUnit assertions (embedded in IO) to a Chell
+-- 'Chell.Suite'.
+--
+-- @
+-- import Test.Chell
+-- import Test.Chell.HUnit
+-- import Test.HUnit
+--
+-- tests :: [Suite]
+-- tests =
+--     [ suite \"foo\"
+--         [ hunit \"bar\" $ do
+--             1 + 2 \@?= 3
+--         ]
+--     ]
+-- @
+hunit :: Text -> Assertion -> Chell.Suite
+hunit name io = Chell.test (Chell.Test name chell_io) where
+	chell_io _ = do
+		result <- performTestCase io
+		return $ case result of
+			Nothing -> Chell.TestPassed []
+			Just err -> parseError err
+	parseError (True, msg) = Chell.TestFailed [] [Chell.Failure Nothing (pack msg)]
+	parseError (False, msg) = Chell.TestAborted [] (pack msg)
