diff --git a/Statistics/Regression.hs b/Statistics/Regression.hs
--- a/Statistics/Regression.hs
+++ b/Statistics/Regression.hs
@@ -14,10 +14,9 @@
     ) where
 
 import Control.Applicative ((<$>))
-import Control.Concurrent (forkIO)
-import Control.Concurrent.Chan (newChan, readChan, writeChan)
+import Control.Concurrent.Async (forConcurrently)
 import Control.DeepSeq (rnf)
-import Control.Monad (forM_, replicateM, when)
+import Control.Monad (when)
 import Data.List (nub)
 import GHC.Conc (getNumCapabilities)
 import Prelude hiding (pred, sum)
@@ -140,16 +139,15 @@
 
   caps <- getNumCapabilities
   gens <- splitGen caps gen0
-  done <- newChan
-  forM_ (zip gens (balance caps numResamples)) $ \(gen,count) -> forkIO $ do
+  vs <- forConcurrently (zip gens (balance caps numResamples)) $ \(gen,count) -> do
       v <- V.replicateM count $ do
            let n = U.length resp0
            ixs <- U.replicateM n $ uniformR (0,n-1) gen
            let resp  = U.backpermute resp0 ixs
                preds = map (flip U.backpermute ixs) preds0
            return $ rgrss preds resp
-      rnf v `seq` writeChan done v
-  (coeffsv, r2v) <- (G.unzip . V.concat) <$> replicateM caps (readChan done)
+      rnf v `seq` return v
+  let (coeffsv, r2v) = G.unzip (V.concat vs)
   let coeffs  = flip G.imap (G.convert coeffss) $ \i x ->
                 est x . U.generate numResamples $ \k -> (coeffsv G.! k) G.! i
       r2      = est r2s (G.convert r2v)
diff --git a/Statistics/Resampling.hs b/Statistics/Resampling.hs
--- a/Statistics/Resampling.hs
+++ b/Statistics/Resampling.hs
@@ -37,8 +37,8 @@
 
 import Data.Aeson (FromJSON, ToJSON)
 import Control.Applicative
-import Control.Concurrent (forkIO, newChan, readChan, writeChan)
-import Control.Monad (forM_, forM, replicateM, replicateM_, liftM2)
+import Control.Concurrent.Async (forConcurrently_)
+import Control.Monad (forM_, forM, replicateM, liftM2)
 import Control.Monad.Primitive (PrimMonad(..))
 import Data.Binary (Binary(..))
 import Data.Data (Data, Typeable)
@@ -164,18 +164,17 @@
                         (replicate r 1 ++ repeat 0)
           where (q,r) = numResamples `quotRem` numCapabilities
   results <- mapM (const (MU.new numResamples)) ests
-  done <- newChan
   gens <- splitGen numCapabilities gen
-  forM_ (zip3 ixs (tail ixs) gens) $ \ (start,!end,gen') ->
-    forkIO $ do
-      let loop k ers | k >= end = writeChan done ()
+  forConcurrently_ (zip3 ixs (tail ixs) gens) $ \ (start,!end,gen') -> do
+    -- on GHCJS it doesn't make sense to do any forking.
+    -- JavaScript runtime has only single capability.
+      let loop k ers | k >= end = return ()
                      | otherwise = do
             re <- resampleVector gen' samples
             forM_ ers $ \(est,arr) ->
                 MU.write arr k . est $ re
             loop (k+1) ers
       loop start (zip ests' results)
-  replicateM_ numCapabilities $ readChan done
   mapM_ sort results
   -- Build resamples
   res <- mapM unsafeFreeze results
diff --git a/Statistics/Resampling/Bootstrap.hs b/Statistics/Resampling/Bootstrap.hs
--- a/Statistics/Resampling/Bootstrap.hs
+++ b/Statistics/Resampling/Bootstrap.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 -- |
 -- Module    : Statistics.Resampling.Bootstrap
 -- Copyright : (c) 2009, 2011 Bryan O'Sullivan
@@ -16,7 +17,6 @@
     -- $references
     ) where
 
-import Control.Monad.Par (parMap, runPar)
 import           Data.Vector.Generic ((!))
 import qualified Data.Vector.Unboxed as U
 import qualified Data.Vector.Generic as G
@@ -31,6 +31,9 @@
 
 import qualified Statistics.Resampling as R
 
+#if !defined(__GHCJS__)
+import Control.Monad.Par (parMap, runPar)
+#endif
 
 data T = {-# UNPACK #-} !Double :< {-# UNPACK #-} !Double
 infixl 2 :<
@@ -48,7 +51,15 @@
   --   this.
   -> [Estimate ConfInt Double]
 bootstrapBCA confidenceLevel sample resampledData
+#if defined(__GHCJS__)
+  -- monad-par causes seems to cause "thread blocked indefinitely on MVar"
+  -- on GHCJS still
+  --
+  -- I (phadej) would change the interface to return IO, and use mapConcurrently from async
+  = map e resampledData
+#else
   = runPar $ parMap e resampledData
+#endif
   where
     e (est, Bootstrap pt resample)
       | U.length sample == 1 || isInfinite bias =
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,10 @@
+## Changes in 0.15.1.0
+
+ * GHCJS support
+
+ * Concurrent resampling now uses `async` instead of hand-rolled primitives
+
+
 ## Changes in 0.15.0.0
 
  * Modules `Statistics.Matrix.*` are split into new package
diff --git a/statistics.cabal b/statistics.cabal
--- a/statistics.cabal
+++ b/statistics.cabal
@@ -1,5 +1,5 @@
 name:           statistics
-version:        0.15.0.0
+version:        0.15.1.0
 synopsis:       A library of statistical types, data, and functions
 description:
   This library provides a number of common functions and types useful
@@ -44,8 +44,19 @@
   tests/Tests/Math/gen.py
   tests/utils/Makefile
   tests/utils/fftw.c
-tested-with: GHC==7.4.2, GHC==7.6.3, GHC==7.8.3, GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.3
 
+tested-with:
+    GHC ==7.4.2
+     || ==7.6.3
+     || ==7.8.4
+     || ==7.10.3
+     || ==8.0.2
+     || ==8.2.2
+     || ==8.4.4
+     || ==8.6.5
+  , GHCJS ==8.4
+
+
 library
   exposed-modules:
     Statistics.Autocorrelation
@@ -103,9 +114,9 @@
                , mwc-random              >= 0.13.0.0
                  --
                , aeson                   >= 0.6.0.0
+               , async                   >= 2.2.2 && <2.3
                , deepseq                 >= 1.1.0.2
                , binary                  >= 0.5.1.0
-               , monad-par               >= 0.3.4
                , primitive               >= 0.3
                , dense-linear-algebra    >= 0.1 && <0.2
                , vector                  >= 0.10
@@ -113,6 +124,10 @@
                , vector-th-unbox
                , vector-binary-instances >= 0.2.1
                , data-default-class      >= 0.1.2
+  if !impl(ghcjs)
+    build-depends:
+      monad-par               >= 0.3.4
+  -- Older GHC
   if impl(ghc < 7.6)
     build-depends:
       ghc-prim
