• v1.2.0 aeafc4c54a

    1.2.0
    CI / lint (push) Successful in 1m48s
    CI / tests (push) Successful in 2m56s
    Stable

    raucao released this 2026-09-27 15:45:13 +00:00 | 0 commits to main since this release

    Fixes the plugin's identity so Discourse associates its site settings and admin UI correctly. The plugin's metadata name was hledger while the repository (and therefore the usual install directory) is named discourse-hledger. When those differ, Discourse loads the plugin but does not attach its settings to it, so the plugin appeared in the admin Plugins list without a Settings button and without an entry in the admin sidebar.

    Installation

    The plugin is named discourse-hledger throughout now. Clone and install it into plugins/discourse-hledger; the directory name must match the plugin's # name:. The settings category is now discourse_hledger; the individual setting names are unchanged (hledger_*), so existing configuration carries over.

    Downloads
  • v1.1.0 dc637c0bd9

    1.1.0
    CI / lint (push) Successful in 1m41s
    CI / tests (push) Successful in 2m48s
    Stable

    raucao released this 2026-09-27 14:20:30 +00:00 | 3 commits to main since this release

    Hardening and operational improvements on top of the first release. The report surface is unchanged; this release tightens how untrusted journals are executed and gives administrators more control over resource use.

    Sandbox

    hledger now also runs under a memory cap (RLIMIT_DATA) and a file-size limit, and core dumps are disabled. The child's PATH is reduced to the directory of the resolved executable. When hledger produces more output than the configured cap, the plugin reports a distinct "report too large" error instead of failing later while parsing truncated JSON.

    Rate limiting

    A global rate limit (hledger global rate limit per minute, default 120) now complements the existing per-IP limit, bounding report generation across all users even when requests are spread over many IPs. Set it to 0 to disable it.

    Journal validation

    Directive rejection now also covers the ! include spelling, and journals with invalid encoding are reported as such instead of reaching hledger. The line limit is configurable (hledger max journal lines, default 5000).

    Caching and logging

    Cached reports are keyed on the detected hledger version as well as the post revision, so an in-place hledger upgrade no longer serves stale results. Failed executions are logged server-side with the report type, topic and user plus a truncated stderr excerpt, without logging the journal itself.

    Frontend

    The dashboard no longer issues duplicate requests for the same report and parameters, and discards responses from superseded requests when reports or filters change quickly.

    Equity

    The equity distribution is documented and tested as based on absolute equity balances, and the in-app note states this explicitly.

    Documentation

    The README now covers the recommended default Docker deployment (installing the plugin and hledger via the app.yml after_code hook), the layered security model, an OS/container sandbox recommendation for public instances, and the relevant site settings.

    Downloads
  • v1.0.0 cd4104ef15

    1.0.0
    CI / lint (push) Successful in 1m40s
    CI / tests (push) Successful in 2m40s
    Stable

    raucao released this 2026-09-27 13:19:50 +00:00 | 12 commits to main since this release

    The first release of the hledger plugin for Discourse. Put an hledger journal in a fenced hledger code block in the first post of a topic, and the block is replaced by a live, filterable report dashboard, generated on demand by the server's hledger executable.

    Reports

    The dashboard offers five views, each generated from hledger's machine-readable JSON output:

    • Accounts — the full balance tree, with every parent account expanded.
    • Balance sheet — assets, liabilities and equity, folded into sections.
    • P&L — revenues and expenses.
    • Equity — a per-commodity distribution of contributed capital.
    • Journal — a transaction log with each posting.

    Account trees

    Accounts are shown as a tree: every name is capitalized, nested accounts are indented by depth, and on the balance sheet and P&L the matching top-level account is folded into the section heading instead of being repeated. Empty titled sections show a "No data" placeholder rather than a bare total.

    Equity distribution

    The equity view groups balances by commodity and shows each holder's amount alongside their percentage share of the contributed capital — with a reminder that this reflects contributed capital, not legal ownership.

    Mentions

    An account segment written as @username (for example equity:@alice) is rendered as a Discourse mention link, with the same profile card as mentions in posts. Only segments that match an existing user are linked; anything else stays plain text.

    Display

    Negative balances are shown in parentheses on the Accounts view, following accounting convention. Journal account paths keep their : separators, with any mention segments linked inline. Reports can be filtered by a From/To date range, and the end date is inclusive.

    Security

    Journals are treated as untrusted input. hledger runs with a scrubbed environment, a private temporary working directory, a hard wall-clock timeout, CPU and file-descriptor limits, and capped output. include and !include directives are rejected, the journal must be valid UTF-8 and within size and line limits, and only one journal per topic is accepted. Reports are returned only for topics the viewer may see, the endpoint is rate-limited to 30 requests per minute per IP, and results are cached per post revision.

    Requirements

    • The hledger executable on the server.
    • Discourse 2.7.0 or newer.
    Downloads