Files
discourse-hledger/README.md
T

74 lines
2.4 KiB
Markdown

# **hledger** Discourse Plugin
Render [hledger](https://hledger.org) journal reports inside Discourse topics.
Put an hledger journal in a fenced `hledger` code block in a topic's first
post. The block is replaced by a dashboard with five reports, generated live
by the `hledger` command line tool:
- Accounts and balances (a full account tree, each name capitalized)
- Balance sheet (indented account tree under each section)
- Profit & loss / P&L (indented account tree under each section)
- Equity distribution (account tree with per-commodity shares; contributed
capital, not legal ownership)
- Journal (a detailed transaction log: date, description and postings)
## Installation
Follow the [plugin installation guide](https://meta.discourse.org/t/install-a-plugin/19157).
The plugin requires the `hledger` executable on the server. Install it with
your package manager (for example `apt-get install hledger`) and point the
`hledger path` site setting at it if it is not on the default `PATH`.
### Docker development environment
Inside the Discourse dev container, install the plugin's system dependencies
(hledger, Chromium and the Playwright browser used by the test suite) with:
```sh
docker exec -u root discourse_dev bash /src/plugins/hledger/bin/setup-dev
```
## How to use
1. Enable the plugin under `Admin > Settings > Plugins` (`hledger enabled`).
2. Add an hledger journal to the first post of a topic:
````
```hledger
2024-01-01 Opening balances
assets:bank:checking 1000.00 EUR
equity:alice -600.00 EUR
equity:bob -400.00 EUR
```
````
3. The code block is replaced by the report dashboard. Reports can be filtered
by a start and end date; the end date is inclusive.
Reports are generated on demand and cached per post revision, so editing the
journal refreshes them.
## Security
Journals are untrusted input. The plugin runs `hledger` with a scrubbed
environment, a private working directory, a hard timeout, resource limits and
an output cap, and it rejects `include` directives so a journal cannot read
arbitrary server files.
## Development
```sh
# Ruby specs (run `bin/setup-dev` first for the integration specs)
bin/rspec plugins/hledger/spec/lib plugins/hledger/spec/requests
bin/rspec plugins/hledger/spec/system
# Frontend tests
DISCOURSE_DISABLE_BROWSER_SANDBOX=1 bin/qunit plugins/hledger/test/javascripts
```
## License
MIT