{"id":23501452,"url":"https://github.com/andreasgerstmayr/fava-portfolio-returns","last_synced_at":"2025-12-04T01:03:11.497Z","repository":{"id":48277112,"uuid":"460908160","full_name":"andreasgerstmayr/fava-portfolio-returns","owner":"andreasgerstmayr","description":"fava-portfolio-returns shows portfolio returns in Fava","archived":false,"fork":false,"pushed_at":"2025-02-22T16:28:21.000Z","size":15841,"stargazers_count":55,"open_issues_count":1,"forks_count":4,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-29T00:23:32.701Z","etag":null,"topics":["beancount","beangrow","fava","portfolio","returns"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andreasgerstmayr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-02-18T15:37:28.000Z","updated_at":"2025-03-13T06:56:29.000Z","dependencies_parsed_at":"2024-06-03T22:03:48.933Z","dependency_job_id":"938a5f63-d081-41b9-8977-f99719d732df","html_url":"https://github.com/andreasgerstmayr/fava-portfolio-returns","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreasgerstmayr%2Ffava-portfolio-returns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreasgerstmayr%2Ffava-portfolio-returns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreasgerstmayr%2Ffava-portfolio-returns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andreasgerstmayr%2Ffava-portfolio-returns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andreasgerstmayr","download_url":"https://codeload.github.com/andreasgerstmayr/fava-portfolio-returns/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249140595,"owners_count":21219323,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["beancount","beangrow","fava","portfolio","returns"],"created_at":"2024-12-25T07:18:01.216Z","updated_at":"2025-12-04T01:03:11.491Z","avatar_url":"https://github.com/andreasgerstmayr.png","language":"Python","funding_links":[],"categories":["Plugins","Python"],"sub_categories":["Fava"],"readme":"# Fava Portfolio Returns\n[![Continuous Integration](https://github.com/andreasgerstmayr/fava-portfolio-returns/actions/workflows/continuous-integration.yml/badge.svg)](https://github.com/andreasgerstmayr/fava-portfolio-returns/actions/workflows/continuous-integration.yml)\n[![PyPI](https://img.shields.io/pypi/v/fava-portfolio-returns)](https://pypi.org/project/fava-portfolio-returns/)\n\nfava-portfolio-returns shows portfolio returns in the [Fava](https://github.com/beancount/fava) web interface. It leverages [beangrow](https://github.com/beancount/beangrow) to categorize transactions and calculate the portfolio returns of a beancount ledger.\n\n[![Portfolio](https://github.com/andreasgerstmayr/fava-portfolio-returns/raw/main/frontend/tests/e2e/pages.test.ts-snapshots/PNG-Snapshot-Tests-Light-Theme-Portfolio-1-chromium-linux.png)](https://github.com/andreasgerstmayr/fava-portfolio-returns/raw/main/frontend/tests/e2e/pages.test.ts-snapshots/PNG-Snapshot-Tests-Light-Theme-Portfolio-1-chromium-linux.png)\n[![Performance](https://github.com/andreasgerstmayr/fava-portfolio-returns/raw/main/frontend/tests/e2e/pages.test.ts-snapshots/PNG-Snapshot-Tests-Light-Theme-Performance-1-chromium-linux.png)](https://github.com/andreasgerstmayr/fava-portfolio-returns/raw/main/frontend/tests/e2e/pages.test.ts-snapshots/PNG-Snapshot-Tests-Light-Theme-Performance-1-chromium-linux.png)\n[![Returns](https://github.com/andreasgerstmayr/fava-portfolio-returns/raw/main/frontend/tests/e2e/pages.test.ts-snapshots/PNG-Snapshot-Tests-Light-Theme-Returns-1-chromium-linux.png)](https://github.com/andreasgerstmayr/fava-portfolio-returns/raw/main/frontend/tests/e2e/pages.test.ts-snapshots/PNG-Snapshot-Tests-Light-Theme-Returns-1-chromium-linux.png)\n[![Dividends](https://github.com/andreasgerstmayr/fava-portfolio-returns/raw/main/frontend/tests/e2e/pages.test.ts-snapshots/PNG-Snapshot-Tests-Light-Theme-Dividends-1-chromium-linux.png)](https://github.com/andreasgerstmayr/fava-portfolio-returns/raw/main/frontend/tests/e2e/pages.test.ts-snapshots/PNG-Snapshot-Tests-Light-Theme-Dividends-1-chromium-linux.png)\n[![Cash Flows](https://github.com/andreasgerstmayr/fava-portfolio-returns/raw/main/frontend/tests/e2e/pages.test.ts-snapshots/PNG-Snapshot-Tests-Light-Theme-Cash-Flows-1-chromium-linux.png)](https://github.com/andreasgerstmayr/fava-portfolio-returns/raw/main/frontend/tests/e2e/pages.test.ts-snapshots/PNG-Snapshot-Tests-Light-Theme-Cash-Flows-1-chromium-linux.png)\n[![Groups](https://github.com/andreasgerstmayr/fava-portfolio-returns/raw/main/frontend/tests/e2e/pages.test.ts-snapshots/PNG-Snapshot-Tests-Light-Theme-Groups-1-chromium-linux.png)](https://github.com/andreasgerstmayr/fava-portfolio-returns/raw/main/frontend/tests/e2e/pages.test.ts-snapshots/PNG-Snapshot-Tests-Light-Theme-Groups-1-chromium-linux.png)\n\n## Installation\n```\npip install fava-portfolio-returns\n```\n\n## Usage\nPlease setup [beangrow](https://github.com/beancount/beangrow) first, using this guide: https://beancount.github.io/docs/calculating_portolio_returns.html.\n\nEnable this plugin in Fava by adding the following lines to your ledger:\n```\n2010-01-01 custom \"fava-extension\" \"fava_portfolio_returns\" \"{\n  'beangrow_config': 'beangrow.pbtxt'\n}\"\n```\n\n## Configuration\nThe plugin supports the following configuration options:\n```\n2010-01-01 custom \"fava-extension\" \"fava_portfolio_returns\" \"{\n  'beangrow_config': 'beangrow.pbtxt',\n  'pnl_color_scheme': 'green-red',\n  'beangrow_debug_dir': 'path/to/debug/directory'\n}\"\n```\n\nAvailable options for `pnl_color_scheme`:\n\n- `green-red`: Green for profits, red for losses\n- `red-green`: Red for profits, green for losses\n\nThe default value is automatically selected based on the browser's locale: Chinese and Japanese regions use `red-green` by default, all other regions use `green-red`.\n\n## View Example Ledger\n`cd example; fava example.beancount`\n\n## Contributing\nThis plugin consists of a Python backend and a React frontend.\n\nInstall [uv](https://docs.astral.sh/uv/) and Node.js 22, run `make deps` to install the dependencies, and `make dev` to run the Fava dev server with auto-rebuild.\n\nBefore submitting a PR, please run `make build` to build the frontend in production mode, and add the compiled frontend to the PR.\n\n## Related Projects\n* [Fava Portfolio Summary](https://github.com/PhracturedBlue/fava-portfolio-summary)\n* [Fava Classy Portfolio](https://github.com/seltzered/fava-classy-portfolio)\n* [Fava Investor](https://github.com/redstreet/fava_investor)\n* [Fava Dashboards](https://github.com/andreasgerstmayr/fava-dashboards)\n\n## Acknowledgements\nThanks to Martin Blais and all contributors of [beancount](https://github.com/beancount/beancount) and [beangrow](https://github.com/beancount/beangrow),\nJakob Schnitzer, Dominik Aumayr and all contributors of [Fava](https://github.com/beancount/fava),\nand to all contributors of [Apache ECharts](https://echarts.apache.org).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreasgerstmayr%2Ffava-portfolio-returns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandreasgerstmayr%2Ffava-portfolio-returns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandreasgerstmayr%2Ffava-portfolio-returns/lists"}