diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,12 @@
-User-visible changes in hledger-web. See also hledger, hledger-lib.
+User-visible changes in hledger-web.
+See also the hledger changelog.
+
+
+# 1.12 (2018/12/02)
+
+* fix duplicate package.yaml keys warned about by hpack
+
+* use hledger 1.12
 
 
 # 1.11.1 (2018/10/06)
diff --git a/Hledger/Web/Widget/AddForm.hs b/Hledger/Web/Widget/AddForm.hs
--- a/Hledger/Web/Widget/AddForm.hs
+++ b/Hledger/Web/Widget/AddForm.hs
@@ -21,7 +21,7 @@
 import Data.Time (Day)
 import Text.Blaze.Internal (Markup, preEscapedString)
 import Text.JSON
-import Text.Megaparsec (eof, parseErrorPretty, runParser)
+import Text.Megaparsec (eof, errorBundlePretty, runParser)
 import Yesod
 
 import Hledger
@@ -131,7 +131,7 @@
     catPostings (t, t', Left (e, e')) xs = (t, t', e, e') : xs
     catPostings (t, t', Right _) xs = (t, t', Nothing, Nothing) : xs
 
-    errorToFormMsg = first (("Invalid value: " <>) . T.pack . parseErrorPretty)
+    errorToFormMsg = first (("Invalid value: " <>) . T.pack . errorBundlePretty)
     validateAccount = errorToFormMsg . runParser (accountnamep <* eof) "" . T.strip
     validateAmount = errorToFormMsg . runParser (evalStateT (amountp <* eof) mempty) "" . T.strip
 
diff --git a/hledger-web.1 b/hledger-web.1
--- a/hledger-web.1
+++ b/hledger-web.1
@@ -1,5 +1,5 @@
 
-.TH "hledger\-web" "1" "September 2018" "hledger\-web 1.11.1" "hledger User Manuals"
+.TH "hledger\-web" "1" "December 2018" "hledger\-web 1.12" "hledger User Manuals"
 
 
 
diff --git a/hledger-web.cabal b/hledger-web.cabal
--- a/hledger-web.cabal
+++ b/hledger-web.cabal
@@ -1,11 +1,13 @@
--- This file has been generated from package.yaml by hpack version 0.28.2.
+cabal-version: 1.12
+
+-- This file has been generated from package.yaml by hpack version 0.31.0.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 1f2edcb54da5a25320f2283a7e974ca5301be6eed796df485a017fa10d7e530d
+-- hash: 5561e1638c4aa51f58f3983ce8187999995f3e67b5cd8654e8cc2f71a8bbb7da
 
 name:           hledger-web
-version:        1.11.1
+version:        1.12
 synopsis:       Web interface for the hledger accounting tool
 description:    This is hledger's web interface.
                 It provides a more user-friendly and collaborative UI than the
@@ -27,25 +29,21 @@
 license-file:   LICENSE
 tested-with:    GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.3
 build-type:     Simple
-cabal-version:  >= 1.10
 extra-source-files:
     CHANGES
+    README
     config/favicon.ico
     config/keter.yaml
     config/robots.txt
     config/routes
     config/settings.yml
-    hledger-web.1
-    hledger-web.info
-    hledger-web.txt
-    README
     static/css/bootstrap-datepicker.standalone.min.css
     static/css/bootstrap-theme.css
-    static/css/bootstrap-theme.css.map
     static/css/bootstrap-theme.min.css
     static/css/bootstrap.css
-    static/css/bootstrap.css.map
     static/css/bootstrap.min.css
+    static/css/bootstrap-theme.css.map
+    static/css/bootstrap.css.map
     static/fonts/glyphicons-halflings-regular.eot
     static/fonts/glyphicons-halflings-regular.svg
     static/fonts/glyphicons-halflings-regular.ttf
@@ -106,6 +104,9 @@
     templates/manage.hamlet
     templates/register.hamlet
     templates/upload-form.hamlet
+    hledger-web.1
+    hledger-web.txt
+    hledger-web.info
 
 source-repository head
   type: git
@@ -127,8 +128,6 @@
   default: True
 
 library
-  hs-source-dirs:
-      ./.
   exposed-modules:
       Hledger.Web
       Hledger.Web.Application
@@ -148,10 +147,12 @@
       Hledger.Web.Widget.Common
   other-modules:
       Paths_hledger_web
+  hs-source-dirs:
+      ./.
   ghc-options: -Wall -fwarn-tabs
-  cpp-options: -DVERSION="1.11.1"
+  cpp-options: -DVERSION="1.12"
   build-depends:
-      base >=4.8 && <4.12
+      base >=4.8 && <4.13
     , blaze-html
     , blaze-markup
     , bytestring
@@ -164,12 +165,12 @@
     , directory
     , filepath
     , hjsmin
-    , hledger >=1.11.1 && <1.12
-    , hledger-lib >=1.11.1 && <1.12
+    , hledger >=1.12 && <1.13
+    , hledger-lib >=1.12 && <1.13
     , http-client
     , http-conduit
     , json
-    , megaparsec >=6.4.1 && <7
+    , megaparsec >=7.0.0 && <8
     , mtl
     , semigroups
     , shakespeare >=2.0.2.2
@@ -182,6 +183,10 @@
     , wai-handler-launch >=1.3
     , warp
     , yaml
+  if (flag(dev)) || (flag(library-only))
+    cpp-options: -DDEVELOPMENT
+  if flag(dev)
+    ghc-options: -O0
   if impl(ghc >=8)
     ghc-options: -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates -Wredundant-constraints
   if os(darwin) && impl(ghc < 8.0)
@@ -201,12 +206,20 @@
   hs-source-dirs:
       app
   ghc-options: -Wall -fwarn-tabs
-  cpp-options: -DVERSION="1.11.1"
+  cpp-options: -DVERSION="1.12"
   build-depends:
       base
     , hledger-web
+  if (flag(dev)) || (flag(library-only))
+    cpp-options: -DDEVELOPMENT
+  if flag(dev)
+    ghc-options: -O0
   if impl(ghc >=8)
     ghc-options: -Wcompat -Wincomplete-uni-patterns -Wincomplete-record-updates -Wredundant-constraints
+  if flag(library-only)
+    buildable: False
+  if flag(threaded)
+    ghc-options: -threaded
   if os(darwin) && impl(ghc < 8.0)
     buildable: False
   default-language: Haskell2010
diff --git a/hledger-web.info b/hledger-web.info
--- a/hledger-web.info
+++ b/hledger-web.info
@@ -3,8 +3,8 @@
 
 File: hledger-web.info,  Node: Top,  Next: OPTIONS,  Up: (dir)
 
-hledger-web(1) hledger-web 1.11.1
-*********************************
+hledger-web(1) hledger-web 1.12
+*******************************
 
 hledger-web is hledger's web interface.  It starts a simple web
 application for browsing and adding transactions, and optionally opens
@@ -212,7 +212,7 @@
 
 Tag Table:
 Node: Top72
-Node: OPTIONS3158
-Ref: #options3243
+Node: OPTIONS3154
+Ref: #options3239
 
 End Tag Table
diff --git a/hledger-web.txt b/hledger-web.txt
--- a/hledger-web.txt
+++ b/hledger-web.txt
@@ -251,4 +251,4 @@
 
 
 
-hledger-web 1.11.1              September 2018                  hledger-web(1)
+hledger-web 1.12                 December 2018                  hledger-web(1)
