diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,7 +4,15 @@
 
 ## hslua-repl-0.1.0
 
-Release pending.
+Released 2023-03-17.
+
+-   Running the REPL in specific environments: the new
+    `replWithEnv` function allows to load all inputs in an
+    environment that's specified by a *Reference* value.
+
+## hslua-repl-0.1.0
+
+Released 2023-03-16.
 
 -   A new package begins its way into the undiscovered land. May
     it live long and prosper.
diff --git a/hslua-repl.cabal b/hslua-repl.cabal
--- a/hslua-repl.cabal
+++ b/hslua-repl.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                hslua-repl
-version:             0.1.0
+version:             0.1.1
 synopsis:            Isocline-based Lua REPL
 description:         An embeddable Lua REPL built with Isocline and HsLua.
 homepage:            https://hslua.org/
@@ -9,7 +9,7 @@
 license-file:        LICENSE
 author:              Albert Krewinkel
 maintainer:          Albert Krewinkel <tarleb@hslua.org>
-copyright:           © lbert Krewinkel
+copyright:           © 2023 Albert Krewinkel
 category:            Foreign
 build-type:          Simple
 extra-doc-files:     README.md
@@ -33,7 +33,7 @@
 
 common common-options
   build-depends:       base              >= 4.9.1  && < 5
-                     , hslua-core        >= 2.3    && < 2.4
+                     , hslua-core        >= 2.3.1  && < 2.4
                      , text              >= 1.2    && < 2.1
 
   ghc-options:         -Wall
diff --git a/src/HsLua/REPL.hs b/src/HsLua/REPL.hs
--- a/src/HsLua/REPL.hs
+++ b/src/HsLua/REPL.hs
@@ -14,6 +14,7 @@
 module HsLua.REPL
   ( -- * Run scripts as program
     repl
+  , replWithEnv
   , setup
   , Config (..)
   , defaultConfig
@@ -90,9 +91,14 @@
       else throwErrorAsException
     _ -> throwErrorAsException
 
--- | Run a Lua repl.
+-- | Run a Lua REPL.
 repl :: LuaError e => LuaE e NumResults
-repl = try repl' >>= \case
+repl = replWithEnv Nothing
+
+-- | Run a Lua REPL, using the table in the given upvalue as the load
+-- environment.
+replWithEnv :: LuaError e => Maybe Reference -> LuaE e NumResults
+replWithEnv mEnvRef = try repl' >>= \case
   Right n  -> pure n -- Ctrl-D or Ctrl-C
   Left err -> do
     -- something went wrong: report error, reset stack and try again
@@ -100,7 +106,7 @@
     pushException err
     call 1 0
     settop 0
-    repl
+    replWithEnv mEnvRef
  where
   repl' :: LuaError e => LuaE e NumResults
   repl' = liftIO (readlineMaybe "") >>= \case
@@ -111,6 +117,14 @@
       settop 0  -- reset stack
       let input = UTF8.fromString inputStr
       loadExpression input <|> loadStatement [input]
+      -- take env (if any) and set it as the first upvalue of the loaded
+      -- thunk.
+      case mEnvRef of
+        Nothing -> pure ()
+        Just envRef -> do
+          getref registryindex envRef >>= \case
+            TypeTable -> void $ setupvalue (nth 2) 1
+            _ -> pop 1
       -- run loaded input
       callTrace 0 multret
       nvalues <- gettop
