hledger/hledger-web/hledger-web.txt

553 lines
22 KiB
Plaintext
Raw Normal View History

2020-12-21 07:11:35 +03:00
HLEDGER-WEB(1) hledger User Manuals HLEDGER-WEB(1)
NAME
2022-12-14 20:53:09 +03:00
hledger-web - robust, friendly plain text accounting (Web version)
SYNOPSIS
2023-06-01 08:07:44 +03:00
hledger-web [--serve|--serve-api] [OPTS] [ARGS]
hledger web -- [--serve|--serve-api] [OPTS] [ARGS]
DESCRIPTION
2023-12-02 22:09:53 +03:00
This manual is for hledger's web interface, version 1.32.99. See also
2022-12-14 20:53:09 +03:00
the hledger manual for common concepts and file formats.
2023-06-01 08:07:44 +03:00
hledger is a robust, user-friendly, cross-platform set of programs for
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
2023-01-11 12:34:47 +03:00
with beancount(1).
2023-06-01 08:07:44 +03:00
hledger-web is a simple web application for browsing and adding trans-
actions. It provides a more user-friendly UI than the hledger CLI or
hledger-ui TUI, showing more at once (accounts, the current account
2022-11-03 21:31:47 +03:00
register, balance charts) and allowing history-aware data entry, inter-
active searching, and bookmarking.
2023-08-22 10:41:22 +03:00
hledger-web also lets you share a journal with multiple users, or even
the public web. There is no access control, so if you need that you
should put it behind a suitable web proxy. As a small protection
against data loss when running an unprotected instance, it writes a
2022-11-03 21:31:47 +03:00
numbered backup of the main journal file (only) on every edit.
2023-08-22 10:41:22 +03:00
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
2023-05-26 22:28:53 +03:00
with a date field. (See hledger(1) -> Input for details.)
2022-11-03 21:31:47 +03:00
hledger-web can be run in three modes:
o Transient mode (the default): your default web browser will be opened
2023-06-01 08:07:44 +03:00
to show the app if possible, and the app exits automatically after
two minutes of inactivity (no requests received and no open browser
2022-11-03 21:31:47 +03:00
windows viewing it).
2023-06-01 08:07:44 +03:00
o With --serve: the app runs without stopping, and without opening a
2022-11-03 21:31:47 +03:00
browser.
o With --serve-api: only the JSON API is served.
In all cases hledger-web runs as a foreground process, logging requests
to stdout.
2019-02-21 00:15:41 +03:00
OPTIONS
2023-05-31 20:57:37 +03:00
hledger-web provides the following options:
2017-01-06 04:18:13 +03:00
--serve
2022-11-03 21:31:47 +03:00
serve and log requests, don't browse or auto-exit after timeout
2017-01-06 04:18:13 +03:00
2019-09-01 07:02:00 +03:00
--serve-api
2023-12-16 02:59:02 +03:00
like --serve, but serve only the JSON web API, not the web UI
--allow=view|add|edit
set the user's access level for changing data (default: add).
It also accepts sandstorm for use on that platform (reads per-
missions from the X-Sandstorm-Permissions request header).
--cors=ORIGIN
allow cross-origin requests from the specified origin; setting
ORIGIN to "*" allows requests from any origin
2019-09-01 07:02:00 +03:00
2017-01-06 04:18:13 +03:00
--host=IPADDR
listen on this IP address (default: 127.0.0.1)
2023-12-16 02:59:02 +03:00
By default the server listens on IP address 127.0.0.1, which is acces-
sible only to requests from the local machine.. You can use --host to
listen on a different address configured on the machine, eg to allow
access from other machines. The special address 0.0.0.0 causes it to
listen on all addresses configured on the machine.
--port=PORT
2017-01-06 04:18:13 +03:00
listen on this TCP port (default: 5000)
2023-12-16 02:59:02 +03:00
Similarly, you can use --port to listen on a TCP port other than 5000.
This is useful if you want to run multiple hledger-web instances on a
machine.
2020-01-21 05:02:42 +03:00
--socket=SOCKETFILE
2023-12-16 02:59:02 +03:00
listen on the given unix socket instead of an IP address and
port (unix only; implies --serve)
When --socket is used, hledger-web creates and communicates via a
socket file instead of a TCP port. This can be more secure, respects
unix file permissions, and makes certain use cases easier, such as run-
ning per-user instances behind an nginx reverse proxy. (Eg: proxy_pass
http://unix:/tmp/hledger/${remote_user}.socket;.)
2020-01-21 05:02:42 +03:00
--base-url=URL
2023-12-16 02:59:02 +03:00
set the base url (default: http://IPADDR:PORT).
2023-12-16 02:59:02 +03:00
You can use --base-url to change the protocol, hostname, port and path
that appear in hledger-web's hyperlinks. This is useful eg when inte-
grating 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). Note this affects url generation
but not route parsing.
2023-12-16 02:59:02 +03:00
--test run hledger-web's tests and exit. hspec test runner args may
2020-11-17 18:29:57 +03:00
follow a --, eg: hledger-web --test -- --help
2023-12-16 02:59:02 +03:00
hledger-web also supports many of hledger's general options. Query op-
tions and arguments may be used to set an initial filter, which al-
though not shown in the UI, will restrict the data shown, in addition
to any search query entered in the UI.
2023-05-31 20:57:37 +03:00
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
2017-03-30 00:35:59 +03:00
use a different input file. For stdin, use - (default:
$LEDGER_FILE or $HOME/.hledger.journal)
--rules-file=RULESFILE
2023-12-16 02:59:02 +03:00
Conversion rules file to use when reading CSV (default:
FILE.rules)
2018-09-07 22:44:17 +03:00
--separator=CHAR
Field separator to expect when reading CSV (default: ',')
2018-09-07 22:44:17 +03:00
--alias=OLD=NEW
2017-03-30 00:35:59 +03:00
rename accounts named OLD to NEW
--pivot FIELDNAME
use some other field or tag for the account name
2016-07-07 01:17:09 +03:00
-I --ignore-assertions
disable balance assertion checks (note: does not disable balance
assignments)
2020-11-26 19:52:56 +03:00
-s --strict
2023-12-16 02:59:02 +03:00
do extra error checking (check that all posted accounts are de-
2023-05-26 22:28:53 +03:00
clared)
2020-11-26 19:52:56 +03:00
2023-05-31 20:57:37 +03:00
General reporting options
-b --begin=DATE
2021-05-18 23:48:42 +03:00
include postings/txns on or after this date (will be adjusted to
preceding subperiod start when using a report interval)
-e --end=DATE
2021-05-18 23:48:42 +03:00
include postings/txns before this date (will be adjusted to fol-
lowing subperiod end when using a report interval)
-D --daily
multiperiod/multicolumn report by day
-W --weekly
multiperiod/multicolumn report by week
-M --monthly
multiperiod/multicolumn report by month
-Q --quarterly
multiperiod/multicolumn report by quarter
-Y --yearly
multiperiod/multicolumn report by year
-p --period=PERIODEXP
2023-12-16 02:59:02 +03:00
set start date, end date, and/or reporting interval all at once
2019-09-01 07:02:00 +03:00
using period expressions syntax
--date2
2023-05-26 22:28:53 +03:00
match the secondary date instead (see command help for other ef-
fects)
2021-09-19 00:24:52 +03:00
--today=DATE
2023-12-16 02:59:02 +03:00
override today's date (affects relative smart dates, for
2021-09-19 00:24:52 +03:00
tests/examples)
2017-06-16 04:47:28 +03:00
-U --unmarked
include only unmarked postings/txns (can combine with -P or -C)
2017-06-10 23:58:14 +03:00
-P --pending
include only pending postings/txns
2017-06-16 04:47:28 +03:00
-C --cleared
include only cleared postings/txns
-R --real
include only non-virtual postings
2017-09-22 21:51:53 +03:00
-NUM --depth=NUM
hide/aggregate accounts or postings more than NUM levels deep
-E --empty
2023-12-16 02:59:02 +03:00
show items with zero amount, normally hidden (and vice-versa in
hledger-ui/hledger-web)
-B --cost
2020-06-20 00:36:58 +03:00
convert amounts to their cost/selling amount at transaction time
2020-06-20 00:36:58 +03:00
-V --market
2023-12-16 02:59:02 +03:00
convert amounts to their market value in default valuation com-
2020-06-20 00:36:58 +03:00
modities
-X --exchange=COMM
convert amounts to their market value in commodity COMM
--value
2023-12-16 02:59:02 +03:00
convert amounts to cost or market value, more flexibly than
2020-06-20 00:36:58 +03:00
-B/-V/-X
2023-05-26 22:28:53 +03:00
--infer-equity
infer conversion equity postings from costs
--infer-costs
infer costs from conversion equity postings
2023-05-26 22:28:53 +03:00
--infer-market-prices
2023-12-16 02:59:02 +03:00
use costs as additional market prices, as if they were P direc-
2023-05-26 22:28:53 +03:00
tives
2017-12-31 21:08:44 +03:00
2017-12-15 05:20:07 +03:00
--forecast
2023-12-16 02:59:02 +03:00
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
2024-01-13 02:52:11 +03:00
these transactions as well. Also, in hledger-ui make fu-
ture-dated transactions visible.
2023-05-26 22:28:53 +03:00
2023-12-16 02:59:02 +03:00
--auto generate extra postings by applying auto posting rules to all
2023-05-26 22:28:53 +03:00
txns (not just forecast txns)
--verbose-tags
2023-12-16 02:59:02 +03:00
add visible tags indicating transactions or postings which have
2023-05-26 22:28:53 +03:00
been generated/modified
2017-12-15 05:20:07 +03:00
2021-09-21 05:56:36 +03:00
--commodity-style
2023-12-16 02:59:02 +03:00
Override the commodity style in the output for the specified
2021-09-21 05:56:36 +03:00
commodity. For example 'EUR1.000,00'.
2020-07-18 22:37:06 +03:00
--color=WHEN (or --colour=WHEN)
2023-12-16 02:59:02 +03:00
Should color-supporting commands use ANSI color codes in text
2024-01-13 02:52:11 +03:00
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
2020-07-18 22:37:06 +03:00
NO_COLOR environment variable overrides this.
2020-07-14 22:22:27 +03:00
2021-09-22 04:46:55 +03:00
--pretty[=WHEN]
2024-01-13 02:52:11 +03:00
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
2021-09-22 04:46:55 +03:00
'=', e.g. '--pretty=yes'.
2017-10-01 00:29:25 +03:00
When a reporting option appears more than once in the command line, the
last one takes precedence.
Some reporting options can also be written as query arguments.
2019-02-21 00:15:41 +03:00
PERMISSIONS
2024-01-13 02:52:11 +03:00
By default, hledger-web allows anyone who can reach it to view the
2019-02-21 00:15:41 +03:00
journal and to add new transactions, but not to change existing data.
You can restrict who can reach it by
2024-01-13 02:52:11 +03:00
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 ma-
2023-05-26 22:28:53 +03:00
chine.
2019-02-21 00:15:41 +03:00
o putting it behind an authenticating proxy, using eg apache or nginx
o custom firewall rules
You can restrict what the users who reach it can do, by
o using the --capabilities=CAP[,CAP..] flag when you start it, enabling
2024-01-13 02:52:11 +03:00
one or more of the following capabilities. The default value is
2019-02-21 00:15:41 +03:00
view,add:
o view - allows viewing the journal file and all included files
o add - allows adding new transactions to the main journal file
2024-01-13 02:52:11 +03:00
o manage - allows editing, uploading or downloading the main or in-
2023-05-26 22:28:53 +03:00
cluded files
2019-02-21 00:15:41 +03:00
2024-01-13 02:52:11 +03:00
o using the --capabilities-header=HTTPHEADER flag to specify a HTTP
header from which it will read capabilities to enable. hledger-web
on Sandstorm uses the X-Sandstorm-Permissions header to integrate
2019-02-21 00:15:41 +03:00
with Sandstorm's permissions. This is disabled by default.
EDITING, UPLOADING, DOWNLOADING
2024-01-13 02:52:11 +03:00
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 in-
2023-05-26 22:28:53 +03:00
cludes.
2019-02-21 00:15:41 +03:00
2024-01-13 02:52:11 +03:00
Note, unlike any other hledger command, in this mode you (or any visi-
2019-02-21 00:15:41 +03:00
tor) can alter or wipe the data files.
2024-01-13 02:52:11 +03:00
Normally whenever a file is changed in this way, hledger-web saves a
numbered backup (assuming file permissions allow it, the disk is not
full, etc.) hledger-web is not aware of version control systems, cur-
rently; if you use one, you'll have to arrange to commit the changes
2019-02-21 00:15:41 +03:00
yourself (eg with a cron job or a file watcher like entr).
2024-01-13 02:52:11 +03:00
Changes which would leave the journal file(s) unparseable or non-valid
(eg with failing balance assertions) are prevented. (Probably. This
2019-02-21 00:15:41 +03:00
needs re-testing.)
RELOADING
hledger-web detects changes made to the files by other means (eg if you
2024-01-13 02:52:11 +03:00
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
2023-05-26 22:28:53 +03:00
makes a file unparseable, hledger-web will display an error message un-
til the file has been fixed.
2019-02-21 00:15:41 +03:00
2019-09-01 07:02:00 +03:00
(Note: if you are viewing files mounted from another machine, make sure
that both machine clocks are roughly in step.)
2019-02-21 00:15:41 +03:00
JSON API
2024-01-13 02:52:11 +03:00
In addition to the web UI, hledger-web also serves a JSON API that can
be used to get data or add new transactions. If you want the JSON API
2020-05-26 03:49:01 +03:00
only, you can use the --serve-api flag. Eg:
$ hledger-web -f examples/sample.journal --serve-api
...
You can get JSON data from these routes:
2019-02-21 00:15:41 +03:00
2020-09-30 03:32:51 +03:00
/version
2019-02-21 00:15:41 +03:00
/accountnames
/transactions
/prices
/commodities
/accounts
2020-05-26 03:49:01 +03:00
/accounttransactions/ACCOUNTNAME
2020-06-07 03:21:18 +03:00
Eg, all account names in the journal (similar to the accounts command).
2024-01-13 02:52:11 +03:00
(hledger-web's JSON does not include newlines, here we use python to
2020-06-07 03:21:18 +03:00
prettify it):
2020-05-26 03:49:01 +03:00
$ curl -s http://127.0.0.1:5000/accountnames | python -m json.tool
[
"assets",
"assets:bank",
"assets:bank:checking",
"assets:bank:saving",
"assets:cash",
"expenses",
"expenses:food",
"expenses:supplies",
"income",
"income:gifts",
"income:salary",
"liabilities",
"liabilities:debts"
]
Or all transactions:
$ curl -s http://127.0.0.1:5000/transactions | python -m json.tool
[
{
"tcode": "",
"tcomment": "",
"tdate": "2008-01-01",
"tdate2": null,
"tdescription": "income",
"tindex": 1,
"tpostings": [
{
"paccount": "assets:bank:checking",
"pamount": [
{
"acommodity": "$",
"aismultiplier": false,
"aprice": null,
...
2024-01-13 02:52:11 +03:00
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 un-
2023-05-26 22:28:53 +03:00
derstanding, see the journal docs.
2020-05-26 03:49:01 +03:00
In some cases there is outer JSON corresponding to a "Report" type. To
2024-01-13 02:52:11 +03:00
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
2023-05-26 22:28:53 +03:00
for /accounttransactions it's getAccounttransactionsR, returning a "ac-
2024-01-13 02:52:11 +03:00
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-
2020-05-26 03:49:01 +03:00
portItem (etc).
2024-01-13 02:52:11 +03:00
You can add a new transaction to the journal with a PUT request to
/add, if hledger-web was started with the add capability (enabled by
2020-05-26 03:49:01 +03:00
default). The payload must be the full, exact JSON representation of a
2024-01-13 02:52:11 +03:00
hledger transaction (partial data won't do). You can get sample JSON
from hledger-web's /transactions or /accounttransactions, or you can
2020-06-07 03:21:18 +03:00
export it with hledger-lib, eg like so:
2019-05-24 08:26:43 +03:00
2020-06-07 03:21:18 +03:00
.../hledger$ stack ghci hledger-lib
>>> writeJsonFile "txn.json" (head $ jtxns samplejournal)
2019-05-24 08:26:43 +03:00
>>> :q
2020-05-26 03:49:01 +03:00
Here's how it looks as of hledger-1.17 (remember, this JSON corresponds
to hledger's Transaction and related data types):
{
"tcomment": "",
"tpostings": [
{
2020-06-07 03:21:18 +03:00
"pbalanceassertion": null,
"pstatus": "Unmarked",
2020-05-26 03:49:01 +03:00
"pamount": [
{
"aprice": null,
2020-06-07 03:21:18 +03:00
"acommodity": "$",
2020-05-26 03:49:01 +03:00
"aquantity": {
2020-06-07 03:21:18 +03:00
"floatingPoint": 1,
2020-05-26 03:49:01 +03:00
"decimalPlaces": 10,
2020-06-07 03:21:18 +03:00
"decimalMantissa": 10000000000
2020-05-26 03:49:01 +03:00
},
2020-06-07 03:21:18 +03:00
"aismultiplier": false,
2020-05-26 03:49:01 +03:00
"astyle": {
"ascommodityside": "L",
"asdigitgroups": null,
2020-06-07 03:21:18 +03:00
"ascommodityspaced": false,
"asprecision": 2,
"asdecimalpoint": "."
2020-05-26 03:49:01 +03:00
}
}
],
2020-06-07 03:21:18 +03:00
"ptransaction_": "1",
"paccount": "assets:bank:checking",
2020-05-26 03:49:01 +03:00
"pdate": null,
2020-06-07 03:21:18 +03:00
"ptype": "RegularPosting",
"pcomment": "",
2020-05-26 03:49:01 +03:00
"pdate2": null,
"ptags": [],
2020-06-07 03:21:18 +03:00
"poriginal": null
2020-05-26 03:49:01 +03:00
},
{
2020-06-07 03:21:18 +03:00
"pbalanceassertion": null,
"pstatus": "Unmarked",
2020-05-26 03:49:01 +03:00
"pamount": [
{
"aprice": null,
2020-06-07 03:21:18 +03:00
"acommodity": "$",
2020-05-26 03:49:01 +03:00
"aquantity": {
2020-06-07 03:21:18 +03:00
"floatingPoint": -1,
2020-05-26 03:49:01 +03:00
"decimalPlaces": 10,
2020-06-07 03:21:18 +03:00
"decimalMantissa": -10000000000
2020-05-26 03:49:01 +03:00
},
2020-06-07 03:21:18 +03:00
"aismultiplier": false,
2020-05-26 03:49:01 +03:00
"astyle": {
"ascommodityside": "L",
"asdigitgroups": null,
2020-06-07 03:21:18 +03:00
"ascommodityspaced": false,
"asprecision": 2,
"asdecimalpoint": "."
2020-05-26 03:49:01 +03:00
}
}
],
2020-06-07 03:21:18 +03:00
"ptransaction_": "1",
"paccount": "income:salary",
2020-05-26 03:49:01 +03:00
"pdate": null,
2020-06-07 03:21:18 +03:00
"ptype": "RegularPosting",
"pcomment": "",
2020-05-26 03:49:01 +03:00
"pdate2": null,
"ptags": [],
2020-06-07 03:21:18 +03:00
"poriginal": null
2020-05-26 03:49:01 +03:00
}
],
2020-06-07 03:21:18 +03:00
"ttags": [],
2020-05-26 03:49:01 +03:00
"tsourcepos": {
2020-06-07 03:21:18 +03:00
"tag": "JournalSourcePos",
2020-05-26 03:49:01 +03:00
"contents": [
"",
[
1,
1
]
2020-06-07 03:21:18 +03:00
]
2020-05-26 03:49:01 +03:00
},
2020-06-07 03:21:18 +03:00
"tdate": "2008-01-01",
"tcode": "",
"tindex": 1,
"tprecedingcomment": "",
"tdate2": null,
"tdescription": "income",
"tstatus": "Unmarked"
2020-05-26 03:49:01 +03:00
}
2019-05-24 08:26:43 +03:00
2024-01-13 02:52:11 +03:00
And here's how to test adding it with curl. This should add a new en-
2023-05-26 22:28:53 +03:00
try to your journal:
2019-05-24 08:26:43 +03:00
2020-05-26 03:49:01 +03:00
$ curl http://127.0.0.1:5000/add -X PUT -H 'Content-Type: application/json' --data-binary @txn.json
2019-09-01 07:02:00 +03:00
2022-11-06 22:39:22 +03:00
DEBUG OUTPUT
Debug output
2024-01-13 02:52:11 +03:00
You can add --debug[=N] to the command line to log debug output. N
2022-11-06 22:39:22 +03:00
ranges from 1 (least output, the default) to 9 (maximum output). Typi-
2024-01-13 02:52:11 +03:00
cally you would start with 1 and increase until you are seeing enough.
Debug output goes to stderr, interleaved with the requests logged on
2022-11-06 22:39:22 +03:00
stdout. To capture debug output in a log file instead, you can usually
redirect stderr, eg:
hledger-web --debug=3 2>hledger-web.log.
ENVIRONMENT
2024-01-13 02:52:11 +03:00
LEDGER_FILE The main journal file to use when not specified with
2023-05-26 22:28:53 +03:00
-f/--file. Default: $HOME/.hledger.journal.
BUGS
2023-05-26 22:28:53 +03:00
We welcome bug reports in the hledger issue tracker (shortcut:
2024-01-13 02:52:11 +03:00
http://bugs.hledger.org), or on the #hledger chat or hledger mail list
2023-05-26 22:28:53 +03:00
(https://hledger.org/support).
2023-05-26 22:28:53 +03:00
Some known issues:
2023-05-26 22:28:53 +03:00
Does not work well on small screens, or in text-mode browsers.
AUTHORS
2022-12-14 20:53:09 +03:00
Simon Michael <simon@joyful.com> and contributors.
See http://hledger.org/CREDITS.html
COPYRIGHT
2022-12-14 20:53:09 +03:00
Copyright 2007-2023 Simon Michael and contributors.
LICENSE
Released under GNU GPL v3 or later.
SEE ALSO
2020-12-21 07:11:35 +03:00
hledger(1), hledger-ui(1), hledger-web(1), ledger(1)
2024-02-19 03:59:10 +03:00
hledger-web-1.32.99 February 2024 HLEDGER-WEB(1)