diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -5,9 +5,32 @@
  \ V  V /  __/ |_) |
   \_/\_/ \___|_.__/ 
                     
+Breaking changes
+
+Features
+
+Improvements
+
+Fixes
+
+Docs
+
+API
+
 -->
 User-visible changes in hledger-web.
 See also the hledger changelog.
+
+# 1.30 2023-06-01
+
+Fixes
+
+- A command line depth limit now works properly.
+  (#1763)
+
+Docs
+
+- Miscellaneous manual cleanups.
 
 # 1.29.2 2023-04-07
 
diff --git a/Hledger/Web/Foundation.hs b/Hledger/Web/Foundation.hs
--- a/Hledger/Web/Foundation.hs
+++ b/Hledger/Web/Foundation.hs
@@ -61,6 +61,8 @@
       --
     , appOpts    :: WebOpts
     , appJournal :: IORef Journal
+        -- ^ the current journal, filtered by the initial command line query
+        --   but ignoring any depth limit.
     }
 
 
@@ -112,7 +114,7 @@
 
     master <- getYesod
     here <- fromMaybe RootR <$> getCurrentRoute
-    VD {caps, j, m, opts, q, qopts} <- getViewData
+    VD{opts, j, qparam, q, qopts, caps} <- getViewData
     msg <- getMessage
     showSidebar <- shouldShowSidebar
 
@@ -122,14 +124,14 @@
           {accountlistmode_ = ALTree  -- force tree mode for sidebar
           ,empty_           = True    -- show zero items by default
           }
-        rspec' = rspec{_rsQuery=m,_rsReportOpts=ropts'}
+        rspec' = rspec{_rsQuery=q,_rsReportOpts=ropts'}
 
     hideEmptyAccts <- if empty_ ropts
                          then return True
                          else (== Just "1") . lookup "hideemptyaccts" . reqCookies <$> getRequest
 
     let accounts =
-          balanceReportAsHtml (JournalR, RegisterR) here hideEmptyAccts j q qopts $
+          balanceReportAsHtml (JournalR, RegisterR) here hideEmptyAccts j qparam qopts $
           balanceReport rspec' j
 
         topShowmd = if showSidebar then "col-md-4" else "col-any-0" :: Text
@@ -193,8 +195,8 @@
   { opts  :: WebOpts    -- ^ the command-line options at startup
   , today :: Day        -- ^ today's date (for queries containing relative dates)
   , j     :: Journal    -- ^ the up-to-date parsed unfiltered journal
-  , q     :: Text       -- ^ the current q parameter, the main query expression
-  , m     :: Query      -- ^ a query parsed from the q parameter
+  , qparam :: Text       -- ^ the current "q" request parameter
+  , q     :: Query      -- ^ a query parsed from the q parameter
   , qopts :: [QueryOpt] -- ^ query options parsed from the q parameter
   , caps  :: [Capability] -- ^ capabilities enabled for this request
   } deriving (Show)
@@ -204,7 +206,10 @@
 -- | Gather data used by handlers and templates in the current request.
 getViewData :: Handler ViewData
 getViewData = do
-  App{appOpts=opts@WebOpts{cliopts_=copts@CliOpts{reportspec_=rspec@ReportSpec{_rsReportOpts}}}, appJournal} <- getYesod
+  App{
+    appOpts=opts@WebOpts{ cliopts_=copts@CliOpts{ reportspec_=rspec@ReportSpec{_rsReportOpts, _rsQuery} } },
+    appJournal
+  } <- getYesod
   let today = _rsDay rspec
 
   -- try to read the latest journal content, keeping the old content
@@ -214,12 +219,16 @@
                 copts{reportspec_=rspec{_rsReportOpts=_rsReportOpts{no_elide_=True}}}
                 today
 
-  -- try to parse the query param, assuming no query if there's an error
-  q <- fromMaybe "" <$> lookupGetParam "q"
-  (m, qopts, mqerr) <- do
-    case parseQuery today q of
-      Right (m, qopts) -> return (m, qopts, Nothing)
+  -- Get the query specified by the q request parameter, or no query if this fails.
+  qparam <- fromMaybe "" <$> lookupGetParam "q"
+  (q1, qopts, mqerr) <- do
+    case parseQuery today qparam of
+      Right (q0, qopts) -> return (q0, qopts, Nothing)
       Left err         -> return (Any, [], Just err)
+  -- To this, add any depth limit from the initial startup query, preserving that.
+  let
+    initialdepthq = filterQuery queryIsDepth _rsQuery
+    q = simplifyQuery $ And [q1, initialdepthq]
 
   -- if either of the above gave an error, display it
   maybe (pure ()) (setMessage . toHtml) $ mjerr <|> mqerr
@@ -233,7 +242,7 @@
         Left e -> [] <$ addMessage "" ("Unknown permission: " <> toHtml (BC.unpack e))
         Right c -> pure [c]
 
-  return VD{opts, today, j, q, m, qopts, caps}
+  return VD{opts, today, j, qparam, q, qopts, caps}
 
 checkServerSideUiEnabled :: Handler ()
 checkServerSideUiEnabled = do
@@ -259,7 +268,7 @@
 getCurrentJournal :: IORef Journal -> CliOpts -> Day -> Handler (Journal, Maybe String)
 getCurrentJournal jref opts d = do
   -- re-apply any initial filter specified at startup
-  let initq = _rsQuery $ reportspec_ opts
+  let depthlessinitialq = filterQuery (not . queryIsDepth) $ _rsQuery $ reportspec_ opts
   -- XXX put this inside atomicModifyIORef' for thread safety
   j <- liftIO (readIORef jref)
   ej <- liftIO . runExceptT $ journalReloadIfChanged opts d j
@@ -268,6 +277,6 @@
       setMessage "error while reading journal"
       return (j, Just e)
     Right (j', True) -> do
-      liftIO . writeIORef jref $ filterJournalTransactions initq j'
+      liftIO . writeIORef jref $ filterJournalTransactions depthlessinitialq j'
       return (j',Nothing)
     Right (_, False) -> return (j, Nothing)
diff --git a/Hledger/Web/Handler/JournalR.hs b/Hledger/Web/Handler/JournalR.hs
--- a/Hledger/Web/Handler/JournalR.hs
+++ b/Hledger/Web/Handler/JournalR.hs
@@ -20,14 +20,14 @@
 getJournalR :: Handler Html
 getJournalR = do
   checkServerSideUiEnabled
-  VD{caps, j, m, opts, q, qopts, today} <- getViewData
+  VD{caps, j, q, opts, qparam, qopts, today} <- getViewData
   when (CapView `notElem` caps) (permissionDenied "Missing the 'view' capability")
   let title = case inAccount qopts of
         Nothing -> "General Journal"
         Just (a, inclsubs) -> "Transactions in " <> a <> if inclsubs then "" else " (excluding subaccounts)"
-      title' = title <> if m /= Any then ", filtered" else ""
-      acctlink a = (RegisterR, [("q", replaceInacct q $ accountQuery a)])
-      rspec = (reportspec_ $ cliopts_ opts){_rsQuery = m}
+      title' = title <> if q /= Any then ", filtered" else ""
+      acctlink a = (RegisterR, [("q", replaceInacct qparam $ accountQuery a)])
+      rspec = (reportspec_ $ cliopts_ opts){_rsQuery = filterQuery (not . queryIsDepth) q}
       items = reverse $ entriesReport rspec j
       transactionFrag = transactionFragment j
 
diff --git a/Hledger/Web/Handler/RegisterR.hs b/Hledger/Web/Handler/RegisterR.hs
--- a/Hledger/Web/Handler/RegisterR.hs
+++ b/Hledger/Web/Handler/RegisterR.hs
@@ -26,26 +26,26 @@
 getRegisterR :: Handler Html
 getRegisterR = do
   checkServerSideUiEnabled
-  VD{caps, j, m, opts, q, qopts, today} <- getViewData
+  VD{caps, j, q, opts, qparam, qopts, today} <- getViewData
   when (CapView `notElem` caps) (permissionDenied "Missing the 'view' capability")
 
   let (a,inclsubs) = fromMaybe ("all accounts",True) $ inAccount qopts
       s1 = if inclsubs then "" else " (excluding subaccounts)"
-      s2 = if m /= Any then ", filtered" else ""
+      s2 = if q /= Any then ", filtered" else ""
       header = a <> s1 <> s2
 
   let rspec = reportspec_ (cliopts_ opts)
       acctQuery = fromMaybe Any (inAccountQuery qopts)
-      acctlink acc = (RegisterR, [("q", replaceInacct q $ accountQuery acc)])
+      acctlink acc = (RegisterR, [("q", replaceInacct qparam $ accountQuery acc)])
       otherTransAccounts =
           map (\(acct,(name,comma)) -> (acct, (T.pack name, T.pack comma))) .
           undecorateLinks . elideRightDecorated 40 . decorateLinks .
-          addCommas . preferReal . otherTransactionAccounts m acctQuery
+          addCommas . preferReal . otherTransactionAccounts q acctQuery
       addCommas xs =
           zip xs $
           zip (map (T.unpack . accountSummarisedName . paccount) xs) $
           tail $ (", "<$xs) ++ [""]
-      items = accountTransactionsReport rspec{_rsQuery=m} j acctQuery
+      items = accountTransactionsReport rspec{_rsQuery=q} j acctQuery
       balancelabel
         | isJust (inAccount qopts), balanceaccum_ (_rsReportOpts rspec) == Historical = "Historical Total"
         | isJust (inAccount qopts) = "Period Total"
diff --git a/Hledger/Web/Main.hs b/Hledger/Web/Main.hs
--- a/Hledger/Web/Main.hs
+++ b/Hledger/Web/Main.hs
@@ -54,12 +54,12 @@
   wopts@WebOpts{cliopts_=copts@CliOpts{debug_, rawopts_}} <- getHledgerWebOpts
   when (debug_ > 0) $ printf "%s\n" prognameandversion >> printf "opts: %s\n" (show wopts)
   if
-    | "help"            `inRawOpts` rawopts_ -> pager (showModeUsage webmode) >> exitSuccess
-    | "info"            `inRawOpts` rawopts_ -> runInfoForTopic "hledger-web" Nothing
-    | "man"             `inRawOpts` rawopts_ -> runManForTopic  "hledger-web" Nothing
-    | "version"         `inRawOpts` rawopts_ -> putStrLn prognameandversion >> exitSuccess
-    --  "binary-filename" `inRawOpts` rawopts_ -> putStrLn (binaryfilename progname)
-    | "test"            `inRawOpts` rawopts_ -> do
+    | boolopt "help"            rawopts_ -> pager (showModeUsage webmode) >> exitSuccess
+    | boolopt "info"            rawopts_ -> runInfoForTopic "hledger-web" Nothing
+    | boolopt "man"             rawopts_ -> runManForTopic  "hledger-web" Nothing
+    | boolopt "version"         rawopts_ -> putStrLn prognameandversion >> exitSuccess
+    -- boolopt "binary-filename" rawopts_ -> putStrLn (binaryfilename progname)
+    | boolopt "test"            rawopts_ -> do
       -- remove --test and --, leaving other args for hspec
       (`withArgs` hledgerWebTest) . filter (`notElem` ["--test","--"]) =<< getArgs
     | otherwise                              -> withJournalDo copts (web wopts)
@@ -67,8 +67,8 @@
 -- | The hledger web command.
 web :: WebOpts -> Journal -> IO ()
 web opts j = do
-  let initq = _rsQuery . reportspec_ $ cliopts_ opts
-      j' = filterJournalTransactions initq j
+  let depthlessinitialq = filterQuery (not . queryIsDepth) . _rsQuery . reportspec_ $ cliopts_ opts
+      j' = filterJournalTransactions depthlessinitialq j
       h = host_ opts
       p = port_ opts
       u = base_url_ opts
diff --git a/Hledger/Web/Widget/Common.hs b/Hledger/Web/Widget/Common.hs
--- a/Hledger/Web/Widget/Common.hs
+++ b/Hledger/Web/Widget/Common.hs
@@ -77,7 +77,7 @@
 
 -- | Render a "BalanceReport" as html.
 balanceReportAsHtml :: Eq r => (r, r) -> r -> Bool -> Journal -> Text -> [QueryOpt] -> BalanceReport -> HtmlUrl r
-balanceReportAsHtml (journalR, registerR) here hideEmpty j q qopts (items, total) =
+balanceReportAsHtml (journalR, registerR) here hideEmpty j qparam qopts (items, total) =
   $(hamletFile "templates/balance-report.hamlet")
   where
     l = ledgerFromJournal Any j
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" "April 2023" "hledger-web-1.29.2 " "hledger User Manuals"
+.TH "HLEDGER-WEB" "1" "June 2023" "hledger-web-1.30 " "hledger User Manuals"
 
 
 
@@ -8,22 +8,14 @@
 hledger-web - robust, friendly plain text accounting (Web version)
 .SH SYNOPSIS
 .PP
-\f[V]hledger-web [OPTIONS]                  # run temporarily & browse\f[R]
-.PD 0
-.P
-.PD
-\f[V]hledger-web --serve [OPTIONS]          # run without stopping\f[R]
-.PD 0
-.P
-.PD
-\f[V]hledger-web --serve-api [OPTIONS]      # run JSON server only\f[R]
+\f[V]hledger-web    [--serve|--serve-api] [OPTS] [ARGS]\f[R]
 .PD 0
 .P
 .PD
-\f[V]hledger web -- [OPTIONS] [QUERYARGS]\f[R] # start from hledger
+\f[V]hledger web -- [--serve|--serve-api] [OPTS] [ARGS]\f[R]
 .SH DESCRIPTION
 .PP
-This manual is for hledger\[aq]s web interface, version 1.29.2.
+This manual is for hledger\[aq]s web interface, version 1.30.
 See also the hledger manual for common concepts and file formats.
 .PP
 hledger is a robust, user-friendly, cross-platform set of programs for
@@ -47,12 +39,13 @@
 instance, it writes a numbered backup of the main journal file (only) on
 every edit.
 .PP
-Like hledger, it reads data from one or more files in journal,
-timeclock, timedot, or CSV format.
-The default file is \f[V].hledger.journal\f[R] in your home directory;
-this can be overridden with one or more \f[V]-f FILE\f[R] options, or
-the \f[V]LEDGER_FILE\f[R] environment variable.
-For more about this see hledger(1).
+Like hledger, it reads from (and appends to) a journal file specified by
+the \f[V]LEDGER_FILE\f[R] environment variable (defaulting to
+\f[V]$HOME/.hledger.journal\f[R]); or you can specify files with
+\f[V]-f\f[R] options.
+It can also read timeclock files, timedot files, or any CSV/SSV/TSV file
+with a date field.
+(See hledger(1) -> Input for details.)
 .PP
 hledger-web can be run in three modes:
 .IP \[bu] 2
@@ -75,8 +68,7 @@
 These filter options are not shown in the web UI, but it will be applied
 in addition to any search query entered there.
 .PP
-Note: if invoking hledger-web as a hledger subcommand, write
-\f[V]--\f[R] before options, as shown in the synopsis above.
+hledger-web provides the following options:
 .TP
 \f[V]--serve\f[R]
 serve and log requests, don\[aq]t browse or auto-exit after timeout
@@ -121,8 +113,65 @@
 run hledger-web\[aq]s tests and exit.
 hspec test runner args may follow a --, eg: hledger-web --test -- --help
 .PP
-hledger input options:
+By default the server listens on IP address 127.0.0.1, accessible only
+to local requests.
+You can use \f[V]--host\f[R] to change this, eg \f[V]--host 0.0.0.0\f[R]
+to listen on all configured addresses.
+.PP
+Similarly, use \f[V]--port\f[R] to set a TCP port other than 5000, eg if
+you are running multiple hledger-web instances.
+.PP
+Both of these options are ignored when \f[V]--socket\f[R] is used.
+In this case, it creates an \f[V]AF_UNIX\f[R] socket file at the
+supplied path and uses that for communication.
+This is an alternative way of running multiple hledger-web instances
+behind a reverse proxy that handles authentication for different users.
+The path can be derived in a predictable way, eg by using the username
+within the path.
+As an example, \f[V]nginx\f[R] as reverse proxy can use the variable
+\f[V]$remote_user\f[R] to derive a path from the username used in a HTTP
+basic authentication.
+The following \f[V]proxy_pass\f[R] directive allows access to all
+\f[V]hledger-web\f[R] instances that created a socket in
+\f[V]/tmp/hledger/\f[R]:
+.IP
+.nf
+\f[C]
+  proxy_pass http://unix:/tmp/hledger/${remote_user}.socket;
+\f[R]
+.fi
+.PP
+You can use \f[V]--base-url\f[R] to change the protocol, hostname, port
+and path that appear in hyperlinks, useful eg for integrating
+hledger-web within a larger website.
+The default is \f[V]http://HOST:PORT/\f[R] using the server\[aq]s
+configured host address and TCP port (or \f[V]http://HOST\f[R] if PORT
+is 80).
+.PP
+With \f[V]--file-url\f[R] you can set a different base url for static
+files, eg for better caching or cookie-less serving on high performance
+websites.
+.PP
+hledger-web also supports many of hledger\[aq]s general options (and the
+hledger manual\[aq]s command line tips also apply here):
+.SS General help options
 .TP
+\f[V]-h --help\f[R]
+show general or COMMAND help
+.TP
+\f[V]--man\f[R]
+show general or COMMAND user manual with man
+.TP
+\f[V]--info\f[R]
+show general or COMMAND user manual with info
+.TP
+\f[V]--version\f[R]
+show general or ADDONCMD version
+.TP
+\f[V]--debug[=N]\f[R]
+show debug output (levels 1-9, default: 1)
+.SS General input options
+.TP
 \f[V]-f FILE --file=FILE\f[R]
 use a different input file.
 For stdin, use - (default: \f[V]$LEDGER_FILE\f[R] or
@@ -149,8 +198,7 @@
 .TP
 \f[V]-s --strict\f[R]
 do extra error checking (check that all posted accounts are declared)
-.PP
-hledger reporting options:
+.SS General reporting options
 .TP
 \f[V]-b --begin=DATE\f[R]
 include postings/txns on or after this date (will be adjusted to
@@ -217,17 +265,29 @@
 \f[V]--value\f[R]
 convert amounts to cost or market value, more flexibly than -B/-V/-X
 .TP
+\f[V]--infer-equity\f[R]
+infer conversion equity postings from costs
+.TP
+\f[V]--infer-costs\f[R]
+infer costs from conversion equity postings
+.TP
 \f[V]--infer-market-prices\f[R]
-use transaction prices (recorded with \[at] or \[at]\[at]) as additional
-market prices, as if they were P directives
+use costs as additional market prices, as if they were P directives
 .TP
+\f[V]--forecast\f[R]
+generate transactions from periodic rules,
+between the latest recorded txn and 6 months from today,
+or during the specified PERIOD (= is required).
+Auto posting rules will be applied to these transactions as well.
+Also, in hledger-ui make future-dated transactions visible.
+.TP
 \f[V]--auto\f[R]
-apply automated posting rules to modify transactions.
+generate extra postings by applying auto posting rules to all txns (not
+just forecast txns)
 .TP
-\f[V]--forecast\f[R]
-generate future transactions from periodic transaction rules, for the
-next 6 months or till report end date.
-In hledger-ui, also make ordinary future transactions visible.
+\f[V]--verbose-tags\f[R]
+add visible tags indicating transactions or postings which have been
+generated/modified
 .TP
 \f[V]--commodity-style\f[R]
 Override the commodity style in the output for the specified commodity.
@@ -254,66 +314,6 @@
 last one takes precedence.
 .PP
 Some reporting options can also be written as query arguments.
-.PP
-hledger help options:
-.TP
-\f[V]-h --help\f[R]
-show general or COMMAND help
-.TP
-\f[V]--man\f[R]
-show general or COMMAND user manual with man
-.TP
-\f[V]--info\f[R]
-show general or COMMAND user manual with info
-.TP
-\f[V]--version\f[R]
-show general or ADDONCMD version
-.TP
-\f[V]--debug[=N]\f[R]
-show debug output (levels 1-9, default: 1)
-.PP
-A \[at]FILE argument will be expanded to the contents of FILE, which
-should contain one command line option/argument per line.
-(To prevent this, insert a \f[V]--\f[R] argument before.)
-.PP
-By default the server listens on IP address 127.0.0.1, accessible only
-to local requests.
-You can use \f[V]--host\f[R] to change this, eg \f[V]--host 0.0.0.0\f[R]
-to listen on all configured addresses.
-.PP
-Similarly, use \f[V]--port\f[R] to set a TCP port other than 5000, eg if
-you are running multiple hledger-web instances.
-.PP
-Both of these options are ignored when \f[V]--socket\f[R] is used.
-In this case, it creates an \f[V]AF_UNIX\f[R] socket file at the
-supplied path and uses that for communication.
-This is an alternative way of running multiple hledger-web instances
-behind a reverse proxy that handles authentication for different users.
-The path can be derived in a predictable way, eg by using the username
-within the path.
-As an example, \f[V]nginx\f[R] as reverse proxy can use the variable
-\f[V]$remote_user\f[R] to derive a path from the username used in a HTTP
-basic authentication.
-The following \f[V]proxy_pass\f[R] directive allows access to all
-\f[V]hledger-web\f[R] instances that created a socket in
-\f[V]/tmp/hledger/\f[R]:
-.IP
-.nf
-\f[C]
-  proxy_pass http://unix:/tmp/hledger/${remote_user}.socket;
-\f[R]
-.fi
-.PP
-You can use \f[V]--base-url\f[R] to change the protocol, hostname, port
-and path that appear in hyperlinks, useful eg for integrating
-hledger-web within a larger website.
-The default is \f[V]http://HOST:PORT/\f[R] using the server\[aq]s
-configured host address and TCP port (or \f[V]http://HOST\f[R] if PORT
-is 80).
-.PP
-With \f[V]--file-url\f[R] you can set a different base url for static
-files, eg for better caching or cookie-less serving on high performance
-websites.
 .SH PERMISSIONS
 .PP
 By default, hledger-web allows anyone who can reach it to view the
@@ -611,78 +611,19 @@
 \f[V]hledger-web --debug=3 2>hledger-web.log\f[R].
 .SH ENVIRONMENT
 .PP
-\f[B]LEDGER_FILE\f[R] The journal file path when not specified with
-\f[V]-f\f[R].
-.PP
-On unix computers, the default value is:
-\f[V]\[ti]/.hledger.journal\f[R].
-.PP
-A more typical value is something like
-\f[V]\[ti]/finance/YYYY.journal\f[R], where \f[V]\[ti]/finance\f[R] is a
-version-controlled finance directory and YYYY is the current year.
-Or, \f[V]\[ti]/finance/current.journal\f[R], where current.journal is a
-symbolic link to YYYY.journal.
-.PP
-The usual way to set this permanently is to add a command to one of your
-shell\[aq]s startup files (eg \f[V]\[ti]/.profile\f[R]):
-.IP
-.nf
-\f[C]
-export LEDGER_FILE=\[ti]/finance/current.journal\[ga]
-\f[R]
-.fi
-.PP
-On some Mac computers, there is a more thorough way to set environment
-variables, that will also affect applications started from the GUI (eg,
-Emacs started from a dock icon): In
-\f[V]\[ti]/.MacOSX/environment.plist\f[R], add an entry like:
-.IP
-.nf
-\f[C]
-{
-  \[dq]LEDGER_FILE\[dq] : \[dq]\[ti]/finance/current.journal\[dq]
-}
-\f[R]
-.fi
-.PP
-For this to take effect you might need to \f[V]killall Dock\f[R], or
-reboot.
-.PP
-On Windows computers, the default value is probably
-\f[V]C:\[rs]Users\[rs]YOURNAME\[rs].hledger.journal\f[R].
-You can change this by running a command like this in a powershell
-window (let us know if you need to be an Administrator, and if this
-persists across a reboot):
-.IP
-.nf
-\f[C]
-> setx LEDGER_FILE \[dq]C:\[rs]Users\[rs]MyUserName\[rs]finance\[rs]2021.journal\[dq]
-\f[R]
-.fi
-.PP
-Or, change it in settings: see
-https://www.java.com/en/download/help/path.html.
-.SH FILES
-.PP
-Reads data from one or more files in journal, timeclock, timedot, or CSV
-format.
-The default file is \f[V].hledger.journal\f[R] in your home directory;
-this can be overridden with one or more \f[V]-f FILE\f[R] options, or
-the \f[V]LEDGER_FILE\f[R] environment variable.
+\f[B]LEDGER_FILE\f[R] The main journal file to use when not specified
+with \f[V]-f/--file\f[R].
+Default: \f[V]$HOME/.hledger.journal\f[R].
 .SH BUGS
 .PP
-\f[V]-f-\f[R] doesn\[aq]t work (hledger-web can\[aq]t read from stdin).
-.PP
-Query arguments and some hledger options are ignored.
+We welcome bug reports in the hledger issue tracker (shortcut:
+http://bugs.hledger.org), or on the #hledger chat or hledger mail list
+(https://hledger.org/support).
 .PP
-Does not work in text-mode browsers.
+Some known issues:
 .PP
-Does not work well on small screens.
-
+Does not work well on small screens, or in text-mode browsers.
 
-.SH "REPORTING BUGS"
-Report bugs at http://bugs.hledger.org
-(or on the #hledger chat or hledger mail list)
 
 .SH AUTHORS
 Simon Michael <simon@joyful.com> and contributors.
diff --git a/hledger-web.cabal b/hledger-web.cabal
--- a/hledger-web.cabal
+++ b/hledger-web.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hledger-web
-version:        1.29.2
+version:        1.30
 synopsis:       Web-based user interface for the hledger accounting system
 description:    A simple web-based user interface for the hledger accounting system,
                 providing a more modern UI than the command-line or terminal interfaces.
@@ -151,7 +151,7 @@
   hs-source-dirs:
       ./
   ghc-options: -Wall -Wredundant-constraints -Wincomplete-record-updates -Wincomplete-uni-patterns
-  cpp-options: -DVERSION="1.29.2"
+  cpp-options: -DVERSION="1.30"
   build-depends:
       Decimal >=0.5.1
     , aeson >=1
@@ -171,8 +171,8 @@
     , extra >=1.6.3
     , filepath
     , hjsmin
-    , hledger >=1.29.2 && <1.30
-    , hledger-lib >=1.29.2 && <1.30
+    , hledger ==1.30.*
+    , hledger-lib ==1.30.*
     , hspec
     , http-client
     , http-conduit
@@ -212,7 +212,7 @@
   hs-source-dirs:
       app
   ghc-options: -Wall -Wredundant-constraints -Wincomplete-record-updates -Wincomplete-uni-patterns
-  cpp-options: -DVERSION="1.29.2"
+  cpp-options: -DVERSION="1.30"
   build-depends:
       base >=4.14 && <4.19
     , hledger-web
@@ -232,7 +232,7 @@
   hs-source-dirs:
       test
   ghc-options: -Wall -Wredundant-constraints -Wincomplete-record-updates -Wincomplete-uni-patterns
-  cpp-options: -DVERSION="1.29.2"
+  cpp-options: -DVERSION="1.30"
   build-depends:
       base >=4.14 && <4.19
     , hledger
diff --git a/hledger-web.info b/hledger-web.info
--- a/hledger-web.info
+++ b/hledger-web.info
@@ -13,12 +13,10 @@
 
 hledger-web - robust, friendly plain text accounting (Web version)
 
-   'hledger-web [OPTIONS] # run temporarily & browse'
-'hledger-web --serve [OPTIONS] # run without stopping'
-'hledger-web --serve-api [OPTIONS] # run JSON server only'
-'hledger web -- [OPTIONS] [QUERYARGS]' # start from hledger
+   'hledger-web [--serve|--serve-api] [OPTS] [ARGS]'
+'hledger web -- [--serve|--serve-api] [OPTS] [ARGS]'
 
-   This manual is for hledger's web interface, version 1.29.2.  See also
+   This manual is for hledger's web interface, version 1.30.  See also
 the hledger manual for common concepts and file formats.
 
    hledger is a robust, user-friendly, cross-platform set of programs
@@ -39,11 +37,11 @@
 against data loss when running an unprotected instance, it writes a
 numbered backup of the main journal file (only) on every edit.
 
-   Like hledger, it reads data from one or more files in journal,
-timeclock, timedot, or CSV format.  The default file is
-'.hledger.journal' in your home directory; this can be overridden with
-one or more '-f FILE' options, or the 'LEDGER_FILE' environment
-variable.  For more about this see hledger(1).
+   Like hledger, it reads from (and appends to) a journal file specified
+by the 'LEDGER_FILE' environment variable (defaulting to
+'$HOME/.hledger.journal'); or you can specify files with '-f' options.
+It can also read timeclock files, timedot files, or any CSV/SSV/TSV file
+with a date field.  (See hledger(1) -> Input for details.)
 
    hledger-web can be run in three modes:
 
@@ -69,7 +67,6 @@
 * JSON API::
 * DEBUG OUTPUT::
 * ENVIRONMENT::
-* FILES::
 * BUGS::
 
 
@@ -82,8 +79,7 @@
 on the data.  These filter options are not shown in the web UI, but it
 will be applied in addition to any search query entered there.
 
-   Note: if invoking hledger-web as a hledger subcommand, write '--'
-before options, as shown in the synopsis above.
+   hledger-web provides the following options:
 
 '--serve'
 
@@ -127,8 +123,73 @@
      run hledger-web's tests and exit.  hspec test runner args may
      follow a -, eg: hledger-web -test - -help
 
-   hledger input options:
+   By default the server listens on IP address 127.0.0.1, accessible
+only to local requests.  You can use '--host' to change this, eg '--host
+0.0.0.0' to listen on all configured addresses.
 
+   Similarly, use '--port' to set a TCP port other than 5000, eg if you
+are running multiple hledger-web instances.
+
+   Both of these options are ignored when '--socket' is used.  In this
+case, it creates an 'AF_UNIX' socket file at the supplied path and uses
+that for communication.  This is an alternative way of running multiple
+hledger-web instances behind a reverse proxy that handles authentication
+for different users.  The path can be derived in a predictable way, eg
+by using the username within the path.  As an example, 'nginx' as
+reverse proxy can use the variable '$remote_user' to derive a path from
+the username used in a HTTP basic authentication.  The following
+'proxy_pass' directive allows access to all 'hledger-web' instances that
+created a socket in '/tmp/hledger/':
+
+  proxy_pass http://unix:/tmp/hledger/${remote_user}.socket;
+
+   You can use '--base-url' to change the protocol, hostname, port and
+path that appear in hyperlinks, useful eg for integrating hledger-web
+within a larger website.  The default is 'http://HOST:PORT/' using the
+server's configured host address and TCP port (or 'http://HOST' if PORT
+is 80).
+
+   With '--file-url' you can set a different base url for static files,
+eg for better caching or cookie-less serving on high performance
+websites.
+
+   hledger-web also supports many of hledger's general options (and the
+hledger manual's command line tips also apply here):
+
+* Menu:
+
+* General help options::
+* General input options::
+* General reporting options::
+
+
+File: hledger-web.info,  Node: General help options,  Next: General input options,  Up: OPTIONS
+
+1.1 General help options
+========================
+
+'-h --help'
+
+     show general or COMMAND help
+'--man'
+
+     show general or COMMAND user manual with man
+'--info'
+
+     show general or COMMAND user manual with info
+'--version'
+
+     show general or ADDONCMD version
+'--debug[=N]'
+
+     show debug output (levels 1-9, default: 1)
+
+
+File: hledger-web.info,  Node: General input options,  Next: General reporting options,  Prev: General help options,  Up: OPTIONS
+
+1.2 General input options
+=========================
+
 '-f FILE --file=FILE'
 
      use a different input file.  For stdin, use - (default:
@@ -157,8 +218,12 @@
      do extra error checking (check that all posted accounts are
      declared)
 
-   hledger reporting options:
+
+File: hledger-web.info,  Node: General reporting options,  Prev: General input options,  Up: OPTIONS
 
+1.3 General reporting options
+=============================
+
 '-b --begin=DATE'
 
      include postings/txns on or after this date (will be adjusted to
@@ -227,18 +292,30 @@
 
      convert amounts to cost or market value, more flexibly than
      -B/-V/-X
+'--infer-equity'
+
+     infer conversion equity postings from costs
+'--infer-costs'
+
+     infer costs from conversion equity postings
 '--infer-market-prices'
 
-     use transaction prices (recorded with @ or @@) as additional market
-     prices, as if they were P directives
+     use costs as additional market prices, as if they were P directives
+'--forecast'
+
+     generate transactions from periodic rules, between the latest
+     recorded txn and 6 months from today, or during the specified
+     PERIOD (= is required).  Auto posting rules will be applied to
+     these transactions as well.  Also, in hledger-ui make future-dated
+     transactions visible.
 '--auto'
 
-     apply automated posting rules to modify transactions.
-'--forecast'
+     generate extra postings by applying auto posting rules to all txns
+     (not just forecast txns)
+'--verbose-tags'
 
-     generate future transactions from periodic transaction rules, for
-     the next 6 months or till report end date.  In hledger-ui, also
-     make ordinary future transactions visible.
+     add visible tags indicating transactions or postings which have
+     been generated/modified
 '--commodity-style'
 
      Override the commodity style in the output for the specified
@@ -262,58 +339,6 @@
 
    Some reporting options can also be written as query arguments.
 
-   hledger help options:
-
-'-h --help'
-
-     show general or COMMAND help
-'--man'
-
-     show general or COMMAND user manual with man
-'--info'
-
-     show general or COMMAND user manual with info
-'--version'
-
-     show general or ADDONCMD version
-'--debug[=N]'
-
-     show debug output (levels 1-9, default: 1)
-
-   A @FILE argument will be expanded to the contents of FILE, which
-should contain one command line option/argument per line.  (To prevent
-this, insert a '--' argument before.)
-
-   By default the server listens on IP address 127.0.0.1, accessible
-only to local requests.  You can use '--host' to change this, eg '--host
-0.0.0.0' to listen on all configured addresses.
-
-   Similarly, use '--port' to set a TCP port other than 5000, eg if you
-are running multiple hledger-web instances.
-
-   Both of these options are ignored when '--socket' is used.  In this
-case, it creates an 'AF_UNIX' socket file at the supplied path and uses
-that for communication.  This is an alternative way of running multiple
-hledger-web instances behind a reverse proxy that handles authentication
-for different users.  The path can be derived in a predictable way, eg
-by using the username within the path.  As an example, 'nginx' as
-reverse proxy can use the variable '$remote_user' to derive a path from
-the username used in a HTTP basic authentication.  The following
-'proxy_pass' directive allows access to all 'hledger-web' instances that
-created a socket in '/tmp/hledger/':
-
-  proxy_pass http://unix:/tmp/hledger/${remote_user}.socket;
-
-   You can use '--base-url' to change the protocol, hostname, port and
-path that appear in hyperlinks, useful eg for integrating hledger-web
-within a larger website.  The default is 'http://HOST:PORT/' using the
-server's configured host address and TCP port (or 'http://HOST' if PORT
-is 80).
-
-   With '--file-url' you can set a different base url for static files,
-eg for better caching or cookie-less serving on high performance
-websites.
-
 
 File: hledger-web.info,  Node: PERMISSIONS,  Next: EDITING UPLOADING DOWNLOADING,  Prev: OPTIONS,  Up: Top
 
@@ -596,94 +621,55 @@
 'hledger-web --debug=3 2>hledger-web.log'.
 
 
-File: hledger-web.info,  Node: ENVIRONMENT,  Next: FILES,  Prev: DEBUG OUTPUT,  Up: Top
+File: hledger-web.info,  Node: ENVIRONMENT,  Next: BUGS,  Prev: DEBUG OUTPUT,  Up: Top
 
 7 ENVIRONMENT
 *************
 
-*LEDGER_FILE* The journal file path when not specified with '-f'.
-
-   On unix computers, the default value is: '~/.hledger.journal'.
-
-   A more typical value is something like '~/finance/YYYY.journal',
-where '~/finance' is a version-controlled finance directory and YYYY is
-the current year.  Or, '~/finance/current.journal', where
-current.journal is a symbolic link to YYYY.journal.
-
-   The usual way to set this permanently is to add a command to one of
-your shell's startup files (eg '~/.profile'):
-
-export LEDGER_FILE=~/finance/current.journal`
-
-   On some Mac computers, there is a more thorough way to set
-environment variables, that will also affect applications started from
-the GUI (eg, Emacs started from a dock icon): In
-'~/.MacOSX/environment.plist', add an entry like:
-
-{
-  "LEDGER_FILE" : "~/finance/current.journal"
-}
-
-   For this to take effect you might need to 'killall Dock', or reboot.
-
-   On Windows computers, the default value is probably
-'C:\Users\YOURNAME\.hledger.journal'.  You can change this by running a
-command like this in a powershell window (let us know if you need to be
-an Administrator, and if this persists across a reboot):
-
-> setx LEDGER_FILE "C:\Users\MyUserName\finance\2021.journal"
-
-   Or, change it in settings: see
-https://www.java.com/en/download/help/path.html.
-
-
-File: hledger-web.info,  Node: FILES,  Next: BUGS,  Prev: ENVIRONMENT,  Up: Top
-
-8 FILES
-*******
-
-Reads data from one or more files in journal, timeclock, timedot, or CSV
-format.  The default file is '.hledger.journal' in your home directory;
-this can be overridden with one or more '-f FILE' options, or the
-'LEDGER_FILE' environment variable.
+*LEDGER_FILE* The main journal file to use when not specified with
+'-f/--file'.  Default: '$HOME/.hledger.journal'.
 
 
-File: hledger-web.info,  Node: BUGS,  Prev: FILES,  Up: Top
+File: hledger-web.info,  Node: BUGS,  Prev: ENVIRONMENT,  Up: Top
 
-9 BUGS
+8 BUGS
 ******
 
-'-f-' doesn't work (hledger-web can't read from stdin).
-
-   Query arguments and some hledger options are ignored.
+We welcome bug reports in the hledger issue tracker (shortcut:
+http://bugs.hledger.org), or on the #hledger chat or hledger mail list
+(https://hledger.org/support).
 
-   Does not work in text-mode browsers.
+   Some known issues:
 
-   Does not work well on small screens.
+   Does not work well on small screens, or in text-mode browsers.
 
 
 Tag Table:
 Node: Top225
-Node: OPTIONS2682
-Ref: #options2787
-Node: PERMISSIONS10224
-Ref: #permissions10363
-Node: EDITING UPLOADING DOWNLOADING11575
-Ref: #editing-uploading-downloading11756
-Node: RELOADING12590
-Ref: #reloading12724
-Node: JSON API13157
-Ref: #json-api13272
-Node: DEBUG OUTPUT18760
-Ref: #debug-output18885
-Node: Debug output18912
-Ref: #debug-output-119013
-Node: ENVIRONMENT19430
-Ref: #environment19550
-Node: FILES20861
-Ref: #files20961
-Node: BUGS21209
-Ref: #bugs21287
+Node: OPTIONS2577
+Ref: #options2682
+Node: General help options5993
+Ref: #general-help-options6143
+Node: General input options6425
+Ref: #general-input-options6611
+Node: General reporting options7313
+Ref: #general-reporting-options7478
+Node: PERMISSIONS10868
+Ref: #permissions11007
+Node: EDITING UPLOADING DOWNLOADING12219
+Ref: #editing-uploading-downloading12400
+Node: RELOADING13234
+Ref: #reloading13368
+Node: JSON API13801
+Ref: #json-api13916
+Node: DEBUG OUTPUT19404
+Ref: #debug-output19529
+Node: Debug output19556
+Ref: #debug-output-119657
+Node: ENVIRONMENT20074
+Ref: #environment20193
+Node: BUGS20310
+Ref: #bugs20394
 
 End Tag Table
 
diff --git a/hledger-web.txt b/hledger-web.txt
--- a/hledger-web.txt
+++ b/hledger-web.txt
@@ -7,18 +7,16 @@
        hledger-web - robust, friendly plain text accounting (Web version)
 
 SYNOPSIS
-       hledger-web [OPTIONS]                  # run temporarily & browse
-       hledger-web --serve [OPTIONS]          # run without stopping
-       hledger-web --serve-api [OPTIONS]      # run JSON server only
-       hledger web -- [OPTIONS] [QUERYARGS] # start from hledger
+       hledger-web    [--serve|--serve-api] [OPTS] [ARGS]
+       hledger web -- [--serve|--serve-api] [OPTS] [ARGS]
 
 DESCRIPTION
-       This  manual  is for hledger's web interface, version 1.29.2.  See also
-       the hledger manual for common concepts and file formats.
+       This manual is for hledger's web interface, version 1.30.  See also the
+       hledger manual for common concepts and file formats.
 
        hledger is a robust, user-friendly, cross-platform set of programs  for
-       tracking  money,  time,  or  any  other  commodity,  using double-entry
-       accounting and a simple, editable file format.  hledger is inspired  by
+       tracking  money,  time,  or any other commodity, using double-entry ac-
+       counting and a simple, editable file format.  hledger  is  inspired  by
        and  largely  compatible  with  ledger(1), and largely interconvertible
        with beancount(1).
 
@@ -34,11 +32,11 @@
        against  data  loss  when  running an unprotected instance, it writes a
        numbered backup of the main journal file (only) on every edit.
 
-       Like hledger, it reads data from one or more files  in  journal,  time-
-       clock, timedot, or CSV format.  The default file is .hledger.journal in
-       your home directory; this can be overridden with one or  more  -f  FILE
-       options,  or the LEDGER_FILE environment variable.  For more about this
-       see hledger(1).
+       Like hledger, it reads from (and appends to) a journal  file  specified
+       by    the    LEDGER_FILE    environment    variable    (defaulting   to
+       $HOME/.hledger.journal); or you can specify files with -f options.   It
+       can  also  read timeclock files, timedot files, or any CSV/SSV/TSV file
+       with a date field.  (See hledger(1) -> Input for details.)
 
        hledger-web can be run in three modes:
 
@@ -60,14 +58,13 @@
        on the data.  These filter options are not shown in the web UI, but  it
        will be applied in addition to any search query entered there.
 
-       Note:  if invoking hledger-web as a hledger subcommand, write -- before
-       options, as shown in the synopsis above.
+       hledger-web provides the following options:
 
        --serve
               serve and log requests, don't browse or auto-exit after timeout
 
        --serve-api
-              like --serve, but serve only  the  JSON  web  API,  without  the
+              like  --serve,  but  serve  only  the  JSON web API, without the
               server-side web UI
 
        --host=IPADDR
@@ -77,34 +74,78 @@
               listen on this TCP port (default: 5000)
 
        --socket=SOCKETFILE
-              use  a unix domain socket file to listen for requests instead of
-              a TCP socket.  Implies --serve.  It can  only  be  used  if  the
-              operating system can provide this type of socket.
+              use a unix domain socket file to listen for requests instead  of
+              a  TCP socket.  Implies --serve.  It can only be used if the op-
+              erating system can provide this type of socket.
 
        --base-url=URL
-              set  the  base url (default: http://IPADDR:PORT).  Note: affects
-              url generation but not route parsing.  Can be useful if  running
+              set the base url (default: http://IPADDR:PORT).   Note:  affects
+              url  generation but not route parsing.  Can be useful if running
               behind a reverse web proxy that does path rewriting.
 
        --file-url=URL
               set the static files url (default: BASEURL/static).  hledger-web
-              normally serves static files itself, but if you wanted to  serve
-              them  from  another server for efficiency, you would set the url
+              normally  serves static files itself, but if you wanted to serve
+              them from another server for efficiency, you would set  the  url
               with this.
 
        --capabilities=CAP[,CAP..]
-              enable the  view,  add,  and/or  manage  capabilities  (default:
+              enable  the  view,  add,  and/or  manage  capabilities (default:
               view,add)
 
        --capabilities-header=HTTPHEADER
-              read  capabilities  to  enable  from a HTTP header, like X-Sand-
+              read capabilities to enable from a  HTTP  header,  like  X-Sand-
               storm-Permissions (default: disabled)
 
-       --test run hledger-web's tests and exit.  hspec test  runner  args  may
+       --test run  hledger-web's  tests  and exit.  hspec test runner args may
               follow a --, eg: hledger-web --test -- --help
 
-       hledger input options:
+       By default the server listens on IP address 127.0.0.1, accessible  only
+       to  local  requests.   You  can  use  --host  to change this, eg --host
+       0.0.0.0 to listen on all configured addresses.
 
+       Similarly, use --port to set a TCP port other than 5000, eg if you  are
+       running multiple hledger-web instances.
+
+       Both of these options are ignored when --socket is used.  In this case,
+       it creates an AF_UNIX socket file at the supplied path  and  uses  that
+       for  communication.   This  is  an  alternative way of running multiple
+       hledger-web instances behind a reverse proxy that  handles  authentica-
+       tion  for  different  users.   The path can be derived in a predictable
+       way, eg by using the username within the path.  As an example, nginx as
+       reverse  proxy  can use the variable $remote_user to derive a path from
+       the username used  in  a  HTTP  basic  authentication.   The  following
+       proxy_pass  directive  allows  access to all hledger-web instances that
+       created a socket in /tmp/hledger/:
+
+                proxy_pass http://unix:/tmp/hledger/${remote_user}.socket;
+
+       You can use --base-url to change the protocol, hostname, port and  path
+       that appear in hyperlinks, useful eg for integrating hledger-web within
+       a larger website.  The default is http://HOST:PORT/ using the  server's
+       configured host address and TCP port (or http://HOST if PORT is 80).
+
+       With  --file-url  you can set a different base url for static files, eg
+       for better caching or cookie-less serving on high performance websites.
+
+       hledger-web also supports many of hledger's general  options  (and  the
+       hledger manual's command line tips also apply here):
+
+   General help options
+       -h --help
+              show general or COMMAND help
+
+       --man  show general or COMMAND user manual with man
+
+       --info show general or COMMAND user manual with info
+
+       --version
+              show general or ADDONCMD version
+
+       --debug[=N]
+              show debug output (levels 1-9, default: 1)
+
+   General input options
        -f FILE --file=FILE
               use  a  different  input  file.   For  stdin,  use  -  (default:
               $LEDGER_FILE or $HOME/.hledger.journal)
@@ -129,11 +170,10 @@
               assignments)
 
        -s --strict
-              do extra error checking (check  that  all  posted  accounts  are
-              declared)
-
-       hledger reporting options:
+              do extra error checking (check that all posted accounts are  de-
+              clared)
 
+   General reporting options
        -b --begin=DATE
               include postings/txns on or after this date (will be adjusted to
               preceding subperiod start when using a report interval)
@@ -162,8 +202,8 @@
               using period expressions syntax
 
        --date2
-              match the secondary date instead (see  command  help  for  other
-              effects)
+              match the secondary date instead (see command help for other ef-
+              fects)
 
        --today=DATE
               override   today's  date  (affects  relative  smart  dates,  for
@@ -192,42 +232,55 @@
               convert amounts to their cost/selling amount at transaction time
 
        -V --market
-              convert amounts to their market value in default valuation  com-
+              convert  amounts to their market value in default valuation com-
               modities
 
        -X --exchange=COMM
               convert amounts to their market value in commodity COMM
 
        --value
-              convert  amounts  to  cost  or  market value, more flexibly than
+              convert amounts to cost or  market  value,  more  flexibly  than
               -B/-V/-X
 
-       --infer-market-prices
-              use transaction prices (recorded with @  or  @@)  as  additional
-              market prices, as if they were P directives
+       --infer-equity
+              infer conversion equity postings from costs
 
-       --auto apply automated posting rules to modify transactions.
+       --infer-costs
+              infer costs from conversion equity postings
 
+       --infer-market-prices
+              use  costs as additional market prices, as if they were P direc-
+              tives
+
        --forecast
-              generate  future  transactions  from periodic transaction rules,
-              for the next 6 months or till report end date.   In  hledger-ui,
-              also make ordinary future transactions visible.
+              generate transactions from periodic rules,  between  the  latest
+              recorded  txn  and  6 months from today, or during the specified
+              PERIOD (= is required).  Auto posting rules will be  applied  to
+              these  transactions  as  well.  Also, in hledger-ui make future-
+              dated transactions visible.
 
+       --auto generate extra postings by applying auto posting  rules  to  all
+              txns (not just forecast txns)
+
+       --verbose-tags
+              add  visible tags indicating transactions or postings which have
+              been generated/modified
+
        --commodity-style
-              Override  the  commodity  style  in the output for the specified
+              Override the commodity style in the  output  for  the  specified
               commodity.  For example 'EUR1.000,00'.
 
        --color=WHEN (or --colour=WHEN)
-              Should color-supporting commands use ANSI color  codes  in  text
-              output.   'auto' (default): whenever stdout seems to be a color-
-              supporting terminal.  'always' or 'yes': always, useful eg  when
-              piping  output  into  'less  -R'.   'never'  or  'no': never.  A
+              Should  color-supporting  commands  use ANSI color codes in text
+              output.  'auto' (default): whenever stdout seems to be a  color-
+              supporting  terminal.  'always' or 'yes': always, useful eg when
+              piping output into  'less  -R'.   'never'  or  'no':  never.   A
               NO_COLOR environment variable overrides this.
 
        --pretty[=WHEN]
-              Show prettier output, e.g.  using  unicode  box-drawing  charac-
-              ters.   Accepts 'yes' (the default) or 'no' ('y', 'n', 'always',
-              'never' also work).  If you provide an  argument  you  must  use
+              Show  prettier  output,  e.g.  using unicode box-drawing charac-
+              ters.  Accepts 'yes' (the default) or 'no' ('y', 'n',  'always',
+              'never'  also  work).   If  you provide an argument you must use
               '=', e.g.  '--pretty=yes'.
 
        When a reporting option appears more than once in the command line, the
@@ -235,53 +288,6 @@
 
        Some reporting options can also be written as query arguments.
 
-       hledger help options:
-
-       -h --help
-              show general or COMMAND help
-
-       --man  show general or COMMAND user manual with man
-
-       --info show general or COMMAND user manual with info
-
-       --version
-              show general or ADDONCMD version
-
-       --debug[=N]
-              show debug output (levels 1-9, default: 1)
-
-       A @FILE argument will be expanded to the contents of FILE, which should
-       contain  one  command line option/argument per line.  (To prevent this,
-       insert a -- argument before.)
-
-       By default the server listens on IP address 127.0.0.1, accessible  only
-       to  local  requests.   You  can  use  --host  to change this, eg --host
-       0.0.0.0 to listen on all configured addresses.
-
-       Similarly, use --port to set a TCP port other than 5000, eg if you  are
-       running multiple hledger-web instances.
-
-       Both of these options are ignored when --socket is used.  In this case,
-       it creates an AF_UNIX socket file at the supplied path  and  uses  that
-       for  communication.   This  is  an  alternative way of running multiple
-       hledger-web instances behind a reverse proxy that  handles  authentica-
-       tion  for  different  users.   The path can be derived in a predictable
-       way, eg by using the username within the path.  As an example, nginx as
-       reverse  proxy  can use the variable $remote_user to derive a path from
-       the username used  in  a  HTTP  basic  authentication.   The  following
-       proxy_pass  directive  allows  access to all hledger-web instances that
-       created a socket in /tmp/hledger/:
-
-                proxy_pass http://unix:/tmp/hledger/${remote_user}.socket;
-
-       You can use --base-url to change the protocol, hostname, port and  path
-       that appear in hyperlinks, useful eg for integrating hledger-web within
-       a larger website.  The default is http://HOST:PORT/ using the  server's
-       configured host address and TCP port (or http://HOST if PORT is 80).
-
-       With  --file-url  you can set a different base url for static files, eg
-       for better caching or cookie-less serving on high performance websites.
-
 PERMISSIONS
        By  default,  hledger-web  allows  anyone  who can reach it to view the
        journal and to add new transactions, but not to change existing data.
@@ -289,8 +295,8 @@
        You can restrict who can reach it by
 
        o setting the IP address it listens on (see --host above).  By  default
-         it  listens  on  127.0.0.1,  accessible  to  all  users  on the local
-         machine.
+         it  listens  on  127.0.0.1,  accessible to all users on the local ma-
+         chine.
 
        o putting it behind an authenticating proxy, using eg apache or nginx
 
@@ -306,8 +312,8 @@
 
          o add - allows adding new transactions to the main journal file
 
-         o manage - allows editing,  uploading  or  downloading  the  main  or
-           included files
+         o manage - allows editing, uploading or downloading the main  or  in-
+           cluded files
 
        o using  the  --capabilities-header=HTTPHEADER  flag  to specify a HTTP
          header from which it will read capabilities to  enable.   hledger-web
@@ -317,8 +323,8 @@
 EDITING, UPLOADING, DOWNLOADING
        If you enable the manage capability mentioned above, you'll see  a  new
        "spanner"  button  to the right of the search form.  Clicking this will
-       let you edit, upload, or download the journal  file  or  any  files  it
-       includes.
+       let you edit, upload, or download the journal file or any files it  in-
+       cludes.
 
        Note,  unlike any other hledger command, in this mode you (or any visi-
        tor) can alter or wipe the data files.
@@ -337,8 +343,8 @@
        hledger-web detects changes made to the files by other means (eg if you
        edit  it  directly,  outside  of hledger-web), and it will show the new
        data when you reload the page or navigate to a new page.  If  a  change
-       makes  a  file  unparseable,  hledger-web will display an error message
-       until the file has been fixed.
+       makes a file unparseable, hledger-web will display an error message un-
+       til the file has been fixed.
 
        (Note: if you are viewing files mounted from another machine, make sure
        that both machine clocks are roughly in step.)
@@ -405,15 +411,15 @@
 
        Most  of  the  JSON corresponds to hledger's data types; for details of
        what the fields mean, see the Hledger.Data.Json haddock docs and  click
-       on  the  various  data  types,  eg Transaction.  And for a higher level
-       understanding, see the journal docs.
+       on  the various data types, eg Transaction.  And for a higher level un-
+       derstanding, see the journal docs.
 
        In some cases there is outer JSON corresponding to a "Report" type.  To
        understand  that,  go to the Hledger.Web.Handler.MiscR haddock and look
        at the source for the appropriate handler to see what it  returns.   Eg
-       for  /accounttransactions  it's  getAccounttransactionsR,  returning  a
-       "accountTransactionsReport ...".  Looking up the haddock  for  that  we
-       can see that /accounttransactions returns an AccountTransactionsReport,
+       for /accounttransactions it's getAccounttransactionsR, returning a "ac-
+       countTransactionsReport ...".  Looking up the haddock for that  we  can
+       see  that  /accounttransactions  returns  an AccountTransactionsReport,
        which consists of a report title and a list  of  AccountTransactionsRe-
        portItem (etc).
 
@@ -517,8 +523,8 @@
                   "tstatus": "Unmarked"
               }
 
-       And  here's  how  to  test  adding it with curl.  This should add a new
-       entry to your journal:
+       And  here's how to test adding it with curl.  This should add a new en-
+       try to your journal:
 
               $ curl http://127.0.0.1:5000/add -X PUT -H 'Content-Type: application/json' --data-binary @txn.json
 
@@ -533,63 +539,20 @@
        hledger-web --debug=3 2>hledger-web.log.
 
 ENVIRONMENT
-       LEDGER_FILE The journal file path when not specified with -f.
-
-       On unix computers, the default value is: ~/.hledger.journal.
-
-       A  more  typical  value is something like ~/finance/YYYY.journal, where
-       ~/finance is a version-controlled finance directory  and  YYYY  is  the
-       current  year.  Or, ~/finance/current.journal, where current.journal is
-       a symbolic link to YYYY.journal.
-
-       The usual way to set this permanently is to add a  command  to  one  of
-       your shell's startup files (eg ~/.profile):
-
-              export LEDGER_FILE=~/finance/current.journal`
-
-       On  some Mac computers, there is a more thorough way to set environment
-       variables, that will also affect applications started from the GUI (eg,
-       Emacs started from a dock icon): In ~/.MacOSX/environment.plist, add an
-       entry like:
-
-              {
-                "LEDGER_FILE" : "~/finance/current.journal"
-              }
-
-       For this to take effect you might need to killall Dock, or reboot.
-
-       On Windows computers, the  default  value  is  probably  C:\Users\YOUR-
-       NAME\.hledger.journal.   You  can change this by running a command like
-       this in a powershell window (let us know if you need to be an  Adminis-
-       trator, and if this persists across a reboot):
-
-              > setx LEDGER_FILE "C:\Users\MyUserName\finance\2021.journal"
-
-       Or,   change   it   in   settings:   see  https://www.java.com/en/down-
-       load/help/path.html.
-
-FILES
-       Reads data from one or more files in journal,  timeclock,  timedot,  or
-       CSV  format.   The default file is .hledger.journal in your home direc-
-       tory; this can be overridden with one or more -f FILE options,  or  the
-       LEDGER_FILE environment variable.
+       LEDGER_FILE  The  main  journal  file  to  use  when not specified with
+       -f/--file.  Default: $HOME/.hledger.journal.
 
 BUGS
-       -f- doesn't work (hledger-web can't read from stdin).
-
-       Query arguments and some hledger options are ignored.
+       We  welcome  bug  reports  in  the  hledger  issue  tracker  (shortcut:
+       http://bugs.hledger.org),  or on the #hledger chat or hledger mail list
+       (https://hledger.org/support).
 
-       Does not work in text-mode browsers.
+       Some known issues:
 
-       Does not work well on small screens.
+       Does not work well on small screens, or in text-mode browsers.
 
 
 
-REPORTING BUGS
-       Report  bugs  at  http://bugs.hledger.org  (or  on the #hledger chat or
-       hledger mail list)
-
-
 AUTHORS
        Simon Michael <simon@joyful.com> and contributors.
        See http://hledger.org/CREDITS.html
@@ -608,4 +571,4 @@
 
 
 
-hledger-web-1.29.2                April 2023                    HLEDGER-WEB(1)
+hledger-web-1.30                   June 2023                    HLEDGER-WEB(1)
diff --git a/templates/balance-report.hamlet b/templates/balance-report.hamlet
--- a/templates/balance-report.hamlet
+++ b/templates/balance-report.hamlet
@@ -11,11 +11,11 @@
     <td .acct :not (isInterestingAccount acct):.empty>
       <div .ff-wrapper>
         \#{indent aindent}
-        <a.acct-name href="@?{(registerR, [("q", replaceInacct q $ accountQuery acct)])}"
+        <a.acct-name href="@?{(registerR, [("q", replaceInacct qparam $ accountQuery acct)])}"
            title="Show transactions affecting this account and subaccounts">
           #{adisplay}
         $if hasSubAccounts acct
-          <a href="@?{(registerR, [("q", replaceInacct q $ accountOnlyQuery acct)])}" .only.hidden-sm.hidden-xs
+          <a href="@?{(registerR, [("q", replaceInacct qparam $ accountOnlyQuery acct)])}" .only.hidden-sm.hidden-xs
              title="Show transactions affecting this account but not subaccounts">only
     <td>
       ^{mixedAmountAsHtml abal}
diff --git a/templates/default-layout.hamlet b/templates/default-layout.hamlet
--- a/templates/default-layout.hamlet
+++ b/templates/default-layout.hamlet
@@ -17,10 +17,10 @@
     <div #message .alert.alert-info>#{m}
   $if elem CapView caps
     <form#searchform.input-group method=GET>
-      <input .form-control name=q value=#{q} placeholder="Search"
+      <input .form-control name=q value=#{qparam} placeholder="Search"
         title="Enter hledger search patterns to filter the data below">
       <div .input-group-btn>
-        $if not (T.null q)
+        $if not (T.null qparam)
           <a href=@{here} .btn .btn-default title="Clear search terms">
             <span .glyphicon .glyphicon-remove-circle>
         <button .btn .btn-default type=submit title="Apply search terms">
diff --git a/templates/register.hamlet b/templates/register.hamlet
--- a/templates/register.hamlet
+++ b/templates/register.hamlet
@@ -2,7 +2,7 @@
   #{header}
 
 <div .hidden-xs>
-  ^{registerChartHtml q balancelabel $ accountTransactionsReportByCommodity items}
+  ^{registerChartHtml qparam balancelabel $ accountTransactionsReportByCommodity items}
 
 <div.table-responsive>
   <table .table.table-striped.table-condensed>
@@ -21,7 +21,7 @@
       $forall (torig, tacct, split, _acct, amt, bal) <- items
         <tr ##{tindex torig} title="#{showTransaction torig}" style="vertical-align:top;">
           <td .date>
-            <a href="@?{(JournalR, [("q", T.unwords $ removeInacct q)])}##{transactionFrag torig}">
+            <a href="@?{(JournalR, [("q", T.unwords $ removeInacct qparam)])}##{transactionFrag torig}">
               #{show (tdate tacct)}
           <td>
             #{textElideRight 30 (tdescription tacct)}
