diff --git a/sockets-and-pipes.cabal b/sockets-and-pipes.cabal
--- a/sockets-and-pipes.cabal
+++ b/sockets-and-pipes.cabal
@@ -1,7 +1,7 @@
 cabal-version: 3.0
 
 name: sockets-and-pipes
-version: 0.3
+version: 1.0.0.0
 
 synopsis: Support for the Sockets and Pipes book
 category: HTTP, Network, Streaming, Text
@@ -10,88 +10,130 @@
 license-file: license.txt
 
 author: Chris Martin, Julie Moronuki
-maintainer: Joy of Haskell <hello@joyofhaskell.com>
-
-build-type: Simple
+maintainer: Type Classes <hello@typeclasses.com>
 
 description:
-    This package contains some utilities that support /Sockets and Pipes/
-    (available on <https://leanpub.com/sockets-and-pipes Leanpub>),
-    as well as re-exports from all the libraries mentioned in the book.
-
-    Please read the "SocketsAndPipes.Syllabus".
-
-    This release is for the sixth draft of the book, released September 2022.
+    This package re-exports from all the libraries mentioned in
+    /Sockets and Pipes/ (available on <https://leanpub.com/sockets-and-pipes Leanpub>).
 
-source-repository head
-    type:     git
-    location: git://github.com/joyofhaskell/sockets-and-pipes.git
+    Version 1.* is for the first edition of the book, released May 2023.
 
 library
-    default-language: Haskell2010
-    default-extensions: NoImplicitPrelude
-    ghc-options: -Wall -fno-warn-unused-imports
-    hs-source-dirs: src
-    exposed-modules: SocketsAndPipes.Syllabus
+    default-language: GHC2021
 
-    build-depends: ascii ^>= 1.2.3.0
-    reexported-modules: ASCII, ASCII.Char, ASCII.Decimal
+    build-depends: ascii ^>= 1.7
+    reexported-modules:
+      , ASCII
+      , ASCII.Char
+      , ASCII.Decimal
 
-    build-depends: aeson ^>= 2.0
-    reexported-modules: Data.Aeson, Data.Aeson.Key, Data.Aeson.KeyMap
+    build-depends: aeson ^>= 2.1
+    reexported-modules:
+      , Data.Aeson
+      , Data.Aeson.Key
+      , Data.Aeson.KeyMap
 
-    build-depends: async ^>= 2.2.2
-    reexported-modules: Control.Concurrent.Async
+    build-depends: async ^>= 2.2.4
+    reexported-modules:
+      , Control.Concurrent.Async
 
-    build-depends: attoparsec ^>= 0.13 || ^>= 0.14
-    reexported-modules: Data.Attoparsec.ByteString
+    build-depends: attoparsec ^>= 0.14.4
+    reexported-modules:
+      , Data.Attoparsec.ByteString
 
-    build-depends: base ^>= 4.14 || ^>= 4.15 || ^>= 4.16
-    reexported-modules: Control.Concurrent, Control.Monad, Data.Char, Prelude, System.IO
+    build-depends: attoparsec-run ^>= 0.0.2
+    reexported-modules:
+      , Data.Attoparsec.ByteString.Run
 
-    build-depends: blaze-html ^>= 0.9
-    reexported-modules: Text.Blaze.Html, Text.Blaze.Html5, Text.Blaze.Html5.Attributes, Text.Blaze.Html.Renderer.Utf8
+    build-depends:  base ^>= 4.16 || ^>= 4.17
+    reexported-modules:
+      , Control.Concurrent
+      , Control.Monad
+      , Data.Char
+      , Prelude
+      , System.IO
 
-    build-depends: bytestring ^>= 0.10 || ^>= 0.11
-    reexported-modules: Data.ByteString, Data.ByteString.Builder, Data.ByteString.Char8, Data.ByteString.Lazy
+    build-depends: blaze-html ^>= 0.9.1
+    reexported-modules:
+      , Text.Blaze.Html
+      , Text.Blaze.Html.Renderer.Utf8
+      , Text.Blaze.Html5
+      , Text.Blaze.Html5.Attributes
 
-    build-depends: containers ^>= 0.6.2.1
-    reexported-modules: Data.Map.Strict
+    build-depends: bytestring ^>= 0.11.3
+    reexported-modules:
+      , Data.ByteString
+      , Data.ByteString.Builder
+      , Data.ByteString.Char8
+      , Data.ByteString.Lazy
 
+    build-depends: containers ^>= 0.6.5
+    reexported-modules:
+      , Data.Map.Strict
+
     build-depends: directory ^>= 1.3.6
-    reexported-modules: System.Directory
+    reexported-modules:
+      , System.Directory
 
-    build-depends: filepath ^>= 1.4
-    reexported-modules: System.FilePath
+    build-depends: filepath ^>= 1.4.2
+    reexported-modules:
+      , System.FilePath
 
-    build-depends: list-transformer ^>= 1.0.7
-    reexported-modules: List.Transformer
+    build-depends: hash-addressed ^>= 0.2
+    reexported-modules:
+      , HashAddressed.Directory
+      , HashAddressed.HashFunction
 
+    build-depends: mtl ^>= 2.2.2 || ^>= 2.3.1
+    reexported-modules:
+      , Control.Monad.Except
+
     build-depends: network ^>= 3.1.2
-    reexported-modules: Network.Socket, Network.Socket.ByteString,
+    reexported-modules:
+      , Network.Socket
+      , Network.Socket.ByteString
 
     build-depends: network-simple ^>= 0.4.2
-    reexported-modules: Network.Simple.TCP
+    reexported-modules:
+      , Network.Simple.TCP
 
-    build-depends: relude ^>= 1.0 || ^>= 1.1
-    reexported-modules: Relude
+    build-depends: pipes ^>= 4.3.16
+    reexported-modules:
+      , Pipes
 
-    build-depends: resourcet ^>= 1.2.4
-    reexported-modules: Control.Monad.Trans.Resource
+    build-depends: relude ^>= 1.1 || ^>= 1.2
+    reexported-modules:
+      , Relude
 
+    build-depends: resourcet ^>= 1.2.5 || ^>= 1.3
+    reexported-modules:
+      , Control.Monad.Trans.Resource
+
     build-depends: safe-exceptions ^>= 0.1.7.0
-    reexported-modules: Control.Exception.Safe
+    reexported-modules:
+      , Control.Exception.Safe
 
     build-depends: stm ^>= 2.5
-    reexported-modules: Control.Concurrent.STM, Control.Concurrent.STM.TVar, Control.Monad.STM
+    reexported-modules:
+      , Control.Concurrent.STM
+      , Control.Concurrent.STM.TVar
+      , Control.Monad.STM
 
-    build-depends: text ^>= 1.2.4.1
-    reexported-modules: Data.Text, Data.Text.Encoding, Data.Text.IO
-    reexported-modules: Data.Text.Lazy, Data.Text.Lazy.Encoding, Data.Text.Lazy.IO
-    reexported-modules: Data.Text.Lazy.Builder, Data.Text.Lazy.Builder.Int
+    build-depends: text ^>= 1.2.5 || ^>= 2.0
+    reexported-modules:
+      , Data.Text
+      , Data.Text.Encoding
+      , Data.Text.IO
+      , Data.Text.Lazy
+      , Data.Text.Lazy.Builder
+      , Data.Text.Lazy.Builder.Int
+      , Data.Text.Lazy.Encoding
+      , Data.Text.Lazy.IO
 
     build-depends: time ^>= 1.10 || ^>= 1.11 || ^>= 1.12
-    reexported-modules: Data.Time
+    reexported-modules:
+      , Data.Time
 
     build-depends: unfork ^>= 1.0
-    reexported-modules: Unfork
+    reexported-modules:
+      , Unfork
diff --git a/src/SocketsAndPipes/Syllabus.hs b/src/SocketsAndPipes/Syllabus.hs
deleted file mode 100644
--- a/src/SocketsAndPipes/Syllabus.hs
+++ /dev/null
@@ -1,172 +0,0 @@
-module SocketsAndPipes.Syllabus
-  (
-    -- * Chapters
-    -- $chapters
-
-    -- * Libraries
-    -- $libraries
-  )
-  where
-
-import Prelude ()
-
-import qualified ASCII as A
-import qualified Control.Concurrent as Concurrent
-import qualified Control.Concurrent.Async as Async
-import qualified Control.Concurrent.STM as STM
-import qualified Control.Monad.Trans.Resource as Resource
-import qualified Data.ByteString as BS
-import qualified Data.ByteString.Builder as BSB
-import qualified Data.Text as T
-import qualified Data.Text.Lazy.Builder as TB
-import qualified Data.Time as Time
-import qualified Network.Simple.TCP as Net
-import qualified Prelude
-
-{- $chapters
-
-List of modules that make a significant appearance in each chapter:
-
-__Setup__
-
-  * "Relude" - Alternate prelude that includes a lot of standard utilities
-  * "System.Directory", "System.FilePath" - Determining where our data files should go
-
-__1 - Handles__
-
-  * "System.IO" - Writing to a file
-  * "Control.Monad.Trans.Resource" - Using 'Resource.allocate' to ensure that file handles are closed
-
-__2 - Chunks__
-
-  * "Data.Text" - 'T.Text' is a chunk of characters
-  * "Data.Text.IO" - Reading and writing files using 'T.Text' instead of 'Prelude.String'
-
-__3 - Bytes__
-
-  * "Data.ByteString" - 'BS.ByteString' is a chunk of bytes
-  * "Data.Text.Encoding" - Conversions between 'BS.ByteString' and 'T.Text'
-
-__4 - Sockets__
-
-  * "Network.Socket" - Opening and closing sockets, resolving network addresses
-  * "Network.Socket.ByteString" - Writing to and reading from sockets
-
-__5 - HTTP__
-
-  * "ASCII", "ASCII.Char" - Expressing HTTP messages as strings using the 'A.string' quasi-quoter
-  * "Network.Simple.TCP" - Listening for client connections using 'Net.serve'
-
-__6 - HTTP types__
-
-  * "ASCII.Decimal", "Data.ByteString.Lazy" - Defining datatypes for the parts of an HTTP message
-
-__7 - Encoding__
-
-  * "Data.Text.Lazy",  "Data.Text.Lazy.Builder" - Efficient text concatenations with 'TB.Builder'
-  * "Data.ByteString.Lazy", "Data.ByteString.Builder" - Efficient byte string concatenations with 'BSB.Builder'
-  * "Data.Time" - Simple performance testing with 'Time.getCurrentTime' and 'Time.diffUTCTime'
-
-__8 - Responding__
-
-  * No additional imports in this chapter
-
-__9 - Content types__
-
-  * "Data.Text.Lazy.Builder.Int", "Data.Text.Lazy.IO",  "Data.Text.Lazy.Encoding" - Building a text response body
-  * "Text.Blaze.Html", "Text.Blaze.Html5", "Text.Blaze.Html.Renderer.Utf8" - Building an HTML response body
-  * "Data.Aeson", "Data.Aeson.Key", "Data.Aeson.KeyMap" - Building a JSON response body
-
-__10 - Change__
-
-  * "Control.Concurrent.STM" - Shared 'STM.TVar' state for request-handling threads
-  * "Control.Concurrent.Async" - Demonstrating thread safety with 'Async.replicateConcurrently_'
-
-__11 - Streaming__
-
-  * "Control.Concurrent" - Slowing things down with 'Concurrent.threadDelay'
-
-__12 - ListT IO__
-
-  * "List.Transformer" - Representing files and chunked HTTP message bodies as I/O streams
-
-__13 - Parsing__
-
-  * "Data.Map.Strict" - Mapping resource names to file paths
-  * "Data.Attoparsec.ByteString" - Parsing HTTP requests
-
-__14 - Errors__
-
-  * "Unfork" - Thread-safe logging
-
-The remaining chapters are in progress:
-
-__15 - Reading the head__
-
-__16 - Reading the body__
-
-__17 - Connection reuse__
-
--}
-
-{- $libraries
-
-Re-exported modules, grouped by the package that each module originally comes from:
-
-__ascii__ - "ASCII", "ASCII.Char", "ASCII.Decimal"
-
-__aeson__ - "Data.Aeson", "Data.Aeson.Key", "Data.Aeson.KeyMap"
-
-__async__ - "Control.Concurrent.Async"
-
-__base__
-
-  * File handles - "System.IO"
-  * Fundamental data types - "Data.Char"
-  * Miscellanea - "Control.Concurrent", "Control.Monad"
-
-__blaze-html__ - "Text.Blaze.Html", "Text.Blaze.Html5", "Text.Blaze.Html5.Attributes", "Text.Blaze.Html.Renderer.Utf8"
-
-__bytestring__
-
-  * Strict - "Data.ByteString"
-  * Lazy - "Data.ByteString.Lazy"
-  * Builder - "Data.ByteString.Builder"
-  * "Data.ByteString.Char8" - To discuss why we don't use it
-
-__containers__ - "Data.Map.Strict"
-
-__directory__ - "System.Directory"
-
-__filepath__ - "System.FilePath"
-
-__list-transformer__ - "List.Transformer"
-
-__network__
-
-  * "Network.Socket" - The Socket type, operations for opening and closing sockets
-  * "Network.Socket.ByteString" - Socket read/write operations with strict byte strings
-
-__network-simple__
-
-  * "Network.Simple.TCP" - Sockets that listen for incoming client connections
-
-__relude__ - "Relude"
-
-__resourcet__ - "Control.Monad.Trans.Resource"
-
-__safe-exceptions__ - "Control.Exception.Safe"
-
-__stm__ - "Control.Monad.STM", "Control.Concurrent.STM", "Control.Concurrent.STM.TVar"
-
-__text__
-
-  * Strict - "Data.Text", "Data.Text.Encoding", "Data.Text.IO"
-  * Lazy - "Data.Text.Lazy", "Data.Text.Lazy.Encoding", "Data.Text.Lazy.IO"
-  * Builder - "Data.Text.Lazy.Builder", "Data.Text.Lazy.Builder.Int"
-
-__time__ - "Data.Time"
-
-__unfork__ - "Unfork"
-
--}
