* [AI] Extract PR/commit rules into shared agent skill
Deduplicate PR and commit instructions from AGENTS.md into a standalone
skill file at .github/agents/pr-and-commit-rules.md. This single source
of truth is consumed by both Claude Code (via CLAUDE.md @-import) and
Cursor (via .cursor/rules/pr-and-commit.mdc with alwaysApply: true).
AGENTS.md now references the shared file instead of repeating the rules
in three separate sections.
https://claude.ai/code/session_01KkHg7MYXrTyDkTw6u98Vam
* Add release notes for PR #7153
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Update amount styling with theme colors
* Clean up imports in TransactionListItem.tsx
Removed unused import of makeBalanceAmountStyle.
* Add release notes for bugfix in color variables
Fix color variables for mobile transaction list items.
* Change positiveColor in amount to use theme.tableText
* Change negative color style for running balance
* Fix negative color style in TransactionListItem
* Update color styles for transaction amount display
* Update upcoming-release-notes/7047.md
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #7047
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix(csv-import): trim whitespace from amount strings before parsing
looselyParseAmount relies on a regex anchored at $ to detect decimal
markers. Trailing whitespace (e.g. from Excel-saved CSVs) shifts the
pattern match so a thousands separator is misidentified as a decimal
point, producing wildly wrong values.
Adding trim() at the top of the function eliminates trailing/leading
whitespace before any regex logic runs.
Fixes actualbudget/actual#7121
* chore: add release notes for #7149
* [AI] Sort custom theme catalog options alphabetically in the UI
Sort catalog themes by name using localeCompare before rendering,
without modifying the underlying JSON data file.
https://claude.ai/code/session_01Y5SGaVYqsVWVsvXV8ZFXj3
* Add release notes for PR #7144
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* [AI] Remove parent path import of window.ts from desktop-client tsconfig
Replace the `../../packages/loot-core/typings/window.ts` include in
desktop-client's tsconfig.json with a proper package import. This adds
a `./typings/*` export to loot-core's package.json and creates a
globals.ts file in desktop-client that imports the window types via
the package name.
https://claude.ai/code/session_01GrgAzjWd3XvqwBTfXLerxc
* [autofix.ci] apply automated fixes
* Add release notes for PR #7142
---------
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Fix budget analysis report padding
The padding on the report is too small when the value is large.
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* [AI] Enable TypeScript composite project references across monorepo
- Add composite and declaration emit to all package tsconfigs
- Wire root and per-package project references in dependency order
- Replace cross-package include-based typing with referenced outputs
- Fix api TS5055 by emitting declarations to decl-output
- Add desktop-client alias for tests; fix oxlint import order in vite.config
- Add UsersState.data null type and openDatabase return type for strict emit
Co-authored-by: Cursor <cursoragent@cursor.com>
* Remove obsolete TypeScript configuration for API and update build script to emit declarations directly to the output directory. This streamlines the build process and ensures compatibility with the new project structure.
* Refactor TypeScript configuration in API package to remove obsolete decl-output directory and update build scripts. The changes streamline the build process by directing declaration outputs to the @types directory, ensuring better organization and compatibility with the new project structure.
* Add TypeScript declaration emission for loot-core in desktop-electron build process
* Refactor TypeScript configuration in API package to utilize composite references and streamline build scripts. Update include and exclude patterns for improved file management, ensuring better organization of declaration outputs and migration SQL files.
* Refactor TypeScript configuration in loot-core and desktop-client packages to streamline path management and remove obsolete dependencies. Update paths in tsconfig.json files for better organization and compatibility, and adjust yarn.lock to reflect changes in workspace dependencies.
* Update desktop-electron package to utilize loot-core as a workspace dependency. Adjust TypeScript import paths and tsconfig references for improved organization and compatibility across packages.
* Enhance Vite configuration for desktop-client to support Electron-specific conditions and update loot-core package.json to include Electron as a platform for client connection. This improves compatibility for Electron builds.
* Refactor TypeScript configuration across multiple packages to streamline path management. Update tsconfig.json files in root, api, and loot-core packages to improve import paths and maintain compatibility with internal typings.
* Update package dependencies and Vite configuration across component-library and desktop-client. Add vite-tsconfig-paths to component-library and remove it from desktop-client. Refactor Storybook preview file to include a TODO for future refactoring.
* Remove Node-specific path from loot-core package.json for client connection, streamlining platform configuration for Electron.
* Remove loot-core as a workspace dependency from desktop-electron package.json
* Update tsconfig.json to remove reference to desktop-client
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* Add New Taiwan Dollar to currency list
* Add New Taiwan Dollar to currency list
* Fix decimalPlaces for New Taiwan Dollar
Updated decimalPlaces for New Taiwan Dollar from 0 to 2, as suggested by coderabbitai, "Line 62 introduces TWD as zero-decimal, but this codebase currently has an unresolved zero-decimal conversion/storage issue. This risks incorrect persisted amounts for TWD transactions."
* Add upcoming-releass-notes
* Add New Taiwan Dollar (NT$) to available currency
* Add New Taiwan Dollar (NT$) to available currency
* [AI] Refactor YNAB importers to use server-side send() and handler API
Co-authored-by: Cursor <cursoragent@cursor.com>
* Rename 7049.md to 7050.md
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* [AI] Use loot-core workspace in desktop-electron and fix related types
- Add loot-core as workspace dependency in desktop-electron
- Import GlobalPrefsJson from loot-core package in desktop-electron
- Allow null in usersSlice data type (UsersState)
- Add explicit SQL.Database return type to openDatabase in sqlite electron
Made-with: Cursor
* Re-add loot-core as a workspace dependency in desktop-electron
* e:electron: electron backups converted to zip for easy importing
* release notes
* fix lint
* suggestion from rabbit
* Change category from Maintenance to Enhancements
* Pushing before weekend to Monday
* release notes
* lint
* Guard against null
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* fixing AI commit and addressing second comment
* addressing nitpicks
* first attempt at a test
* [autofix.ci] apply automated fixes
* refactor to use condition and fix tests
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* 🔖 (26.3.0)
* Remove used release notes
* Add release notes for PR #7097
* Remove used release notes
* Remove used release notes
* Add release notes for version 26.3.0
* Add new terms to spelling expectation list
* Fix spelling and capitalization in release notes
Corrected spelling of 'reorganisation' to 'reorganization' and updated 'coderabbit' to 'CodeRabbit' for consistency.
* Update patterns.txt to allowlist 'CodeRabbit'
Add 'CodeRabbit' to allowlist of proper nouns.
* Clarify chart theming support in release notes
Updated the release notes to specify bar/pie chart theming support and added details about theme variables for customization.
* Remove 'CodeRabbit' from spelling expectations
* Refactor release notes and improve formatting
Reorganize release notes for clarity and update content.
* Create 2026-03-02-release-26-3-0.md
* Change release date to 2026-03-02
Updated the release date for version 26.3.0.
* Update release notes for version 26.3.0
---------
Co-authored-by: jfdoming <9922514+jfdoming@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
* [AI] Make merge-freeze-unfreeze workflow work on fork PRs via pull_request_target
Made-with: Cursor
* Add release notes for the "unfreeze" workflow functionality in fork PRs
* Add empty permissions block to unfreeze job in merge-freeze-unfreeze workflow
* [AI] Add GitHub Action to add PR to Merge Freeze unblocked list when unfreeze label is added
Made-with: Cursor
* Rename 7093.md to 7094.md
* Add concurrency control to unfreeze job in merge-freeze-unfreeze workflow
- Introduced concurrency settings to prevent overlapping executions of the unfreeze job based on labels.
- Updated error handling to abort the process if fetching the current merge freeze status fails, ensuring unblocked PRs are not overwritten.
* Refactor Merge Freeze workflow to simplify PR unblocking process
- Updated the workflow to directly post the PR to the unblocked list without fetching the current freeze status.
- Improved error handling by ensuring the access token is set before proceeding with the API call.
* [AI] Fix mobile rules list items to be full width and left-aligned
- Override Button's default justifyContent/alignItems centering in
ActionableGridListItem to use flex-start alignment
- Add width: 100% to RulesListItem's SpaceBetween to fill the item width
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
* Add release notes for PR #7081
* Change category from Enhancements to Bugfix
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* [AI] Fix API build output path (dist/index.js instead of dist/api/index.js)
- Set rootDir in packages/api/tsconfig.json so output is under dist/ not dist/api/
- Remove loot-core pegjs.ts from include; add local typings/pegjs.d.ts
- Use mkdir -p in build:migrations for idempotent build
- Exclude **/@types/** so declaration output does not conflict with input
Made-with: Cursor
* Update TypeScript configuration in api package to refine exclude patterns
* Change menuAutoCompleteTextHover color to green400
* Change menuAutoCompleteTextHover color to green400 in Midnight theme.
Change menuAutoCompleteTextHover color to green400 in Midnight theme.
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Rename theme 'Okabe Ito' to 'Color-blind (dark)'
* Rename 'Okabe Ito' theme to 'Color-blind (dark)'
* Fix capitalization in theme name for consistency
* Add release notes for version 26.2.1, including critical security fixes for SimpleFin, Pluggy, and multi-user setups. Remove outdated upcoming release notes for related bugfixes.
* Add release notes for PR #7043
* Delete upcoming-release-notes/7043.md
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* [AI] Add per-package tsconfigs and typescript-strict-plugin for typecheck
Co-authored-by: Cursor <cursoragent@cursor.com>
* Update TypeScript configuration across multiple packages to correct plugin path key from "path" to "paths" and add reference to process-worker typings in index.electron.ts.
* Remove reference to process-worker typings in index.electron.ts and add new process-worker typings file for global Process augmentation.
* Refactor TypeScript build configurations across multiple packages by removing tsconfig.dist.json files and updating build scripts to use default TypeScript compilation. Adjusted compiler options to target ES2021 and enable declaration generation.
* Update TypeScript configuration in api package to refine include and exclude patterns for better file management.
* Update build script in api package to ensure migration SQL files are copied to the correct directory by creating the destination folder if it doesn't exist.
* Update TypeScript configurations in crdt and desktop-electron packages to refine include and exclude patterns for improved file management.
* Update TypeScript dependencies across multiple packages to include typescript-strict-plugin for enhanced type checking and maintain consistency in package.json files.
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* [AI] Enforce file access authorization on sync API endpoints
Co-authored-by: Cursor <cursoragent@cursor.com>
* Refactor file deletion authorization to return error message as text
* Refactor file upload validation to improve error handling
* Add tests to allow admin users to retrieve encryption keys and sync files for other users
- Implemented a test for admin access to retrieve encryption keys for another user's file in the /user-get-key endpoint.
- Added a test for admin users to sync another user's file in the /sync endpoint, ensuring proper response and headers.
These changes enhance the authorization checks for admin actions on user files.
* Refactor file cleanup in tests to use onTestFinished for better error handling
* Enhance admin capabilities in file management tests
* Add migration to backfill file owners with admin ID
* Enhance file access authorization in sync API
* Update migration to backfill file owners with admin ID to ensure consistent ordering in the query
* Refactor access control tests for file downloads in sync API
* Add test for non-owner file download access via user_access in sync API
This test verifies that users with appropriate access can download files owned by others, utilizing the requireFileAccess logic and UserService.countUserAccess. It ensures correct response headers and content delivery for shared files.
* Refactor file cleanup in upload and download tests to utilize onTestFinished for improved error handling
This update consolidates file cleanup logic in the test suite, ensuring that temporary files are removed after each test execution. The changes enhance the reliability of tests by consistently managing file state across various scenarios.
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* [AI] Desktop client, E2E, loot-core, sync-server and tooling updates
Co-authored-by: Cursor <cursoragent@cursor.com>
* Refactor database handling in various modules to use async/await for improved readability and error handling. This includes updates to database opening and closing methods across multiple files, ensuring consistent asynchronous behavior. Additionally, minor adjustments were made to encryption functions to support async operations.
* Refactor sync migration tests to utilize async/await for improved readability. Updated transaction handling to streamline event expectations and cleanup process.
* Refactor various functions to utilize async/await for improved readability and error handling. Updated service stopping, encryption, and file upload/download methods to ensure consistent asynchronous behavior across the application.
* Refactor BudgetFileSelection component to use async/await for onSelect method, enhancing error handling and readability. Update merge tests to utilize async/await for improved clarity in transaction merging expectations.
* Refactor filesystem module to use async/await for init function and related database operations, enhancing error handling and consistency across file interactions. Updated tests to reflect asynchronous behavior in database operations and file writing.
* Fix typo in init function declaration to ensure it returns a Promise<void> instead of Proise<void>.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6987
* Update tests to use async/await for init function in web filesystem, ensuring consistent asynchronous behavior in database operations.
* Update VRT screenshot for payees filter test to reflect recent changes
* Update filesystem module to remove web-specific implementations and streamline path handling. Refactor file operations to enhance type safety and consistency across different environments. Add tests for SQLite interactions and ensure proper handling of database transactions.
* Add release notes for maintenance: Remove usage of 'web' file types
* Refactor filesystem module to use type annotations for exports and improve consistency across methods. Remove deprecated web file handling and enhance encryption functions for better browser compatibility.
* Trigger CI
* Add asyncStorage API file to export Electron index module
* Trigger CI
* Feedback: typo
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Add tooltip to imported payee column in rule result window
The imported payee column in SimpleTransactionsTable was missing a
title attribute, so truncated text had no tooltip on hover. Other
columns (category, account, notes) already pass title for this purpose.
Fixes#7003
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
* Add release notes for #7031
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
---------
Co-authored-by: Your Name <your-email@example.com>
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
* Add ACTUAL_USER_CREATION_MODE documentation to oauth-auth.md
* [autofix.ci] apply automated fixes
* add note that first external auth user is admin and owner
Added details about admin permissions and server ownership for users authenticating with OpenID/OAuth2.
* improve ACTUAL_USER_CREATION_MODE environment documentation
clarify warning about server owner
* [autofix.ci] apply automated fixes
* move first user admin warning to "after setup" section of OIDC documentation
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Add authentication middleware to SimpleFIN and Pluggy.ai endpoints
Protect /simplefin/* and /pluggyai/* routes with validateSessionMiddleware
so only authenticated users can access bank account and transaction data.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Release notes
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* Set inital focus on category when covering overspending
* Fixup: Make sure that the amount is set
* Unused import
* Fix bug where typing an amount and pressing enter uses previous value
---------
Co-authored-by: Dagur Ammendrup <dagurp@vivaldi.com>
* [AI] Desktop client, E2E, loot-core, sync-server and tooling updates
Co-authored-by: Cursor <cursoragent@cursor.com>
* Refactor database handling in various modules to use async/await for improved readability and error handling. This includes updates to database opening and closing methods across multiple files, ensuring consistent asynchronous behavior. Additionally, minor adjustments were made to encryption functions to support async operations.
* Refactor sync migration tests to utilize async/await for improved readability. Updated transaction handling to streamline event expectations and cleanup process.
* Refactor various functions to utilize async/await for improved readability and error handling. Updated service stopping, encryption, and file upload/download methods to ensure consistent asynchronous behavior across the application.
* Refactor BudgetFileSelection component to use async/await for onSelect method, enhancing error handling and readability. Update merge tests to utilize async/await for improved clarity in transaction merging expectations.
* Refactor filesystem module to use async/await for init function and related database operations, enhancing error handling and consistency across file interactions. Updated tests to reflect asynchronous behavior in database operations and file writing.
* Fix typo in init function declaration to ensure it returns a Promise<void> instead of Proise<void>.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6987
* Update tests to use async/await for init function in web filesystem, ensuring consistent asynchronous behavior in database operations.
* Update VRT screenshot for payees filter test to reflect recent changes
* [AI] Fix no-floating-promises lint error in desktop-electron
Wrapped queuedClientWinLogs.map() with Promise.all and void operator to properly handle the array of promises for executing queued logs.
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
* Refactor promise handling in global and sync event handlers
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6987
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
* start of reports dashboard updates
* spelling
* Add release notes for PR #6976
* don't need one of these
* consistent naming
* bunny fixes
* images
* image again
* extenion
* fix
* consistent naming
* naming
* fix
* last one
* Ill be done with this someday
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Document graph color variables for custom themes
Added documentation for graph color variables in custom themes.
* [autofix.ci] apply automated fixes
* Update custom themes documentation for clarity
Clarify the impact of color palettes on custom report widget graphs and format the list of color variables.
* Update packages/docs/docs/experimental/custom-themes.md
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Fix color variable syntax in custom themes documentation
Updated color variable syntax for chart colors in documentation.
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Move redux state to react-query - account states
* Fix onbudget and offbudget displaying closed accounts
* Move redux state to react-query - payees states
* Add release notes for PR #6880
* Replace usage of logger in desktop-client with console
* Address feedback on adding default data to usePayees (#6931)
* Initial plan
* Add default data to usePayees usages using inline destructuring
Co-authored-by: joel-jeremy <20313680+joel-jeremy@users.noreply.github.com>
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: joel-jeremy <20313680+joel-jeremy@users.noreply.github.com>
* Fix imports
* Update empty payees list test
* Cleanup and simplify AccountEntity definition to fix `satisfies` syntax
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
Co-authored-by: joel-jeremy <20313680+joel-jeremy@users.noreply.github.com>
* Fix redirect to accounts page when no accounts exists
* Add release notes for PR #7007
* Use isFetching
* Update useAccounts to return react query states (e.g. isPending, isFetching, etc.)
* Add release notes for PR #7009
* Delete upcoming-release-notes/7007.md
* Change category from Enhancements to Maintenance
Refactor `useAccounts` to improve data handling.
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Fix redirect to accounts page when no accounts exists
* Add release notes for PR #7007
* Use isFetching
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Improve category server app and react query mutation error handling
* Add release notes for PR #6958
* Fix test
* Fix throwing async test
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Do not swallow exceptions when batching messages - propagate instead
* Update error type to make 'cause' optional
Make 'cause' property optional in error type.
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Fix operator precedence grouping for */ and +/-
* Add release note for #6993
* Fix exponent associativity and add regression test
---------
Co-authored-by: Hadi Ayache <hadiayache@Hadis-Mac-mini.local>
* Retrofit useReports to use react-query under the hood
* Add release notes for PR #6951
* Update 6951.md
* Report mutations
* Fix react query cache not being cleared when switching budgets (#6953)
* Fix react query cache not being cleared when switching budgets
* React does not want to export function from src/index
* Release note
* Use react-query is dashboard queries and mutations
* Add release notes for PR #6957
* [autofix.ci] apply automated fixes
* Fix typecheck errors
* Coderabbit feedback
* Make error cause optional
* Rename useDashboardWidgetCopyMenu and update useDashboardWidget to accept object to prevent need to default id to empty string
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* fix(ios): restore status bar color on iOS 26.2 (Safari 26)
Safari 26 no longer uses the theme-color meta tag for the status bar
and instead derives the tint from the body background. Set body
background-color in HTML and sync it with the app theme so the status
bar shows purple (or the active theme) instead of white.
Fixes#6946
Co-authored-by: Cursor <cursoragent@cursor.com>
* [autofix.ci] apply automated fixes
* refactor(theme): update useMetaThemeColor to accept theme values directly
Modified the useMetaThemeColor hook to accept theme color values instead of predefined keys. Updated FinancesApp and ManagementApp components to utilize the new implementation, ensuring proper theme color handling based on screen width.
* [autofix.ci] apply automated fixes
* refactor(theme): remove unused body background color in index.html and add tests for useMetaThemeColor hook
Deleted the commented-out body background color in index.html to clean up the code. Added comprehensive tests for the useMetaThemeColor hook to ensure proper handling of theme colors, including support for CSS variables and reactivity to theme changes.
* refactor(theme): improve getPropertyValueFromVarString function in useMetaThemeColor hook
* [autofix.ci] apply automated fixes
* Add release notes for PR #6983
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* include category group in transaction export
* Apply suggestion from @yzAlvin
Co-authored-by: Alvin Zhao <yzalvin@duck.com>
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Rename loot-core/platform/client/fetch package to connection to match the server side package name. Also to avoid confusion with the native fetch package.
* Update connection/init method to not receive any parameter to so browser and default implementation have the same signature
* Add release notes for PR #6943
* Fix names
* Fix imports
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Fix send not returning error when catchErrors option is enabled and an unknown method error is encountered
* Add release notes for PR #6942
* Fix send to properly propagate errors from the server
* Update release note
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* reorg of storybook docs and add some new components
* releaes notes
* Update meta tags for Actual Budget Design System
* Increase sidebar item font size from 14px to 16px
* Add Tag API
* Add Tag API tests
* Add Release Note for #6746
* Make release note more user-facing
* Remove unnecessary type coercion in tagModel.fromExternal
Since APITagEntity picks all properties from TagEntity, the types are
structurally identical and TypeScript can verify compatibility without
manual coercion.
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Remove duplication of CrossoverData type
Move the CrossoverData type definition to crossover-spreadsheet.tsx and
import it from the Crossover and CrossoverCard files instead of having
duplicate definitions in each file.
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
* [autofix.ci] apply automated fixes
* [autofix.ci] apply automated fixes (attempt 2/3)
---------
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Refactor: extract tooltip components and clean up lint suppressions
Extract CustomTooltip components from CrossoverGraph and NetWorthGraph
to module level to fix unstable nested components lint warnings. Also
consolidate theme file lint rule into oxlintrc.json and add proper
typing to styles object.
* Add release notes for maintenance updates addressing lint violations
* Remove style prop from CustomTooltip to prevent container layout styles from affecting tooltip
Co-authored-by: matiss <matiss@mja.lv>
* Refactor NetWorthGraph component by extracting TrendTooltip and StackedTooltip into separate functions for improved readability and maintainability. Update tooltip props to include necessary parameters for rendering. Clean up unused code and enhance tooltip styling.
* Refactor NetWorthGraph component to streamline tooltip handling
- Removed unnecessary prop passing for translation function in TrendTooltip.
- Adjusted import statements for better clarity and consistency.
- Cleaned up code to enhance readability and maintainability.
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* Add point totals display to all statistics sections in count-points script
* Update funding contributors documentation and add release notes for contributor point counting script
* Refactor contributor points calculation and enhance PR category determination
- Updated point values for PR contributions: reduced points for Features, Enhancements, Bugfix, and Maintenance, and added a new category for Unknown contributions.
- Introduced a new function to retrieve the last commit SHA before a specified date to improve accuracy in reading release notes.
- Modified the getPRCategoryAndPoints function to accept a monthEnd parameter for better context in point assignment.
* Update contributor points values in count-points script to reflect new scoring system
* Add new blog post on funding contributors' next steps
This post outlines plans to expand the contributor compensation system, including broader rewards for project involvement, targeted donations, and a points-based system for feature work. It emphasizes transparency and community feedback in shaping future funding strategies.
* Increase Bugfix points from 2 to 3
* Change points awarded for Features to 2
* Fix Ctrl+Enter losing amount value when adding transaction
Fixes#6901
When using Ctrl+Enter to add a transaction immediately after typing
in the amount field, the value wasn't being committed before the
transaction was saved, resulting in a zero amount.
The fix wraps the add-and-close logic in an afterSave() callback
to ensure field values are committed before adding the transaction.
Added regression tests for both debit and credit fields to verify
the fix works correctly.
* Add release notes for PR #6911
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* feat: Add optional starting date and balance for bank sync accounts
Adds the ability to specify a custom starting date and balance when
linking new bank sync accounts in the Select Linked Accounts modal.
Addresses: https://discord.com/channels/937901803608096828/1402270361625563186
Changes:
- Frontend: Added inline date and amount input fields in the account
linking table for new accounts
- Redux: Extended link account actions to accept startingDate and
startingBalance parameters
- Backend: Updated account linking handlers to pass custom values to
sync logic
- Sync: Modified syncAccount and processBankSyncDownload to use custom
starting date/balance for initial sync transactions
Features:
- Only displays starting options when creating new accounts (not upgrades)
- AmountInput with smart sign detection based on account balance
(negative for credit cards/loans)
- Defaults to 90 days ago for date and 0 for balance
- Mobile-responsive with separate AccountCard layout
- Works across all sync providers: GoCardless, SimpleFIN, Pluggy.ai
The custom starting balance is used directly for the starting balance
transaction, and the custom starting date determines both the sync
start date and the transaction date for the starting balance entry.
* refactor: Extract shared types and components for starting balance inputs
- Create CustomStartingSettings type to replace repeated inline type definitions
- Extract StartingOptionsInput component to consolidate duplicate UI between mobile/desktop views
- Create LinkAccountBasePayload type shared across GoCardless, SimpleFIN, and PluggyAI link functions
- Apply same base type pattern to server-side link account handlers
This simplifies the code introduced for custom starting date/balance when linking bank accounts.
[autofix.ci] apply automated fixes
* allow explicit zero values
* refactor: add type guard for BankSyncError to remove oxlint-disable
- Create isBankSyncError() type guard function with proper type narrowing
- Remove oxlint-disable-next-line comment that suppressed the no-explicit-any rule
- Add JSDoc comments for both isBankSyncError and handleSyncError functions
- Remove redundant type assertion now that type guard narrows correctly
* refactor: address code review nitpicks for SelectLinkedAccountsModal
- Use locale-aware date formatting instead of toISOString()
- Extract isNewAccountOption helper to reduce duplication
- Align AccountCardProps type definition pattern with TableRowProps
* Add placeholder date/balance for already linked accounts
* [autofix.ci] apply automated fixes
* Use StartingBalanceInfo only, and add mobile view
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Fix react-hooks/exhaustive-deps in DateSelect
* Add release notes for PR #6864
* Fix remaining suppressions
* Change category to Maintenance and fix linting issues
Updated category from Enhancements to Maintenance and fixed linting issues related to react-hooks/exhaustive-deps in DateSelect.
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix: corrected date range calculation in BudgetAnalysisCard using calculateTimeRange
* add release note
* fix: ensure correct date formatting in BudgetAnalysisCard for start and end dates
* fix: rename release note file
* Apply tag colors to match YNAB flags
* Update tag colors to match YNAB, add description on import
* Tighten types
* Use custom colors
* Use Actual palette equivalents for tag colors
* Nitpick fixes
* Fix nitpick 'fix'
* Handle YNAB flag tag conflicts
* Handle YNAB flag tag conflicts without creating separate color tags
* Simplify
* Reorganize
* Fix react/exhaustive-deps in Modals
* Fix react/exhaustive-deps in PayeeTable
* Add release notes for PR #6863
* Change category and fix dependency management in PayeeTable
Updated category from 'Enhancements' to 'Maintenance' and fixed dependency management in PayeeTable.
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Remove comma from all instances of month-year strings, e.g., "January 2026" rather than "January, 2026"
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6748
* All updated calls now include `locale` as an argument
* Update dependencies in `useEffect` to include `locale`
* Reorganized new import
* Remove double colon
* Consistent trailing commas
* Include locale in other dependency arrays
* Reorder imports
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6748
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Change color of budget table scrollbar.
* Update budget sidebar to use budget colors.
* Update fontWeight for 'Category' to match rest of table
* Update to use budget background
* Update ExpenseGroup to use budget color
* Update IncomeGroup to use budget color
* Update SidebarCategory colors
Change drag/drop to buttonPrimaryBackground so it will always be visible in any custom theme.
Background to budget color.
* Update SidebarGroup background to budget color
* Update EnvelopeBudgetComponents
Add 'budgetNumberNeutral' to cheveronDown in budgeted field instead of using default bare button text incases where bare button is set to normal button text and normal button is inverted. remove mobile color variable for shadow
* Update BudgetTotals.tsx
Use tableHeaderText for header.
* Update BudgetSummary.tsx
Use budget colors
* Update MonthPicker.tsx
change selected months at top from tableBorderHover color to buttonPrimaryBackground.
* [autofix.ci] apply automated fixes
* Update EnvelopeBudgetComponents.tsx
* Update BudgetTotals.tsx
revert
* Update SidebarCategory.tsx
* Update TrackingBudgetComponents to use budget colors
* [autofix.ci] apply automated fixes
* Update BudgetSummary to use budget colors
* Update BudgetTotal.tsx
* Update ExpenseProgress.tsx
* Update IncomeProgress.tsx
* Update Saved.tsx
* Use consistent color variables on budget pages.
* Update IncomeProgress.tsx
* Update ExpenseProgress.tsx
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6820
* Update EnvelopeBudgetComponents
Budget total header to follow current/other month style.
* Update EnvelopeBudgetComponents.tsx
* [autofix.ci] apply automated fixes
* Update EnvelopeBudgetComponents.tsx
* Update EnvelopeBudgetComponents.tsx
* [autofix.ci] apply automated fixes
* Update EnvelopeBudgetComponents.tsx
* Revert EnvelopeBudgetComponents.tsx
* [autofix.ci] apply automated fixes
* Update EnvelopeBudgetComponents.tsx
* Update EnvelopeBudgetComponents.tsx
* Update EnvelopeBudgetComponents.tsx
* Revert again :) EnvelopeBudgetComponents.tsx
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Include scheduled transactions in nYNAB imports
* Remove logs and restore schedule name from transaction memo
* Simplify rule actions
* Create schedules with unique names
* Set the note rather than append
* Update ynab5 demo budget and e2e test
* fix(i18n): respect browser preferred languages when supported
Instead of relying on the first browser language, the application now
iterates through navigator.languages and selects the first supported
locale, with a fallback to English.
* chore: add the release notes related file
* fix(i18n): check region locales support before falling back to base locale
* fix(i18n): make the unit test aligned with the region locales checking
* Improve bug report template with better structure and requirements
* Fix: Remove empty value fields from textarea inputs in bug report template
* Add release notes for PR #6784
* Update 6784.md
* Update bug report template to request a screenshot of the import screen along with a redacted file version for better issue resolution.
* Update bug report template for import issues
Clarified instructions for reporting import issues.
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Make arithmetic.ts strict TypeScript compliant
- Add type definitions for ParserState, Operator, OperatorNode, and AstNode
- Add explicit type annotations to all function parameters
- Fix null/undefined handling in parsePrimary function
- Remove type assertion in makeOperatorParser by using explicit Operator type
- Handle null return from currencyToAmount function
- All functions now have proper return type annotations
* Add test for ignoring leftover characters in evalArithmetic function
* docs: add ANZ Plus Bank to community repos
Added ANZ Plus Bank to the Community Repos page.
Link(s): https://github.com/spydisec/PDFtoOFX/
Short summary: Convert ANZ Plus bank statement PDFs to OFX format for seamless import into Actual Budget and other personal finance applications.
Placement: https://actualbudget.org/docs/community-repos/
* Update packages/docs/docs/community-repos.md
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Fix typo in ANZ Plus bank converter description
* chore: update docs spelling allowlist
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Initial plan
* Add clock-drift error handling to sync flow
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Add release notes for PR #6789
* Refactor error handling in sync flow
- Extracted error handling logic into a separate function for better readability and maintainability.
- Updated the receiveMessages and _sendMessages functions to utilize the new errorHandler.
- Removed redundant error handling code from the _sendMessages function.
- Enhanced error handling for SyncError and ClockDriftError to emit specific events.
* Enhance error handling in receiveMessages function
- Added try-catch block to handle Timestamp.ClockDriftError specifically.
- Emitted a sync error event for clock-drift errors to improve synchronization feedback.
- Maintained existing functionality while improving error reporting.
* Update authorship in release notes and refine clock-drift error messaging for clarity
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* start to a storybook
* release notes
* commit the release notes
* add test:web back
* adding some scripts to the main package for storybook
* styled it up a bit
* remove unneeded icon
* lint
* remove needless comment
* moving clarifying comment
* fast failing
* feedback
* removing unneeded config
* Fix missing bottom navigation bar on mobile reports page
Update route pattern from /reports to /reports/* to match nested routes
* Release notes
* Add release notes for version 6803
* Refactor reports route to include dashboardId parameter
* Initial plan
* Add test case for apostrophe-dot format bug
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Fix: Support keyboard apostrophe (U+0027) in arithmetic parser for apostrophe-dot format
The arithmetic parser was only recognizing the typographic apostrophe (U+2019)
that Intl.NumberFormat outputs, but not the regular apostrophe (U+0027) that
users type on their keyboards. This caused amounts like "12'345.67" to be
truncated to "12" when users typed them.
The fix adds U+0027 to the regex character class in arithmetic.ts so both
apostrophe characters are accepted.
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Add explicit character code verification to apostrophe-dot test
Use escape sequences (\u0027 and \u2019) to ensure the test explicitly
uses the correct apostrophe characters, and add assertions to verify
the character codes are as expected.
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Fix lint
* Add comprehensive tests for apostrophe-dot format in arithmetic.test.ts
Added three new test cases to verify both apostrophe types work correctly:
1. Tests keyboard apostrophe (U+0027) with explicit character code verification
2. Tests typographic apostrophe (U+2019) with explicit character code verification
3. Tests arithmetic operations with both apostrophe types
This addresses the feedback to add tests for the new logic in arithmetic.ts.
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* [autofix.ci] apply automated fixes
* Add release notes for PR #6795
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Update BudgetAnalysisGraph.tsx
Use reportsGray for Balance.
* Fix Budget Analysis Graph balance color variable
Use reportsGray instead of numberNeutral for balance points and line.
* Fix schedule transaction amount color on mobile
Change schedule amount color from pageText to pageTextSubdued to match the label color, consistent with desktop version.
Fixes#6781
* Enhance Budget Analysis report UI and functionality
- Improve chart colors to align with Cash Flow report style
- Streamline report view by removing legend items
- Introduce a quick select option for 1 month in the header
- Implement dynamic interval switching based on date range
This update aims to provide a more cohesive and user-friendly experience in the Budget Analysis report.
* Update snapshot images for account page tests and fix color styling in transaction and schedule list items
- Updated snapshot images for account page tests to reflect recent UI changes.
- Adjusted color styling for transaction amounts to ensure consistency with the overall theme.
- Changed schedule amount color back to match the primary text color for better visibility.
* Add Budget Analysis report with full implementation
Co-authored-by: tabedzki <35670232+tabedzki@users.noreply.github.com>
* Add preset time ranges, intervals, bar chart, hide balance, and display controls
Co-authored-by: tabedzki <35670232+tabedzki@users.noreply.github.com>
* Fix duplicate function declaration syntax error in budget-analysis-spreadsheet.ts
Co-authored-by: tabedzki <35670232+tabedzki@users.noreply.github.com>
* Fix floating point precision error in daily/weekly intervals and replace interval button with dropdown
Co-authored-by: tabedzki <35670232+tabedzki@users.noreply.github.com>
* Make card always display monthly data and match report's chart type
Co-authored-by: tabedzki <35670232+tabedzki@users.noreply.github.com>
* fix: adjust widget placement and presentation
* fix: adjusted the dot presentation
* feat: added svg for line chart/barchart
* fix: added one month to the report
* added the upcoming release notes
* amended the upcoming release notes
* fix: removed unused variables
* formatted using prettier --write
* [autofix.ci] apply automated fixes
* feat: added new feature to the Reports Page in the test budget
* fix: amended the reports.test.ts file to expect Budget Analysis
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6137
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6137
* revert: removed the inclusion of the Budget Analysis tool from the test file
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6137
* fix: changed the display to always be monthly since budgets are monthly; removed the 1month view
* [autofix.ci] apply automated fixes
* [autofix.ci] apply automated fixes (attempt 2/3)
* fix: removed comment
* feat: added experimental feature flag for Budget Analysis tool
* feat: Switched option to use SVG Icons instead of words to shorten horizontal layout
* Removed interval possibilities and removed unnecessary compact variable as indicated by CodeRabbit
* Update packages/desktop-client/src/components/reports/reports/BudgetAnalysisCard.tsx
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Added basic documentation for Budget Analysis Report
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6137
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6137
* fix: added budget-analysis doc to sidebar
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6137
* feat(reports): improve Budget Analysis report UI and behavior
- Update chart colors to match Cash Flow report style
(Budgeted: blue, Balance: pageTextLight)
- Remove legend items from report view for cleaner UI
- Add 1 month quick select option to header
- Pass isConcise prop to BudgetAnalysisGraph for proper date formatting
- Add dynamic daily/monthly interval switching based on date range
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6137
* feat(reports): refactor BudgetAnalysisGraph and improve isConcise calculation according to Rabbit AI
* feat(reports): add translation support for Budget Analysis graph labels
* feat(reports): centralize translation for Budget Analysis graph labels
* feat: use the budget values directly from the budget spreadsheet/server
* feat: enhance budget analysis with overspending adjustments and detailed reporting
* style: format code for better readability in BudgetAnalysis and budget-analysis-spreadsheet components
* refactor: remove unused variables
* docs: added in the image to the docs
* fix: reimplement support for conditionsOp
* [autofix.ci] apply automated fixes
* style: simplify budget analysis labels for clarity
* fix: add the on copy function
* feat: tooltip improvements
* feat: enhance budget analysis to track overspending adjustments across months
* fix: removed the absolute value for spent
* feat: update the charts to look closer to the CashFlow report
* fix: correct financial formatting for totalSpent in BudgetAnalysis
* feat: add filterExclude prop to Header and BudgetAnalysis for improved filtering options
* feat: implement privacy mode for Y-axis values in BudgetAnalysisGraph
* feat: change default graph type to Bar in BudgetAnalysis
* feat: remove commented-out filter button code in Header component
* feat: remove commented-out code for filter exclusion in Header component
* fix: update the feedback link to the dedicated issue
* refactor: financial display components to use FinancialText for consistency in Budget Analysis reports
* fix: update the card to also start as bar graph
* docs: update Budget Analysis report to include category filtering information
* style: refactor imports and whitespace
* refactor: simplify inline content structure in BudgetAnalysis component
* [autofix.ci] apply automated fixes
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6137
* fix: removed color descriptors from the chart
* fix: update color themes for Budget Analysis to use custom theme definitions
* [autofix.ci] apply automated fixes
* feat: update Budget Analysis merge md file
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6137
* fix: update budget analysis report image
* fix: white space adjustment in descriptor
* [autofix.ci] apply automated fixes
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* use old budget page colours
* running balance
* schedule indicator
* mobile to budget
* note
* template indicator due should match underfunded
* coderabbit
* mobile to budget neutral zero
* matiss feedback
* mobile account balance
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6764
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Add budget color variables to theme
* Add isPositive check for budget amount styling
* Add budget number constants for positive, zero, and negative
* Add budget status constants for positive, zero, and negative
* Add budget number constants for positive, zero, and negative
* Update midnight.ts
* Create 6754.md
Add the ability to specify expected monthly contributions to the
crossover report. This will allow users to estimate the growth of their
investments more accurately instead of treating all account growth as
exponential investment returns. When the checkbox is unclicked, the
automatically calculated historical return value will be used. When the
checkbox is clicked, it will display two input fields. One for expected
investment growth, and one for expected monthly contributions to your
retirement accounts.
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
* Add 'Shades of Gray (light)' theme to catalog
* Update color format in customThemeCatalog.json
* [autofix.ci] apply automated fixes
* Add release notes for light custom theme enhancement
🎨 Light custom theme featuring shades of gray and a few colors.
* Reorder color values in customThemeCatalog.json
* Change color value
Updated a color value in the custom theme catalog.
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Fix reports to correctly render categories with identical names
Use category id instead of name as the data key for chart lookups to prevent
collisions when multiple categories share the same display name.
* Enhance CustomTooltip in LineGraph and StackedBarGraph to utilize legend data for improved display names. This change introduces a new LegendEntity type and updates the tooltip rendering logic to map data keys to their corresponding names, ensuring clarity when displaying chart data.
* Enhance Average Goal Template to allow adjusting the budgetted amount from the average by a percent or fixed amount
* fix typos
* ensure check is for undefined, so zero doesn't cause edge cases
* typo in enhancement message
* scale by cents for fixed amount, fixup tests for this as well
* Add support for fixed values in Schedule template
* [autofix.ci] apply automated fixes
* Changed to 'fixed' from 'amount'. Added unparse logic for Average, also fixed Schedule unparse
* move to generic for syntax from specific number
* consider currency preferences when calculating fixed modifications
* lint
* [autofix.ci] apply automated fixes
* timeframe -> period
* percentage -> value
* pass currency for calculation
* lint
* import from proper local dir
* [autofix.ci] apply automated fixes
* script block around {number} to prevent mdx conflict
* match order of ops between schedule and average for percent adjustment
* diversify example
* Link to schedule>adjustments from average
* Removed example column in favor of extra context
Slight rewording to avoid 'average' overload
* rabbit nitpicks
* number
* period
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
Change the "Switch budget file" menu option on mobile to navigate back
to the config/budget selection page instead of opening a modal. This
makes the behavior consistent with the "Switch file" button in settings.
Remove the now-unused BudgetFileSelectionModal component.
* Add new theme 'Theme from 1970' to customThemeCatalog
* Add release notes for 1970-inspired light theme
Added release notes for a new custom light theme inspired by 1970 colors.
* Replace theme screenshots with color palette preview
- Replace screenshot images in theme installer with 3x2 color palette grid
- Add colors array to catalog themes in customThemeCatalog.json
- Update CatalogTheme type to include optional colors property
- Remove getThemeScreenshotUrl function
- Extract ColorPalette component to separate file
- Update documentation to reflect color palette instead of screenshots
- Update tests to verify color palettes instead of images
- Extract actual theme colors from GitHub repositories
* Update ColorPalette component to use data-swatch attribute for color swatches in ThemeInstaller tests
* Update packages/desktop-client/src/data/customThemeCatalog.json
Co-authored-by: Michael Clark <5285928+MikesGlitch@users.noreply.github.com>
* Update color palettes for Simple Dark and Okabe Ito themes
Co-authored-by: matiss <matiss@mja.lv>
---------
Co-authored-by: Michael Clark <5285928+MikesGlitch@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* Fix AuthSettings - hide if no server configured and show warning if offline
* Add release notes for auth settings fix
* Refactor AuthSettings component to always display OpenID label hint and remove offline condition check in tests
* Upgrade oxfmt/oxlint and migrate import sorting to oxfmt
Upgrade oxfmt from 0.22.0 to 0.26.0 and oxlint from 1.38.0 to 1.41.0.
Move import sorting configuration from oxlint (perfectionist/sort-imports)
to oxfmt's new experimentalSortImports feature, which provides native
import sorting support in the formatter.
* Add release notes for maintenance updates including oxlint and oxfmt upgrades
* Fix accessibility issues: use semantic HTML and correct tab indices
- Replace View with semantic h1 in ModalHeader
- Fix tabIndex from 1 to 0 in Menu component
- Remove disabled oxlint accessibility rules
- Update components to use proper semantic HTML elements
* Refactor button elements to semantic HTML in Autocomplete and CategoryAutocomplete components
- Replace button elements with div/View while maintaining role="button" for accessibility.
- Update styles and props accordingly to ensure consistent behavior.
- Adjust onClick types in Item and SecondaryItem components for better type safety.
* Add release notes for upcoming maintenance updates addressing various accessibility issues
* Refactor autocomplete components to improve text alignment and button semantics
- Added textAlign: 'left' style to AccountItem and PayeeItem for consistent text alignment.
- Removed type="button" from CategoryItem to streamline button semantics.
- Updated ItemContent to use the Button component instead of a button element, enhancing accessibility and consistency.
* Refactor budget and report components to improve text alignment
- Removed font: 'inherit' style from EnvelopeBudgetComponents and TrackingBudgetComponents for cleaner styling.
- Updated ActionableGridListItem and ReportCard components to replace font: 'inherit' with textAlign: 'left' for consistent text alignment.
* Update ActionableGridListItem to include font inheritance for improved styling consistency
* Refactor button elements to use the Button component for consistency and improved semantics
- Updated various components (EnvelopeBudgetComponents, IncomeCategoryMonth, CategoryMonth, ActionableGridListItem, ReportCard, DesktopLinkedNotes) to replace native button elements with the custom Button component.
- Adjusted styles and event handlers to align with the new Button implementation, ensuring consistent behavior and accessibility across the application.
* Update Button and ActionableGridListItem styles for consistency
- Set a fixed borderRadius of 4 for the Button component, ensuring uniformity across variants.
- Adjusted ActionableGridListItem to have a borderRadius of 0 for a cleaner design.
* Update CategoryAutocomplete to include button type attribute for improved semantics
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6679
* Update VRT screenshot for Payees search functionality
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Initial plan
* Fix mobile Calendar fatal error by correcting height constraint
The Virtualizer component in TransactionList requires its parent to have a defined height. Changed the View wrapper from height: '100%' to flex: 1 to properly distribute space within the flex container, accounting for the chevron button.
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Add DisplayPayeeProvider to fix mobile Calendar error
The TransactionListItem component uses useDisplayPayee hook which requires DisplayPayeeProvider context. Wrapped TransactionListMobile with DisplayPayeeProvider to fix "useDisplayPayee must be used within a DisplayPayeeContextProvider" error on mobile.
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Change flex to height for View component
* Add release notes for PR #6698
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Update customThemeCatalog.json
Add Simple Dark and Okabe Ito themes
* Add Simple Dark and Okabe Ito themes to theme catalog
* Update customThemeCatalog.json
* Fix flaky mobile payees VRT test by waiting for navbar animation to complete
Add wait timeout after dragNavbarDown() to ensure react-spring animation finishes before screenshots are taken.
* Add release notes for reducing payees e2e test flakiness
* Fix release note formatting: use sentence case and add period
Co-authored-by: matiss <matiss@mja.lv>
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* Refactor theme catalog fetching to use custom hook
- Move catalog fetching logic from ThemeInstaller to useThemeCatalog hook
- Fetch catalog asynchronously from GitHub instead of direct import
- Update tests to mock useThemeCatalog hook for faster test execution
- Remove catalog validation and translation dependencies from hook
* Remove redundant visibility checks for 'Demo Theme' button in ThemeInstaller tests and add assertion to verify presence of images.
* Refactor ThemeInstaller component to improve error handling and loading state display
- Change conditional rendering for catalog error to use ternary operator for clarity
- Simplify loading state display logic within the theme catalog view
- Ensure consistent styling and structure for theme items in the catalog
* Initialize loading state in useThemeCatalog hook to true
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Apply import sorting with perfectionist/sort-named-imports rule
- Add perfectionist/sort-named-imports oxlint rule
- Sort named imports: value imports before type imports
- Update component-library and desktop-client files to match new rule
* Add release notes for linting updates on named imports
* Add custom themes feature with GitHub installation support
- Add ThemeInstaller component for installing themes from GitHub
- Implement custom theme validation and CSS parsing
- Add support for installed custom themes in preferences
- Add CustomThemeStyle component with CSS validation
- Update theme system to support custom overlay backgrounds
- Add comprehensive tests for theme installation and validation
- Add documentation and release notes for custom themes feature
* Update custom theme catalog: remove several themes and add 'Miami Beach' from a new repository.
* Enhance CSS validation in custom themes
- Refactor `validatePropertyValue` to implement an allowlist approach for CSS property values, rejecting complex constructs and functions except for rgb/rgba/hsl/hsla.
- Add comprehensive tests for various invalid CSS scenarios, including function calls and at-rules.
- Improve error messages for better clarity on validation failures.
- Ensure property name validation checks for format and allowed characters.
* Update custom theme catalog: rename theme from 'Miami Beach' to 'Shades of Coffee'.
* Remove 'forceReload' feature flag and related code from the application settings and feature flag definitions.
* Enhance ThemeInstaller component to support installed themes
- Add `installedTheme` prop to `ThemeInstaller` for managing custom themes.
- Implement logic to populate the text box with installed custom theme CSS when reopening.
- Update tests to verify behavior for installed themes with and without repositories.
- Improve CSS validation to allow additional CSS keywords and ensure proper structure.
* fix: disable oneOf and notOneOf operations for Notes filter
The Notes field is a free-text field and should not support "one of" /
"not one of" filter operations, as these require predefined values.
Attempting to use these operations with the Notes filter caused the app
to crash with a TypeError.
This change:
- Adds 'oneOf' and 'notOneOf' to disallowedOps for the notes field
- Updates the TypeScript type definitions to reflect this constraint
- Updates existing tests to use imported_payee field for oneOf tests
- Adds unit tests for the isValidOp and getValidOps functions
Fixes#6325
Signed-off-by: majiayu000 <1835304752@qq.com>
* move note
---------
Signed-off-by: majiayu000 <1835304752@qq.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* add session token authentication to API init()
Allow users to authenticate using a session token directly instead of
username/password when initializing the API. This is useful for
scenarios where a token has already been obtained through other means.
Changes:
- Refactor InitConfig to use union types for type-safe auth method selection
- Add sessionToken option that validates token on init
- Use TypeScript `never` types to make auth methods mutually exclusive
* add release notes for session token authentication
* Update color palette with old color values
* Update color palette with new values
* Replace old color imports with old color definitions
* Update color exports to use consistent casing
Done in bulk in MS-Word
* Fix export statements for color constants
* Clean up palette.ts by removing old import comment
Removed commented-out import statement for old colors.
* Add oldColor hex color definitions to palette.ts
Copy hex color definitions from colors.ts into palette.ts.
* Delete packages/desktop-client/src/style/colors.ts
no longer needed
* Disable colors export due to file deletion
* [autofix.ci] apply automated fixes
* Remove restricted import comment from index.ts
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Update inter-ui to latest npm package: ^4.1.1
* chore: migrate from inter-ui to @fontsource-variable/inter
- Replace inter-ui v3.19.3 with @fontsource-variable/inter v5.2.8
- Import variable font CSS directly via @import statements
- Update font-family declarations to use 'Inter Variable' to match Fontsource naming
- Simplifies path resolution and removes custom SCSS overrides
* Add release notes
* Enable Inter font features
Add ss04 to styles.tnum
Remove font feature settings and always apply in tnum style
Always enable alternate digits (ss01) and slashed zero (zero) font features
instead of making them user-configurable preferences.
* Add font feature settings to mobile financial amounts
Apply styles.tnum to mobile components displaying financial amounts
to enable OpenType features (tnum, ss01, ss04) for proper number styling:
- TransactionListItem: transaction amounts and running balance
- BudgetTable: header totals, ToBudget, and Saved amounts
- ExpenseGroupListItem: expense group totals
- BudgetCell, SpentCell, BalanceCell: category amounts
- IncomeGroup: income group amounts
- SchedulesListItem: schedule amounts
This ensures consistent digit rendering with serifs on "1" and open
digit forms across all mobile transaction, budget, and schedule views.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6436
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6436
* revert VRT changes
* remove lint line
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6436
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6436
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* fix(privacy): hide currency symbols in redacted overlay
Add RedactedContent component that uses useLayoutEffect to walk the DOM
and replace non-alphanumeric characters (like currency symbols) with spaces.
This ensures characters not rendered by Redacted Script font are hidden,
regardless of how deeply nested they are in the component tree.
* refactor: simplify RedactedContent text node processing loop
* lint: patch some no-empty-function violations
* docs: update ESLint rules and remove unused loadOwner function in UserAccess component
* refactor: remove getRemoteFile function and associated method from budget file handlers
* chore: disable docstring checks in coderabbit configuration
* Update linting rules and replace @ts-ignore with @ts-expect-error
* Add release notes for PR #6636
* Fix TypeScript linting issue by adding @ts-ignore for electron types in server start message
* Change category to Maintenance and update linting rules
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Fix transactions table payee schedule icon not showing if linked schedule has a different account configured
* [autofix.ci] apply automated fixes
* Move SchedulesProvider higher in component tree
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* fix: skip schedule prompt for transactions already linked to schedule
When editing a future-dated transaction on mobile that is already linked
to a schedule, the app was incorrectly showing the "convert to schedule"
prompt. This was confusing since the transaction was already associated
with a schedule.
This change adds a check for `unserializedTransaction.schedule` to skip
showing the schedule prompt if the transaction is already linked to a
schedule.
Fixes#6357
Signed-off-by: majiayu000 <1835304752@qq.com>
* fix: resolve build and lint issues in TransactionEdit.tsx
* docs: add release notes for PR #6569
* chore: remove duplicate release note file
Signed-off-by: majiayu000 <1835304752@qq.com>
* chore: rename release note file to match PR number
Signed-off-by: majiayu000 <1835304752@qq.com>
* fix: apply schedule prompt fix to desktop version
Signed-off-by: majiayu000 <1835304752@qq.com>
---------
Signed-off-by: majiayu000 <1835304752@qq.com>
* Add unfiltered median projection type to crossover report
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
* Add a new 'mean' projection type to crossover report
Some people may want to use the average monthly expenses rather than
median expenses.
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
* Remove 'linear trend' from crossover report
The linear projection type almost never provides any useful information
for projecting future expenses. For example, if my expenses have been
declining for the past several months, that doesn't mean that they will
continue to decline until they reach 0 in retirement. It's way too easy
to receive a nonsense projection with the linear projection type. Just
remove it.
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
* Add release notes for crossover point projections
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
* [autofix.ci] apply automated fixes
---------
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Add blog post for Actual Budget Wrapped 2025
* Add release notes for PR #6580
* Delete upcoming-release-notes/6580.md
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Small fix
* Add release notes for PR #6610
* Apply suggestions from code review
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* review
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* Added Global Synced Prefs
* [autofix.ci] apply automated fixes
* Add release notes for PR #6234
* typecheck
* lint fix
* Refactor global synced preferences to server preferences
- Removed global synced preferences implementation and related files.
- Introduced server preferences with a new slice and hooks for managing user settings.
- Updated components and hooks to utilize server preferences instead of global synced preferences.
- Adjusted Redux store and mock configurations to reflect the changes.
- Enhanced user settings consistency across devices with the new server preferences structure.
* Implement server preferences for feature flags and enhance admin permissions
- Updated the Experimental component to conditionally display based on user permissions and login method.
- Refactored feature flag handling to use 'flags.plugins' instead of 'plugins'.
- Introduced server-side checks to restrict access to server preferences for admin users only.
- Added comprehensive tests for server preferences management, ensuring proper handling of user roles and preferences.
* Enhance error handling in saveServerPrefs thunk
- Updated the saveServerPrefs async thunk to handle potential errors from the server response.
- Added a check for the presence of an error in the result and return it accordingly.
- Ensured that preferences are still dispatched to the store upon successful save.
* Feedback: strict "flags.plugins" typing
* Feedback: move state slice
* Feedback: localstorage pref
* Feedback: move serverPrefsSlide into prefsSlice
* Refactor: Remove duplicate import of PostError in app.ts
* Rename serverPrefs state slice property to server (#6596)
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com>
* Add matching light tints to color picker
* Update ColorPicker light colors
* Update light colors to color wheel
* Update P.10
* Update light theme tag colors
* Create 6396.md Add light tints to tag color picker.
* Update development.ts to match light.ts
Because the Code bunny wanted them to match.
* Update palette.ts
* Update development.ts
* Update light.ts
* Update ColorPicker.tsx
Moved light colors under original dark colors.
* [autofix.ci] apply automated fixes
* Update ColorPicker.tsx
Remove comment.
* Update colors.ts
* Update useTagCSS.ts
* [autofix.ci] apply automated fixes
* Update useTagCSS.ts
* Adjust color mix percentages and add !important to text
* [autofix.ci] apply automated fixes
* Refactor color mix logic in useTagCSS hook
* Change noteTagBackgroundHover color back to purple150
* Remove purple75 from palette
Remove unused purple75 color definition. No longer needed.
* Change noteTagBackgroundHover back to color to purple150
* [autofix.ci] apply automated fixes
* Modify color mixing logic in useTagCSS hook
updated the percentage for the color-mix function - light theme. Added text comment for later reference.
* [autofix.ci] apply automated fixes
* Add release notes for tag color picker enhancements
* [autofix.ci] apply automated fixes
* Add purple125 color to palette
* Update color value for purple tint in ColorPicker
* Change noteTagDefault color to purple125
* Change noteTagDefault color to purple125
* Fix syntax for purple125 color definition
* Update noteTagBackground color to purple125
* Update noteTagBackground color to purple125
* Delete upcoming-release-notes/6396.md
#6396 was closed in favor of #6448
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* fix: remove responsive prop from StackedBarGraph to prevent infinite loop
Fixes#6406
The 'responsive' prop on BarChart was conflicting with explicit width/height
props provided by AutoSizer, causing recharts' useElementOffset hook to
trigger an infinite re-render loop. This manifested as React Error #185
(Maximum update depth exceeded) when displaying stacked bar graphs with
many months of data.
Removing the redundant 'responsive' prop resolves the issue since explicit
dimensions are already provided by the Container component.
* docs: add release notes for #6406
* [autofix.ci] apply automated fixes
---------
Co-authored-by: Salva <spenamedina@Salvas-MacBook-Pro.local>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Add custom checks to CodeRabbit configuration
- Add settings check to evaluate new setting toggles against core design principles
- Add linting check to prevent oxlint-disable lines
- Add typecheck check to prevent @ts-strict-ignore in new components/utilities
* Add release notes for custom checks in CodeRabbit configuration
* Refactor custom checks in CodeRabbit configuration for clarity and consistency
- Consolidate custom checks under a single list format for better readability
- Maintain existing checks for settings, linting, and typecheck with unchanged instructions
* fix: move saved filters to end of dropdown with separator
- Reorganized filter menu items to place 'saved filters' at the end
- Added separator before 'saved filters' to distinguish from regular filters
- Maintained alphabetical sorting for regular filter options
Fixes#6535
* docs: add release notes
* [autofix.ci] apply automated fixes
* fixing typos
* fix: use Menu.line for proper separator rendering
* refactor: remove duplication by extracting saved filter from array
* [autofix.ci] apply automated fixes
---------
Co-authored-by: Salva <spenamedina@Salvas-MacBook-Pro.local>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Fix iOS keyboard suddenly hiding while editing budget amounts
The react-aria-components Buttons calls the onHoverStart even if there
is no fine pointing device attached to the client (iOS 26+), causing the
amount input to loose its focus.
This commits checks if there is any input with focus before auto focus
the menu Container.
* [autofix.ci] apply automated fixes
* Fix menu aria pattern by making excluding menu buttons from tab order
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Refactor keyboard shortcuts in KeyboardShortcutModal
Updated keyboard shortcuts for various actions in the KeyboardShortcutModal component. Changed shortcut names and IDs for better clarity and organization.
* Update keyboard shortcuts modal text from 'General' to 'Global'
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6573
* Add release notes for bugfix in KeybordShortcutModal
Update KeybordShortcutModal.tsx to set date for selected transactions and reorganize the list to match documentation.
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Add Wallos schedule importer to community repos
Added a new entry for Wallos schedule importer with a brief description.
* Add Wallos to expected words
* Update CodeRabbit configuration with review workflow and labeling
* Add release notes for PR #6582
* Update CodeRabbit configuration to change label descriptions to instructions and modify release notes category from Enhancements to Maintenance.
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Fix LHV bank adapter not being loaded due to filename mismatch
The bank-factory.js loads bank adapters by filtering for files containing
underscores, but lhv-lhvbee22.js used a hyphen. This caused the LHV adapter
to never be loaded, falling back to the generic IntegrationBank handler
which doesn't extract payee names from card transaction remittance info.
Rename lhv-lhvbee22.js to lhv_lhvbee22.js to match the naming convention
used by all other bank adapters.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* Add release notes for PR #6533🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
* [autofix.ci] apply automated fixes
---------
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* fix(web): Close popover on second Escape press when autocomplete options are closed
* [autofix.ci] apply automated fixes
* fix(web): use more accurate approach with isOpen
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Add target income adjustment factor to crossover report
Allow the user to specify an adjustment factor to apply to their target
retirement income. This allows them to be a little more conservative
or aggressive on their retirement goals rather than relying only on the
calculated expense projection.
For example, if you want to spend more in retirement (or are simply more
risk-averse), you could set the target income adjustment to 120%. Or if
you expect some retirement income from a defined-benefit pension and
don't need to rely only on the income sources in your budget, you could
set this to 80% to account for that external income.
Originally discussed at https://github.com/actualbudget/actual/issues/6134#issuecomment-3608247467
Co-authored-by: Claude <noreply@anthropic.com>
* [autofix.ci] apply automated fixes
* Add null check in crossover report
Review finding from PR
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
---------
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
The month filter edit popup was always displaying dates in mm/yyyy format
regardless of user's date format preference. Now respects the configured
date format setting.
Fixes#6341
* fix: prevent renaming category groups to existing names
* fix: prevent category group duplication by ignoring current group in checks
* fix: rename 6498.md to 6499.md to reflect updated content
* Update goal templates documentation for clarity
Add updated images for category and group dropdown. Update docs to reflect actual behavior.
* Add files via upload
* Delete packages/docs/static/img/goal-template/apply-template-group.webp
Remove replaced images
* Refine goal templates documentation
Removed unnecessary note and clarified template behavior.
* Fix formatting and warning notes.
* Fix typos and improve clarity in goal templates
Resolving (some of) the AI bunny's suggestions.
* Delete packages/docs/static/img/goal-template/apply-template-category.webp
* Update note on 'up to' template limits
Clarified the note about category limits for templates using 'up to'.
* lint: clean up unnecessary config and disables
* fix: update package import path in browser preload script
* lint: create custom ESLint rules for rules not in oxlint
- Add object-shorthand-properties rule (replaces object-shorthand)
- Add prefer-const rule (replaces prefer-const)
- Add no-anchor-tag rule (replaces no-restricted-syntax for <a> tags)
- Add no-react-default-import rule (replaces no-restricted-syntax for React.*)
These custom rules are needed because oxlint doesn't support these rules yet.
All rules are properly tested and integrated into the ESLint config.
* refactor: enhance prefer-const rule to track variable reassignments by scope
- Introduced a mapping of scopes to reassigned variable names, improving the accuracy of the prefer-const rule.
- Added helper functions to determine variable scopes and reassignment status.
- Updated logic to check variable reassignments during declaration analysis.
- Adjusted test cases to reflect changes in variable handling.
* fix-nginx-header-collision
Added a note on Cross-Origin Isolation and header collisions for Nginx configuration, including a sample Nginx configuration to prevent header duplication.
* Fix formatting of headers in NGINX documentation
* Add new terms to spelling expectations
* Fix placement of 'COOP' in expect.txt
* Update reverse-proxies.md doc display
* 🔖 (26.1.0)
* Trigger CI
* Remove used release notes
* Add release notes for version 26.1.0
This commit introduces the release notes for version 26.1.0, highlighting notable improvements such as currency display in the budget, mobile schedules functionality, link detection in transaction notes, and an extension of historical data. The release also includes various enhancements, bug fixes, and maintenance updates, acknowledging contributions from multiple developers.
* Update spelling expectations and release notes for version 26.1.0
This commit adds new terms to the spelling expectations file and updates the release notes to reflect changes in the documentation, including formatting improvements for clarity. Notable contributions from various developers are acknowledged.
* Add new terms to spelling expectations file
This commit updates the spelling expectations by adding new terms, enhancing the accuracy of the documentation spell-checking process. The changes include the addition of 'jws' and 'oxc' to the list of expected terms.
* Update release notes for version 26.1.0 to include Flathub availability for Linux users
* Update release notes to reflect Docker tag for version 26.1.0 in documentation
---------
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Initial plan
* Fix crash when switching filter from 'is' to 'one of'
- Add logic to convert single values to arrays when switching to oneOf/notOneOf operators
- Add comprehensive tests for the fix
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Add type assertions to fix TypeScript errors
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Keep first element when switching from 'one of' to 'is', use strict comparison
- When switching from array operators (oneOf/notOneOf) to single-value operators (is/isNot), keep the first element instead of clearing
- Use strict equality operators (=== instead of ==)
- Add comprehensive tests for array-to-single conversion
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Add release notes for PR #6491
* Fix crash due to filter value conversion issue
* Address PR feedback: remove notes test, preserve single values between operators
- Remove test for notes field exclusion (issue #6325 handles notes separately)
- Only clear values when converting FROM arrays, not between single-value operators
- Add test to verify single values are preserved when switching between single-value operators (e.g., 'is' to 'contains')
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Update value handling in updateFilterReducer
Handle value conversion for single-value operators and clear value for certain type switches.
* Refactor value assignment for single-value operators
* Refactor value assignment logic in updateFilterReducer
Simplify the handling of value assignment for single-value operators by consolidating conditions. Ensure proper conversion between arrays and single values while maintaining type integrity.
* Remove redundant array checks in updateFilterReducer tests
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Initial plan
* Add permission checks for budget deletion
- Server-side: Check if user is file owner or admin before allowing deletion
- Client-side: Hide "Delete from all devices" button for non-owners
- Add comprehensive tests for permission checking
- Non-owners see message that only owner can delete from server
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
* Add release notes for PR #6338
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6338
* Fix: Change unauthorized to forbidden in delete-user-file
Co-authored-by: matiss <matiss@mja.lv>
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6338
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6338
* Fix: Update error reason from 'unauthorized' to 'forbidden' in delete-user-file response
* Update VRT screenshot for date filter test case
* [autofix.ci] apply automated fixes
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: MatissJanis <886567+MatissJanis@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: matiss <matiss@mja.lv>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* fix(mobile): close modals after cover overspending action
When covering overspending on mobile, the category selection modal would
remain open with stale data after the cover action completed. This fix
dispatches closeModal() after the cover action to return the user to the
budget view with the updated overspending banner.
Fixes#6487
* fix: rename release notes file to match PR number
* fix(mobile): fix stale overspending amounts in cover modal
Fixes#6487
* Fix date handling for CrossoverCard report. Make consistent with Crossover main report.
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Fix number formatting of intlFormatter with a wrapper to handle -0 edge case (#1253)
* Fix Normalize integer currency values in makeBalanceAmountStyle function based on formatting user prefs (#1253)
* [autofix.ci] apply automated fixes
* Add release notes for budget balancing issue when "Hide decimal places" is enabled
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Add a name to the eslint plugin.
* Add release note.
* Also update the no-restricted-imports patterns in .oxlintrc.json.
The glob library is different from what ESLint uses, so the globs need
a bit of adjustment.
* lint: move actual eslint rules to oxlint and some eslint
* Update ESLint configuration to remove test file patterns from linting
* Add review status configuration to .coderabbit.yaml
* Remove oxlint plugin from ESLint configuration and package dependencies
* Update API test script to include clean step
* Update 6455.md
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update typography rule to disallow curly quotes with auto-fix
- Reverse typography rule to detect and flag curly quotes instead of straight quotes
- Add auto-fixer that converts curly quotes to straight quotes
- Fix auto-fixer to properly escape quotes when they match string delimiters
* Fix quotation marks in error messages and formatting strings across multiple files
- Standardize quotation marks from curly to straight in error messages and string formatting for consistency.
- Update various components and utility files to ensure proper string handling and improve readability.
* Standardize quotation marks across multiple files
- Replace curly quotes with straight quotes in various documentation and code files for consistency and improved readability.
- Update error messages, comments, and documentation to ensure uniformity in string formatting.
* Standardize month formatting across multiple components
- Update month formatting strings from "MMMM 'yy" to "MMMM ''yy" in various components and utility files for consistency.
- Ensure uniformity in how months are displayed throughout the application.
* Refactor typography rule to enhance curly quote handling
- Simplify the error reporting mechanism for curly quotes by creating a shared fix function.
- Update test cases to include various curly quote scenarios for improved coverage.
- Ensure consistent handling of curly quotes in formatting functions across multiple files.
* Refactor typography handling and update tests for curly quotes
- Replace curly quotes with their Unicode equivalents in typography rule and related test cases for consistency.
- Remove unnecessary eslint-disable comments to improve code clarity.
- Ensure proper handling of quotes in arithmetic and utility tests to align with updated typography standards.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6454
* Fix: Correct typo in budget cell notification message
Co-authored-by: matiss <matiss@mja.lv>
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6454
* Temporarily disable i18n string extraction workflow
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
* Update linting configuration and fix related issues
* Fix type coercion for comment ID in check-first-comment.js to ensure proper comparison with summary comment IDs
This change updates the minimum allowed date for transactions from
2000-01-01 to 1995-01-01, allowing users to enter older transaction
dates without crashes. This addresses the date validation bug that
was causing issues with old dates.
- Updated date validation in schema-helpers.ts
- Updated corresponding tests in schema-helpers.test.ts
- Use sticky-pull-request-comment action for better comment management
- Add 👀 reaction to /update-vrt comments for immediate feedback
- Add note about 50-minute duration in VRT comment
* Simplify ESLint config and add oxlint configuration
- Switch from typescript-eslint recommended to base config
- Remove redundant TypeScript-specific rules that are handled by base config
- Add oxlint configuration with appropriate rules
- Simplify globals configuration using globals package
- Add coverage directory to ESLint ignores
- Clean up various TypeScript rule configurations
* Add release notes for PR #6443
* [autofix.ci] apply automated fixes
* Refactor release note generator and update CLI argument parsing
- Adjusted the release note generator to fix string formatting.
- Refactored CLI argument parsing in migrate/cli.ts to use parseSync for improved clarity and consistency.
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Fix schedule upcoming length years off-by-1 calculation
- Replace addYears with addMonths(value * 12) to preserve day precision
- Fixes issue where year-based upcoming schedules always calculated from Jan 1st
- Add test cases for mid-year dates to prevent regression
Fixes#6435
* Fix syntax error in schedules.test.ts and add release notes
* fix(transactions): preserve split categories when merging with imported uncategorized tx; avoid orphaned subtransactions
When merging a split-categorized manual transaction with an uncategorized
imported one, keep the split lines (including categoryId) and avoid leaving
orphaned subtransactions by properly transferring parent_id references.
Fixes#5801.
* docs: add release note for PR #5856
* fix: resolve lint and typecheck errors
- Rename unused variables sub1, sub2 to _sub1, _sub2 to fix lint warnings
- Fix typecheck error by using double type assertion (unknown) in merge.ts
* refactor: optimize subtransaction queries and test db access
Address code review feedback:
- Merge two SQL queries into one using IN clause for better performance
- Use db.first in test to avoid conversion path and match db.all semantics
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* [autofix.ci] apply automated fixes
* refactor: apply code review feedback with stable branch logic
- Revert test to use db.getTransaction (not db.first) to preserve type conversion
- Refactor SQL query to use explicit branches (IN for 2 parents, = for 1, skip for 0)
- This approach is more stable across different SQL drivers
Addresses: #5856 (review feedback from @joel-jeremy)
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
* chore(release-notes): set category to Enhancements and shorten text; fix(merge): use shared deleteTransaction with grouped fetch + batchUpdateTransactions
* resolving lint warnings and recommendation on the test query
* switching to use the getTransaction helper
* corrected is_parent assertion to be true
* updated the PR number
---------
Co-authored-by: Golenspade <2023004079@mails.cust.edu.cn>
Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: fankex <2112325885@qq.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Add conditions for transfer field in dashboard for Calendar card
Adding default filter for calendar dashboard card to remove transfers
* Add release notes for calendar summary card bugfix
I'm not sure how widely-understood the term "nest egg" is,
so use a more general term like "life savings". Also, for
projected future amounts, the tooltip already contains the word
"(projected)" to indicate that this is a future value, so we don't
need the word 'target' here, which I find a bit confusing. See
https://github.com/actualbudget/actual/pull/6384#issuecomment-3649921717
for more discussion.
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
* this is a test
* [autofix.ci] apply automated fixes
* dot reporter for line by line
* [autofix.ci] apply automated fixes
* ok...
* list reporter
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6429
* fix couple of issues
* Revert "Update VRT screenshots"
This reverts commit 0124b13475.
* putting text change back
* release notes
* skipping translations on the desktop app
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Refactor how report dates are handled to more closely match pattern oin CashFlow report. Fixes issues with black screen when selecting certain Live date modes
* Add null handling for allMonths and make date clamping more consistent.
* Remove arbitray limit for at least two montsh to calculate expenses. This allows the chart to work (someone) with one previous month of expenses.
* Fix VRT comment posting for fork PRs
Use workflow_run trigger to post VRT failure comments with elevated permissions, enabling comments on PRs from fork repositories where GITHUB_TOKEN is read-only.
* Update permissions in e2e-vrt-comment workflow to allow read access for actions
* Enhance VRT comment posting in workflow by using environment variables for PR number and artifact URL
- Removed temporary ignores for the docs package.
- Updated linting rules for the docs package to improve code quality.
- Refactored variable declarations from `let` to `const` for better consistency.
- Added a new configuration file for oxlint in the docs directory.
- Made minor formatting adjustments across various components.
* fix: hide merge-and-edit-rule when not creating rule
When 'Automatically rename these payees in the future' is unchecked, no rule is created, so 'Merge and edit rule' should not be offered.
Fixes#6377
* docs: add release note for #6393
* fix: use start:browser for playwright webServer to load correct browser-preload
The playwright webServer was running 'yarn start' which doesn't set
IS_GENERIC_BROWSER, causing Vite to not resolve .browser.js files.
This resulted in browser-preload.js (empty electron stub) being loaded
instead of browser-preload.browser.js, making window.Actual undefined.
Changed to 'yarn start:browser' which properly sets IS_GENERIC_BROWSER=1
via the watch-browser script.
* chore: update Playwright configuration and add blob-report to .gitignore
- Modified Playwright config to use 'yarn start' with the correct working directory for local builds.
- Added 'blob-report' to .gitignore to exclude it from version control.
- Created release notes for running e2e tests against a local build instead of Netlify.
* chore: update transaction test snapshots for split and transfer transactions
- Updated binary snapshots for split and transfer test transactions in the e2e tests.
- Ensured that the latest visual changes are reflected in the test suite for accurate regression testing.
* chore: update transaction test snapshots for split and transfer transactions
- Updated binary snapshots for split and transfer test transactions in the e2e tests to reflect recent changes.
- Ensured visual consistency for accurate regression testing.
* refactor: change test lifecycle hooks from beforeAll/afterAll to beforeEach/afterEach
- Updated test files to use beforeEach and afterEach hooks for better isolation of tests.
- This change ensures that each test starts with a fresh state, improving reliability and reducing side effects across tests.
* chore: update e2e test workflow to disable translation downloads
- Modified the e2e test workflow to include a new input parameter `download-translations` set to 'false' for the setup action.
- This change aims to streamline the testing process by preventing unnecessary translation downloads during the test runs.
* chore: update e2e test snapshots for settings page visuals
- Updated binary snapshots for the settings page in e2e tests to reflect recent visual changes.
- Ensured that the latest visual updates are accurately represented for regression testing.
* fix: safely close page in e2e tests
- Updated all e2e test files to use optional chaining when closing the page, ensuring that the close method is only called if the page is defined.
- This change improves the robustness of the tests by preventing potential errors when the page object is not available.
* feat: trigger VRT updates via /update-vrt comment
- Change vrt-update-generate.yml to trigger on issue_comment with /update-vrt
- Update VRT failure comment to inform users about the /update-vrt command
- Add step to fetch PR details since issue_comment events don't provide them
* fix: update VRT trigger condition to use startsWith for command detection
- Modify the condition in vrt-update-generate.yml to use startsWith instead of contains for the /update-vrt command in PR comments, ensuring more accurate command detection.
* Update useTagCSS.ts light = dark
* Update useTagCSS.ts so all themes use the same color scheme
* [autofix.ci] apply automated fixes
* Improve tag readability in light theme.
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
When using the @actual-app/api package, if authentication failed during
init() (e.g., wrong password, network issue), the error was silently
ignored. This led to confusing 'Could not get remote files' errors later
when calling downloadBudget().
This fix ensures init() properly throws an error when authentication
fails, providing clear feedback like 'Authentication failed: invalid-password'.
Fixes#6320
* Refactor e2e-test workflow to improve Playwright test sharding and report handling
- Restore full shard count (5 shards) for Playwright tests to enhance test coverage and performance
- Re-enable functional desktop app tests with proper xvfb setup
- Simplify Playwright test command structure for better readability
- Refactor VRT blob report merging process with improved artifact handling
- Update Playwright reporter configuration to use blob reporter in CI
- Streamline artifact paths and download/merge operations for better organization
* Remove VRT environment variable from e2e-test workflow to streamline test execution
* Update e2e-test workflow to always upload VRT blob report artifacts, ensuring consistent artifact handling regardless of job cancellation.
* Fix detection of crossover point for low expense months
Always compute the expense projection and calculate the crossover point
based on the projection instead of individual historical expense data
because otherwise a low expense month can incorrectly trigger a false
crossover point detection.
See comment at
https://github.com/actualbudget/actual/issues/6134#issuecomment-3608140098
for more information.
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6371
---------
Signed-off-by: Jonathon Jongsma <jonathon@quotidian.org>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* adding path filters to workflows so they only run when required
* trigger them also when the workflow changes
* adding yarn lock in case packages affect e2e
* release notes
* add the package.json in case we modify the scripts
* Remove API changes from size comparison workflow
* Clarify size impact of package changes in workflow
Updated comments to clarify that certain package changes don't affect the size of the web/api.
* Fix comments for VRT update exclusions
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6364
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6364
* Fix comment formatting in VRT update workflow
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Use personal access token securely for VRT update workflow push
* Update button label from 'Apply budget template' to 'Overwrite budget template' in mobile budget menu modal for consistency with recent changes.
* Update button label from 'Overwrite budget template' to 'Overwrite with template' in mobile budget menu modal for clarity and consistency.
GITHUB_TOKEN doesn't have permission to push to fork branches. Use a PAT stored as ACTIONS_UPDATE_TOKEN instead for:
- VRT update workflow (checkout and push to contributor forks)
- AI-generated release notes (commit files to PR branches)
* Fix lint violations
* Refactor code for clarity and consistency
- Updated various components to improve readability and maintainability, including:
- Changed `while (1)` to `while (true)` for better clarity.
- Simplified conditional checks by removing unnecessary boolean casts.
- Added missing `key` props in mapped elements to ensure proper rendering in lists.
- Adjusted the handling of hidden states in budget components for clearer logic.
- Cleaned up linting rules in `.oxlintrc.json` to streamline configuration.
* Enhance accessibility and linting compliance
- Updated `.oxlintrc.json` to add a warning for `jsx-a11y/no-autofocus` and removed several disabled rules.
- Added `aria-level` attributes to improve semantic structure in `Page.tsx`, `Modal.tsx`, and `ReportCardName.tsx`.
- Replaced `<label>` elements with `<Text>` components in various modals to ensure proper accessibility.
- Added `htmlFor` attributes to labels in `ImportTransactionsModal.tsx` for better form accessibility.
- Disabled specific linting rules inline to address accessibility concerns in `Image.jsx` and `Toggle.tsx`.
* Add new keywords to spelling allowlist
- Updated `.github/actions/docs-spelling/allow/keywords.txt` to include `oxfmt` and `oxlint` for improved spell-checking in documentation and code comments.
* Disable no-autofocus rule in .oxlintrc.json
* Update Trans component usage in MergeUnusedPayeesModal
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Update importing.md
Update to include links to connecting your bank, community projects and added that AB supports CAMT imports.
* Update importing.md
* Update importing.md
* Update importing.md
Added pluggy.ai
* Apply suggestions from code review
Co-authored-by: youngcw <calebyoung94@gmail.com>
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* add tokens to replace in release pipeline for metainfo release dates/versions
* validate the metainfo in pipeline
* install appstream first
* release notes in the metainfo
* release notes for metainfo - testing pipeline
* pipeline works
* brand colors as per flathub recommendation
* picked colours following flathubs recommendations
* contrast
* contrast checked
* updating nightly flow to also work with new metainfo for testing
* replacing manifest info and creating pr
* minor improvements
* release notes
* upgrade action
* Fix lint violations
* Refactor code for clarity and consistency
- Updated various components to improve readability and maintainability, including:
- Changed `while (1)` to `while (true)` for better clarity.
- Simplified conditional checks by removing unnecessary boolean casts.
- Added missing `key` props in mapped elements to ensure proper rendering in lists.
- Adjusted the handling of hidden states in budget components for clearer logic.
- Cleaned up linting rules in `.oxlintrc.json` to streamline configuration.
* Fix unused variable warning in electronApp fixture
* Fix linting comment in fixtures.ts
* Fix English grammar in the repair transactions description. "Check if you have any budget transfers that erroneous contain a category" corrected "erroneous" to "errouneously"
* Add release note 6324.md
* Add link detection in transaction notes
* update release notes
* Fix trailing punctuation from URLs and add space between segments
* rename openFileInExplorer to openInFileManager
* Add ESM loader support and update sync-server modules
* Update TypeScript configuration and fix bank file import filter in sync-server
* Remove deprecated loader and register files, update TypeScript configuration to use ES2021, and add a new script for automatically adding import extensions to JavaScript files.
* Update test script in package.json to include a custom loader and clean up import extensions script by removing unused 'stat' import.
* feat: Add warning for unresolved imports
Co-authored-by: matiss <matiss@mja.lv>
* [autofix.ci] apply automated fixes
* Remove unused 'import/extensions' rule from ESLint configuration
* Refactor import statements in sync-server
- Updated import path for migrations to remove file extension.
- Added ESLint directive to ignore import extension rule for reset-password script.
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* fix(reports): exclude transfers from dashboard summary cards
The income and expense summary cards were incorrectly including transfer transactions, which inflated the displayed values.
Added 'payee.transfer_acct': null filter to the AQL queries to exclude transfers.
Fixes#6258
* Add release notes for PR #6263
* Revert "fix(reports): exclude transfers from dashboard summary cards"
This reverts commit ba9baa5c6d.
* fix(reports): exclude transfers from summary cards in the default dashboard
* Update release notes for PR #6263
* Add mobile schedules pages and fix routing issues
- Add MobileSchedulesPage with list view and search functionality
- Add MobileScheduleEditPage for creating/editing schedules
- Add supporting components: SchedulesList, SchedulesListItem, AddScheduleButton
- Fix MobileNavTabs routing to include /schedules route
- Fix wide view routing: wrap schedule edit route with WideNotSupported
- Update MobileNavTabs to enable schedules navigation
- Add responsive exports for mobile schedules components
* Refactor MobileScheduleEditPage and SchedulesListItem for improved layout and navigation
- Remove modal dispatch for editing rules, replacing it with direct navigation to the rule edit page.
- Update SchedulesListItem to streamline the display of payee and account information using SpaceBetween for better alignment.
- Enhance ScheduleEditForm with responsive design adjustments for narrow widths, ensuring a more flexible layout.
- Replace Account and Payee autocomplete components with a more generic input approach for better reusability.
* Enhance MobileScheduleEditPage and ScheduleEditForm with improved footer and optional callbacks
- Add a footer to MobileScheduleEditPage with a Save button for better user interaction.
- Update ScheduleEditForm to make onSave and onCancel props optional, allowing for more flexible usage.
- Adjust layout and styling for better responsiveness and user experience.
* Improve error message styling in ScheduleEditForm by adding margin for better visibility
* Refactor ScheduleEditForm and MobileScheduleEditPage for improved layout and functionality
- Simplify the structure of ScheduleEditForm by removing unnecessary wrapper elements and enhancing responsiveness.
- Update MobileScheduleEditPage to include padding adjustments for better visual consistency.
- Introduce a footer with Save and Cancel buttons in ScheduleEditModal for improved user interaction.
- Ensure optional callbacks for onSave and onCancel in ScheduleEditForm for greater flexibility.
* Add aria-label for accessibility in PayeeAutocomplete component
- Introduced translation support for the 'Payee' label using useTranslation.
- Enhanced accessibility by adding an aria-label to the input field in PayeeAutocomplete.
* [autofix.ci] apply automated fixes
* Refactor MobileScheduleEditPage and related components for improved functionality and structure
- Simplified the MobileScheduleEditPage by removing unnecessary imports and restructuring state management with the new useScheduleEdit hook.
- Extracted updateScheduleConditions logic into a separate utility file for better reusability and clarity.
- Enhanced ScheduleEditModal to utilize the new form dispatch mechanism, improving state management and error handling.
- Updated ScheduleEditForm to streamline field management and improve overall responsiveness.
* Enhance AccountAutocomplete component with accessibility improvements
- Added aria-label for the input field in AccountAutocomplete using translation support for better accessibility.
* Refactor imports in MobileScheduleEditPage, ScheduleEditModal, and useScheduleEdit for consistency
- Reintroduced the ScheduleEditForm import in MobileScheduleEditPage and ScheduleEditModal for clarity.
- Moved the updateScheduleConditions import in useScheduleEdit to maintain a consistent import structure across components.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6158
* Refactor MobileScheduleEditPage and useScheduleEdit for improved loading state management
- Removed local loading state from MobileScheduleEditPage and integrated it into the useScheduleEdit hook for better state handling.
- Enhanced error handling by displaying a "Schedule not found" message when the schedule is null.
- Streamlined the loading state check in the component to improve user experience.
* Remove unused import of 't' from ScheduleEditModal.tsx
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6158
* Refactor schedule edit dispatch handling in MobileScheduleEditPage and ScheduleEditModal
- Replace formDispatch with a unified dispatch in MobileScheduleEditPage and ScheduleEditModal for handling form errors and transaction switches.
- Update useScheduleEdit hook to remove the formDispatch wrapper, simplifying the dispatch mechanism.
- Change the type of the date field in DiscoverScheduleEntity from ScheduleEntity['_date'] to RecurConfig for better type accuracy.
* Refactor ScheduleEditModal and useScheduleEdit for improved schedule initialization
- Utilize useMemo in ScheduleEditModal to streamline initial schedule creation based on transaction data.
- Introduce useEffectEvent in useScheduleEdit to enhance schedule loading logic on component mount.
- Simplify the handling of initial schedule conditions and actions, improving code readability and maintainability.
* Add mobile schedules functionality with comprehensive tests
- Introduced Mobile Schedules page and navigation integration.
- Created end-to-end tests for various functionalities including visual checks, empty state handling, schedule creation, editing, and search/filter capabilities.
- Added necessary page model classes to support the new features.
- Updated existing components to accommodate new mobile schedules functionality and ensure proper layout and user experience.
- Included visual regression test snapshots for the new features.
* Refactor navigation method in MobileNavigation class for improved readability
- Simplified the goToSchedulesPage method by removing unnecessary await, enhancing code clarity.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6158
* Remove deprecated test for schedule creation and associated visual regression test snapshots
* Add Schedules Page Menu Modal and enhance Mobile Schedules Page
- Introduced SchedulesPageMenuModal to the modals system.
- Updated MobileSchedulesPage to include a button that opens the new Schedules Page Menu.
- Refactored schedule filtering logic to incorporate a local preference for showing completed schedules.
- Added local preference for 'schedules.showCompleted' to manage completed schedule visibility.
- Updated SchedulesTable to utilize the new local preference for completed schedules.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6158
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix(core): handle unicode minus in number parsing
Fixes#6206. Added support for Unicode minus (U+2212) in looselyParseAmount, currencyToAmount, and stringToInteger. Added unit tests.
* Refactor: Improve currency parsing logic
Co-authored-by: matiss <matiss@mja.lv>
* Refactor: Simplify currency parsing logic
Co-authored-by: matiss <matiss@mja.lv>
* [autofix.ci] apply automated fixes
* fix: Handle Unicode minus inside parentheses correctly
Fixed bug where amounts with both parentheses and Unicode minus (e.g.,
(−3.45)) were parsed as null instead of negative numbers. The Unicode minus
is now removed from within parentheses before the parentheses-to-minus
conversion, preventing double minus signs that caused parseFloat to return NaN.
Added test cases for parenthesized amounts containing Unicode minus.
* Add release notes for PR #6247
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* docs: Add comprehensive developer documentation
- Add development-setup.md with environment setup and essential commands
- Add testing.md documenting Lage, Vitest, and Playwright workflows
- Add code-style.md with TypeScript, React, and coding conventions
- Add troubleshooting.md for common development issues
- Enhance contributing/index.md with development workflow section
- Expand project-details/index.md with detailed package descriptions
- Enhance architecture.md with technical details and remove outdated references
- Update AGENTS.md to reflect docs are now part of monorepo
- Fix outdated command examples and Node.js version references
- Update sidebar to include new documentation sections
* fix: Correct link path in code-style.md
* docs: Update documentation references and remove outdated notes
- Clarify that the documentation website is now part of the monorepo in AGENTS.md
- Remove the import organization section from code-style.md to streamline guidelines
- Update project-details/index.md to reflect the current status of the documentation website
* Update release-notes workflow to exclude AGENTS.md from non-docs file checks
* Update release-notes workflow to remove AGENTS.md exclusion and add upcoming release notes for missing information in Agents.md
* Refactor documentation to streamline testing and project structure guidelines
- Removed outdated test commands from AGENTS.md and development-setup.md for clarity.
- Updated code-style.md to correct a formatting issue in the contribution checklist.
- Consolidated package command references in project-details/index.md to focus on essential information.
- Enhanced troubleshooting documentation by removing redundant steps and clarifying solutions.
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6120
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* 🔖 (25.12.0)
* force ci
* Remove used release notes
* add blog post
* fix spelling
* make netlify happy?
* last one
* fix some formatting
* remove icns from allowed spelling to avoid accidental missspellings
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6285
* force ci
* force ci
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6285
* revert flaky vrt. please don't update again...
* make the release dates match
---------
Co-authored-by: youngcw <28542559+youngcw@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Revise reconciliation instructions for clarity
Updated the reconciliation documentation to clarify the process and improve readability.
* Update button text for reconciling action
Changes wording of 'Done reconciling' button to 'Exit reconciling'.
* Modify button text for reconciliation process
Updates button wording based on reconciliation status.
* Update button wording in release notes
* Refine language in reconciliation documentation
Updated wording for clarity and consistency throughout the reconciliation documentation.
* Add files via upload
* Update reconciliation screenshots
* Update reconciliation images for 2025
* Add files via upload
* Clarify exit option in reconciliation process
Added a note about exiting reconciliation without locking transactions.
* Fix cleared transactions total in reconciliation guide
Corrected the cleared transactions total from 324.82 to -82.60 in the reconciliation instructions.
* Update reconciliation.md
* Update reconciliation.md to resolve conflicts
* Add files via upload
* Update reconciliation.md unlocking transactions
* Update 6220.md
* Update 6220.md
* make it easier to download the desktop app artifacts
* release notes
* naming the artifacts *.zip becuase zips are mandatory
* Revert "naming the artifacts *.zip becuase zips are mandatory"
This reverts commit 02f9fcaa69.
* update downloads page table to have less duplication
* color from variable
* add component to exclude for spell check
* adding workflow to docs files for release notes exclusion
* release notes
* cli tool added to the server download list
* Rename button text from 'Done reconciling' to 'Complete Reconciling'
* Change button text from 'Done' to 'Complete'
* Update button text in reconciliation test
* Update button text for reconciliation completion
* Modify reconciliation completion messages
Updated reconciliation messages to provide clearer instructions.
* Change button text from 'Complete Reconciliation' to 'Exit reconciling'
* Fix capitalization in 'Exit Reconciling' text
* [autofix.ci] apply automated fixes
* Update release notes for reconciliation changes
Changes wording for clarity and adds exit option.
* Update release notes with button wording changes
Changes wording for clarity and adds a new exit option.
* Update category and button wording in release notes
Changes the category from 'Changes' to 'Enhancements' and updates button wording.
* Clarify wording for reconciliation exit options
* Update test expectation for reconciled message
* Update test to check for reconciled message
* [autofix.ci] apply automated fixes
* Clean up reconciliation view text
Removed unnecessary line breaks and exit message from the reconciliation view.
* [autofix.ci] apply automated fixes
* Update reconciliation test for improved text matching
* [autofix.ci] apply automated fixes
* Update packages/desktop-client/src/components/accounts/Reconcile.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* [autofix.ci] apply automated fixes
* Change button click from 'Exit reconciling' to 'Lock transactions'
* Enhance release notes for reconciliation button changes
Updates authors and clarifies button wording for reconciliation.
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Exclude test files from build artifacts
- Update crdt tsconfig.dist.json to exclude test files from dist output
- Update desktop-electron tsconfig.dist.json to exclude test files from build output
This prevents test files from being compiled into dist directories and
ensures they won't be picked up by test runners in CI/CD.
* Add release notes for PR #6216
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* update pwa icons to new one
* release notes
* icon
* color update for menu
* icon tiny bit smaller
* favicons as well - why not
* keeping the old icons for reference
* last icon archived
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6204
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Update index.md
New screenshots. Add new settings
* Add files via upload
New screenshots for setting page
* Update index.md
Small adjustments
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6197
* Update index.md
More small adjustments to formatting.
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
- Created ScheduleEditForm component with all form fields, transactions table, and footer buttons
- Moved NoTransactionsMessage component to ScheduleEditForm
- Updated ScheduleEditModal to use the new form component
- Form component is now reusable for mobile schedules page
* Allow category to be added from sidebar group
* [autofix.ci] apply automated fixes
* Small add category adjustments
- Add tooltip on add button hover
- Fix NotesButton padding for proper border radius rendering
- Add ability to disable tooltip pointer events so that the tooltip does not float when the trigger disappears
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6110
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Combine bundle stats comments in PR
* Refactor bundle stats comment generation to use a mapping approach for base and head stats, improving argument parsing and validation in the CI action.
* Enhance size comparison workflow by adding steps to checkout the base branch and set up the environment, ensuring accurate build status checks for pull requests.
* Implement size comparison job in GitHub Actions workflow, replacing the deprecated size-compare.yml. This new job downloads build stats from both the base and head branches, processes the stats files, and generates a combined comment for pull requests, enhancing visibility into bundle size changes.
* Add release notes for bundle size stats update, consolidating workflow and PR comment generation.
* Refactor GitHub Actions workflows by removing the deprecated size comparison job from build.yml and introducing a new size-compare.yml workflow. This new workflow enhances build status checks and ensures accurate reporting of bundle size changes for pull requests.
* chore: update action versions and improve error messages in bundle stats scripts
- Updated GitHub Actions to specific commit versions for `upload-artifact` and `checkout`.
- Enhanced error messages in `bundle-stats-comment.mjs` and `update-bundle-stats-comment.mjs` for better clarity and consistency, replacing standard quotes with typographic quotes.
* fix: standardize error messages in bundle-stats-comment.mjs
- Updated error messages in `bundle-stats-comment.mjs` to remove typographic quotes for consistency and clarity.
* fix: do not clear notes field on action.op change
* [autofix.ci] apply automated fixes
* Update upcoming-release-notes/6046.md
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* feat(currency): add currency support to templates and goals
* fix: linting
* fix: add weekly guard as per coderabbit suggestion
* fix: add decimalPlaces to removeFraction
* test: add tests for JPY
* simplify currency usage in template
I am unable to upload images from my fork. They are here:
[images](https://github.com/Juulz/docs/tree/master/static/img/credit-cards)
Updated Credit Cards:
- Rewrote index.md to explain how Actual treats credit cards
- Split off Paying in Full - Within the Budget and rewrote with
screenies
- Rewrote Carrying debt with screenies
Please add Citi and Citibank to allowed words. Thank you.
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Add Crossover Report
* Fix lint and typecheck
* Use useFormat hook for formatting, make spreadsheet always return cents
* Change defaults to all categories and accounts. Return 0 when no categories selected
* Change error handling to use addNotification
* Detect if crossover has already happened before projecting
* [autofix.ci] apply automated fixes
* lint:fix. Only get first crossoverIdx
* Annualize historical return via compounding, not multiplication
Use effective monthly rate from annual return
Guard against undefined starting balance
* Optional guard in median helper for future-proofing
Use consistent rounding when checking the projected crossover
Avoid O(n^2) lookups when aggregating balances by month
* Add Crossover Report Feature Flag
* Add option to show hidden categories
* Remove estimated return placeholder text since the formatting was unclear
* Initialize defaults when widget meta is absent
* Hidden categories remain in expense totals
* [autofix.ci] apply automated fixes
* Update packages/loot-core/src/types/prefs.ts
Fix merge conflict semi-colon
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Update prefs.ts
Try again to fix merge conflict.
* Fix percentage inputs showing trailing zeros for some numbers
* Fix projection not happening if crossover happens historically but then reverts
* some tweaks for consideration. Remove if undesired
* go back to original math
* Fix change in percentage formatting for CrossoverCard
* Optimize date range calculation and add cleanup to CrossoverCard
Use format utility for years to retire
Replaced hardcoded color with theme token
* [autofix.ci] apply automated fixes
* Try again to standardize display and storage of percentages without repeating decimals
* Add tooltips with descriptions to crossover chart inputs
* Refactor Crossover component to use translation for 'N/A' strings and simplify estimatedReturn assignment
* Refactor Crossover components to improve date range calculations and ensure proper handling of the latest month
* Fix typo in Crossover component: corrected "retirment" to "retirement" in user instructions
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
The current roadmap only contained a subset of the options for setting
up a server. Rather than maintain two copies of the same information (or
preferring one method over the other), I think it's best to simply link
to the relevant section.
* add ctrl/cmd + enter as shortcut to only add single transaction
* note
* add same logic to add button
* add keyboard shortcut
* Update VRT screenshots
Auto-generated by VRT workflow
PR: #6037
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* fix server sync file download when server-files are in .config directory on linux
* extra security
* release notes
* putting it back after testing
* also accounting for directories
* derp
* made Budgeted header to be multiline and increased font minimum font size
* added release note
* Update upcoming-release-notes/5900.md
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: Quan Nguyen <quannm@Quans-MacBook-Pro.local>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* add new desktop app icons for better display on linux, and to prepare us for mac liquid glass
* png for windows
* release notes
* put old icons in archived folder
* Fix to show the notification for updating service worker
* cleanup
* Add release notes for PR #5963
* trigger pipeline
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Relates to https://github.com/actualbudget/actual/pull/5925
Documentation improvements:
* Added `balance` as a supported template variable, describing its type
and value in the template variables table.
* Updated spacing to fix some markdown lints.
* Adds balance variable to rule templates
Enables access to the account balance within rule templates. This allows for more complex rule creation based on the current account balance.
Calculates the account balance up to the transaction being processed, including transactions on the same date with lower sort order.
Handles cases where the balance is undefined gracefully, defaulting to 0 to prevent errors.
## AI disclaimer
This PR contains code that was partially or fully generated by AI and may contain errors. All suggestions for improvement are welcome.
* Add release notes
* indexed sql params not supported
* [autofix.ci] apply automated fixes
* Skip parent transactions of splits
* Uses aql for account balance
Updates transaction rule preparation to use aql instead of sql calculating it from past transactions.
The balance is defaulted to 0 if no account is set.
Refactor account balance calculation to build a proper query with date and sort_order filters
* Add block scoping to switch cases and ensure correct fallthrough handling in Action type conversions
* Corrects transaction rule sorting order
Reverses the sort order comparison in transaction rules
to ensure correct identification of prior transactions with the same date.
This ensures that the correct balance is used when
calculating balance-based rule conditions.
fixup! Corrects transaction rule sorting order
* Improves transaction rule balance calculation
Uses a more efficient query for calculating the account balance
up to a transaction when applying rules, improving performance.
This change reduces the complexity of the balance calculation.
* Apply coderabbit lessons learned
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
---
category: Enhancements
authors: [AndrewG147]
---
Transfers can now be created from split transactions (changed in
[25.9.0](https://github.com/actualbudget/actual/pull/5604)). The former
condition is not valid anymore
* update flatpak sdk and platform
* release notes
* flatpak version config
* going to 24.08 to support as many distros as possible
* remove unneded file
* enhancement: fix Cetelem bank transations
The amount coming from GoCardless has the opposite sign of what we expect.
* Cetelem bank: make code more future-proof
Change based on code review suggestion
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* budgetfilesSlice: Fix paste-o in fallback sorting by ID
* Create 5918.md
* 5918.md: Clarify
* 5918.md: Ah, those square brackets don't just indicate a placeholder
* upgrade electron-builder
* no postinstall when yarn immutable
* downgrade to last version without the bug
* fix issue with wrappy
* release notes
* regen yarn lock
* react-sprint
* hmm
* update yarn manually...
* fixing spring?
* lock
* finally
* conflict
* put package back
* add retries to electron server import
* release notes
* get rid of this menu. If its an app functionality it should be available within the app
* hide the menu - update the ui
* fix function call
* Update VRT
* release notes
* spelling mistake
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Align amount conversion utilities between api and loot-core
Updates api amount conversion utilities to align with loot-core, improving consistency and maintainability across the project.
Uses decimal places as parameters in conversion functions.
* Moves amount conversion utils to core
Moves amount conversion utilities to the core library.
This change consolidates these utilities for better code reuse
and maintainability across different parts of the application.
It removes the duplicate definition from the API package and
imports it from the core library where it is shared.
* add average per year to summary report
* note
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* initial test to trim the intervals
* bit more
* got the logic
* fix table data
* add migration for trim intervals
* release notes
* nice work rabbit
* small cleanup
* not sure how major that is but yeah why not
* add limit template
* use null to match other tempaltes
* add in directive
* handle no limit preset
* limit periods aren't optional
* make start field the right type
* fix test
* fix looping
* remove unneeded comment
Users will attempt to install actual, and connect it, but then find they
cannot sign up, so pointing this out earlier is a good thing.
Ideally in the docs page actual should stop advertising it at all, and
simply leave the instructions there for people who already have
accounts, but not mention it in the features and such.
* show net worth graph for each account page
* add release notes
* hide filter button
* fix lint
* import ReactNode type
* find selected accounts based on accountId param
* remove breaks
* can toggle account page net worth graph
* Improves account balance history graph
Refactors the balance history graph to improve its data fetching and rendering.
Removes the `selectedAccounts` state and related logic from the Account component, simplifying its state management. The `accountId` is now passed directly to the BalanceHistoryGraph.
Moves the BalanceHistoryGraph component to the accounts directory and removes the redundant BalanceHistoryGraph in the sidebar.
Updates the queries to directly use the accountId for filtering transactions, leading to more efficient data retrieval.
* mv
* min width and height only for sidebar
* move toggle chart button to account menu
* add fill gradiant to chart
* fix maxWidth
* fix chart hover offset
* responsive graph aspect ratio
* auto hide chart on short view
* revert balance position
* auto hide chart on 15% height
* remove chart boolean from internal state
* Implement account-specific net worth chart preferences
Replaced global net worth chart visibility preference with account-specific preferences. Updated components to use the new dynamic preference keys and added a toggle option in the account menus for better user customization.
* lint
* fix account groups
* Update VRT
* bump
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* minor typescript updates
* [autofix.ci] apply automated fixes
* more typescript changes
* [autofix.ci] apply automated fixes
* Another typescript
* fixes
* [autofix.ci] apply automated fixes
* fixed test
* [autofix.ci] apply automated fixes
* renaming a few things
* [autofix.ci] apply automated fixes
* a test
* test 2
* [autofix.ci] apply automated fixes
* test 3
* attempting to add a new test
* [autofix.ci] apply automated fixes
* test update
* additional typing.
* [autofix.ci] apply automated fixes
* Testing first item again
* [autofix.ci] apply automated fixes
* temporarily adding logging
* [autofix.ci] apply automated fixes
* only running rules within a schedule if exists
* swapping if
* removing unused import
* [autofix.ci] apply automated fixes
* [autofix.ci] apply automated fixes (attempt 2/3)
* fixing typecheck
* updated test
* [autofix.ci] apply automated fixes
* Updated screenshots
* further test fixing
* changing test order
* [autofix.ci] apply automated fixes
* Almost there
* new images
* tests may be flaky
* just one image
* 🙏
* 🙏🙏
* removing all images
* Revert "removing all images"
This reverts commit 4492cb7080.
* small order change
* [autofix.ci] apply automated fixes
* Update VRT
* Update packages/desktop-client/e2e/schedules.test.ts
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* reverting unrelated changes
* [autofix.ci] apply automated fixes
* Reverting one other typescript change
* testing completing 1 schedule
* Update VRT
* release wrote rewrite
* Making sure rule application is saved
* Cleaning up get function
* prettier and null catch
* Removed now unused schedule type
* Better falling back if rule / schedule no longer exists
* linting
* Better typing for db request
* camel case to make code rabbit happier
* slightly more accurate comment
* [autofix.ci] apply automated fixes
* Running other rules when linked rule runs
* lint / prettier
* one more lint
* Update 5414.md
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* Add check that category is not hidden before copying last months budget
* Add release notes
* Add check that group is also not hidden
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Remove usage of a raw variable in CategoryAutocomplete component
* Cleanup
* Fix typecheck error
* Fix typecheck error
* Highlight first suggestion when searching instead of the split option
* Fix error
* Fix special item highligted index
* feat: add EGP and SAR currencies to supported list
* add release notes for currency support
* use yarn generate:release-notes to fix release notes
* Rename file with PR number 5698
* Introduction of APIs to handle Schedule + a bit more. Refer to updated API documentation PR2811 on documentation.
* Fixed lint Error
* Removed unused declarations
* Fixed Bug in Test module
* Avoiding type Coercion fixes and direct assignment on conditions array.
* Lint Error Fixes
* more issues fixed
* lint errors
* Remove with Mutation in Get function. Fixed quotes. updated getIDyName for error handling
* More lint errors
* Minor final fixes.
* One type coercion removed
* One type coercion removed
* Revert back to original working code
* Added Account testing for both get by ID and updating schedules
* [autofix.ci] apply automated fixes
* Added Payee tests as well
* Payee Tests
* [autofix.ci] apply automated fixes
* Optimized condition checking at the beginning of the code and avoid ambiguity in case of corrupt schedule
* Mode debug infor on error in testing
* better bug tracking
* //more trouble shooting
* Bug fixed
* [autofix.ci] apply automated fixes
* Minor mofication to satisfy code rabbit. We should be ready for review.
* [autofix.ci] apply automated fixes
* Removing type coercion from the model
* [autofix.ci] apply automated fixes
* fixed compilation error
* Fixed new bugs
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Remove usage of a raw variable in AccountAutocomplete component
* Remove usage of a raw variable in CategoryAutocomplete component
* Release notes
* Fix typecheck error
* Fix typecheck errors
* Remove CategoryAutocomplete changes
* Add helper to render automations to template notes
* Add modal to un-migrate from the automations UI
* Add import warning to automations modal
* Add release notes
* Use CSSProperties type from React directly
* Fix version bump logic to work if the month has rolled over
* Refactor script to be more testable
* Add tests for regression
* Move tests to dedicated package
* Add release notes
* Coderabbit
I could not find instructions on the [Budget
Templates](https://actualbudget.org/docs/experimental/goal-templates)
experimental feature docs page for how to enable the feature. I did not
look closely enough at the advanced settings to realize I had to click a
link, even though I had looked at the setting page.
After asking in discord, I was told how to enable the feature, and even
found that there was a parent page [Experimental
Features](https://actualbudget.org/docs/experimental/) which had the
instructions I would have needed.
This PR simply adds a short sentence with a link back to that root page
on the experimental features pages. This would have helped me find my
own solution without needing to ask.
I did not add anything to the [Pluggy.ai
Setup](https://actualbudget.org/docs/experimental/pluggyai) page because
it has the blurb `Pluggy integration is experimental at this point, so
before you can use it you need to enable it under Settings -> Advanced
Settings -> Experimental Features -> Pluggy.ai Bank Sync` in the page
and didn't have the same callout sections at the warning callout
sections as the other pages at the top.
* Enhance responsiveness of GenericInput in RuleEditor component for mobile devices
* Refactor ActionEditor layout in RuleEditor component for improved responsiveness
- Adjusted styles for the View components to enhance layout flexibility.
- Ensured the GenericInput component maintains appropriate minimum width based on method type.
- Updated Stack component to prevent shrinking, improving overall UI consistency.
- Updated the ManageRules component to use ScheduleEntity type for schedules.
- Improved the describeSchedule function to include type annotations for better clarity.
- Added a conditional check to handle cases where the schedule may not exist, ensuring robust functionality.
* Enhance CI workflows to support repository dispatch events and improve branch handling
- Added support for `repository_dispatch` events in build, check, and codeql workflows.
- Updated concurrency group to include `client_payload.pr_number` for better context.
- Modified checkout steps to reference the correct branch from `client_payload` if available.
* Add release notes for PR #5586
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* translate import transactions
* translate import transactions headers
* add relese note
* feed back
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
---------
Co-authored-by: Alex <Alex>
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
Completed the beginning introduction of Restoring a Backup doc
**P.S. The first screenshot illustrating where to close the finance file
needs to be updated to comply with that in the current version.**
<img width="384" height="402" alt="截屏2025-08-15 09 48 32"
src="https://github.com/user-attachments/assets/c44012df-ecc3-4d76-8280-858001c68aa8"
/>
* Fix transaction hooks and improve transactions loading experience in mobile
* Allow skipping of running balance calculation on preview transactions + recalculate running balances if there are any inversed transaction amounts
* [autofix.ci] apply automated fixes
* Disable PullToRefresh when transaction list is in loading state (See #5080)
* Cleanup
* Add calculateRunningBalancesTopDown to calculate top down from starting balance
* update balance sheet value
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* fix: hidden category selection
* chore: add (hidden) to hidden categories and groups
* feat: add hidden category to filter
* feat: show hidden categories in mobile
* refactor: remove unused variable
I changed two docs pages - multi user and oauth (opeid provider).
There were some minor inconsistencies and errors. I also fixed the
redirect URI from `<domain>/path/openid/callback` to
`<domain>/openid/callback` as the first one was incorrect for my
keycloak instance.
---------
Co-authored-by: Ruben Olsen Lærk <ruben@lku.no>
The search tool we use has always been a bit clunky for me. There's no
keyboard shortcut support, it doesn't look great, doesn't support react
19, and I had to write a theme sync function for it to work properly
with Docusaurus V3.
The package I've upgraded here fixes all those issues. I've also updated
all the packages to the latest version, and aligned the node support
with the Actual repo.
**Old (very inaccurate search):**
<img width="885" height="573" alt="image"
src="https://github.com/user-attachments/assets/eae157de-8282-412f-b89c-618f3e3e99e5"
/>
**New:**
<img width="676" height="605" alt="image"
src="https://github.com/user-attachments/assets/145db22f-8216-4e3f-9a98-a8bd469f1494"
/>
It also comes with a fancy new search page when you click _See all
results_
> [!NOTE]
> Important This will need a decent amount of testing of images, links,
sidebar, rss feed, etc
Upgrading Docusaurus to the latest.
- We can now use Mermaid diagrams
- It's supposed to have better performance
- It's actively supported (v2 wasn't)
Throughout this PR you'll notice
- Formatting updates (they are required for the build process)
- Some CSS updates - some default styling was changed in the plugins we
use. The updates I've made should make the style near identical to
what's currently live
- Some updates & fixes to bring our docs in line with the v3 way of
writing
Overall, the docs should look the same.
## Known issues:
- The top page nav is flickering when clicking links in the top page
nav. It's happening on the main Docusuarus website
https://docusaurus.io/blog
- If we upgrade we'll have to accept it until they fix it on their end
I encountered this issue when I [created a
PR](https://github.com/actualbudget/actual/pull/5479) to add a new bank
to Actual.
The docs were instructing me to first create the PR and then generate
the docs.
At the same time, when I tried to open the PR, the default template
message was instructing me to generate the release notes *before*
opening the PR.
```
<!-- Thank you for submitting a pull request! Make sure to follow the instructions to write release notes for your PR — it should only take a minute or two: https://github.com/actualbudget/docs#writing-good-release-notes. Try running yarn generate:release-notes *before* pushing your PR for an interactive experience. -->
```
I am not sure who is telling the truth here, but given the emphasis that
the template put on *before* I am inferring that the docs had the wrong
order. If this is not the case, of course feel free to nuke this PR and
update the GitHub template instead.
* merge bump-package-versions script with get-next-package-version
* note
* appease the rabbit
* add update flag to node script
* use update flag in workflow
* not much has changed but they live underwater
* add translations for StatusLabel
* add translations for BalanceHistoryGraph (date)
* add random translations
* Update setHoveredValue update to avoid a crash
format
* add relese note
* feed back
---------
Co-authored-by: Alex <Alex>
* Have the multiple payee text overflow with ellipsis
* [autofix.ci] apply automated fixes
* Add release notes
* add minWidth to the payee text
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Use null as tag color by default (fallback to theme color) and stricter tag validation
* Set ColorPicker's defaultValue props
* Set default tag color in first position
* Make ColorSwatchPicker configurable
Easier to change colors and how they are presented
* fix: Move Add Specific Days to next line and dynamically increase the width of the numbered input box
* [autofix.ci] apply automated fixes
* Add Release Notes
* Update the release notes summary
* Update width from px to ch
* Update schedule date modal to expand when repeat every number increases
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* paginate the count points list files call
* fix tier assignment
* paginate the count points list files call
* fix tier assignment
* ensure utc dates and fix issue filtering to include issues updated in other months
Add documentation for notes tagging and how to change their colors.
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: Ruben Olsen Lærk <ruben@lku.no>
- Fixes https://github.com/actualbudget/docs/issues/449 which was closed
early
The CLI flow for setting up a new Fly app has changed and simplified.
This PR brings the Actual docs up to date.
Co-authored-by: Ruben Olsen Lærk <ruben@lku.no>
* start
* migration
* don't show deleted tags in list
* tag updates (#5389)
* upsert tag to ensure uniqueness
and insert default-tag in migration
* remove ability to change default tag color
---------
Co-authored-by: pogman-code <adrian.maurin@gmail.com>
* tags fixes (#5391)
* better tag validation
* fix typecheck issues
* update note
---------
Co-authored-by: pogman-code <adrian.maurin@gmail.com>
* Add button to import existing tag from transactions notes
* fix ##non-tag matching
* 'find' tags instead of 'import' to avoid confusion
* add link to show transaction that have given tag
* use same style as PayeeTableRow's button
When using local group cleanup, currently all funds available in To Budget are distributed into the sinks. This behaviour seems somwhat odd and also results in all later groups or the "global" cleanup run to possibly have no funds as they've been distributed before.
This patch now changes the group usage of cleanup, to only distribute funds made available by the group itself. If one also wants to sink money from To Budget into the category, a simple addtional `#cleanup sink`, will achieve this.
Fixes#5374
Signed-off-by: Christian Speich <christian@spei.ch>
Fixed an Error:
Proxy Pass & Proxy Pass reversed need the tailing / - otherwise static
assets like /static/js/ won't be accessable.
Improvement:
"ProxyPreserveHosts on" submits the host to ActualBudget (e.g.
"budget.example.com")
RequestHeader set X-Forwarded-Proto "https"
RequestHeader set X-Forwarded-Proto "443"
Preserve an loop, if the app requires to be run with SSL
* add colors to ReportTable
* Update VRT
* use default color for zero values
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* only show sidebar tooltip on desktop
* release notes
* Update upcoming-release-notes/5352.md
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* replace with media query checks
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
I wrongly thought that all the card transactions will always
have their first line with the `CARTE` identifier.
But as I have seen recently, it's not the case, and we shouldn't
rely on the ordering of the array returned by the Boursorama
GoCardless integration.
Thus, check for transaction patterns in all of the lines of the
unstructured array.
This addresses a true case (added in test) where the payee name
was wrongly extracted as being `110,04 Gbp / 1 Euro = 0,860763454`
* replace static function with useCallback
occasionally if you are editing the notes of an account and then open another account from the sidebar without first closing the popover, the note would be saved to both the current and previously opened account.
* reset tempNote on id change
* save notes only if changes are made
Previously, the notes were being saved unconditionally when closing the Notes modal. This update ensures that the save action is triggered only if the temporary notes differ from the existing note, reducing unnecessary events.
* fix: apply context menu actions to all selected transactions
when multiple transactions were selected and the user right-clicked on one transaction, context menu actions were only being applied to the right-clicked transaction instead of all selected transactions
* fix: apply context menu actions to all selected payees
when multiple payees were selected and the user right-clicked on one payee, context menu actions were only being applied to the right-clicked payee instead of all selected payees
After registering for a completely unnecessary GoCardless main account,
I found out you actually need GoCardless Bank Account Data acount. Lets
point other new users in the right direction.
* no hidden
* changes for tracking
* note and cleanup
* sentance case
* exclude income categories
* Update VRT
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* add user defined tag colors
* use DB to store tag colors
* change specific tags_colors to generic tags
* move tag customization to its own page (pt. 1)
* move tag customization to its own page (pt. 2), edit description
* move tag customization to its own page (pt. 3), better default tag mgmt
* move tag customization to its own page (pt. 4), tag creation
* move tag customization to its own page (pt. 5), remove tags settings
* Update VRT
* nitpicking & code rabbit fixing
* remove spaces from tag and better partial Tag typing
* add tag similar to transaction add
* peer review updates (live preview)
* enable keyboard navigation
* fix lint errors
* live input for color picker
* disable 3 digit hex color live input
* add context menu
* add tags link to command bar
* Update VRT
* Update VRT
* fix lint issues
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Run rules on transactions created by a transfer.
* [autofix.ci] apply automated fixes
* [autofix.ci] apply automated fixes (attempt 2/3)
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Apply PrivacyFilter to balance graph display
* Deleted empty line which was added by accident
* Added release note
* [autofix.ci] apply automated fixes
* isHovered state now conditionally deactivates PrivacyFilter if user hovers the graph
* [autofix.ci] apply automated fixes
---------
Co-authored-by: Seray Ciftci <seri@Mac.fritz.box>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* Update CRDT protobuf generation to create a .ts file
* Move remaining .d.ts files to .ts
* Fix remaining type errors
* Ignore .d.ts files so we don't accidentally use them in the future
* Add release notes
* Fixes#5228 - has tag(s) filter now takes values when typing quickly and pressing Enter
* Added release notes
* State of GenericInput now gets updated with every keystroke
---------
Co-authored-by: Seray Ciftci <seri@Mac.fritz.box>
* fixed setAverage functions to ignore hidden categories
* Add logic to ignore hidden categories in budget actions
* Modify SQL statements in setAverage functions to also exclude categoryGroups and change DbViewCategory type definition to include hidden flag of the group a category belongs to
* [autofix.ci] apply automated fixes
* Revert setZero functionality to set all budget categories and category groups to zero, including hidden ones
* Add new type DbViewCategoryWithGroupHidden which includes a flag for whether the group a category belongs to is hidden or not, and have setAvg functions use that type instead
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* start
* small fix
* clean
* working for regular transactions
* working for schedules
* cleanup
* typing
* cleanup
* cleanup
* vrt
* bunny
* use pref
* use pref right, lint
* more lint
* vrt
* pass hasInitialBalances to isLoading
* remove comment
* Add option to calculate running balances in useTransactions hook
* Fix typecheck error
* Fix lint error
* use the updated hook
* typecheck
* simplify
* don't show balances when searching
* Add runningBalances to usePreviewTransactions and an option to set the starting balance to start running balance calculation from
* Add filter to usePreviewTransactions and set startingBalance to account and category preview transaction hooks
* use runningbalance from preview transactions hook
* lint
* lint;typecheck
* remove initial from preview balances
* remove unneeded type
* Apply suggestions from code review
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* typecheck; align right; change color
* types
* add a menu item
* cleanup
* fix for loot-core migrated files
* lint;type
* fix import
* only schedules need fixed
* lint
* it works
* cleanup
* make lint happy
* [autofix.ci] apply automated fixes
* simplify a bit
* fix import
* feedback
* fixed regular transaction balance calculation
* fix numbers not showing
* fix schedule running balance
* note
* attempt to update properly
* type
* remove the useEffect that I don't think should be requred
* remove old note
* cleanup
* typeing
* I FINALLY FOUND THE PROBLEM
* cleaner balance calculation
* fixes
* fix zeros
---------
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
- Was expected to only close#696: _Add information about upcoming
schedule length._
- Added sections for Managing Schedules, Schedule Length, Find
Schedules.
- Added introductory section.
- Added clarification on the approximation on amounts
- Rewrote most of the document.
- New screen shots - and deleting old ones.
- Rewrote the intro section to reflect the planning aspects of schedules
and not the automation aspect.
- Added Account Register view screen shot and moved information on
account register view under the Adjusting the Upcoming Length heading.
- Removed "Schedule Options That Are Not Supported" section and moved
information about not supporting holidays as a note under schedule
creation.
* Changed the buttonMenuText color for the light theme so that text is visible on light background as well.
* Updated the release notes.
* Change file name of release notes
* Remove button varient from use last synced total and restore light theme
values to previous.
* fix: reapply thousand separators before passing input to appendDecimals
This ensures that the input going into `appendDecimals` is not malformed when the `hideFraction` option is On, otherwise when hitting delete on the text `"1,234,567"`, it will result in the text `"1,234,56"` which the formatter will parse as `1234.56`. This doesn't happen when `hideFraction` is off since hitting delete on the text `"12,345.67"` results in `"12,345.6"`, which `appendDecimals` will happily handle in a separate case to provide `"1234.56"` as the input into `currencyToAmount`.
* Handle edge cases for reapplyThousandSeparators
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* [autofix.ci] apply automated fixes
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Added a gocardless bank parser for Raiffeisen AT bank
* [autofix.ci] apply automated fixes
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* speedy
* bunny, fill in missing data
* small cleanup
* Update packages/desktop-client/src/components/sidebar/BalanceHistoryGraph.tsx
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* handle some edge cases, fix the month check
* better date formatting
* one more edge case
* fix
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
- Introduced a new document for Cursor IDE, detailing setup, automation,
and custom rules.
- Updated the new core contributors guide to include a link to the
Cursor IDE documentation for additional tips.
* Fix Boursobank transfer parsing
As per the comments on https://github.com/actualbudget/actual/pull/4958#issuecomment-2988814739,
the Boursobank transfer parsing was not working correctly.
Indeed, the array returned by GoCardless for transfers is randomly
ordered. So we cannot rely on the first line to know its type.
To work around this, the code gets a bit more complex by:
- Checking the first line for known types (card, loan, atm withdrawal)
and handling them accordingly.
- If it's not one of these, we iterate through all the lines by checking
if the array contains a line with the transfer type.
* Add credit note type for BoursoBank
An `Avoir` is a refund made to the credit card.
Adds the proper payee / notes parsing for it.
* Improve Boursobank card transaction parsing
Some Boursobank transactions have an unknown number attached to the
payee name. Remove it from the payee name to ensure consistency across
transactions.
For instance, `CARTE 19/03/25 Github 4 CB*0494` (notice the `4`).
* Improve Boursobank payee name backslashes handling
After more testing, I found that the backslashes present are for the
pending transactions, and indicating the localization of the payment.
To keep the payee name consistent, remove what follows the backslashes.
For instance `PICARD SA 1234\\PARIS\\ FR` is for a pending transaction
whereas `PICARD SA 1234` is what we receive for a completed one.
* Set notes with date for Boursobank card transactions
@mistyque requested to see the data of the card transaction in this
comment: https://github.com/actualbudget/actual/pull/4958#issuecomment-2981459622
* Add 5202 release note
* [autofix.ci] apply automated fixes
* refactor loops and match
---------
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* start
* small fix
* clean
* working for regular transactions
* working for schedules
* cleanup
* typing
* cleanup
* cleanup
* vrt
* bunny
* use pref
* use pref right, lint
* more lint
* vrt
* pass hasInitialBalances to isLoading
* remove comment
* Add option to calculate running balances in useTransactions hook
* Fix typecheck error
* Fix lint error
* use the updated hook
* typecheck
* simplify
* don't show balances when searching
* Add runningBalances to usePreviewTransactions and an option to set the starting balance to start running balance calculation from
* Add filter to usePreviewTransactions and set startingBalance to account and category preview transaction hooks
* use runningbalance from preview transactions hook
* lint
* lint;typecheck
* remove initial from preview balances
* remove unneeded type
* Apply suggestions from code review
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* typecheck; align right; change color
* types
* add a menu item
* cleanup
* fix for loot-core migrated files
* lint;type
* fix import
* only schedules need fixed
* lint
* it works
* cleanup
* make lint happy
* [autofix.ci] apply automated fixes
* simplify a bit
* fix import
* feedback
---------
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
* add Belfius and KBC to banks with limited history
* Update upcoming-release-notes/5183.md
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update `processBankSyncDownload` to store synced balance in `balance_current`
* Display last synced balance in `MoreBalances`
* Add "Use last synced balance" to reconcile
* Remove logs
* Release notes
* Fix lint
* Add missing useEffect dep
* Restore console.log and fix type for id
* Last synced total
* Fix lint
* lint
* Made requested changes from maintainers.
* Added my name to authors note and updated description of feature.
---------
Co-authored-by: Spencer Sawyer <spencer@spencersawyer.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Move more .d.ts files to .ts
* Add release notes
* Some errors with templates snuck in
* Fix API build
* CodeRabbit feedback
* Move budget templates to new directory
* Fix type errors in library module
My Monzo bank appears to return 'name' through the GoCardless getDetails and getMetadata calls, but the value in the getMetadata response is an empty string! Merging metadata values over detail values therefore risks losing values, that are useful to have & to present to the user.
To solve this, we can make getDetailedAccount smarter about merging the two objects. We could swap the object splattening around so details has priority over metadata, but I'm not at all confident there won't be other banks doing strange things with additional properties that might suffer similar bugs in the reverse scenario.
Instead, we loop through all keys in both objects and construct a new merged object, continuing to prioritise metadata over details but changing it to a truthy-based comparison (with the `||` operator).
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
- Desktop electron works with self hosted out of the box now.
- Made Sync Server a third level header for consistency since it's no
longer in a separate repo.
* add workflow for publishing edge npm packages
* release notes
* alright mr rabbit
* never trust the wabbit
* changing tag to nightly as per maintainer feedback
* fix hotfix script version
* rename workflow
* wabbit
* exit process
* fix reference to package json
* variable scoping
* change nightly version number to yyyymmdd (#17)
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Fix net worth graph gradient conflict
Ensures that the net worth graph's gradient ID is unique to prevent conflicts when multiple graphs are rendered on the same page.
Fixes#3965
* Apply review suggestion
Current documentation includes ActualTap-Py which is a fork of
https://github.com/MattFaz/actualtap *(which I use/maintain)*.
Adding in the original ActualTap repo and updating ActualTap-Py to
clarify differences.
* use build directory in dockerfiles
* add release notes
* add test
* Add test for cli, try to fix image test
* - fail
* try again
* try again to fail
* done testing
* Code review
* publish is unecessary
* Enhance transaction import functionality with new Transaction type and type annotations
* release notes
* fixes for PR
* move transaction type as requested by @MatissJanis
* type importTransaction return value
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Include parent transactions in select-all when all of their children are selected
* Added release notes
* Fix release notes file name
* Make function return type explicit
* add spreadsheet logic
* separate to own cell
* add selection cell
* fix selection
* added button
* arrow
* switches between the two hold options gracefully
* reset manual hold on apply auto hold
* working?
* fix
* lint
* better to budget menu logic
* type
* typing
* missing function pass
* some cleanup
* typecheck
* translation
* closer to good arrow
* lint
* prevent rollover arrow from clipping
* move to a menu; position is broken
* lint
* fix location
* lint
* standardize verbage
* right case
* fix import
* cleanup
* start of a mobile menu
* slightly better
* some cleanup
* lint
* Update packages/desktop-client/src/components/modals/EnvelopeIncomeBalanceMenuModal.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* fix styling
* types
* Update packages/desktop-client/src/components/budget/envelope/BalanceMenu.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Apply suggestions from code review
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update bank-factory.js 90 days bank history
Add ING PL (ING_PL_INGBPLPW) to banks with limited history
* Adding a bank with limited history - alphabetical fix
adding alphabetical sorting
* note
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update gocardless-service.js
* Allow account selection during requisition based on institution support
* lint
* note
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
The last two examples for the goals have created confusion because the
template and goals line shows in one line:
https://discord.com/channels/937901803608096828/1372691110614274170/1376211790639136779
This PR makes sure that any `#template` and `#goal` lines that are meant
to go together are displayed on top of each other instead of inline.
It also makes sure that all uses of `#template` show with inline
code-formatting for overall conistency.
(Let me know if you'd rather have this in a separate PR and I'll splice
out that commit.)
There was one package in the doc (actual-appimage) but there is more
actually :D
2 Desktop clients based on the AppImage and a server based on the
@actual-app/sync-server NPM package.
* Changed 'close file' to say 'exit file' so it is more clear that the file is not being deleted (#4852)
Resolved this issue here:
https://github.com/actualbudget/actual/issues/4852#issue-3006813465
* chore(release): add release note for PR #4872
* Update BudgetName.tsx "Close file" -> "Switch file"
* Update 4872.md
* Changed 'Close budget' to 'Switch file' on mobile
* Update VRT
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* button being focused
* working
* tests
* text selection test
* allow for ref injection
* updated some of the usages
* release notes
* rename of prop
* docs
* fixed release note
* remove unnecessary test setup
* updated from comments
* removed selecttext references
* fix type error
* updated children type
* removed comment
* moved over some util functions
* moved over TransactionHeader
* Added the bulk of Transaction typing data
* moved PayeeCell into its own file
* moved StatusCell over
* added NotesCell file
* Moved over NewTransaction
* converted TransactionsTable
* Converted TransactionList to use new typed TransactionsTable
* Converted consumers of TransactionList to use TransactionList
* removed old TransactionsTable
* release notes
* fixed bug vrt found
* fixed one todo
* attempting to debug whatever is going on
* moved TransactionsTable tests up a directory and that fixes it for some reason
* removed type cast
* re-instated onScheduleAction types
* re-added old TransactionsTable.jsx file
* consolidated changes into just TransactionsTable
* deleted split files and finished moving over TransactionList
* typecheck
* typecheck
* yarn lint
* changed type casting to make it more specific
* changed warn to error
* added some todos to clean up type assumptions later
* yarn lint
---------
Co-authored-by: Alec Bakholdin <alecbakholdin@mac.myfiosgateway.com>
Co-authored-by: Alec Bakholdin <alecbakholdin@Alecs-Mac.local>
* Move loot-core/client/modals code over to desktop-client package
* Fix lint error
* Move loot-core/client/store and loot-core/client/redux to desktop-client package
* Separate redux store into it's own file
* Import types from redux/store instead of redux
* Add runningBalances to usePreviewTransactions and an option to set the starting balance to start running balance calculation from
* Add filter to usePreviewTransactions and set startingBalance to account and category preview transaction hooks
* Move loot-core/client/modals code over to desktop-client package
* Fix lint error
* Move loot-core/client/queries code over to desktop-client package
- Adding new screenshots.
- Deleting old screenshot.
- Also did some language changes on the rest of the page.
This should address @youngcw wrote in a comment on PR
https://github.com/actualbudget/docs/pull/599 _The restore page is a
little weird where it says you need to logout before you can do a
restore. That should be changed at some point._
* Move loot-core/client/modals code over to desktop-client package
* Fix lint error
* Move loot-core/client/notifications code over to desktop-client package
The privacy filer / scrambling function has so far only been briefly
mention on the first page of the tour guide.
I added some screenshots + text to the tips and tricks page.
As a bonus I also added ALT text to the existing images.
I think I got all instances where we specify a version, there seem to
only be two places in the docs.
We'll also call it out in the release notes.
https://github.com/actualbudget/actual/pull/4978
* Add a functionality to split transactions repair tool to remove categories from parent transactions and prevent adding/update parent transactions with categories
* Fix lint error
* Remove console.log
* start
* make week tests make sense
* fix
* copy
* average
* no call checks
* add rest. Still need to vet runSpend, and runBy
* fix average
* tweak spend
* updates
* cleanup
* note
* add more up to tests
* previous percentage
* hitting limit tests
* remainder
* fixes
* more fixes
* fixes, and fix remainder return value
* fix amounts in limit tests
* e2e for a category
* skip checking schedules if not needed
* lost changes
* fix null
* add goal tests
* final fix?
* lint
* lint option 2
* Add BoursoBank GoCardless Integration
The default normalization was creating new payees for each
transaction per day, as there was no specific integration
for this bank.
e.g. `Carte dd/mm/yy Payee Name Cb*1234` was taken as payee
name.
There doesn't seem to be an easy catch-all syntax for
the BoursoBank transactions, but I have put all the
ones I could find from my transactions.
* Fix comment typo
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* invert most of seb kort credit card transactions
* add release-notes
* revert package.json
---------
Co-authored-by: Vincent Giorgi <8283278+vincegio@users.noreply.github.com>
Changes made with some justification, in order of commits:
- removed port mapping for `actual-server` service since we're using
Caddy as the reverse proxy, similar to how there's no port mapping for
the Traefik example
- minor consistency changes by referring to the Traefik example:
- moved `image: caddy:alpine` to the top
- add restart policy
- swapped one inconsistent single-quoted port mapping to double quotes
* changed default amount to come from amountToCurrency to handle localized values and maintain focus
* release notes
---------
Co-authored-by: Alec Bakholdin <alecbakholdin@Alecs-Mac.local>
* Add basic modal for budget automations
* Add release notes
* Exclude TODOs from this PR for now
* Fix some rebase errors
* CodeRabbit feedback
* PR feedback: reduce nesting in automation editor
* PR feedback: reduce nesting in automation read-only state
* PR feedback: make editors feel more like part of the read-only entry
* attempt at running with typescript
* release notes
* working jest tests for TS files
* working docker image build
* remaining docker images
* cleanup
* ensure vitest is working
* get tests passing in ci
* less strict
* update release notes
* use tsc compiled assets in the published package
* scripts
* update yarn.lock
* Use build path for electron app
* PR feedback: move sync-server build out of bin/build-browser
* PR feedback: undo moduleResolution change
* extend main tsconfig and fix types
* PR feedback on scripts and when the sync-server build runs
* fix lint (unrelated change)
---------
Co-authored-by: alecbakholdin <alecbakholdin@gmail.com>
* add PayeesPage model for searching payees in e2e tests
* add navigation method to go to PayeesPage in e2e tests
* add e2e tests for Payees page
* update release notes
* Run prettier to fix lint
* clean imports
* fix imports
* Add snapshots for visual tests
* Remove unused import in payees test
* Update VRT
* Update 4766.md
Dummy commit
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* Automatically generate GitHub release text
* [TEMPORARY] Revert Electron signing changes to make this change testable
* Revert "[TEMPORARY] Revert Electron signing changes to make this change testable"
This reverts commit eeb5680b1a.
* Add release notes
* Rename AQL module's runQuery function to aqlQuery to disambiguate with DB module runQuery function
* Release notes
* Update SqlPieces
* Fix lint
* Update SqlPieces.from
* Add types
* Type result as any for now
* Fix lint
* Add types
* Fix typo
* PR feedback
* Update comment
* Fix lint error
* Fix import
Put Windows-specific step in parens to differentiate it from the rest of
the steps
Also gave clarification upfront to inform users what the end-goal is.
Hello!
I'm using [a plugin in my
browser](https://github.com/allanlw/gps-detect) to be notified when an
image contains GPS data in the metadata of images, and I noticed while
reading the latest release notes that matt-fidd.jpeg contained some GPS
coordinates, so this pull requests is just to remove those from the
image.
Have a nice day
Add instructions for creating the config.json via a single terminal
command.
Reasoning - Assisted a MacOS deploy where they had everything setup
correctly but when they made the config.json file their instance
crashed, this was due to using the default GUI text editor which saved
the file as a .rtf and they renamed to .json. Doing this will leave
metadata in the file and actual wont know what to do with it causing an
infinite restart loop.
This addition provides a simple method to create the file without the
possibility of extra formatting bits causing issues
* Update build + dependencies to work with vitest
* Update tests to use vitest
* Update snapshots to vitest format
* Update sql.js loading in tests to work with vitest
* Update crdt package loading to work with vitest
* Add release notes
ensure that modified filters are reapplied to the Custom Report when changing its interval or date range, rather than reverting to the last saved state, which could overwrite unsaved changes to the filters or their conditional operand
* Fix catch 22 problem when using In/Out with split columns already enabled
- Also changed UI and transaction amount parsing behavior to accept all options combined
- Repositioned some amount options
- Adjusted the labels of a few options
* Fix amount options triggering state resets
* Update VRT
* Revert "Update VRT"
This reverts commit 0a4b70afad.
* Update VRT
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* added transactions-merge action
* mergeTransactions now returns kept id
* merge option only shows up when amount matches
* merge now handles more errors and merges from the dropped transaction if values are present
* modified merge logic slightly to avoid duplicating imported_id
* added reconciled and cleared to merge logic
* modified canMerge logic in SelectedTransactionsButton
* made merge undoable
* added onMerge to mobile menu
* release notes
* modified testing suite slightly
* added logic for detecting bank sync vs file import
* typecheck problem
* linting errors
* attempt to clean up tests better
---------
Co-authored-by: Alec Bakholdin <abakho@icims.com>
* Alternative solution
* tests
* a bit better, but now categories can be weird
* working, I think
* almost there
* I was making it harder than it needed to be
* Update VRT
* note
* note
* Separating logic from envelope and report to keep envelope as it was
* Update VRT
* Removed checks for budgetType inside `envelope.ts` and `report.ts`
* changed code position in file
* linter
* handle initially hidden
* Fix for when tracking but is enabled
* total up everything
* Add tests for handling hidden categories and groups in budget totals
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Kevin Gatera <kevin@deployitwith.me>
* sync server as npm package
* yarn lock
* workflow
* fix yml
* fix script
* named job better
* imagine trusting an ai
* pack and publish separately
* v4 instead of v3 upload
* dependencies
* identifying the right package for uplaod
* updating references
* what
* i see
* here comes the glory
* aaaand here it comes
* perms
* hmm
* try changing scope
* owner is invalid for git so have to go to npm instead
* better names on workflow
* package the api too
* updates
* rename to play better with gitignore
* yarn
* better
* dont ignore me
* yarn
* readme
* readme
* release note
* typo
* updating to read package.json from fs rather than import to support more node versions
* more ai autocomplete more problems
* adding unlink and account name to modal
* fixing dispatch and some style updates
* release notes
* catching a few missed "bank-sync" phrases
* linting
* Addressing comments
* Addressing comments
* Linting
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Add functionality to download custom reports as an image.
* Add functionality to download custom reports as an image.
* Switched from html2canvas to html-to-image due to size considerations.
* Snapshot filename
* Add functionality to download custom reports as an image.
* Add functionality to download custom reports as an image.
* Update ReportTopbar.tsx
Fixed mistake
* Use existing date function
* fix imports
* Update VRT
* move component out of common in aid of components lib migration
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* playwright test fixture
* release notes
* update snapshots
* test
* again
* same timeout as web client
* faster
* srsly
* Update VRT
* update test
* get rid of this test for now
* updating update-vrt
* speed it up a bit
* same timeout as desktop-client
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* playwright testing for electron
* pipeline updates
* fix normal e2e scripts
* fix path to artifact
* listing out whats there
* attempt to fix ci
* umm
* again
* setting a viewport
* window size to be consistent across machine for tests
* now it work... Righhttt?
* hmm
* do it
* worflow
* will this work
* oops
* dont skip
* trust in the pipeline gods
* remove update snapshots, just do it in the pipeline
* change name of snapshot to account for os
* lint
* fix package script
* fix electron resolutions
* temp fix
* dont include build-electron in the web bundle assuming its built
* lowering size of build
* removing exports
* release notes
* adding bits back
* remove bad config
* fixed current month upcoming calculation
* added release notes
* updated test to validate the new behavior of getUpcoming
* modified one month and added more tests for leap years and months with different dates
* Fixed odd error
---------
Co-authored-by: Alec Bakholdin <abakho@icims.com>
* Added institution name to the LinkModal
* Added release notes
* removed a stray import I did not mean to leave in
* updated release note number
* Separated institution into its own column and updated sorting to sort by institution -> name
* Added tooltips to allow users to hover over institution name and account name when linking bank accounts
---------
Co-authored-by: Alec Bakholdin <abakho@icims.com>
* Extract category related server handlers from main.ts to server/budget/app.ts
* Release notes
* On DB layer, replace Entity model usage with DB models
* Fix typecheck errors
* Fix type error
* Fix types
* Fix typecheck error
* Fix lint errors
* Fix test errors
* Fix model mapping
* Use dvh to determine height of modal based on dynamic visual viewport
* Apply to dialog instead of another div
* Remove modal transition
* Release notes
* [Mobile] Drag and drop income categories to re-order
* Fix category group ID
* Update borders
* Use list item value prop
* Cleanup
* useCallback
* Remvoe usage of useListData
* Fix typecheck error
* Release notes
* Fix import
* Update DropIndicator
* Update DropIndicator
* Fix drop indicator
* Update mobile forms TapField to use the new Button component
* Release notes
* Fix typecheck error
* Cleanup
* Update VRT
* Dummy commit
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Display Goal/Target Information on Mobile
* Create 4546.md
* Fix lint issues
* change hr and div to View and modified styling
* Fix lint errors again
---------
Co-authored-by: lelemm <lelemm@gmail.com>
* Translate dates POC
* more dynamic loading of locales
* added locale
* linter
* linter and typecheck
* added md
* translated DateSelect component
* more translations and fixes
* removed redux state for locale
* linter
* typecheck fix
* fix test for schedules.ts
* linter
* fixed System Default language
* loading all locales at once
* added some fallback cases
* bugfix, linter and typecheck
* schedule description rework to have better translation labels
* fixes
* test fix
* Trigger actions
* merge of #4459
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
I created a repository with steps to deploy Actual Budget as a Cloud Run
service. I believe this is a better way to deploy in GCP and it's less
complicated.
* Extract payees related server handlers from main.ts to server/payees/app.ts
* Release notes
* Payee model mapping methods
* Re-arrange methods
* Update types
* Remove undoable because there is withUndo already
* Support meta in undoable
* Fix types
* Fix typo on test
* Extract existing "Make Transfer" functionality
* Add "Make Transfer" functionality to mobile menu
* Don't just blindly allow setting as transfer
* Update disabled colour and missing translations
* Fix import warnings
* Add release note
* Use correct translation function
* Determine whether to show the "Make Transfer" option or not based on the presence of an account
* Build list of menu options nicer
* Fix types
* Fix translations
* Use Trans component instead of t function
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* feat: add "last reconciled" timestamp to accounts
add a `last_reconciled` column to the `accounts` table, which stores a UNIX timestamp indicating when each account was last reconciled
upon initial release, all accounts will display "Not yet reconciled"; however, after completing reconciliation and pressing the "Done reconciling" button, the timestamp will be updated accordingly
* test: generate mock accounts with `last_reconciled` as `null`
generate mock accounts with the `last_reconciled` value set to `null`, to match the expected behaviour that new accounts will start with a "Not yet reconciled" status
* improvement: display "last reconciled" timestamp in tooltip
relocate the "last reconciled" timestamp from the account balances header to a tooltip displayed when hovering over the "Reconcile" button
fix issue where transactions for transfers between accounts (i.e., transactions where the payee is another account) were not properly filtered during searches
* allowing copy budget files to succeed even if cleanup fails
* release notes
* updating fs-extra
* retries in for removing dir
* better retry defaults
* defaults
* 🔖 (25.3.0)
* Empty commit to bump ci
* Remove used release notes
* Empty commit to bump ci
* Bump sync-server for web release
* Remove used release notes
* Empty commit to bump ci
---------
Co-authored-by: jfdoming <9922514+jfdoming@users.noreply.github.com>
Co-authored-by: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Fix crash when deleting child transactions from an errored split
* Add tests
* Add release notes
* Add graceful fallback
Fallback: don't try to show errors on a transaction if it's not actually
a split.
* Move transaction related handlers to server/transactions folder and use the new convention
* Fix lint and typecheck
* Move server account handlers from main.ts to accounts/app.ts
* Add accounts app to main.ts
* Release notes
* Fix types
* Fix typecheck error
* Fix types
* Fix build error
* Use main app
* fix: ensure currencyToAmount works regardless of the configured number format
* chore: linting
* docs: add release note
* test: ensure correct amount is entered for debit when adding split transactions
* chore: rename variable thousandsSep to thousandsSeparator
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* chore: rename variable decimalSep to decimalSeparator
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* chore: rename decimalSep and thousandsSep variables to decimalSeparator and thousandsSeparator
---------
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* update sync mapping data for existing transactions on sync
* show payment direction dropdown regardless of sample data
* note
* ignore changes in raw_synced_data
Issue reported here: https://github.com/actualbudget/actual/issues/4377https://deploy-preview-645.www.actualbudget.org/docs/install/local
It turns out that yarn doesn't let you run scripts without first
installing dependencies, so users will have to type it in the install
manually.
The other alternative is to run the script with npm but that would add
confusion.
I think yarn workspace focus is the best option to pick but here was the
options:
- Instruct users to ```yarn install``` (which would install all deps) -
1.07GB
- Instruct users to ```yarn workspaces focus @actual-app/sync-server
--production``` (which is a long command) - 60.6MB
- Create a new shell script to run the command ```
./install-server.sh```
In future we might want to consider packaging the server up into an
executable. That way the user wont have to install node/deal with any of
this stuff.
Here's an example packager - i've never used it:
https://github.com/nexe/nexe
* feat: today button on mobile budget page
Jumps to the current month
* add release note
* cleaner onCurrentMonth
* Update VRT
* use SvgCalendar from icons/v2
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update VRT
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* making the server workflows run only when server files have changed
* release notes
* also on merge to master
* rabbit suggestion
* e2e tests and size compare dont need to run when server changes
* adding to the paths ignore
* remove non-booked transactions from import
* Add release notes
* minor fix to please the linter
* Add coderabbit suggestions
* add test file
* fix test
* add coderabbit fixes to test file
* fix mock console
* Correct consoleSpy to make linter happy
* Add mock cleanup
* save button
* release notes
* custom component shows
* custom input and saving working
* updated getUpcomingDays to handle custom values
* close modal after save
* test around getUpcomingDays
* updated to use more accurate timespan calculation
* fix for scheduled events only occurring till end of period
* add a day
* fixed input step down
* show broken transfers
* more detail
* feat: add step to fix splits for fixing transfers with categories that should not be there
* reword
* update the setting
* note
* lint
* typo
* another misspelling
* fix single notification
* note
* Update VRT
* run checks
---------
Co-authored-by: UnderKoen <koenvanstaveren@hotmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* show broken transfers
* more detail
* feat: add step to fix splits for fixing transfers with categories that should not be there
* reword
* update the setting
* note
* lint
* typo
* another misspelling
---------
Co-authored-by: UnderKoen <koenvanstaveren@hotmail.com>
* Display transaction notes on mobile, fixes#1764
* Display transaction notes on mobile, fixes#1764
* Display transaction notes on mobile, fixes#1764
* Display transaction notes on mobile, fixes#1764
* Moving the notes to the bottom
* Moving the notes to the bottom - right file.
* Updating the code as requested
* Adding conditional rendering as suggested by Bugs Bunny
* Adding conditional rendering as suggested by Bugs Bunny and lint
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Update to newer docker compose command.
From the docs: From July 2023 Compose V1 stopped receiving updates. It’s
also no longer available in new releases of Docker Desktop.
See the docs: https://docs.docker.com/compose/releases/migrate
* Spending: Fix budget comparison filters
- Previously only worked for category *is*, now should work for any category filters
* Add release notes
* Spending Report: Fix linting, remove unused filters from budget filter options
- Removed ability to select 'contains', 'doesNotContain', or 'matches' filters for budget categories
* enhance: add possibility for join between zero budget and category
---------
Co-authored-by: Koen van Staveren <koenvanstaveren@hotmail.com>
* Add support for LHV_LHVBEE22
* Add upcoming-release-notes/542.md
* Don't set bookingDate unless booked
* Add a basic spec file
* Add test case for invalid date and date validation to handle it
* Remove accessValidForDays
* fix/#3128: listen to 'sync-event' to update user data when sync status changed, so 'userData.offline' is up to date and server status displayed is valid
* add upcoming release note
* fix: use of optional chaining for 'userData.offline' to fix typecheck errors
* fix: replace 'userData?.offline' by 'userDate' in useEffect's dependencies
* fix: add error handling for 'initializeUserData' method
* fix: remove optional chaining for 'userData.offline' and directly check if userData is not null
* fix: eslint warning "`loot-core/client/actions` import should occur before import of `loot-core/src/platform/client/fetch`"
* Added ability to control auto categories per payee and globally
* Added unit test
* Changed order of Learn Categories in settings page
* Removed console log and fixed prefs type
* Added release note
* Fixed default value for global setting
* Added tooltip and context menu option
* Removed test assertion
* Refactored default value for global setting
* Added missing boolean to saveDiff and saveDiffAndApply
* Fixed default global value
* Icon and Disable payee menu hidden when globally disabled
* Moved category learning settings to payees page
* Added automatic centering for payee SVGs
* Lint changes
* Typecheck changes
* Fixed copy paste
* Added more translation
* Changed global setting to a modal
* Fixed import order
* Renamed migration
* Update packages/desktop-client/src/components/payees/CategoryLearning.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update packages/desktop-client/src/components/payees/CategoryLearning.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update packages/desktop-client/src/components/payees/ManagePayees.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update packages/desktop-client/src/components/payees/CategoryLearning.tsx
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Changed wording
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Migrate to accountSlice
* Fix lint and typecheck errors
* Update types
* Fix lint
* Fix types
* Cleanup
* Rename file
* Rename state
* Cleanup
* Fix typecheck error
* Move createAppAsyncThunk
* Queries slice
* Release notes
* Cleanup types
* Cleanup
* Fix typecheck error
* Lint
* Fix typecheck error
* Fix import
* Fix typo
* Fix typo
* Update
* Copy category list so that sorting is not applied directly on category list redux state
* Update setLastTransaction payload
* Remove optional optional chaining on unwrap
* Rename accountId
* Fix type
* Remove return value of initiallyLoadPayees since no callers use it
* No need to getPayees. Just use the already loaded payees.
* Notify on action errors
* Add language global pref
* Add setting to control language
* Add release notes
* Update VRT
* Wrap missed strings in `t`
* Update VRT
* [placeholder] Bump CI
* Fix crash on old language file
* Fix loading wrong language
* Update packages/desktop-client/src/i18n.ts
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update ConfirmCategoryDeleteModal.tsx
Added space between category name and "is"
* Create 4175.md
* added space to trigger change; cloned repo in vscode with prettier linter to fix github bot alerting about lint
* Formatted chate with Prettier
* Add YTD and last year to Reports headers
* Add release note
* lint
* fix end date picker
* remove debugger
* Update VRT
* Update VRT
* Fix year to date and last year
* remove debugger
* pr comments
* fix small size
* Update VRT
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: youngcw <calebyoung94@gmail.com>
* load all instances of scheduled transactions that occur within the upcoming period
* correct status in transaction table
* ts
* note
* ci
* upcoming -> forceUpcoming
* remove caveat from upcoming length setting modal
* Improve string to be clearer in other languages
Change from using ':' and no question mark to a full sentence and a question mark
* Create 4167.md
* Fix quotes
* Fix
* Fix
Adding a page to Using Actual/Budgeting to demonstrate how to implement
multi-currency using Rule Templates.
---------
Co-authored-by: Ruben Olsen Lærk <ruben@lku.no>
* Cleared import changes
- Add ability to provide default for cleared field
- Add ability to skip updating cleared field
* Add release notes
* Make linter happy
* Fix optional param
* Use nullish coalescing operator
* Add GoCardless integration for COMMERZBANK_COBADEFF
* Add optional iban property to creditorAccount
* Use fallback for normalizeAccount and calculateStartingBalance
* Update src/app-gocardless/banks/commerzbank_cobadeff.js
---------
Co-authored-by: Koen van Staveren <koenvanstaveren@hotmail.com>
This is the start of getting the existing template setup ready to
mainline. We can consider making each template type its own file if this
feels too long.
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
> Off budget accounts don't effect the budget and are meant to track
stuff like investments and mortgages. Transactions in off budget
accounts can't be categorized; they simply track balances over time.
Should be `affect`, a verb, instead of `effect`, a noun.
* Pull/push strings via Git instead of via API
This is necessary because the Weblate API doesn't handle stale strings
well. In particular, it won't remove them automatically.
* Schedule workflow instead of running on every commit
This is so we can minimize downtime for Weblate translations.
* Prevent pull requests modifying translations
* Don't commit translations during the merge freeze
* Add release notes
* Undo rename
* Don't commit translations nightly, per feedback
* Include translations just-in-time in builds
* Revert "Prevent pull requests modifying translations"
This reverts commit 8c19a0ce13.
* Re-ignore translations
* Update release notes to be accurate
* Create missing directory
* Fix conditional logic
* Do not show undo notifications on desktop
* add release note
* fix linter
* Update packages/desktop-client/src/hooks/useUndo.ts
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* Update useUndo.ts
* fix code pasted on wrong line
* drive-by fix typo
* Update 4097.md
---------
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* add buttons for combined-account transaction pages (#2333)
* add release note for #3734
* add accessibility label to mobile combined-account header button
* increase touch targets for combined-account buttons
* remove highlight color and add bounce to header buttons
to match the feel of the other account buttons
* update vrt screenshots for actualbudget#3734
I wrote some steps on how to automate non-Dockerized Actual starting up
with Linux systems using systemd. I'm using this on my server and so far
so good.
If this is too much for this page please consider putting it on its own
page. I think it's useful info for anyone who wants to do self-hosted on
a VPS with a non-Docker instance.
---------
Co-authored-by: Brandon Fotiu <bfotiu@bgsu.edu>
* enhance: context menu on custom reports page
* chore: release note
* chore: lint
* chore: use both feature flags
* chore: use both feature flags
* chore: pr feedback
* fix: changing name with context menu
* fix: translations were not being loaded properly
* fix: support running GitHub actions locally with `act`
* feat: upload new strings on master build
* Add release notes
* PR feedback: security
When I setup my actual account, I noticed that there was no
reconciliation button as described in documentation. Found out after
hunting, that the UI has changed resulting in this issue. I have created
this PR to update that.
Let me know if the language or images need to be changed.
Caused because of: https://github.com/actualbudget/actual/pull/3684
* Initial Commit
* Create 3847.md
* Removed un-needed comment
* Changed error log text
* Moved budget name validation from DuplicateFileModal to loot-core/server
* Added translation
* Fixed linting error
* Changed delete file hack
Changed from loading and closing the budget file to just opening and closing the database to be able to delete it.
* Removed hard coded english from loot-core server
* Updated wording and style of Duplicate File Modal
* Simpler wording for Duplication text and buttons
* Filter account by on budget / off budget
* small fix
* fix eval for new operations
* code review suggestion
* suggestions
* small fix for rules table
* batch loading the accounts
* Update packages/loot-core/src/server/accounts/transaction-rules.ts
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* missed this type
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* remove use of View component
* created a release note
* rename release note to PR number not issue number
* revert changes to check e2e tests
* redo changes
* indentify exact styling issue
* use style instead of css
remove currency symbols, add note explaining how they're used, tried to
standardize how template vs #template / goal vs #goal are used, some
edits for clarity,
* bump version
* Remove used release notes
* bump web version
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
* Don't crash when making a txn from the uncat page
* Always navigate consistently from the txn add/edit page
* Add release notes
* Attempt to fix functional tests
* Update VRT
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
If the date column is not configured correctly the date format will not
show up if it's not one of the preconfigured ones.
I think that can help in the documentation.
* Add support for "Hanseatic Bank" (access_valid_for_days max 89)
* add PR changelog file
* fix line endings + author format
* make linter happy
* make linter happy
* use alphabetical order for import and banks list
Quick whip through to try and standardis(z)e some language, looks like
the most common English in the docs is US English so I chose that one,
but if we'd prefer the Queen's then that's okay too.
---------
Co-authored-by: Ruben Olsen Lærk <ruben@lku.no>
* change the font size implementation to be simpler
* release notes
* setting the line height back
* renames
* condtion on the font changed event
* fix type check
* typecheck
* clarifying comment
* remove margin on left and right - not required
* fix import
* fix derp
* Use strict typing in useSheetValue and fix bug where query is not being updated when changed
* Release notes
* Update VRT
* Fix regression
* Update VRT
---------
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
* Summary card report
* Apply suggestions from code rabbit
* Apply suggestions from code review
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* MORE CODE RABBIT SUGGESTIONS
* typecheck fix
* change view form the details page
* added privacy filter
* Apply suggestions from code review
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* debounce
* removed binary search and changed the summary page to not use the card component
* Update packages/desktop-client/src/components/reports/spreadsheets/summary-spreadsheet.ts
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* fix on recommended code rabbit commit
* added some padding to number so it fits the window better for big numbers
* accept infinite
* feedback fixes
* Update packages/desktop-client/src/components/reports/reports/SummaryCard.tsx
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* translations
* fix on the save, linter and changed "include summary date range" to "all time divisor"
* changed MD from enhancements to feature
* typo
* change card
* typecheck
* Update packages/desktop-client/src/components/reports/SummaryNumber.tsx
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* typecheck
* changes to fit the number better
* small fix
* fix on filters
* code review
* revert code to check for height
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* filter out transfers when category is none
* add filter for parent id
* fix Category is not (nothing) as well
* lint fixups
* add special case for 'category is not nothing'
* add release notes
* adding tests
* lint fix
* use $and expression for complex condition special cases
* add tests for condition special cases
* Update packages/loot-core/src/server/accounts/rules.ts
rename subExpression to and
Co-authored-by: Koen van Staveren <koenvanstaveren@hotmail.com>
* update uses of subExpression with and
* remove stray debugger rules
* Update VRT
* Revert "Update VRT"
This reverts commit a450fc7b2457bb578e53f62d5f4201e91e9a93c4.
* make and an internal op to avoid exposing it to the UI
* feedback
---------
Co-authored-by: Koen van Staveren <koenvanstaveren@hotmail.com>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
Co-authored-by: matt <matt@fiddaman.net>
I was a little confused that I couldn't see a running balance in my
accounts until I realized that it's only shown in a specific sort order.
I think it would actually be useful to be able to see the running
balance no matter the sorted order, but until then maybe we should
clarify in the documentation.
* Update scroll provider so that it only captures the scroll on div container and not the whole window
* Fix lint + release notes
* Rewrite useScroll to be more performant by being ref based instead of state to avoid re-renders when scrolling
* Check undefined
* Rename to useScrollListener
* Remove small 1px gap under mobile nav tabs when fully open
* Cleanup
* Fix lint
* Coderabbit feedback
* seperate build folders for easier switching between web and electron builds
* gitignore
* release notes
* one directory back from electron
* spelling mistake
* Update 3801.md
* test
* making it correct
* huh
* urghh
* again
* account for api bundle which uses electron bundle for some reason
* hu-
* lets go
* remove comment
* Fixes focus ring getting stuck on last column of /accounts/budgeted screen when creating a new transaction.
* Fix lint problems with the previous commit
* Changed the way the hook is made to the cancel and add button, removing the need to change Button2
* Changed the name of variables as mentioned in PR
* fix: don't clobber server pathname
The provided server URL may already include a pathname,
so all further segments need to be appended. This also
more closely matches the name `joinURL`.
* add release notes
* use `fs.join` to avoid double slashes
* Initial Commit
Moved Budget Name to its own component for a cleaner Sidebar component.
Added pencil icon for editing budget name.
Removed Rename Budget from menu.
* Create 3593.md
* Fixed Menu Dropdown Arrow shrinks with long budget name
* Changes recommended by coderabbitai
* Fixed Lint issue
* Remove Help from Menu
* Remove menu from budget name and added Actual logo with menu
* Update VRTs
* Update VRTs
* Fix logo shrinking with long budget name issue
* Update 3593.md
* Removed Logo and pencil icon
* Update VRTs
* Removed unused classnames from SideBar and BudgetName component
* revert to upstream VRTs
* Fix loading of mobile/desktop page on window resize
* Release notes
* Fix lint
* Use useWindowSize since it matches behavior of documentElement clientWidth and clientHeight
* Debounce so that components are only reloaded when user finishes the resize
* Adjust debounce delay
* allow matching null values when not equals query filter is set
* Also fix namedParameter queries with filter
* improve tests
* release note
---------
Co-authored-by: Joel Rich <joelrich@protonmail.com>
* by check
* minor changes and TS class migration
* good starting point
* very basic testing
* fix
* basic overwrite of simple templates working
* mostly working. By and schedule don't work
* some cleanup, better async
* add notifications
* add daily weekly limits
* by is working I think
* mostly working
* some fixes, make faster
* lint, note
* note
* cleanup old stuff
* fix paths
* test fixes
* fix test
* fix note
* rabbit, and fix long goal
* lint
* some fixes
* more typing
* fix save error
* last bunny fixes
* fix save, trim schedule names
* lint
* minor fixes
* last fixes
* lint
* add function to apply template to multiple category and add button to group sidebar
* add function to apply template to multiple category and add button to group sidebar
* add correct month
* clean up code
* clean up code
* clean up code
* clean up code
* add notification and clean up
* add notification and clean up
* add notification and clean up
* add notification and clean up
* add notification and clean up
* add release note
* excluded hidden categories
* removed unused method from api
* adjust template to run on already budgeted categories
* fix typecheck
* add apply multiple as budget action and remove from api
* lint clean up
* fix notification and remove log
---------
Co-authored-by: dreptschar <dreptschar@gmail.com>
* feat: context menu on transactions
* feat: context menu's on budget page
* chore: release note
* fix: losing focus on context menu
* feat: schedules context menu
* feat: payees context menu
* feat: rules context menu
* chore: update release note
* chore: lint
* fix: broken balance movement menu
* fix: placement on context menu to be closer to cursor
* feat: context menu on budget field
* chore: lint
* Update packages/desktop-client/src/components/transactions/TransactionsTable.jsx
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
* chore: fix merge
* fix: e2e test
* fix: moving of the popover in the sidebar
* chore: lint
* chore: add feature flag
* chore: fix tsc
* chore: fix test
* Update packages/desktop-client/src/components/settings/Experimental.tsx
Co-authored-by: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
* fix: to budget button
next steps didn't work
* chore: lint
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
* adding some safety for if user has incorrect server url format
* added additional error handling for when incorrect server url has been setup
* good rabbit
This is primarily done by removing the blur effect from the overlay, and
replacing it will a translucent black.
The blur effect performs poorly on mobile devices.
* Adding a help modal for qucik reference to goal template syntax
* added release notes
* fixed misspelling of Enhancements
* fix lint errors
* Only show when Goal Template Flag is enabled
* fix lint
* Only show on Budget page
* fix lint
* Added Translation, change text formating to table (styling wip), change headers to use react-aria-component headings
* fix lint, made requested change to HelpMenuItem type
* stylized tables
* fixed type error
* Moved section headers to within Table Headers
* fix lint
* added space between last table and see more statement
* added reconcile button to account page
* add Reconcile Button in the account page
* added release note
* updated VRT snapshots
* removed Reconcile option from Account menu
* made the button minimal with tooltip and added vrt
* missing unused import
* fixed icon and button size
* fixed merge conflicts
* hide reconcile button on all account and for budget page
* fix lint from merged file
* changed reconcile button order
---------
Co-authored-by: vincenzo <dibiasev@gmail.com>
* Add tests for bug
* Add tests for unexpected behaviour
* Refactor to consistently generate valid splits with no errors
* Add release notes
* Update test names
add mention of how to access the edge build of actual, i couldn't find
it anywhere else in the documentation.
---------
Co-authored-by: Ruben Olsen Lærk <ruben@lku.no>
* added info circle and box on click
* hover working
* moved title
* release notes
* updated release notes category
* split info bubble into its own component
* text longer than 500px will be split
* extracted text width into its own file
* wip tests
* wip testing
* removed separate method and tests
* added textWidth option to Info Bubble
* updated shadow
* initial poking around
* ui changes and setting
* wip
* null check
* removed more than a month
* prettier
* todo
* get status tests
* added prefs to app.ts
* updated to use LocalPrefs bc of limitation of app.ts
* updated schedules component to use localPrefs
* removed console.log
* release notes
* renamed release noted md
* eslint fixes
* import fix
* update useEffect dependencies
* removed a comment
* moved upcoming length setting to schedule page
* removed import
* made setting collapsible and moved to the top
* fixed breaking change
* updated to work with updated synced prefs methodology
* pulled preference from db
* updated tests with mock reset
* update vrt
* per coderabbit: upcoming length null value prevention
* update test to use number inputs rather than string
* aria label added to close button
* moved before/after each blocks per coderabbitai
* fixed default value typo
* updated edit button to use slimmer style
* vrt
* vrt
* vrt
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* add duplicate name validation to sidebar, and both narrow/wide Account pages
* unify error messages and styles
* keep state for the current account name on the mobile account modal
* add release notes
* remove extra validation function
* fix typo in AccountSyncSidebar params
* don't set current account name to empty string and prevent further changes on AccountMenuModal
* lint imports
* update error message to Name x already exists
* use proper translation functions
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* add a modal to say client is wrong version, accept the risks to continue using
* user friendly error
* hooking parts up - untested
* changed approach
* release notes
* removing old comments
* cleanup old code
* feedback
* Fix rules not checking "category is nothing" when reconciling
* release notes
* Apply suggestions from code review
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* move settings to the file management area
* more settings
* giving users option to automatically move files when changing dir
* trueee
* updates
* does this fix the type issue
* weird
* translating
* release notes
* release notes
* a bit extra safety
* updating wording
* parameterising backup params
* text update
* parameterise vals
* add a notification to ensure the user knows the dir has changed
* pencil icon to save real estate
* ordering
* Rename 3500.md to 3584.md
* Update packages/desktop-client/src/components/manager/BudgetList.tsx
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
---------
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Added in a Known issues section for YNAB4 imports to cover an issue with
split transactions not receiving correct payee details.
Once this issue is resolved the documentation note can be removed:
https://github.com/actualbudget/actual/issues/3561
---------
Co-authored-by: Ruben Olsen Lærk <ruben@lku.no>
Some minor updates to the rules page to keep it in sync with the current
UI:
- Updates the list of actions and fields so the order matches the UI.
- Adds missing `category` field to the list
- Mentions you can also append/prepend to `notes`
See:
https://deploy-preview-463.www.actualbudget.org/docs/budgeting/rules/
* Update bank-factory.js
Add "Banco ActivoBank" to list of banks with a limited history
* Update README.md
* Rename README.md to 449.md
* Update 449.md
* Remove two duplicate lines
* Privacy mode: instead of blurring, use an illegible font (#3376)
* Privacy mode: no layout shift when switching mode
* fix(Spending): update for latest PrivacyFilter
* refactor(PrivacyFilter): use CSS :hover
* chore(PrivacyFilter): no privacy mode BudgetCell height regression...
https://github.com/actualbudget/actual/pull/3377?show_full=true#issuecomment-2357385371
* chore(GroupMonth): drop no-impact PrivacyFilter styles
* Add custom handler for the German bank Rheinhessen Sparkasse to the GoCardless app.
Following the guide and using the template added the code, similar to other handlers, that should match the transaction as seen in the logs when syncing my bank through Actual.
The only thing that had to be added was the notes about the transaction are stored under remittanceInformationStructured and not under remittanceInformationUnstructured.
Testing still pending.
* FIx linting errors and add release notes
Replaced the indentation from 4 spaces to 2, to fix linting error as recommended by the yarn test.
Added the release notes file 454.md.
* FIx linting errors (second try) and fix error in the release notes
* Fix linting errors
* Update src/app-gocardless/bank-factory.js
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update src/app-gocardless/bank-factory.js
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update src/app-gocardless/banks/spk_worms_alzey_ried_malade51wor.js
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Update upcoming-release-notes/454.md
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Rename file "spk-worms-alzey-ried-malade51wor.js"
* Remove functions normalizeAccount and CalculateStartingBalance
Since no changes were made to the default functions, they should be deleted from this specific bank (SPK_WORMS_ALZEY_RIED_MALADE51WOR).
* Correct linting error
Remove import of unsed variables.
---------
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
* Add advanced setting to reload app from server
* Add change notes
* Automatically reload when API call is redirected
* Error on redirect so we don't use the response
* Remove setting to reload
* Update release notes
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Undo auto transfer notes + auto notes for cover
* Release notes
* Fix notes
* Fix notes undo
* Do not show clicked category on transfer or cover menus
* Fix typecheck error
* typecheck
* Fix removeCategoriesFromGroups
* restart server silently on add self signed cert and add some logging
* release notes
* fix name
* updating names to be more specific
* removing setloading
* feedback
1. Moved _Filtering_ from _Reports & Filters_ to _Accounts &
Transactions_ as it's are more natural place to have the filter
documentation.
2. Renamed _Reports & Filters_ to just _Reports_
3. Moved _Schedules_ out of _Budgeting_ to better reflect the sidebar
items in the program.
4. Based on feedback from Michael Burnside on Discord, moved the
envelope budgeting docs higher up in the menu. What he wrote on Discord:
_I think the Envelope Budgeting doc should be moved up in the list. It's
important to understand the method and the "Why" first, so that users
can make sense of the tool and the "how". I know there's a link at the
top of the Starting Fresh article, but people tend to go top to bottom
in the contents (if they're reading at all)._
5. Moved _A Tour of Actual_ out of _Getting started_ as it's marketing
and not getting started with the program.
6. Moved _Starting Fresh_ higher up to differentiate between the tech
stuff and the why stuff.
**There is no change in content - just trying to make the menu a better
place to navigate**
---------
Co-authored-by: Ruben Olsen Lærk <ruben.olsen@dnb.no>
add some basic guidelines about how to write the docs so a shared voice is heard when using the documentation.
---------
Co-authored-by: Zeus\Herb <herb@win.dows>
Co-authored-by: Ruben Olsen Lærk <ruben.olsen@dnb.no>
Co-authored-by: Ruben Olsen Lærk <ruben@lku.no>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
docker compose down is not needed, and running it before pulling updated
images causes longer service downtime than required.
Simply running `docker compose up -d` after `docker compose pull` will
recreate all containers that changed (by either image version or other
settings in the compose file).
* hardening the file system access by added retrys
* release notees
* remove unneeded console log
* promise-retry instead of my own
* tiny bit more info
* capital U
* Update bank-factory.js
Added NORDEA_NDEADKKK (Nordea Personal Denmark) to the list BANKS_WITH_LIMITED_HISTORY
* Create 340.md
* Rename 340.md to 440.md
* Rename 440.md to 441.md
* solves the problem but creates a vulnerability
* sake...
* working but need to specify rootca.pem
* works
* being flexible on the cert names, as long as its a crt or pem
* remove console logs
* initial setup for adding cert
* caps
* comments
* fix ts strict
* rewrote it
* release notes
* remove unneeded
* https no polyfill
* removing the cert reference if it is not found
* moving full stop
* adding notarization stuff back in
* win csc settings so win build doesnt try to sign with mac stuff
* windows doesnt need to know about mac build
* teamid env var instead of config val as per docs
* for testing purposes only
* probably wont work
* yet, didnt work
* try this
* update notarize
* removing test code
* add release notes
* packaging different architectures for windows
* appx for the windows store app hosting
* remove unneeded applicationid
* adding windows store assets
* adding images
* appx added to artifacts
* add appx to release
* remove override build params
* being specific about the mac build - default is dmg
* are these all needed.. Seems so
* removing appx from the release notes as its only for the windows store
* moving appxs to a different artifact for smaller download
* Update electron-pr.yml
* update version
* update release process to remove actual-windows.exe because it can possible be the wrong arch
* Display splits in mobile previews
* Display splits in desktop previews
* UI fix: hide checkboxes on preview child transactions
* UI fix: show notes on preview transactions
* Add release notes
* Update vrt for mobile padding fix
* Fix status display
* Collapse split previews by default
* PR feedback: fix issues with split payee
* Update new VRT with spacing from this PR
* hide target category from cover overspending list
* release note
* suggestions from joel-jeremy
* useMemo and better types
* add change to mobile
* fix build
* fix mobile
* Automatically focus inputs, or the primary button, in modals.
* Set focus on more modals.
* focus mobile transaction edits
* add release note
* fix linter
* fix linter
* Added configuration to CSV importer that allows to skip lines
* Fixed several type / parser check when import is executed with a different CSV structure on accounts with transactions
* Fixed linter warning
* Reverted changes on sync.ts as initial error is not occuring anymore.
This will also fix the tests again
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
many people may not know what 'regex' is. now matches filters page. not
sure why i didn't update both places when i got the review last time,
sorry!
---------
Co-authored-by: Robert Dyer <rdyer@unl.edu>
* Remove some `any` types from the API
* Add release notes
* No backwards-incompatible changes
* Update tests to reflect API changes
* PR feedback: standardize on id for deletes
* PR feedback: restore partial updates
* add electron logging to main browser process console
* add logging
* removing old way
* release notes
* adding some logs in to test mac build
* repent satan
* i caste yeee oooott sinner
* derp
* hmmm<
* forcing nodegyprebuild
* not like this.... Not like this... 😢
* hmm
* dunno
* will it recognise it if i link it manually.. 👀
* give up
* rebuild
* merge asars fasle
* update package
* manually do it ffs work damnit
* remove the cmd
* dont rebuild cause i build it manually
* dafuq is this, two bettersqlite modules installed huhhhhh
* test
* does this work?
* bloody hell
* couple more logs
* test this out
* arch in name
* adding the rebuild step back into first build
* try rebuild before pack - so we know what arch we need
* having a laugh
* tidying up
* release notes
* move package up a bit
* exit process if no electron verison
* fix: i18n: Use 'en' as default language
Using 'cimode' as default language code will return the
translation keys verbatim without doing interpolation.
This is unwanted unless working directly on localization.
Fixes#3240
* Add release note
1. Added information about the number of syncs on the free tier (which
is 50).
2. Added link to documentation on how GoCardless counts connections.
3. Added alt-text to all images.
4. Fixed a typo in one of the numeration of the steps in how to link a
GoCardless account to AB - step 8 was repeated twice.
---------
Co-authored-by: Ruben Olsen Lærk <ruben.olsen@dnb.no>
* fix(#2562): Prevent transaction deduplication for imported transactions (#2770)
* fix(#2562): Prevent transaction deduplication for imported transactions
* chore(): eslint fixes
* chore(): Add release note file
* fix(#2562): Allow transaction deduplication if transaction being imported is null
* chore: Rename release note, add strazto as author
* test(loot-core): Add test case for new logic
* docs(release-notes.loot-core): Add pmoon00 as author
* test(loot-core): Update test case to not be affected by unrelated bug
* test(loot-core): fix linter
---------
Co-authored-by: Mohamed El Mahdali <mohamed.elmahdali.developer@gmail.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Add Handling For goCardless Fuzzy Search
* Rename Release Note File
* Rename Release Notes File
* Fix UseFuzzySearchV2 After Merge Conflict
* Update Fuzzy Search Query To Include New Columns
* Update useFuzzyMatchV2 Variable To useStrictIdChecking
* Update useStrictIdChecking To Only Be Used If It's Not Syncing From External Sources
---------
Co-authored-by: Matthew Strasiotto <39424834+strazto@users.noreply.github.com>
Co-authored-by: Mohamed El Mahdali <mohamed.elmahdali.developer@gmail.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Add "S" hotkey for viewing/linking schedules.
* Default to filtering by account name when linking a schedule to a transaction.
* Work on 'all accounts' page.
* Update help modal
* add release note
First, the way to enable it has changed so that is updated.
Second, the UI now calls it "tracking" and "envelope" budgeting, so the
text and filenames were updated to reflect the new "tracking" name.
Added link to converter from Trumf Visa PDF invoice to Actual Budget
friendly CSV import file.
---------
Co-authored-by: Ruben Olsen Lærk <ruben.olsen@dnb.no>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Fly.io no longer offers free cloud hosting; it is pay as you go with
actual usage billed monthly. I calculated between Pikapods $1.4 per
month and Fly.io's $1.5 per month and chose Pikapods since it's one
click and it's cheaper. If there's anything wrong in my calculations,
please let me know.
* Use csv fields with name payee/notes as defaults for Payee/Notes in getInitialMappings
* Add release notes
* Run lint
* Use or instead of nullish coalesce to match other fields
* revert built in number parse
* note
* tests
* remove trivial test
* more tests
---------
Co-authored-by: Julian Dominguez-Schatz <julian.dominguezschatz@gmail.com>
Imported hidden categories had the parent category entity id (UUID)
appended to the end of the name, making the category name quite long
and somewhat hard to read.
Remove the entity id from the end, and replace the apostrophe that
divides the master category from the sub category with a forward slash.
This shortens the name, ensuring a better chance that the full
category name fits into the default table cell width.
Co-authored-by: DJ Mountney <david@twkie.net>
* update conditionExists function to compare filter options
* rename method
* array.some instead of for loop
* release note
* refactor the condition search
* 🐛 (modals) allow content to be vertically scrollable
Closes#3079
* Feedback: overfloww auto
* fix modal scrollbar style
* dont need to spread
* lint 😞
* Update 3161.md
* adding width 100% to inputwithcontent
---------
Co-authored-by: Michael Clark <5285928+MikesGlitch@users.noreply.github.com>
This adds the description about how a `goal` template line works with
some examples.
Also some minor tweaks to the page
matches actualbudget/actual#3012
* update the parser
* can set goal value, but there are errors and it still needs to look for a balance and not month amount
* fix apply budget
* un change
* note
* lint
* working processing, need to set colors based on month somehow
* add long goal option to the gui and db
* note, lint
* fix cleanup
* fix
* make mobile work, lint
* fix bindings
* more proper
* lint
* fix single category run
* don't unset goal values if they don't have a template too
* lint
* more lint
* fix check when no template exists
* rearrange to get around the issue of inconsistent colors
* lint
* typecheck
* add field to aql schema
* fixes
* cleanup
* migration date
* Autocomplete sort now ignores diacritics
* Payees tab now takes into account diacritics
* Category Autocomplete now ignores diacritics
* Schedules filter now ignore diacritics
* Added release note
* Fixed type error
* Added normalisation to manage rules filter
* Added normalisation to $like operator
* Added normalisation function to loot-core
* Fixed type error & added normalisation to notlike
* Fixed unit tests
* Changed normalise to use loot-core/shared on desktop
* Linting fix
* Use dicts to look up common information
* Show abbreviated payees in split payee section
* Update vrt
* fix: missing transfer icon
* Add release notes
* fix: update vrt again
* bugfix: failing edge cases
* fix: stale test
* fix: stale test, p2 (+ vrt)
* add idea of common payee, a top 10 frequently used payee
* add button in payee to mark as favorite
* cleanup
* minor fixes
* add release notes and make favorite optional
* fix TransactionsTable test
* lint and release notes
* rename section, resort list to ensure both are sorted
* don't show common, move bookmarked to menu
* add a limit on adding common payees
* linting
* reduce to 5 commonly used payees by default
* linting
* more linting
* update migrate timestamp
* more linting
* fix api name, bump migrate timestamp
* Add star to payee dropdown and rename section to 'Suggested Payees'
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Add computed padding for handling clipped Net worth amounts
* Add comment, early handle 5 character case
* Add release note
* Use currency decimal preference for Net Worth graph Y-axis ticks
* use number format preference for `BarLineGraph` ticks
* use number format preference for checking `NetWorthGraph` tick overflow
* prevent `numberFormatConfig` overwrite
`getNumberFormat` uses `numberFormatConfig` as the default argument;
passing just `{ hideFraction: true }` caused `numberFormatConfig.format`
to be ignored
* add release note
* use `amountToCurrencyNoDecimal` instead for `{BarLine,NetWorth}Graph` ticks
* Split transaction handling for csv export (#2973)
* refactor, zero-amt parents and add split_amount
change how child/parents are counted to remove dependence on `sort_order` being negative. for export, give parent transactions a 0 in the `amount` column, but add a new column with their `split_amount` for other programs to possibly import
---------
Co-authored-by: Zeus\Herb <herb@win.dows>
Co-authored-by: DJ Mountney <david.mountney@twkie.net>
* Add help modal for keyboard shortcuts.
* add release note
* fix linter
* fix typecheck
* fix linter
* use component syntax for GroupHeading
* use component syntax for Shortcut
* fix linter
* use component syntax for KeyIcon
* refactor to support different dialogs
* show different help based on current page
* fix linter
* reword help
* capitalize letters
* show cmd on mac
* stop event propagation
* dont show if a modal is already open
* remove unused import
* rename modal
* move where location check happens
* dont stop event
* allow typing '?' in inputs
* better filter
* extract function
* fix linter
* dont show if filter popover is visible
* fix linter
* fix wrong shortcut, support SHIFT
* fix linter
* fix conditional
The current Tour was lacking for people curious about what Actual looks
like, without going into "full teaching manual mode".
What I have done:
- Consistent screenshots
- Added some explanatory text and links to the actual manual pages
I am fully aware that there is a fine line between some of these pages
and manual pages.
Anyway - we should now have something to show the YNABers and MINTers of
the world :-)
Ideally, we should have a video introduction as the "tour" - but given
how much change we have in the program, this would kill the poor guy/gal
who wants to maintain such a video.
PS: I go on vacation on Saturday July 13th - so any changes I am not
able to do after that time.
---------
Co-authored-by: Ruben Olsen Lærk <ruben.olsen@dnb.no>
- Added links to the My Edenred Portal bank sync and Actual Task repos.
- Moved some links from Others into Various utilities to enhance
Actual's functionality, as I expect we will get more and more of these
utilities available. Let's keep Other for pure non-functional technical
stuff
Original posting:
https://discord.com/channels/937901803608096828/1027831756545609789/1260289369139580988
I did source GitHub for other interesting projects and have added those
also.
---------
Co-authored-by: Ruben Olsen Lærk <ruben.olsen@dnb.no>
This is a super rough start for a download page for the website. Please
make contributions since this is pretty bad so far. Can you tell Im not
a front end dev? 😆
In order for the links to always work we either need to:
* Modify our electron build to not add versions to the filename
* Add some way for the page to know the current version and use that in
the requested filename
For now they are hard coded with the version so they wont work next
month unless something changes.
For now the OS logos are colored so that they can be seen in both light
and dark modes. Im sure there is a better way than making them purple.
I have added a _Roadmaps for new users_ to help people decide on their
next step. The roadmaps are primarily aimed at non-technical people.
I saw the reason for doing this after getting a few questions for
non-techies people I know about "ehhh... where do I start?" ... "I did
install the desktop software, how to get this into my cell phone", etc.
---------
Co-authored-by: Ruben Olsen Lærk <ruben.olsen@dnb.no>
* Disable interactivity on preview statuses
These have no click action but have a focus effect of a purple circle
(residual from the "Cleared" checkbox styling) that looks a bit glitchy.
* Add release notes
* Exclude status field from keyboard navigation
I have extended the PikaPods documentation to cater to non-technical
users. This should be quite straight forward.
---------
Co-authored-by: Ruben Olsen Lærk <ruben.olsen@dnb.no>
* Add computed padding for handling clipped Net worth amounts
* Add comment, early handle 5 character case
* Add release note
* Update packages/desktop-client/src/components/reports/graphs/NetWorthGraph.tsx
Co-authored-by: Robert Dyer <rdyer@unl.edu>
* Update vrt snapshots
* Fix NetWorthGraph cutoff when `compact` is true
This happens in case of `ReportCard`
* Update VRT snapshots to revert to original
* Revert snapshots to original
* vrt
---------
Co-authored-by: Robert Dyer <rdyer@unl.edu>
Co-authored-by: youngcw <calebyoung94@gmail.com>
update the readme to have more of a present date, clean up various small
grammar and formatting throughout the page.
clarify that the docs donʻt have release notes written in the same way
as the rest of the project. include information about what makes it to
the git commit messages to encourage people to write good PRs.
add note that screenshots should be taken in light mode
Notes and edits welcome.
---------
Co-authored-by: Zeus\Herb <herb@win.dows>
Add information about "matches" being regex.
~~PR 9/10ths of the way there, still need to update screenshots. Is
there a style policy regarding dark/light mode screenshots? It seems
like currently it swaps between the two.~~
---------
Co-authored-by: Zeus\Herb <herb@win.dows>
* Adds ability to resize sidebar
* Adds release notes
* Changes to feature
* lint
* change translateX to use % for both states
* vrt
* set max sidebar width, cleanup
* set min and max widths
* min width to 200px
* changes resizable sidebar to use re-resizable instead off css resize
* vrt
* vrt
We now have quite a few changes - not only moving the *generic envelope
budget* stuff out.
In short:
* Added section on handling cash. The idea behind this is to give people
that are new to this kind of budgeting, an easy idea on what to do with
cash. Even seasoned Zero-Summers can forget about this simple trick :-)
* Amended Setting up your Budget Categories with a small tip.
* Added sub section Group Your Expense Categories. I have guided a lot
of people on using Zero-Sum software (Ynab, Financier - and now Actual)
- and the grouping I propose have shown to help people to not touch
category money they should not touch.
* Assigning Available Funds is a complete rewrite - this is "Tips" we
removed from the envelope-budget.md file - I will add a link back into
the getting-started document when both PRs has been done.
* Added a section on finding your budget number if you do not want, or
can use historical data
* Keep Budgeting was amended
* Added a header before text on next step.
OBSERVATIONS: I think this document is too big - and it should be split
into it's 5 parts (+ introduction).
---------
Co-authored-by: Ruben Olsen Lærk <ruben.olsen@dnb.no>
I have added this page because I think the software used for envelope
budgeting should definitively have some documentation on how to actually
do envelope budgeting.
---------
Co-authored-by: Ruben Olsen Lærk <ruben.olsen@dnb.no>
from the docs on bank sync specifically, include best practices notes in
the FAQ to recommend limiting past transactions
Fixes#363
---------
Co-authored-by: Zeus\Herb <herb@win.dows>
* Remove the trafico pr review triggers
- We loose triggers for Approved and Changes Requested
- They weren't working on forks anyways
* Add release note
* Reapply rules to split transactions when the parent changes
Concretely, this enables the "standard" workflow for
split-transaction-entry on desktop, where you enter the payee first, and
then edit the amount afterwards (and expect splits in a rule to apply when
you edit the amount).
* Add release notes
* Fix bug in first field below parent transaction
* Update vrt
some of the features on the homepage seemed there just to pad out the
list. The list if decently long and interesting so I removed Payees and
Split transactions. Those seem pretty expected and not that interesting
as a called out feature.
I modified the budgeting feature to be more specific. Just saying we
have budgeting is a bit redundant for a budgeting app.
This adds missing documentation for existing API calls and removes one
that does not exist.
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
fly.io pricing details have changed for new users. new users can only
sign up for a pay-as-you-go plan where usage is billed monthly. as this
is about deploying actual, it should be aimed at new users, not
returning users with maybe-existing legacy plans(like the hobby plan)
details about the legacy plans can still be found at the linked page.
Updated experimental features to match what's listed in app.
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: Robert Dyer <rdyer@unl.edu>
* FIX: For Report Budget, the income categories are negative when using 'Set budgets to 3 month average'. This fix solves this issue
* added 2862.md
* Ajustments for category menu not closing properly and fix to negative values for income category copy budget
* fix lint
* changed variable name without changing references after lint ajust
* retrigger checks
* smaller 2862.md
* Update main.ts - Handle Null Org Domain in SimpleFIN
SimpleFIN (currently) uses the org domain as the bank ID. According to SimpleFIN docs, this can possibly be a null value, as can the org name. However, at least one of the two must be present.
In Actual, org name is set to "Unknown" if it comes in as null, but the bank_id (previously just set to the org domain) was not, resulting in a null bank_id value at times.
* Create 2836.md
* Fix release notes format.
* Small change to release note.
* Change to use new org Id as fallback for bank_id
* Add orgId property, for new org id from SimpleFIN
* Make balance movement menus only appear on relevant conditions
* Release notes
* Hide to be budgeted when covering overbudgeted
* Fix typecheck error
* Added Year comparsion feature. Also fixed bug with greater than 28 days.
* Removed comments and console.logs
* Create 2806.md
* Cleaned up code
* Hide's graph if no data, and hides average, last month or last year if no data.
* Apply suggestions from code review
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
* Fixed spent MTD and last MTD. Added in all suggestions from carkom.
* Update 2806.md
* Added changes required by carkom #2
* Couple more fixes, only show graph if have data for last month (as requested by carkom)
* Removed console.log that was mistakenly added.
* removed useEffect
* Add files via upload
* Remove async function
* lint fix
* fixed carkom requests & added in fix for YAxis issues
* Fixed couple of mistakes. Removed Y Axis fix (new PR will be created)
* Cleanup code
* Fix mode buttons
* Removed console.log...
* Update showAverage Logic
* Update switch logic
default should be default for everyone other part of the graph.
* Add Math.abs
* lint fix
---------
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
* fix(#2562): Prevent transaction deduplication for imported transactions
* chore(): eslint fixes
* chore(): Add release note file
* fix(#2562): Allow transaction deduplication if transaction being imported is null
* chore: Rename release note, add strazto as author
* test(loot-core): Add test case for new logic
* docs(release-notes.loot-core): Add pmoon00 as author
* test(loot-core): Update test case to not be affected by unrelated bug
* test(loot-core): fix linter
---------
Co-authored-by: Mohamed El Mahdali <mohamed.elmahdali.developer@gmail.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Use amount input on rules page instead of plain text field
* Add release notes
* Remove unneeded attributes
* Support percent formatting
* Lint + typecheck
* Fix latent bug
* Handle existing data correctly
* PR feedback: naming
* PR feedback: force percent to a positive number
* PR feedback: reset percent to 100 upon changing input type
* Fix input clamping behaviour
* Empty commit to bump ci
* PR feedback: prop cleanup
* PR feedback: no default number format
* PR feedback: cosmetic refactor
* Show account notes in tooltip on sidebar
* add release note
* Only show tooltip for accounts
* Split account name and note into separate nodes
* Add padding inside tooltip
* Move tooltip to the right
* remove commented code
* Tweak the visual design
* Fix lint
* adjust padding
* Update packages/desktop-client/src/components/sidebar/Account.tsx
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* refactor to avoid function
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
This updates the home page documentation with some content enhancement
as per the style guide (mainly MSTP, Google Developer Style Guide).
Based on the feedback, i will further add more section to enhance the
home page to make it like a home for all the documentation for easier
navigation.
For now, this PR kepts the section that are necessary to address user's
query regarding getting started with Actual and understanding the
Actual's starter kit.
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Update filter amount to filter incoming and outgoing transactions
* Add test and fix logic
* Added release note
* Update with linter fixes
* Update new ammount filter to apply to all ops
* Fix lint
* Add API for working with rules
* Add release note
* Change 'payees-get-rules' return type to RuleEntity[]
* Reuse existing handlers, make names not have 'payee', add two getters
* fix linter
* fix bad handler name
* fix broken handler name
* add test cases for 'getPayeeRules'
* fix broken test
* Remove unused locals
* Update packages/loot-core/src/types/api-handlers.d.ts
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Update packages/loot-core/src/types/server-handlers.d.ts
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* Strict types and slightly improved return interface
* update test comment to match new API names
* fix linter issues
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* [Mobile] Add schedule name and date to scheduled transaction modal
* useRef to prevent rerenders
* Release notes
* Fix typecheck error
* Fix lint errors
* Update schedule font
* Heavier font weight
* Create types for the external versions of entities meant for the API
- Otherwise the types used in the API were actually wrong vs the data we were sending
* Add release note
* Added loginMethod config option
Added a new config option loginMethod that can be password (default) or header for header authentication. This value is returned to the client to be used on the front end
---------
Signed-off-by: dependabot[bot] <support@github.com>
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
Co-authored-by: DJ Mountney <david.mountney@twkie.net>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Johannes Löthberg <johannes@kyriasis.com>
Co-authored-by: Matt Fiddaman <github@m.fiddaman.uk>
Co-authored-by: DJ Mountney <david@twkie.net>
* Fix some additional incorrect types
- This is part of working towards having enough correct types to be able to run tsc on our packed api without error.
- Working towards being able to ship types for the api in the package
* Add release note
* monthly Spending
* Add Average
* notes
* title
* date filter
* TS fixes and hide average when no data
* fix average tooltip and relabel x-axis
* Wording/verbiage
* filters changes
* feature flag
* networth card fix
* Fix menuItemTextHeader contrast in dark mode
* release note
* darken menu background and change accent colour to purple in dark theme
* change menu keybind accept colour to purple in midnight theme
* update release note
* fix menuBorder colour
* Add To Be Budgeted category to cover and transfer modal
* Release notes
* Fix To Be Budgeted input selection
* Fix typecheck error
* Fix duplicate modals in firefox
* Fix lint error
* Add UI test for validating that split transaction rules work as expected
* Apply suggestions from code review
Renames split-transactions-add to add-split-transactions
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* Define id for finding splitactions on the page wher its used
---------
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* add flatpack to electron build
* note
* add to workflow
* try to fix workflow
* typos
* workflow
* work
* update
* add repo
* update other electron workflow
* stable doesn't work
* fix version
* Mobile collapsible budget groups
* Release notes
* VRT updates
* No tap highlight when clicking collapse/uncollapse button
* Income group no tap highlight
* No highlight on hover
* Allow setting accessValidForDays per bank
This also stops taking `accessValidForDays` from the client since it's
hardcoded there anyway and it's simpler to just have these per-bank
values in one place.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* Get the max allowed maxHistoricalDays value from the GoCardless API
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* Upgrade nordigen-node to 1.4.0
Contrary to the claims in the nordigen-node changelog 1.3.0 did *not*
fix the missing support for passing in accessValidForDays, so we have to
upgrade to 1.4.0 to actually get the fix.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
---------
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* Dim categories hidden by their groups
* Dim hidden cats on mobile view
* Do not show hide/show menu on mobile for categories in hidden groups
* Rename catGroup to categoryGroup
* Fix lint issue
* Hide menu line
* Pass in categoryGroup instead of isHidden
* avoid need for extra local
* fix lint issues
* Do not allow hiding income category group
* add release note
* rename file
* Migrate DB so income groups are not hidden
* Update migration to explicitly match on is_income = 1
* Use desktop colors for mobile autocomplete modals
* Release notes
* Color updates
* Color updates
* Update close button
* Fix typecheck
* Rename to ModalCloseButton
* Update ModalTitle
I think there is a better example than the one I've proposed here. I'm
not convinced the example I've given would even provide an expected
result to the user. I'd appreciate any feedback of those interested and
the PR #2480 could be improved to deliver more expected results.
* added green700 (g3) to highlight text in PayeeAutocomplete and CategoryAutocomplete
* added upcoming release note doc for Isuee 2488
* modified background and text to meet WCAG AA compliance for contrast
* updated code for autocomplete highlight on menu items
* fixed linting errors and renamed release note
* updated release note category from 'bug' to 'bugfix'
* fixing the light theme
---------
Co-authored-by: Jenn Cox <jenncox@Jenns-MacBook-Air.local>
* add group enhancement
* warnings
* note
* add more group functions
* add Global: to differentiate warning from group warnings
* weights not properly recorded for sinking groups, safeNumber error
* modify exiting LineGraph to track budget items over time
* linter pass 1
* increase line weight, add sorting and colour to tooltip
* second lint pass
* add release note
* use new disabledLists, format tooltip, other nits from review
* add margins to LineGraph
* adding missed linting
* remove new line icon, add disable options for split, legend, label
* Update ReportTopbar.jsx
Remove unneeded lines
* lint fix
* SVGChart
---------
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
All banks are supposed to provide at least 90 days of access.
As of July 2023 EEA banks are required to allow access for up to 180
days[0], but this does not apply to UK banks, and apparently there might
still be EEA banks which don't comply with the new regulations.
We should consider eventually defaulting to 180 days and allowing
per-bank and maybe per-country overrides, but bumping it to 90 days
immediately provides a better user experience.
[0]: https://nordigen.zendesk.com/hc/en-gb/articles/13239212055581-EEA-180-day-access
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* sort of working
* fix null condition, move buttons up
* visual and workflow updates
* update colors on hover
* release note
* fix another condition that inserted null
* when custom reports were cold-reloaded, the selections would be null crashing the page
* add release notes for PR
* fix typo in release note file name
Removed api methods that do not exist. Since they don't exist - they
should not be in the docs.
It would be nice to implement them though.. but until they are
implemented - lets not mislead people.
* cleanup: Move account sync indicators to the left on mobile
* cleanup: account sync indicators on mobile should show pending/failed syncs
* feature: show account sync indicator when viewing account on mobile
* fix lint issues
* add release note
Reformatted the page, reworded some paragraphs, and added more
information about Docker for clarity.
After having to go through these steps myself, I found it might be
helpful to merge some of my suggested changes for others to view.
Added clarity about migrating from YNAB or Mint to Actual.
Corrected grammatical error about what Actual officially supports for
importing from other budgeting apps.
* Fix flaky transfer e2e test
- If tests ran too fast, the transactions wouldn't finish rendering
before the select of the transactions was attempted.
* Add release note
* Fix mobile UX, issue #2079
* upcoming-release-notes
* Fix navigation bar buttons not fully displayed
* pill size changed, exported nav bar height
* Edit navigation bar const
Edit nav bar pill color
* Removed export
* Fixes release notes
* Fixed formatting
* Fix mobile UX, issue #2079
* upcoming-release-notes
* Fix navigation bar buttons not fully displayed
* pill size changed, exported nav bar height
* Edit navigation bar const
Edit nav bar pill color
* Removed export
* Fixes release notes
* Fixed formatting
* Test schedules and mobile images created
* Reverted schedules checks test images
* add log messages to schedule templates
* log the included schedules
* more log output
* use a negate filter for sinking funds
* carve out a top out exception if no sinking funds
* note
Explain advantages of setting an opening balance when starting from
scratch with Actual and Go Cardless
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
* Adds option to make a transfer from two selected transactions
- Transactions amount must match
- Transactions must be from different accounts
- Split transactions not eligible
This updates:
1) Dated examples to reference 2024 and 2025 (rather than 2021 and 2022)
2) Adds a warning to reproduce schedule names exactly in templates
This PR removes the migration page from Full Sync to Simple Sync.
This page was needed 16 months ago when a breaking change was merged to
resolve issues with the sync algorithm. Given that there have been over
16 releases since this change, most users will never encounter this
issue.
* Add plugin for offline PWA support
* Add release notes
* Attempt to fix kcab fetch issue
* Fix type errors
* Cache more file types
* Empty commit to try to bump action
* Attempt to fix fonts
mostly some more detailed advice in the starting fresh doc. Im trying to
make the budgeting advice be more centralized instead of being in random
places
A few minor tweaks
A few call outs that simplefin is not just a community thing anymore
* Add split creation UI to rule creation modal
* Support applying splits when rules execute
* fix: deserialize transaction before running rules
According to how rules are run in other places in the app, we should be
supplying a "deserialized" (i.e., integer-for-amount and ISO date)
transaction rather than a "serialized" (amount-plus-formatted-date) one.
This fixes a crash in how split transactions are applied, as well as
date-based rules not applying correctly previously (any rule with a date
condition would never match on mobile).
* Add release notes
* Fix missing types pulled in from master
* PR feedback: use `getActions`
* PR feedback: use `flatMap`
* Fix action deletion
* Don't flicker upon split deletion
* Let users specify parent transaction actions (e.g. linking schedules)
* Support empty splits
* Revert adding `no-op` action type
* Support splits by percent
* Fix types
* Fix crash on transactions page when posting a transaction
The crash would probably have occurred in other places too with
auto-posting schedules :/
* Fix a bug where schedules wouldn't be marked as completed
This was because the query that we previously used didn't select parent
transactions, so no transaction was marked as being scheduled (since
only parent transactions have schedule IDs).
* Add feature flag
* Limit set actions within splits to fewer fields
* Fix merge conflict
* Don't run split rules if feature is disabled
* Fix percent-based splits not applying
* Fix crash when editing parent transaction amount
* Auto-format
* Attempt to fix failing tests
* More test/bug fixes
* Add an extra split at the end if there is a remaining amount
* Make sure split has correct values for dynamic remainder
* Remove extraneous console.log
* feat: Don't allow duplicate cat-groups in budget
* Add release notes
* fix: error message
* pass group instead of name for accurate error message
* improve error message
* Some initial UI work for adding SimpleFin.
* SimpleFin proof of concept working.
* Adds linking & unlinking to existing accounts through the account menu UI.
* Added loading and lint fixes.
* Lint changes.
* Added release notes.
* Typecheck cleanup.
* Import, lint, typecheck cleanups.
* More typecheck cleanup.
* Refactored language for consistency.
* Added default institution name.
* Lint cleanup.
* Addressed change requests.
* Added a default to migration, made variables consistent, added feature flag.
* Added account_sync_source to server schema.
* Adds account_sync_source to test.
* Fix for typecheck.
* Attempt to make typecheck happy.
* Added strict ignore.
* Moved account_sync_source to the right model (face palm).
* Hotfix for institution format.
* Lint cleanup.
* Removed unnecessary promise.all.
* Lint cleanup.
* Initial support for SimpleFin.
* Added release notes and lint cleanup.
* Changed some notes for better context.
* Fixed logic.
* Changes per requests on PR.
* More cleanup of null checks.
* Bundle loot-core types into the API
So we can have loot-core be the source of truth
for some types that get passed through
- Improves downstream development with API by including types
- Use path aliases for dist vs dev tsconfigs
- Convert api index to typescript as example
- Permit ts-ignore for issues with our version of typescript
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Restore ability to use console.log in vite
- Swap our swc plugin to remove-react-properties
- Configure remove-react-properties to preserve our testids
* Change the vite chunk filename hash usage
- Change to more closely match the . syntax we use with webpack
- This should fix some issues with our size compare as well
* Account for chunks being base64
* Allow case insensitive ynab5 import for special 'starting balance' payee
* set upcoming release number to related github issue
* extract string comparison into separate function
and reuse when checking starting balance/s on ynab4 import
* make all category group checks case insensitive
when importing from ynab5 to make the check strategy consistent when importing from ynab5
* extract findById into sreusable function
to 'simplify' usage
* Add null check
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
---------
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
* Proof of concept for switching desktop-client to vite
* Fix other packages ts tests issues
* Update jsx tests to use vitest instead of jest
* Inject our global shims properly
* Add comment regarding new plugin
* Cleanup unnessary change after rebase
* Fix inter fonts pathing
* Remove manual chunks sizes for now
Just set the limit higher
* Bring back size compare
* Suppress victory warnings
* Remove craco config now that it's not used
* Add vite basic ssl plugin
- This autogenerates self-signed certs in dev mode when HTTPS env is set
- Made to match the CRA behaviour
* Add release note
* Remove warning suppression for victory
- Updated to a rollup version that includes the fix
* Add proper types to runHandler
- Args and return values from runHandler should now work within loot core
- Updated some of the handler types to be more accurate
While deploying with Traefik I found two small errors in the
documentation.
First is the duplicate line, the second is the missing line so that
Traefik knows on which port it should send the traffic to.
* Request active edit on focus
* Release notes
* Track previous focus state
* use inputRef to focus
* Focus total amount effect
* Run active edit action synchronously
* Revert unneeded changes
* Run cleanup synchronously
* Cleanup
* runAction
* Space
* Negate schedule amount to budget if income
* Release notes
* Determine sign at initial calc
To ensure no unintended impact to remainder calcs etc.
* Lint fixes
I think this fixes an issue where the links on the page don't work if
you get to the page via discord link.
The root issue is the same as
https://github.com/facebook/docusaurus/issues/2298
We may need to go through and update the links in the website, or maybe
someone can take the time to migrate the website to docusaurus v3.
We have a blog, so I wrote a post for it.
Its about how I use the goal templates in the hopes that it will inspire
some people on how they can use goals and some budgeting strategy baked
in.
---------
Signed-off-by: check-spelling-bot <check-spelling-bot@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Matiss Janis Aboltins <MatissJanis@users.noreply.github.com>
The question of not having contains under payee in rules gets asked a
lot. I added an example for it.
I also changed the name of that page to "Rules Examples" to be more
clear on what it is.
* Add "end" field with date/count options
* Use "end" field to generate schedule
* Show "end" field in recurring description
* Disable weekend before/after picker when not enabled
* Add release notes
* Fix failing typechecks
* Add some description tests
* PR feedback
* 'Features', not 'Feature'
* Fix goal templates infinite loop
* Empty commit to bump ci
* Fix bug where schedule templates in the past would apply incorrectly
For example, if you had a schedule which started in November 2023 for
1.00, and you applied the schedule in October 2023, then you would end
up with a value of 0.50 applied in October.
* Fix handling of schedules with an end date
This commit also includes a refactor of the skip-weekend logic: rather
than referring only to dates with skipped weekends (which requires
checking whether the "next date" request worked correctly), we track a
"base date" which is the previous value of the schedule according to the
rrule, excluding any weekend-skipping. This lets us use `addDays(baseDate, 1)`
to get the next occurrence, regardless of the weekend behaviour.
Doing things this way ensures that the loop will always make progress.
* Only compute skipped weekend if weekend skips were requested
* Fix typo in iterate-schedule-occurrences code
We should be using `nextBaseDate` to derive the next base date, not
`nextDate`; this is because we want the base date to be guaranteed to
make progress in each loop iteration, so we can finish in at most 30
iterations without duplicate base dates.
* Use const
* Revert const -> let for one mutable variable
Added a dark mode callout in the feature list.
Working on dynamically switching between dark and light screenshots when
the page switches themes.
I pulled images from the VRT tests to use for dark images. They are
pretty close to the existing images, but from a slightly larger screen.
Related to https://github.com/actualbudget/actual/issues/1695
It's pretty common for users to have self-signed certificates for
actual, but this presents some challenges for the API.
Give a little bit of guidance here, for new contributors. Really, all
the info here is just for Node.js and not for actual. (we would want to
create seperate http agents and our own certificate config system if we
wanted to have actual specific config for this).
For many of the existing api use-cases the
`NODE_TLS_REJECT_UNAUTHORIZED` option will be fine. But
`NODE_EXTRA_CA_CERTS` seems like the proper way to do things (and the
one I tested on nodejs 21, on ubuntu via asdf install). But I also made
sure to mention the option of using openssl's ca certificates, because
if you are in a situation where your node.js is configured to link to
the system openssl on Linux, it's going to be the easiest and most
familiar to Linux sysadmins. It's just not the cross-platform supported
option like `NODE_EXTRA_CA_CERTS`.
We get lots of questions about transfers involving off budget accounts.
This will hopefully alleviate some of that confusion.
It was mentioned in
[actualbudget/#1979](https://github.com/actualbudget/actual/issues/1979)
that the docs don't have a good description of this.
When importing from nYNAB `to budget` doesn't match the previous `ready
to assign` value. I added a description of why that is and how to make
the numbers match.
* Use Page component for mobile pages
* Release notes
* Use Button instead of Link in MobileBackButton
* Update mobile budget table to use Page component
* Settings page cleanup
* Fix lint error
* Updates + small font size increase in page headings
* Fix rebase error
* Button height
* Revert payees navtab
* Fix failure to create category with deleted name
I'm not 100% familiar with the design of the data model so may have
misinterpreted what's going on here, but how I read this:
- The tombstone flag is used to soft delete categories.
- When creating a new category, duplicate names within a group are
prevented.
- When checking for duplicate names, the tombstone flag was unchecked
which meant deleted categories were falsely blocking creation.
I had a look at category deleteion logic to verify that simply including
the tombstone flag in this check is sane and see that there's a category
mapping being maintained to redirect one category to another on
deletion. So from what I can tell the correct behaviour here is to allow
a new category with the previously deleted name, rather than to revive
the old category (to preserve that old mapping lineage).
* Add release note
* Add regression test
Hey, since I've been using Actual via Traefik for a few days now, I took
the time to add a little bit to the documentation in that regard. I hope
it fits so far. Please feel free to comment/improve anything.
Depends on #278.
Fixes#251
This adds a dedicated guide for those that are starting fresh with
Actual and aren't familiar with zero-sum budgeting. It is a step by step
that points to the existing pertinent docs pages with additional
direction.
---------
Co-authored-by: shall0pass <20625555+shall0pass@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
I added bank syncing as a feature on the home page, with a new svg to go
with it.
I also mentioned in the importers that more than ynab are available, but
not officially.
This adds a page that calls out useful and interesting community
projects that integrate with Actual. There are only a few that I know of
right now, but we can add any later that come up.
* Remove author from electron package.json
* Don't allow dupes in cat names (per group)
* Release Notes
* Handle reorders and moves
* Fix linter warnings
* Fix typecheck
* Show the name of the duplicate category
* missed func call
* Upper case before compare
* lint fixes
---------
Co-authored-by: Shazib Hussain <contact@shazib.com>
* Mobile Color Consistency
* VRT updates
* color updates
* notes
* Sync Text
* Adjust header font smaller
* color and format adjustments
* tidying header buttons
* color and button adjustments
* Header Text color
* VRT updates
* back button changes
* VRT changes
* adjust buttons
* lint fix
* darkTheme header background
* VRT updates
* VRT updates
* added sankey plot
* fix sankey
* formatting
* formatting
* lint
* reduce margin
* experimental flag
* update location of recharts install
* truncate tooltip
* add titles to node and sizing
* better filtering
* comments, types, and check if data exists
* don't log
* clean up extra views
* responsive container, and fix label in graph
* change back
* fix bug and font
* static tooltip
* update overview to fit both sankey and category spending
* overview sankey
* increase iterations, fix right text, and release notes
* remove is out
* lint
* fix tooltip space
* fix margins
* format and efficient sql payees query
* restructure category sum value
* add tooltip names...again
* conditionally use container
* use useCategories
* first pass at progress bar
* db migration / enter goal in db
* add getGoal function
* stabilize
* whoops
* TS
* reset goal in db if no template found
* reconfirm
* release note
* typo
* rename migration
* to ms
* move priority logic, consistent variable names,
* fixup
* clear goal if template removed
* Visual goals (#40)
* 🔥 removing privacyMode feature flag (#1688)
* 🎨 fix multiline label in schedules modal (#1687)
* Update Visual Regression README File (#1689)
* Fix typo in GoCardlessLink.js (#1684)
happend -> happened
* queried cleared balance for tooltip (#1678)
* Dark Theme Reports/Settings (#1512)
* 🐛 Mobile account transaction list: Fix sticky date section headers (#1698)
* 👷 do not cancel github ci jobs on master branch (#1692)
* Sidebar Account Fix (#1703)
* Dark Theme Final (#1513)
* Category autocomplete should only search selectable categories (#1681)
* set colors based on a goal value
* extra comment
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Crazypkr1099 <nicholas.lacasse430@gmail.com>
Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com>
Co-authored-by: Shaan Khosla <35707672+shaankhosla@users.noreply.github.com>
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
Co-authored-by: Trevor Farlow <trevdor@users.noreply.github.com>
* update release note
* lint
* use null as cleared state
* show goal status via colors (#41)
* cleanup
* I think its working
* lint
* fix report budget, by adding in the goal coloring
* fix the error by adding colors to the report side (#42)
* [refactor] Migrate Schedules Table to typescript (#1691)
* 🔧 removing unnecessary manual module resolution (#1707)
* 🐛 (mobile) scrolling in lists with pull-to-refresh (#1706)
* 💄 (mobile) updating apple home-screen icon (#1705)
* Enhance Y-Axis Scaling on Net Worth Graph (#1709)
* fix report budget, by adding in the goal coloring
---------
Co-authored-by: Mohamed Muhsin <62111075+muhsinkamil@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Crazypkr1099 <nicholas.lacasse430@gmail.com>
* report budget database updates
* Goal progress bar (#1734)
* first pass at progress bar
* db migration / enter goal in db
* add getGoal function
* stabilize
* whoops
* TS
* reset goal in db if no template found
* reconfirm
* release note
* typo
* rename migration
* to ms
* move priority logic, consistent variable names,
* fixup
* clear goal if template removed
* Visual goals (#40)
* 🔥 removing privacyMode feature flag (#1688)
* 🎨 fix multiline label in schedules modal (#1687)
* Update Visual Regression README File (#1689)
* Fix typo in GoCardlessLink.js (#1684)
happend -> happened
* queried cleared balance for tooltip (#1678)
* Dark Theme Reports/Settings (#1512)
* 🐛 Mobile account transaction list: Fix sticky date section headers (#1698)
* 👷 do not cancel github ci jobs on master branch (#1692)
* Sidebar Account Fix (#1703)
* Dark Theme Final (#1513)
* Category autocomplete should only search selectable categories (#1681)
* set colors based on a goal value
* extra comment
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Crazypkr1099 <nicholas.lacasse430@gmail.com>
Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com>
Co-authored-by: Shaan Khosla <35707672+shaankhosla@users.noreply.github.com>
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
Co-authored-by: Trevor Farlow <trevdor@users.noreply.github.com>
* update release note
* lint
* use null as cleared state
* show goal status via colors (#41)
* cleanup
* I think its working
* lint
* fix the error by adding colors to the report side (#42)
* [refactor] Migrate Schedules Table to typescript (#1691)
* 🔧 removing unnecessary manual module resolution (#1707)
* 🐛 (mobile) scrolling in lists with pull-to-refresh (#1706)
* 💄 (mobile) updating apple home-screen icon (#1705)
* Enhance Y-Axis Scaling on Net Worth Graph (#1709)
* fix report budget, by adding in the goal coloring
---------
Co-authored-by: Mohamed Muhsin <62111075+muhsinkamil@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Crazypkr1099 <nicholas.lacasse430@gmail.com>
* report budget database updates
* Fix schedule searchbar (#1729)
---------
Co-authored-by: youngcw <calebyoung94@gmail.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Crazypkr1099 <nicholas.lacasse430@gmail.com>
Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com>
Co-authored-by: Shaan Khosla <35707672+shaankhosla@users.noreply.github.com>
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
Co-authored-by: Trevor Farlow <trevdor@users.noreply.github.com>
Co-authored-by: Mohamed Muhsin <62111075+muhsinkamil@users.noreply.github.com>
* working dynamic colors. Need to figure out what changes are actually needed
* cleanup
* more cleanup
* lint
* reset the goal when applying a single template
* make getCategory function
* remove some unneeded changes
* actually remove the changes, not just comment
* cleanup some unneeded code that was causing some bugs. Works for me, but should be vetted more
* lint
* add json definitions to database
* use template feature flag to enable colors
* some fixes
* don't set goals for remainders, remove unneeded change
* lint
* release note
* lint again
* fix mobile crash
* undo changes in CellValue.tsx
* lint
* use getStyle
* move status calc to helper
* lint
* recommendations
* suggestion
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
---------
Co-authored-by: shall0pass <20625555+shall0pass@users.noreply.github.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Co-authored-by: Crazypkr1099 <nicholas.lacasse430@gmail.com>
Co-authored-by: Ikko Eltociear Ashimine <eltociear@gmail.com>
Co-authored-by: Shaan Khosla <35707672+shaankhosla@users.noreply.github.com>
Co-authored-by: Neil <55785687+carkom@users.noreply.github.com>
Co-authored-by: Trevor Farlow <trevdor@users.noreply.github.com>
Co-authored-by: Mohamed Muhsin <62111075+muhsinkamil@users.noreply.github.com>
Co-authored-by: Joel Jeremy Marquez <joeljeremy.marquez@gmail.com>
So they point to existing implementations. The current links are broken
and Im hoping these links are correct - someone please let me know if
this is incorrect, thanks
* Inline mobile category and group edit
* Release notes
* Allow one edit at any time
* Mobile: long press to edit category/group
* Mobile: set userSelect: 'none'
* Move getLongPressEvents
* Add role to prevent tap-to-search
* Add role to text
* Prevent default on longpress
* Add tabIndex to disable tap-to-search
* Add back userSelect
* Role updates
* Remove userSelect
* Revert long press category name
* Remove unused import
* Fix lint error
* Edit mode
* Do not allow to start an edit when another field is currenty being edited
* Fix blur event not firing
* Grey out zero spent or balance values
* VRT update
* Fix budget cell being zero on click
* Delete useLongPress
* Hide mobile nav tabs on scroll
* Release notes
* Reduced navbar bottom padding
* Make hide transition a bit faster
* Update scroll defaults
* VRT snapshots
* Fix: safari scroll bounce effect disrupting the show/hide of bottom nav
* Update release notes
* No tap highlight on MobileNavTabs
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
* More mobile functionalities
* Cleanup
* Remove close button on mobile budget summary modal
* Release notes
* Close mobile inputs on enter
* Fix mobile budget row header color
* Fix income group hidden
* Add validation + close button on category tooltip
* Add mobile budget visual cues
* More mobile visual cues
* Error message fix
* Update blank category name behavior
* Cleanup
* Cleanup
* Fix mobile group deletion and category tooltip behavior
* Zero sign for AmountInput
* VRT snapshot updates
* Handle null values in must-category-transfer
I'm trying to deemphasize the term 'cloud' here because I think it
implies that it's going somewhere unknown. It should be clear that it's
going to a users installed server, and nowhere else. Pikapods and
fly.io, I think would be classic examples where where the term 'cloud'
makes sense but wouldn't make sense if someone had it installed on a
local PC, NAS or Raspberry Pi.
I left a lot of the document alone further down because it seems like
there may be error messages within the app that use the term 'cloud'.
Maybe add an additional explainer in the section that explains the cloud
file?
**Came up in a discord support issue.
If we don't verify that the repository ID is what we expected then we
will pull artifacts from PRs where the source branch is `master`.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* fix percent goals in the same priority level not compounding but overwritting
* release note
* don't show hidden groups on mobile view
* cleanup
* cleanup2
* cleanup3
* release note
* desktopc-client swc-loader
* More swc
* Jest swc + upgrades
* Revert @swc/jest usage for now
* SWC minify
* Remove setupFilesAfterEnv in package.json as per warning message in CI
* Release notes
* Minify on CI
* swc helpers in loot-core
* @swc/jest
* Upgrade webpack
* Add @swc/core to crdt
* Use yarn cache in github actions
* Cleanup
* Fix electron
* Revert "Fix electron"
This reverts commit 787af1980648fa30788a1d1678dcda534716f31d.
* Revert action.yml cache changes
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Previously we would default to only show transfer payees in the payee
selection dropdown for child transactions. This is confusing and there
doesn't seem to be any obvious reason for this, so this commit removes
that behavior.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* Added clear transactions on import option
* Added release note
* Added cleared column to csv export
* fixed Manually entered split transactions are not cleared on import
* Revert "Added cleared column to csv export"
This reverts commit 2952bc3e7d.
* added release note
* Copied same code to Gocardless
* Updated var name
* Updated to only query changed transactions instead of all
Most banks allow up to 90 days of transactions, and so we try to fetch
up to 90 days of transactions or transactions since the first
transaction in the Actual account, whichever is shortest. This lets
users get a clean start based on their selected starting balances date.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* allow schedules to skip weekends
* wording
* release note
* skip weekend in upcoming dates as well
* Clean UI
* Move switch to the date selection modal
Because different banks use the date fields in vastly different ways we
now let the server's bank integrations decide which date we should use.
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* 🐛 (reports) fix incorrect cashflow balance
Fixing a small typo here where multiple transfers across different payees on the same day fail to be summed up resulting in significant balance errors.
* release notes
* Update 1518.md
* Fix re-rendering all rows on hover
* release note
* Removing isHover logic in place of css :hover
---------
Co-authored-by: biohzrddd <10577752+biohzrddd@users.noreply.github.com>
I don't have a GoCardless account to update the images.
Have the images fundamentally changed (besides saying GoCardless instead
of Nordigen)?
---------
Co-authored-by: Johannes Löthberg <johannes@kyriasis.com>
This breaks fetching transactions where the valueDate is in the future.
While the GoCardless documentation says this should never happen, it's
what happens with at least Bank Norwegian due to them using the interest
date as valueDate. (C.f. #1392)
Signed-off-by: Johannes Löthberg <johannes@kyriasis.com>
* Set `role="button"` on downshift autocomplete items
This avoids content observation behavior in WebKit on touch devices that delays the onClick event (and therefore reaction to user input).
* Disable split transaction editing for now
The 'interval' value from the schedules is not set if the schedule is
monthly. This change will check for a valid number for the interval
value and if it does not exist will default to 1 (monthly).
References discord discussion starting here:
https://discord.com/channels/937901803608096828/940290142579605514/1133523705063030824
Currently the schedule keyword won't fill any future budget cells if the
category balance already satisfies the schedule. This PR is an attempt
to improve the behavior by allowing budget fills regardless of the
category balance.
This is a drastic rewrite of the schedule keyword. Though I've tried not
to have any regressions, it is possible because of how different the
logic is. I've tested compounding using a simple template, so a small
change in the 'by' keyword was also made.
This PR has no functional changes. Only types are changing and getting
improved (more stricter).
A follow-up PR will come next that does a few functional changes to make
this package fully strict.
<!-- Thank you for submitting a pull request! Make sure to follow the
instructions to write release notes for your PR — it should only take a
minute or two:
https://github.com/actualbudget/docs#writing-good-release-notes -->
Updating other menus to sentence case so that it is consistent with the
other menus throughout the app
The current link in the README directs to a github page that has a link
to the documentation page on how to write release notes. I've updated
the link here to just go straight to the documenation page on how to
write good release notes.
Eye.js is currently set to a static color (black). This PR allows you to
change the color of the icon with the style element - mimicing all other
icons in Actual.
Includes a few typographical improvements I PR’d.
(since the workflow is a `pull_request_target` one, the changes won’t
show up in the comments till this PR is merged)
Closes#1415
Fix number formatter not listening to state changes. This is not a fully
comprehensive solution. We will need to run a migration campaign to port
over from direct usage of `format` util to `useFormat`, but this is a
first step that solves the most glaring issue.
Removing env var/config file support for Nordigen secrets. These have
been migrated to the new `secrets` db table a while ago. We can now
clean up the legacy implementation for these secrets.
This is a more elegant way of implementing a month ahead version of the
percent goals. To use it add the `previous` flag to the percent goal, ex
`#template 10% of previous Paycheck`.
1. upgrade `nordigen-node` to 1.2.6 (which uses the new gocardless
domain)
2. allow accessing `nordigen` functionality via `/gocardless` to unblock
using the new API path in actual-web
Added a note regarding the dropdown arrow by "Date" and "Amount"s in
view of a recent bug report that showed that these are not always easily
discovered..
PS Sorry to keep adding changes but I am trying to respond quickly to
@shall0pass comments on another issue
Reverts actualbudget/actual#1204
Closes https://github.com/actualbudget/actual/issues/1293
This is way more complicated than originally anticipated. Reverting the
change to fix the prod build. Someone can work on re-introducing this in
a later build, but we need to be sure it doesn't break once more.
There's no new code here, just a reorg. Had to change some import calls
in some files to make it all work properly.
Having just done a lot of work in the accounts directory I figured it
could do with some organization. I've broken out all the Header
functions into a different file in order to cut down on the size of the
account.js file.
I also moved the transactions files into a new directory since they are
used by other pages. Also makes them easier to find with this structure.
This PR adds types to the `crdt` directory to make the structure of the
merkle tree (really a merkle radix trie) clearer.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Bringing back asset caching. This means we won't need to do a full
re-build for every change.
I had previously disabled caching because the backend changes (kcab)
were not picked up properly. But now that should be fixed too.
- Remove unused CSS files
- Set up the `.wasm` files to be automatically copied in
- `sql-wasm-debug.wasm` is removed entirely since we never use the
debug/dev build of sql.js. This reduces the app download size by 1MB on
the server side. It may be worth enabling the debug build automatically
in the future?
I noticed that:
- The web and electron versions of our `uuid` module both looked exactly
the same…
- …and deferred to the `uuid` package…
- …and the async version just called the sync API.
So now we will just use the `uuid` package directly everywhere.
This PR moves the size comparison action back to a separate workflow
which now uses the `pull_request_target` event. This event is triggered
at all the same times as the `pull_request` action, except that the
workflow file content comes from the target branch of the PR, and it is
run in the context of the repo owning the target branch. Practically,
this means that it will still have access to post a comment even if the
PR comes from a fork.
We don’t want the build actions to be run in a `pull_request_target`
workflow because they would get access to the secrets and be able to
perform arbitrary actions on the repository, even from fork PRs.
See the current version failing here:
https://github.com/actualbudget/actual/actions/runs/5395184895/jobs/9797388016?pr=1122
This significantly speeds up `yarn lint` for me. It also ensures we’re
listing all source files in the project, including the `.eslintrc` files
and any other files that may be present.
It me it seems the monkey patch is no longer necessary.. At least I'm
not able to reproduce any `escape` key related issues. But LMK what you
think.
The `@reach/listbox` component is used for the custom select component
(for example: for filters).
I've updated the return values in `sync/index` to sensible values based
on how they're being called.
I've updated the type of `msg.value` to be `string | number | null` to
match the values expected by `serializeValue`
- New linter rules are now added
- Perhaps the `createPayee` method i've tagged with a disable should be
deleted.
- I have ignored unused methods in Plaid/Mobile as this stuff is still
WIP/experimental?
Updated the tagline (the hook) for the website.
For people coming in for the first time - they don't know (and care)
about the historical context of open source actual vs closed source. So
slightly changed the copy to focus on the truly important things - the
features.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
None of this code is relevant to people who have used the open source
app. I initially wanted to leave it in so it could be used for major new
features in the future, but as it falls further and further out of date
I think it’s best to just delete it in a clean PR that can be referenced
later if desired.
Closes#1069
I've not actually tested this change. Which is why I'm not changing it
to direct links (as they might not work).
Instead I'm just applying a very quick patch so the message would not be
misleading anymore.
This PR is for the first item listed in #559: `Expand All / Collapse All
Categories`
For the expand / collapse all categories functionality, I was choosing
between having a single `Expand / collapse all categories` button or one
for each: `Expand all categories` and `Collapse all categories` buttons.
For the initial implementation, I have opted with the latter. Please let
me know which one is the right way to go or if there are other
suggestions and I'll just accordingly.

Maybe these notes should form part of an existing page, but I wanted to
put some notes in about the web worker/websockets nuance and clarify the
whole frontend/backend thing as it confused me a bit at first.
Perhaps this page could be a stub for adding more 'technical' details as
we go. (stick a 'more coming soon' on the bottom?)
Or maybe it should just be called 'Technical Details'
---------
Co-authored-by: Jed Fox <git@jedfox.com>
This allows running a health check from inside the container. Usage:
`npm run health-check`. That may not work inside of Alpine containers,
so you can do `node src/scripts/health-check.js` directly instead. Fixes
#213.
actual-server does not need to import the full actual-app/api package.
It can import only the CRDT stuff.. so I'm extracting it into a new
package to reduce the size of actual-server and make the link between
things more transparent.
Continuing on from #1139 this PR deletes all function that are not used
anywhere.
The next PR will include all the entire files that are unused & deleted.
This reverts #1029. As raised in #1097, the formatting chosen doesn’t
work well when doing math. There may be a way to balance compatibility
with multiple format styles with handling non-currency amounts
correctly, but it will require some more careful consideration. Re-opens
#894.
URLs with the trailing slash don’t work well — requests end up being
made to `https://example.com//sync/sync` and such which can 404
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
As discussed in #1126 creating separate PRs.
The linter rule isn't actually part of this first PR and will likely be
in the final PR as otherwise it will just fail because all the issues
aren't resolved.
The code is 'ready' though so as soon as this is merged I will open next
one(s)
Closes#1125
Disables (hides) the "all payees" checkbox when schedules are loading.
Reproduction:
1. open `/schedule/discover`
2. while the data is still loading - click on the checkbox in the table
header
3. after loading finishes - the page crashes with an error
Linked to contributing docs, replacing detail. This can't be merged
until after #176 gets merged though as the build will fail due to broken
links.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
Previously, the frontend would attempt to make real requests to
`https://not-configured/`, which of course failed. I’ve changed the
internal structure to have the lack of a server expressed as a `null`
server. A new `did-bootstrap` browser-level setting has been added to
track if the user clicked “Don’t use a server.”
Finally, I updated the auth logic for methods that call out to the
server to make them consistent and use the early return style which
reduces indentation.
This adds an option to the month drop down to check all the template
lines. If there are errors the offending line is shown with its
category.
I also modified the wording on the regular template return to be more
accurate. Fixes#1100
After #1115, new Node.js versions will be able to be used for
development of the frontend. This PR changes the recommended Node.js
version to 18 (the current LTS version). I have also tested with 16 and
20 and it works.
I also took the opportunity to:
- move the build script that was at the project root to the `bin/`
folder
- update the `browserslist` to target Electron 24 (which is the version
we currently build against). This results in a slightly smaller bundle
due to no longer having to transpile optional chaining.
Draft because it is untested, maybe tonight I will test it! Just wanted
to get some code out cause i had a spare 5 minutes.
The new parser isn't immediately good enough to replace the old parser,
and I sadly lost the time to contribute more! Sorry! If someone else
wants to take maintenance burden of this code, we can not merge this.
Otherwise, it should go the way of the Dodo it seems.
Thanks!
Closes#1044
Good catch @Jackenmen in
https://github.com/actualbudget/actual/pull/948#issuecomment-1580501909
— I’ve also added a CI check to ensure bad migrations aren’t introduced
in the future.
I think if you have a budget that has managed to have this migration
applied successfully, you’ll need to manually patch
`getAppliedMigrations` in
`packages/loot-core/src/server/migrate/migrations.ts` and inject a query
to remove the old migration ID and insert the new one.
Closes#944, closes#532. ~WIP because something is causing the test
budget to fail to create because it’s using INSERT instead of UPDATE sql
queries. (Or not? I have no idea)~
Added the option to add a remainder goal template. This will use the
remaining available funds and dump them into the respective category.
There is optional weighting. The remainder templates will be forced to
the lowest priority as to run after all other templates.
Usage: `#template remainder <weight>` Add the template line to any
categories you want to catch any remaining funds such as savings. The
amount added to the category will equal
`remaining_budget/total_of_weights*weight`. The default weight is 1.
- Fix socket connection issues when reloading
- Fix external url clicking & middle clicking internal links
- Remove broken menu option. Easier for now than refactoring the
settings panel it now lives in. We can add it back later if needed?
I have a suggestion for the "Updating Actual" doc page. Since fly.toml
is in .gitignore pulling changes via git won't update it. Users should
also update their fly.toml before deploying on server.
I added short info in the Fly-updating.md. However I don't know if this
info should also be updated elsewhere.
---------
Co-authored-by: Rich Howell <github@codenameowl.com>
Line 53, where it says That money will appear in next month's **To
Budget**. This isn't really happening. Should this part of the
documentation be changed?
---------
Co-authored-by: Rich Howell <github@codenameowl.com>
This adds back the functionality, which was inadvertantly removed, that
includes the already spent column in the calculation when the template
is run.
Some transactions may be posted to the account prior to running the
templates and would result incorrect budgeted amounts.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
~This is really just a proof of concept. I have no delusions that this
might get included. I'm sure others might have a much cleaner
implementation.~
I'm now delusional.
Resolves https://github.com/actualbudget/actual/issues/508
Taking @youngcw 's advice, I changed the keyword to #cleanup for the end
of month script to keep it separated.
This screen video shows two categories that are sources of funds. At the
end of the month, any excess in these funds can be redistributed to your
highest priorities. Three categories are set as sinks, or recipients, of
excess funds.
#cleanup source -> Move 'extra' funds to To Budget
#cleanup sink -> Fund category with To Budget funds, default weight = 1
#cleanup sink 2 -> Fund category with To Budget funds, weight = 2
Steps of the script:
1. Return funds from any category marked 'source'
2. Fund overspent categories fully if negative carryover is not allowed.
3. Fund each 'sink' category by the desired weight.
I run through the script twice. Once to show that if there is a debt
category that has a rolling negative balance, it will skip funding that
category first and once to show how if a rolling negative balance isn't
allowed, it will fund it before applying the weighted remainder. The
example shown uses weights of 60, 20, and 20; therefore, the Debt
category will receive 60% of the To Budget funds while General and Bills
receive 20% each. The weights could have been changed to 6, 2, and 2 or
3 for the Debt category with no additional value for General and Bills
to achieve the same result.

- Enforce that imports from the same package are merged into a single
import
- In `loot-core`, require that imports of other `loot-core` files use a
relative import (like the vast majority of such imports) rather than
specifiers starting with `loot-core/` (probably a result of moving files
out of other packages into `loot-core`)
Add option to schedule templates to budget the full amount only in the
needed month. Default behavior stays the same of spreading the expense
out over the available range.
To use the option, use a template like `#template schedule full
SCHEDULE_NAME`
Also some minor cleanup.
The payee autocomplete was always using cached accounts. Added a check
to see if accounts was already passed in as a parameter - only using
cached if it wasnt.
Updates to the latest version of electron and moves the backend-frontend
communication from node-ipc to websockets. This resolves the previous
roadblock regarding `nodeIntegration` .
Done
- Remove node-ipc in favour of websockets.
- Move file copying out of `preload.js` to avoid importing module `fs`
there
- Bump all electron pacakge versions to the latest
- Added new package for finding open ports as node-ipc is gone
- Tweaked webpack config for above changes
Partially fixes#468
Questions/ Pending:
- Literally every single test fails for me, presumably some issue with
my setup/environment.
- The websocket communication is not using TLS. I'm not sure how to
enable this, or if we even need to as its all local.
- Still need to create the CI for building/deploying but I'm not sure
where start in this regard as i have no exp with it. Presumably we will
need to point the electron auto-updater to the github releases url's. If
people are happy with this PR I will look at adding the CI before its
merged.
- In dev mode only, I have disabled TLS security becuase my docker
container's cert is not signed. I _assume_ this will be true for other
people who spin up the server on thier own hardware. Perhaps I just need
to change my cert to one from letsencrypt or something...
Notes.
I have not touched javascript in eons so my apologies if the commit
trail is a bit fragmented. I tried to keep them fairly contained and
then there is a slightly gnarly final commit fixing all the linter
issues... Please let me know if you want me to squash some commits etc.
I initially tried to move this to web workers the same way the web app
does it but this was unsuccessful. I have found no way to spin up a
worker in one place (frontend/backend) and then pass this worker to the
other. The electron ipc channels don't allow you to directly pass
objects such as workers, everything is cloned/serialised. Passing a port
number so the other end can spin up its own socket works fine.
---------
Co-authored-by: Shazib Hussain <contact@shazib.com>
Co-authored-by: Jed Fox <git@jedfox.com>
Introduces a **ResponsiveProvider** as the sole location that tracks
window size and makes that info available to the entire app. This can be
used for media queries and size-based component switching.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
Previously, the latest artifact list was requested unauthenticated using
`ADD "https://api.github.com/..." /tmp/artifacts.json`. While this works
locally, on GitHub’s servers it seems that the per-IP rate limit was
exceeded. There isn’t a way to get Docker to pass the `Authorization`
header that I know of, so this work has been moved to an external shell
script that pulls down the relevant data.
# Add ability to filter the Manage Payees screen to show orphaned payees
only.
I aimed to modify as little code as possible - we now have a button on
the Manage Payees screen that will filter the table to show orphaned
payees only.
Adds support for [devcontainers](https://containers.dev/), this should
make onboarding easier and should allow (especially simpler)
contributions entirely online via Github Codespaces 🚀
I believe I found the infinite loop problem in the repeat goal.
This doesn't mess things up if you are budgeting the same month that the
goal starts, that's probably why we didn't see it before.
Side note: The logic always starts at the start date in the template,
then increments until falling in the right month window. If this
template gets used for, say, a few years, it will start to bog down the
processing. If someone has a good quick fix I can add that.
The regex for the "space-dot" format was incorrect.
When entering the amount on a schedule, the number was incorrectly read
(12.34 became 1234.00)
Strangely, it was not an issue with transactions...
Multi-line `if`/`for` statements in JS can be confusing since there
aren’t braces to indicate which code is enclosed in the statement. I set
the configuration to `multi-line` to enforce usage of braces for
multi-line statement bodies, but still allow things like `if (foo)
return;`. I additionally added the `consistent` option to require braces
for all elements of an if/else chain if one element has it. As you can
see, this set of options pretty closely matches the existing code style.
I was going to comment in #1008 about this stylistic change but realized
that it’s (IMO) a little impolite to ask for code style changes unless
they can be automatically enforced.
Note that `if (foo) { \n return; \n }` is still valid and won’t be
collapsed. I tried to automatically collapse all such cases but it was a
lot of files and I didn’t want to pick out the useful from the useless
differences.
Fixes#615. I would appreciate double-checking that I didn’t
accidentally delete anything that is important.
Since I’m removing the related API methods, this is technically a
breaking change (even if people would have no reason to remove this
stuff), so we should probably do a major release of the API package.
This attempts to add priorities for goal templates and addresses most of
https://github.com/actualbudget/actual/issues/959.
I couldn't find a good way to preserve both "Apply" and "Overwrite"
operations, so this PR does away with the current "Apply" action
behavior. Every box with a budgeted value will be overwritten if a
template goal is present.
The added syntax to define priorities is as follows:
#template -- priority 0, highest priority
#template-1 --priority 1, 2nd highest priority
#template-2 --priority 2, 3rd highest priority
#template-N --priority N, as many as you'd like.
~~Leaving as a draft as this may not be the preferred implementation but
I wanted others to be able to try it with netlify.~~
---------
Co-authored-by: Caleb Young <cwy@rincon.com>
Run the feature request management action when adding "feature" label.
This will allow us to..
1. remove "feature" label
2. add back "feature" label
Thus execute the workflow on the existing issues.
Improving error handling for Nordigen.
Before: if loading banks failed - a loading indicator would be shown
forever.
After: is loading banks fails - an error message is shown.
Closes#935
Before: we render all the pages (even the inactive ones in some cases)
After: we render only the visible pages. Thus the topbar color is set
only 1x.. thus the settings page topbar has the correct color.
<!-- Thank you for submitting a pull request! Make sure to follow the
instructions to write release notes for your PR — it should only take a
minute or two:
https://github.com/actualbudget/docs#writing-good-release-notes -->
Resolves issue #844 .
---------
Co-authored-by: biohzrddd <>
Hi there, `Peg.js` is unmaintained, so I figure you all would appreciate
if I replaced it with the drop-in replacement of Peggy. This is work I
am breaking out of #918.
Peggy adds new features like source map support that we could use,
although I do not include that in this change-set. It may be useful for
debugging changes to the .pegjs file we have.e
Hi there,
I try to tackle #798 here. It was suggested to throw this behind a
feature flag, so here it is!
this does its best to import the problem file in #767.
I am working on this because it would make my work on #918 easier :)
Feel free to set the feature flag to true and try the new importer. The
date parser is not as sophisticated as the one in `node-libofx`, but I
tried 3 different OFX files, one from my bank, one from the mocks, and
one from #767. They all seem to work well enough on that front, but this
is definitely the weak point of the new implementation.
Let me know what you think!
Helps with actualbudget/actual#919 by adding the `all` field wit both
pending and booked transactions to the output of
`getTransactionsWithBalance()` and, by extension, the
`/nordigen/transactions` endpoint.
I could alter the `getTransactions()` to return the `all` field as well
but I figured that keeping it such that it returns the output from
Nordigen API 1:1 might be better so I left it as is. If you don't agree,
let me know and I'll update this.
This is an initial concept for adding percent based goal targets.
This version works by using a string in the form of:
#template 10% of Income <- Income is an income category name. Only
income category names will work here currently.
or
#template 10% of all income<- 'all income' is a keyword in this context
and will base the calculation on the total income for the month.
Some of the nicer touches like Jed's polite notification that the syntax
isn't correct is not implemented here yet.
I've changed the method of calculating the budgeted amount. There may be
a more efficient way of writing the loop, so I'm looking forward to the
review.
This change implements the mathematics of
(Target1+Target2+TargetN-Last_months_category_balance) / (MonthsRemaing1
+ MonthsRemaining2 + MonthsRemaingN) * N. This is an averaged approach
for multiple templates in the same category. It will appear to
overbudget or underbudget some months compared to multiple single
targets in different categories, yet there should always be enough saved
in the category to satisfy the target due.
Setting a target, it's assumed that money will be spent in the
appropriate month, When a target reaches maturity, the money in the
category associated with that target should be spent or moved so the
remaining targets continue to be funded. I don't see an easy way of
fixing that, but I hope this change will be of some help.
Current method:
Notice how the Bills (flexible) category reduces each month, resulting
in larger budgeted amounts later in the goal cycle.

Proposed method:
**Note: The fact that the initial fill in this example equals the
expected fill is a coincidence based on the template values I chose. The
initial fills can be different from expected fill.

I added some non documented keyboard shortcuts for the transaction
ledger. I also standardized the capitalization of the existing
shortcuts.
I cant decide if its better to have the single letters upper or lower
case. I don't want to imply that a `Shift` press is needed. Also, in
`Ctrl + o` shortcut, the `o` was lower case maybe to try and not look
like the number. I don't think I have a preference and can change it to
upper case if that is preferred.
I got some feedback in the discord that this behavior was disruptive
when zooming in.
- I’ve reduced the breakpoint so hopefully the disruption of the
transition is matched by a significant improvement in available space
now.
- Also the 2 places in the app that use window width (including here)
now check for the width of the `<html>` tag, not the width of the
viewport (those 2 values can be different when doing a pinch-zoom,
causing undesirable layout shifts.)
- Most of the logic has been rewritten to improve the transitions
Mobile & desktop experience
https://user-images.githubusercontent.com/25517624/233653721-b13c5e22-ae11-4bdf-a494-a6916556d05e.movhttps://user-images.githubusercontent.com/25517624/233654784-b6cc1006-44ea-4066-be7a-8d0dd786fb5b.mov
(I’d like tapping on something to close the sidebar on mobile, but that
can be approached in a future PR)
It turns out that `event.key` for ctrl/cmd+Z is `z`, and it’s `Z` for
ctrl/cmd+shift+Z.
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
This improves the error reporting when issues are found with Goal
Templates. Before these changes, the only error that would be reported
is the "Bills" error in the image while the other issues would be
ignored and not funded.
CodeQL keeps yelling at us about this… I’m not sure if the filter is
smart enough to use this rate limit middleware to remove the warnings,
but at least we will be setting a reasonable bound on attempts to crack
the server password.
This PR converts everything (aside from electron) from CommonJS to ESM.
It is needed to reduce the changes that will happen during the migration
to Typescript (as TS does not play nice with CJS).
Basically:
- rewrite `require()` to `import`
- rewrite `module.exports` to `exports`
- introduce `ts-node` to run importers so we can convert them to TS too
Lastly, sorry for this larg-ish PR, not my preference but when I tried
to reduce its scope, I would end up with mixed commons/esm that was even
more tricky to handle.
Seems like we already added `tsc` to build the project, but we use the
wrong babel preset (Flow) instead of the specific TS one. This is only
used in testing to make Jest work (from what I can tell).
Fixes#840 by creating application-defined SQL functions
(https://www.sqlite.org/appfunc.html) for Unicode-aware implementations
of `LOWER()` and `UPPER()`. This uses
`String.prototype.toLower/UpperCase()` JS method.
I initially wanted to just redefine `LOWER()` and `UPPER()` but due to
[sql.js not supporting the definition of deterministic
functions](https://github.com/sql-js/sql.js/issues/551), I had to just
define them as separate functions and use that in the appropriate
places. It's probably better like that anyway...
I believe this change allows for having multiple 'by' rules in the same
category. It seems to be working well for my purposes, but I would
appreciate further testing to assure there aren't regressions.
Example:
#template 300 by 2023-06
#template 3000 by 2023-08
Before this PR, having these two lines in the notes would only budget
funds for the earliest of the two strings and ignore the 3000 funding
target. With this PR, the sum of the two funding targets will be
respected.
GitHub CI log:
```
[linux/arm/v6 base 6/8] RUN yarn workspaces focus --all --production
204.6 ➤ YN0007: │ bcrypt@npm:5.1.0 must be built because it never has been before or the last one failed
204.6 ➤ YN0007: │ better-sqlite3@npm:8.2.0 must be built because it never has been before or the last one failed
...
[linux/arm/v7 base 6/8] RUN yarn workspaces focus --all --production
203.8 ➤ YN0007: │ bcrypt@npm:5.1.0 must be built because it never has been before or the last one failed
203.8 ➤ YN0007: │ better-sqlite3@npm:8.2.0 must be built because it never has been before or the last one failed
```
It seems that both armv6 and armv7 have the same issues with `bcrypt`
and `better-sqlite3` not being built. These packages are required to
build from source, luckily QEMU use armv7l for compiling.
Tested and working on RPi Zero W.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
**Actual has now been moved to a stand-alone Docker organization. If you
were previously using `jlongster/actual-server` docker image - please
update it to `actualbudget/actual-server`.**
The release has the following notable features:
- Rules can now optionally be applied when any of their conditions match
(in addition to the existing option to apply when all of their
conditions match)
- Rules: quick-create option from the transaction table (in the “X
selected” menu that shows up after selecting a transaction, choose
“Create rule”)
- Ability to hide decimal places for currencies with large numbers (in
Settings → Formatting)
- New autocomplete component (please report any bugs
[here](https://github.com/actualbudget/actual/issues/773))
- Lots of smaller improvements and bugfixes
---------
Co-authored-by: Jed Fox <git@jedfox.com>
This improves usability of narrow screen widths, and also prepares for
further optimizations that would allow us to use the sidebar largely
as-is on mobile, instead of having to have a tab bar.
---------
Co-authored-by: Matiss Janis Aboltins <matiss@mja.lv>
Part 1 of the conversion. Mostly renaming js to ts and making sure
things make still sense. Added also handy TS ESLint rules.
In order to support the various .web/.electron/... I ended up adopting
`index.d.ts` as pattern to share type definition. Let me know if that
makes sense for you too. Right now the function type definition is
duplicated, but the solution will be importing from `index.d.ts` and
using `const fn: FnDef = () => ...` that way we can keep all variants in
sync from a single type file.
Such rewrite however is better done in another PR otherwise we risk
confusing git and loosing history (rename + too many changes). Another
thing that might do in the next PR is convert all files to ESModules, as
things get confusing between CJS exports, ESM default/named and TS adds
extra complains.
...away from `jlongster`'s personal account. We're officially an org
now!
Before merging,
1. merge https://github.com/actualbudget/actual-server/pull/175
2. build and push a new image to the org repo via `actual-server` CI
Update all Docker Hub references to new `actualbudget` organization from
`jlongster` personal account.
We're officially an org now!
A bit of markdown/yaml auto-formatting snuck in, too.
Closes https://github.com/actualbudget/actual/issues/364
Corresponding update for the docs site in
https://github.com/actualbudget/docs/pull/144
Simultaneous to merging, we need to update our `DOCKER_HUB_*` GitHub
secrets in this repo.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
Users in #99 report that Actual in Docker runs on armv7 platforms,
although a bit sluggish. I confirmed that the base images for Debian and
Alpine support the linux/arm/v7 target and have added them to the
platform list in the GitHub Actions workflow.
At least one user confirms it works with the bullseye default
`Dockerfile`, but before merging it would be great if someone can
confirm it works with the Dockerfile.alpine image:
```
git clone https://github.com/jamesmortensen/actual-server.git
cd actual-server
git checkout armv7-image
docker build -t actual-server -f Dockerfile.alpine .
docker run -p 5006:5006 actual-server
```
---------
Co-authored-by: Jed Fox <git@jedfox.com>
When working on something else, I noticed that `.test.js` files were not
running due to `jest.config.json` not including them. I went ahead and
re-enabled these tests to make sure that unit tests are actually being
run.
Added onboarding and budget e2e tests. Also fixed an issue for
first-time flows using imports: currently people end up with a blank
white screen after importing. Instead they should see the budget table.
Related: https://github.com/actualbudget/actual/issues/583
Based on testing and discussion in Discord, the `edge` tag does contain
the latest `desktop-client` as well. Removes an outdated statement in
the Docker install documentation that stated otherwise.
- When parsing an amount string, consider surrounding parentheses to
mean the amount is negative.
- Ensures all input to `parseFloat()` is sanitized.
Closes: #807
This PR improves the consistency of the settings UI by moving everything
(except the budget name field on mobile) into `<Setting>` boxes.
Additionally, it adds a “Settings” option to the file dropdown menu (I
keep expecting it to be there, and I think it’s reasonable to expose it
in both locations so it’s easier to access)
This changes the behavior of configuration loading when
ACTUAL_CONFIG_PATH env var is not specified. With this change, syntax
errors in config.json will now be reported if ACTUAL_CONFIG_PATH env var
is not specified and the app will not proceed. When the config.json file
is not present or cannot be read, the behavior remains the same.
I'm not sure if this is something you want but it was a simple change so
I figured I might as well contribute it. This PR allows the user to
upload `.blob` files that they may have gotten from server's
`user-files/` folder. This can be useful if the user didn't export the
file but has server backups.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
Exposing the demo bank again in the get-banks endpoint.
Frontend implementation of the `showDemo` will come next. The demo bank
will only be available for DEV and PREVIEW builds.
Enabling the new autocomplete for dev/preview deployments.
This will allow us to spot any more issues there might be before we
release the new autocomplete.
https://github.com/actualbudget/actual/issues/773
The final `Autocomplete` refactors. After this is merged what's
remaining is to do extensive testing and address the bugs in
https://github.com/actualbudget/actual/issues/773
This PR moves `Nordigen` autocomplete to the new one without using a
feature flag. IMO this is a safe change given the simple nature of the
Nordigen autocomplete component.
Refactored all feature flags to use the new `useFeatureFlag` hook.
Also added a new functionality to this feature flag: ability to define
custom "default" value for a feature flag. This will allow us to enable
the new autocomplete component for everyone using Netlify builds
eventually (need to address some issues before doing so).
Further iterations on the new autocomplete.
1. Created `AccountAutocomplete`
2. Started using new autocomplete in `GenericInput` (used for notes
field)
3. Extracted common functionality between the three new autocompletes to
a generic component: `Autocomplete`
I noticed that the first run flow is suboptimal for people who want to
import an existing file from Actual/YNAB. I’ve moved the welcome modal
into the management app and set it up to appear when there are no
budgets available (which also has the benefit of allowing people to see
the modal again!)
I think there’s some weirdness around getting the modal to reappear when
deleting a budget file which I want to work out before merging this.
This PR also reorganizes the management app a bit to reduce usage of
modals (currently, hitting escape while the budget list is open leaves
you with a blank page).
<img width="539" alt="Screenshot_2023-03-18 08 53 54"
src="https://user-images.githubusercontent.com/25517624/226107462-b2b88791-1015-4397-b290-c64e7fcc0f41.png">
- [x] Ensure modal consistently appears when needed (no longer a modal!)
- [x] Fix e2e tests
Added an extra `waitFor` after a flaky unit test step.
I'm not really super happy with this workaround.. but it does make the
test much more stable (re-ran 5x and no failures:
https://github.com/actualbudget/actual/actions/runs/4455134799).
I think there is some internal timeout happening somewhere which is
causing this issue.. But not really sure where. And this will hopefully
get auto-fixed once we migrate to a new table. 🤞
This is not a full fix for the flakiness. One of the test cases will
still be flaky. But at least this fixes the other test cases thus
improving stability.
I am currently not working on adding support for importing to multiple
accounts, but I wanted to give anyone who takes that on a starting point
by updating the underlying C library to provide access to the account
name field.
Tests cases should be independent. You should be able to run them in
whatever order you want. And they should still pass.
Currently this is not the case. The order of the tests is very important
due to the "pseudo" randomization algorithm.
This PR makes the mock data IDs truly unique thus better exposing the
issue in our tests. Also this PR fixes the dependency issues thus making
each test case truly independent.
---------
Co-authored-by: Jed Fox <git@jedfox.com>
People contributing will now be asked to create a file containing their
PR’s entry into the release notes when opening a PR.
This approach was inspired by Prettier’s release notes approach
(https://github.com/prettier/prettier/tree/main/changelog_unreleased).
Separate files are used to avoid merge conflicts (each file is
completely separate, whereas adding lines to a file would result in
merge conflicts each time a PR is merged).
Checks will nudge people to create these files for their PRs, and PRs
created from a `release/*` branch on the main repos will have an action
run that outputs the Markdown-formatted release notes into a comment on
their PR. That action will also delete the no-longer-needed release
notes files to prep for the next release. Make sure you merge `master`
into release branch before finishing the PR to ensure the release notes
are fully generated and cleaned up. (You may encounter check failures if
you haven’t merged `master`)
See https://github.com/actualbudget/docs/pull/129 for more details. If
this is accepted, I’ll fill in release notes for the PRs that have been
submitted since the last release and submit a corresponding PR to
`actual-server`.
---------
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
before:
```
kcab.worker.4bdc73a8d45eb2115156.js (2.1 MiB)
xfo.kcab.worker.4bdc73a8d45eb2115156.js (1010 KiB)
```
after:
```
kcab.worker.39f5fba82d7bc7477962.js (1.41 MiB)
xfo.kcab.worker.39f5fba82d7bc7477962.js (1000 KiB)
```
What’s changed:
- `loot-core` did not have a `browserslist` config, so
`@babel/preset-env` assumes we want to [transpile all the way back to
ES5](https://babeljs.io/docs/options#no-targets). I’ve removed the
`browserslist` config from each of the `package.json` files and moved it
to the root so this doesn’t happen again.
- I updated the target from `electron 3.0` to `electron 12.0` to match
our Electron dependency
- I’ve added `defaults` (currently equivalent to `> 0.5%, last 2
versions, Firefox ESR, not dead`) which is [recommended by
browserslist](https://browsersl.ist/#q=defaults). We could consider
tightening this, but it doesn’t offer a ton of space savings at this
point to just target Electron 12.
- Since much less transpilation will be happening, stack traces (dev and
prod) will be much easier to read!
I'm not a user of this feature, but I thought I could get the ball
rolling on adding some documentation. I'm not 100% sure this is how this
budget type is used, so there are likely wrong assumptions. I'm hopeful
someone will either correct me or take the reigns. There have been
several users looking for the features of this budget type, so I think
it deserves a little time to explain how it's intended to be used.
* update readme and begin img dir restructuring
* fix broken issue board link
* readme edit
* addressed RFCs : #123
* organising images
* more images organised
* more image restructuring
* img reorganisation done
* moved unused imgages to img/unusued and checked if anything broke
* typo
* move favicon and actial imgs back, deleted the rest of unused
* corrections
Sometimes accounts have the same names and the same IBAN, but different
currencies (Paypal).
This should make the account names a bit more unique.. thus easier to
distinguish.
https://github.com/actualbudget/actual/issues/724#issuecomment-1464902166
Obviously the user can choose to use different names in `Actual`. They
are not forced to use this name.
Add a small endpoint that will be used to check the configuration status
of Nordigen. If it is not configured - we should not allow people to
proceed in the account-link flow.
When Nordigen accounts are linked 2x windows get opened: 1x (initial
tab) is polling for the status; the other window is for authenticating
with bank. Once the auth is done - customer is redirected back to app:
`/nordigen/link` page. At this point we can just close the tab.
https://github.com/actualbudget/actual/issues/724#issuecomment-1462853590
People have been having issues with this. I copied it from
`docker/stable-ubuntu.Dockerfile`. We should follow up on this to remove
the duplication at some point but this will help fix the problems people
are having now.
This _slightly_ changes the interface for configuring Nordigen, but IMO
it's safe to do because
1. the nordigen support is still experimental and subject to breaking
changes
2. we released 23.3.0 only an hour ago
Set a default balance calculation logic. This will allow us to integrate
with the majority of the Nordigen supported banks without needing to
manually implement each individual bank.
Frontend change: https://github.com/actualbudget/actual/pull/727
**Important**: some banks might break.. sadly I cannot test all of the
banks. But we should successfully cover ~80-90% of the supported banks
with these defaults. And if people notice that some specific bank is
broken - they can alwys report it to us and we can try and implement a
custom bank class for them.
- The `:edge` and `:edge-alpine` containers will now download the latest
commit of the frontend repo and build it when they are built.
- The backend dependency install process now uses the local copy of Yarn
(from #56) to install dependencies
- Extraneous files are no longer copied into the production image. This
is mostly a win for local builds (where the `.yarn` cache folder used to
get copied in) but it’s also a small win for CI-built containers which
will no longer have the README/configuration files/Yarn source code
lying around
- The dockerfiles now say `EXPOSE 5006`. This doesn’t have an effect on
anything by default as far as I can tell but it does mean that tools
know we will be listening on that port and can help users set up their
container accordingly (for example, Docker Desktop)
- Remove some extraneous dependencies from the containers (including
openssl)
---------
Co-authored-by: Trevor Farlow <trevdor@users.noreply.github.com>
* img : update accounts image : #85
* doc : fixed formatting and clearer wording : #85
* doc : updated instructions due to new sidebar layout : #85
* img : update images due to new sidebar layout : #85
* doc : updated accounts/addaccount page : #85
- moved all images into their own folder
- grepped the whole repo for their img paths to make sure no other pages were referencing the same images.
- updated img paths in the addaccount page
- updated wording based on new layout / buttons
- simplified other wordings
* img : updated images due to new sidebar layout : #85
- created new folder for backup-restore section
- created new images for 'backup.md'
- deleted old images from 'backup.md'
- updated wording in 'backup.md'
* Fix image sizing
* img : try to half size with @2x, but no change : #85
* doc : implement @2x img resizing and update images : #85
- resized retina screenshots where appropriate
- updated images that showed old sidebar layout
* img : commit missing file : #85
---------
Co-authored-by: Jed Fox <git@jedfox.com>
* Installation Methods
Adding the ability to have additional installation methods in the documentation linked to from external blogs etc.
* Update overview.md
Moved section to replace last paragraph
* Update docusaurus
* Make sure images are in their own paragraph
* Add image handling logic
* oops!
* Fix issues with Image component
* Enable image plugin in dev
* Allow arbitrary scales, remove unused case
* Respond to the /client-bootstrap route
* Move the bootstrap route to /account/needs-bootstrap
* needs-bootstrap is not authenticated
* we don’t need isActual
* add a note about export from old version of actual
* link to migration info from getting-started
* Update docs/Installing/overview.md
Co-authored-by: Hans Fast <fasthans@gmail.com>
* Update docs/Getting-Started/migration/migration-intro.md
Co-authored-by: Hans Fast <fasthans@gmail.com>
---------
Co-authored-by: Rich Howell <22135084+rich-howell@users.noreply.github.com>
* Add a `webRoot` property to the config file to override the web UI used
* Allow all config options to be set via env variables
* Fix TS
* Fix test file paths
* Move “Listening on” message to after we’re actually listening
* Fix codeql warning
* Fix bug when config.https is null but HTTPS_* env vars are defined
* Allow passing raw key/cert into `https.key`/`https.cert`
* Allow passing config file as ACTUAL_CONFIG_PATH
* Forgot to handle userConfig not being specified
* Run Prettier
* Add `@docusaurus/plugin-content-docs` as a direct dep
* Remove generated index pages, move Release Notes to the top level
* Move installing section inside “Getting Started”
* Rename “Using Actual” to “A Tour of Actual”
* Expand “Getting Started” by default
* Move “how it works” to the heading of the Budgeting section
* more changes
* polish styles of section headers
* Move old homepage to the start of the tour, add a new one
* A few updates to project-layout.md, remove mobile package
* Clarify that you can use a local server with preview builds
* A couple of tweaks to the Windows article
* Clarify the installation docs
* Fix some issues on the sync page
* Centralize the contact info into one page
* Fix homepage link
* Fix broken links on installation page
* Cleared Rules example
* Update docs/Budgeting/rules/rules-custom.md
Thanks!
Co-authored-by: Jed Fox <git@jedfox.com>
* verbage updates
* one more
Co-authored-by: Jed Fox <git@jedfox.com>
Fly deployments on the free tier have ~256mb of memory available. Users
with large transaction histories were encountering out of memory errors
when attempting to export their data. This commit adds a node argument
to (more or less) run the garbage collector at a smaller memory usage,
helping keep users on flyio within their available limit.
Fly deployments with the previous template setting are running without
tini's subreaper capabilities. This change enables tini as a subreaper
in that environment.
While investigating #54 it was noted that the previous implementation
zips the entire budget folder in the download endpoint. Once received on
the client side, only the most recent db and metadata are actually used.
This means up to 10 backups are being zipped in memory and transferred
to the client (in addition to the two necessary files) despite none of
that data being used. While this inefficiency isn't a major concern in
some environments, it may be problematic in memory constrained
environments.
This change transfers only the files that are actually utilized.
issue #54
- code as written expects the file may be absent and has a fallback
implemented, so the error can be safely ignored. There may be a better
strategy for dealing with this, however.
description:File a bug report also known as an issue or problem.
title: '[Bug]:'
labels: ['bug', 'needs triage']
labels: ['needs triage', 'bug']
type:Bug
body:
- type:markdown
id:intro-md
attributes:
value:|
Thanks for taking the time to fill out this bug report! Please ensure you provide as much information as possible to better assist in confirming and identifying a fix for the bug.
- type:checkboxes
id:existing-issue
⚠️ **CRITICAL:** Bug reports without clear, step-by-step reproduction instructions will be closed. We cannot investigate or fix bugs without being able to reproduce them. Please take the time to provide detailed reproduction steps.
- type:markdown
attributes:
label:'Verified issue does not already exist?'
description:'Please search to see if an issue already exists for the issue you encountered.'
options:
- label:'I have searched and found no existing issue'
required:true
validations:
required:true
value:|
**IMPORTANT:** we use GitHub Issues only for BUG REPORTS and FEATURE REQUESTS. If you are looking for help/support - please reach out to the [community on Discord](https://discord.gg/pRYNYr4W5A). All non-bug and non-feature-request issues will be closed.
**Bank-sync problems (SimpleFin / GoCardless)?** Reach out via the [community Discord](https://discord.gg/pRYNYr4W5A) first and open an issue only if the community deems the issue to be a legitimate bug in Actual.
- type:textarea
id:what-happened
attributes:
label:What happened?
description:Also tell us, what did you expect to happen? If you’re reporting an issue with imports, please attach a (redacted) version of the file you’re having trouble importing. You may need to zip it before uploading.
placeholder:Tell us what you see!
value:'A bug happened!'
description:|
Describe the bug clearly and concisely. Include:
- What you were trying to do
- What you expected to happen
- What actually happened instead
- Any error messages (copy/paste the exact text)
If you're reporting an issue with imports, please include a (redacted) version of the file, and a screenshot of the import screen. You may need to zip it before uploading.
placeholder:|
I was trying to [action] when [context].
Expected: [expected behavior]
Actual: [actual behavior]
Error message: [if any]
validations:
required:true
- type:markdown
attributes:
value:|
## Reproduction Steps
**REQUIRED:** Without clear reproduction steps, we cannot investigate or fix the bug. Please provide detailed, step-by-step instructions that anyone can follow to reproduce the issue.
- type:textarea
id:reproduction
attributes:
label:How can we reproduce the issue?
description:|
**This field is mandatory and must be filled out completely.**
Provide numbered, step-by-step instructions that allow us to reproduce the bug. Include:
- Specific actions you took (e.g., "Click on the Budget tab", "Enter $100 in the amount field")
- What you expected to happen
- What actually happened instead
Example format:
1. Navigate to [specific page/section]
2. Click on [specific button/link]
3. Enter [specific data] in [specific field]
4. Click [action]
5. Observe [expected vs actual behavior]
If the issue involves importing data, please attach a (redacted) sample file. You may need to zip it before uploading.
placeholder:|
1. Go to [specific location]
2. Click [specific element]
3. Enter [specific data]
4. Click [action]
5. Expected: [what should happen]
Actual: [what actually happens]
validations:
required:true
- type:textarea
id:errors-received
attributes:
label:'What error did you receive?'
description:'If you received an error or a message on the screen, please provide that here.'
Thanks for taking the time to fill out this feature request! Please ensure you provide as much information as possible so we can better understand what you’re proposing so we can come up with the best solution for everyone.
Thanks for taking the time to fill out this feature request! Please ensure you provide as much information as possible so we can better understand what you're proposing so we can come up with the best solution for everyone.
- type:checkboxes
id:existing-issue
attributes:
label:'Verified feature request does not already exist?'
description:'Please search to see if an issue or PR already exists for the feature you’re requesting.'
description:"Please search to see if an issue or PR already exists for the feature you're requesting."
options:
- label:'I have searched and found no existing issue'
required:true
validations:
required:true
- type:checkboxes
attributes:
label:'💻'
description:(Optional) Please check this box if you’re willing to open a PR to implement this feature. We’ll help you get started and answer any questions you have along the way :)
description:(Optional) Please check this box if you're willing to open a PR to implement this feature. We'll help you get started and answer any questions you have along the way :)
options:
- label:Would you like to implement this feature?
- type:textarea
@@ -35,7 +33,7 @@ body:
id:solution
attributes:
label:Describe your ideal solution to this problem
description:Feel free to give multiple different ideas for how the problem could be solved — we’d love to have a discussion to find the best way to solve your problem and related problems others may face! (Or leave this blank if you don’t have a solution in mind yet.)
description:Feel free to give multiple different ideas for how the problem could be solved — we'd love to have a discussion to find the best way to solve your problem and related problems others may face! (Or leave this blank if you don't have a solution in mind yet.)
<!-- Thank you for submitting a pull request! Make sure to follow the instructions to write release notes for your PR — it should only take a minute or two: https://github.com/actualbudget/docs#writing-good-release-notes. Try running yarn generate:release-notes *before* pushing your PR for an interactive experience. -->
## Description
<!-- What does this PR do? Why is it needed? Please give context on the "why?": why do we need this change? What problem is it solving for you?-->
## Related issue(s)
<!-- e.g. Fixes #123, Relates to #456 -->
## Testing
<!-- What did you test? How can we reproduce the issue you are fixing or how can we test the feature you built? -->
## Checklist
- [ ] Release notes added (see link above)
- [ ] No obvious regressions in affected areas
- [ ] Self-review has been performed - I understand what each change in the code does and why it is needed
// 'The release notes file has been committed to the repository. You can edit it if needed before merging.',
"If you're happy with this release note, you can add it to your pull request. If not, you'll need to add your own before a maintainer can review your change.",
].join('\n');
awaitoctokit.rest.issues.createComment({
owner,
repo:repoName,
issue_number:issueNumber,
body:commentBody,
});
console.log('✅ Successfully commented on PR');
}catch(error){
console.log('Error commenting on PR:',error.message);
'You are categorizing pull requests for release notes. You must respond with exactly one of these categories: "Features", "Enhancements", "Bugfixes", or "Maintenance". No other text or explanation.',
},
{
role:'user',
content:`PR Title: ${prDetails.title}\n\nGenerated Summary: ${summaryData.summary}\n\nCodeRabbit Analysis:\n${commentBody}\n\nCategories:\n- Features: New functionality or capabilities\n- Bugfixes: Fixes for broken or incorrect behavior\n- Enhancements: Improvements to existing functionality\n- Maintenance: Code cleanup, refactoring, dependencies, etc.\n\nWhat category does this PR belong to?`,
},
],
max_tokens:10,
temperature:0.1,
});
constoptions={
hostname:'api.openai.com',
path:'/v1/chat/completions',
method:'POST',
headers:{
Authorization:`Bearer ${openaiApiKey}`,
'Content-Type':'application/json',
},
};
constreq=https.request(options,res=>{
letresponseData='';
res.on('data',chunk=>(responseData+=chunk));
res.on('end',()=>{
if(res.statusCode!==200){
console.log('OpenAI API error for categorization');
setOutput('result','null');
return;
}
try{
constresponse=JSON.parse(responseData);
console.log('OpenAI raw response:',JSON.stringify(response,null,2));
'You are a technical writer helping to create concise release notes. Generate a maximum 15-word summary that describes what this PR does. Focus on the user-facing changes or bug fixes. Do not include "This PR" or similar phrases - just describe the change directly. Start with a base form verb (e.g., "Add" not "Adds", "Fix" not "Fixes", "Introduce" not "Introduces").',
},
{
role:'user',
content:`PR Title: ${prDetails.title}\n\nCodeRabbit Analysis:\n${commentBody}\n\nPlease provide a concise summary (max 15 words) of what this PR accomplishes.`,
},
],
max_tokens:50,
temperature:0.3,
});
constoptions={
hostname:'api.openai.com',
path:'/v1/chat/completions',
method:'POST',
headers:{
Authorization:`Bearer ${openaiApiKey}`,
'Content-Type':'application/json',
},
};
constreq=https.request(options,res=>{
letresponseData='';
res.on('data',chunk=>(responseData+=chunk));
res.on('end',()=>{
if(res.statusCode!==200){
console.log(`OpenAI API error: ${res.statusCode}${res.statusMessage}`);
| [dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary) |
| [allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow) |
| [reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject) |
| [only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only) |
| [patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns) |
| [candidate.patterns](candidate.patterns) | Patterns that might be worth adding to [patterns.txt](patterns.txt) | perl regular expression with optional comment block introductions (all matches will be suggested) | [candidates](https://github.com/check-spelling/check-spelling/wiki/Feature:-Suggest-patterns) |
| [line_forbidden.patterns](line_forbidden.patterns) | Patterns to flag in checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns) |
| [expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect) |
| [advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice) |
Note: you can replace any of these files with a directory by the same name (minus the suffix)
and then include multiple files inside that directory (with that suffix) to merge multiple files together.
<!-- See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice --> <!-- markdownlint-disable MD033 MD041 -->
<details>
<summary>If the flagged items are :exploding_head: false positives</summary>
If items relate to a ...
- binary file (or some other file you wouldn't want to check at all).
Please add a file path to the `excludes.txt` file matching the containing file.
File paths are Perl 5 Regular Expressions - you can [test](https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
`^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](../tree/HEAD/README.md) (on whichever branch you're using).
- well-formed pattern.
If you can write a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it,
try adding it to the `patterns.txt` file.
Patterns are Perl 5 Regular Expressions - you can [test](https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
body:`:tada: This feature has been implemented in #${process.env.PR_NUMBER} and will be released in the next version. Thanks for sharing your idea! :tada:\n\n<!-- feature-implemented-comment -->`,
- **Never** commit unless explicitly asked by the user
## Pre-Commit Quality Checklist
Before committing, ensure all of the following:
- [ ] Commit message is prefixed with `[AI]`
- [ ]`yarn typecheck` passes
- [ ]`yarn lint:fix` has been run
- [ ] Relevant tests pass
- [ ] User-facing strings are translated
- [ ] Code style conventions followed (see `AGENTS.md` for full style guide)
## Pull Request Rules
### [AI] Prefix Requirement
**ALL pull request titles MUST be prefixed with `[AI]`.** This is a mandatory requirement with no exceptions.
**Examples:**
-`[AI] Fix type error in account validation`
-`[AI] Add support for new transaction categories`
-`Fix type error in account validation` (MISSING PREFIX - NOT ALLOWED)
### Labels
Add the **"AI generated"** label to all AI-created pull requests. This helps maintainers understand the nature of the contribution.
### PR Template: Do Not Fill In
- **NEVER fill in the PR template** (`.github/PULL_REQUEST_TEMPLATE.md`). Leave all blank spaces and placeholder comments as-is. Humans are expected to fill in the Description, Related issue(s), Testing, and Checklist sections.
- **Exception**: If a human **explicitly asks** you to fill out the PR template, then fill it out **in Chinese**, using Chinese characters (简体中文) for all content you add.
## Quick-Reference Workflow
Follow these steps when committing and creating PRs:
1. Make your changes
2. Run `yarn typecheck` — fix any errors
3. Run `yarn lint:fix` — fix any remaining lint errors
4. Run relevant tests (`yarn test` for all, or workspace-specific)
5. Stage files and commit with `[AI]` prefix — do not skip hooks
<a href="https://flathub.org/apps/com.actualbudget.actual"><img width="165" style="margin-left:12px;" alt="Get it on Flathub" src="https://flathub.org/api/badge?locale=en" /></a>
We would love to review your PR! Before we can do that, please make sure:
- ✅ All CI checks pass
- ✅ The PR is moved from draft to open (if applicable)
- ✅ The "[WIP]" prefix is removed from the PR title
- ✅ All CodeRabbit code review comments are resolved (if you disagree with anything - reply to the bot with your reasoning so we can read through it). The bot will eventually approve the PR.
We do this to reduce the TOIL the core contributor team has to go through for each PR and to allow for speedy reviews and merges.
For more information, please see our [Contributing Guide](https://actualbudget.org/docs/contributing/).
:sparkles: Thanks for sharing your idea! :sparkles:
This repository uses a voting-based system for feature requests. While enhancement issues are automatically closed, we still welcome feature requests! The voting system helps us gauge community interest in potential features. We also encourage community contributions for any feature requests marked as needing votes (just post a comment first so we can help guide you toward a successful contribution).
The enhancement backlog can be found here: https://github.com/actualbudget/actual/issues?q=label%3A%22needs+votes%22+sort%3Areactions-%2B1-desc+
Don't forget to upvote the top comment with 👍!
<!-- feature-auto-close-comment -->
- name:Close Issue
run:gh issue close "https://github.com/actualbudget/actual/issues/${{ github.event.issue.number }}"
sed -i "/x86_64.AppImage/{n;s|sha256:.*|sha256: ${{ env.APPIMAGE_X64_SHA256 }}|}" com.actualbudget.actual.yml
sed -i "/x86_64.AppImage/s|url:.*|url: https://github.com/actualbudget/actual/releases/download/v${VERSION}/Actual-linux-x86_64.AppImage|" com.actualbudget.actual.yml
# Replace arm64 entry
sed -i "/arm64.AppImage/{n;s|sha256:.*|sha256: ${{ env.APPIMAGE_ARM64_SHA256 }}|}" com.actualbudget.actual.yml
sed -i "/arm64.AppImage/s|url:.*|url: https://github.com/actualbudget/actual/releases/download/v${VERSION}/Actual-linux-arm64.AppImage|" com.actualbudget.actual.yml
echo "Updated manifest:"
cat com.actualbudget.actual.yml
- name:Create PR in Flathub repo
uses:peter-evans/create-pull-request@v7
with:
token:${{ secrets.FLATHUB_GITHUB_TOKEN }}
commit-message:'Update Actual flatpak to version ${{ steps.resolve_version.outputs.version }}'
stale-pr-message: ':wave:Hi! It looks like this PR has not had any changes for a week now. Would you like someone to review this PR? If so - please remove the "[WIP]" prefix from the PR title. That will let the community know that this PR is open for a review.'
close-issue-message:'This issue has been automatically closed because there have been no comments for 7 days after the "needs info" label was added. If you still need help, please feel free to reopen the issue with the requested information.'
# AGENTS.md - Guide for AI Agents Working with Actual Budget
This guide provides comprehensive information for AI agents (like Cursor) working with the Actual Budget codebase.
## Project Overview
**Actual Budget** is a local-first personal finance tool written in TypeScript/JavaScript. It's 100% free and open-source with synchronization capabilities across devices.
- **Community Docs**: Documentation is part of the monorepo at `packages/docs/`. Published at https://actualbudget.org/docs
- **License**: MIT
- **Primary Language**: TypeScript (with React)
- **Build System**: Yarn 4 workspaces (monorepo)
## Quick Start Commands
### Essential Commands (Run from Root)
```bash
# Type checking (ALWAYS run before committing)
yarn typecheck
# Linting and formatting (with auto-fix)
yarn lint:fix
# Run all tests
yarn test
# Start development server (browser)
yarn start
# Start with sync server
yarn start:server-dev
# Start desktop app development
yarn start:desktop
```
### Important Rules
- **ALWAYS run yarn commands from the root directory** - never run them in child workspaces
- Use `yarn workspace <workspace-name> run <command>` for workspace-specific tasks
- Tests run once and exit by default (using `vitest --run`)
### ⚠️ CRITICAL REQUIREMENT: AI-Generated Commit Messages and PR Titles
**ALL commit messages and PR titles MUST be prefixed with `[AI]`.** No exceptions.
See [PR and Commit Rules](.github/agents/pr-and-commit-rules.md) for the full specification, including git safety rules, pre-commit checklist, and PR workflow.
### Task Orchestration with Lage
The project uses **[lage](https://microsoft.github.io/lage/)** (a task runner for JavaScript monorepos) to efficiently run tests and other tasks across multiple workspaces:
- **Parallel execution**: Runs tests in parallel across workspaces for faster feedback
- **Smart caching**: Caches test results to skip unchanged packages (cached in `.lage/` directory)
- **Dependency awareness**: Understands workspace dependencies and execution order
- **Continues on error**: Uses `--continue` flag to run all packages even if one fails
**Lage Commands:**
```bash
# Run all tests across all packages
yarn test# Equivalent to: lage test --continue
# Run tests without cache (for debugging/CI)
yarn test:debug # Equivalent to: lage test --no-cache --continue
```
Configuration is in `lage.config.js` at the project root.
## Architecture & Package Structure
### Core Packages
#### 1. **loot-core** (`packages/loot-core/`)
The core application logic that runs on any platform.
- Business logic, database operations, and calculations
- Platform-agnostic code
- Exports for both browser and node environments
- Test commands:
```bash
# Run all loot-core tests
yarn workspace loot-core run test
# Or run tests across all packages using lage
yarn test
```
#### 2. **desktop-client** (`packages/desktop-client/` - aliased as `@actual-app/web`)
The React-based UI for web and desktop.
- React components using functional programming patterns
- The project uses **React Compiler** (`babel-plugin-react-compiler`) in the desktop-client. The compiler auto-memoizes component bodies, so you can omit manual `useCallback`, `useMemo`, and `React.memo` when adding or refactoring code; prefer inline callbacks and values unless a stable identity is required by a non-compiled dependency.
- Don't use `React.FunctionComponent` or `React.FC` - type props directly
- Don't use `React.*` patterns - use named imports instead
- Use `<Link>` instead of `<a>` tags
- Use custom hooks from `src/hooks` (not react-router directly):
- `useNavigate()` from `src/hooks` (not react-router)
- `useDispatch()`, `useSelector()`, `useStore()` from `src/redux` (not react-redux)
- **Feature Requests**: Label "needs votes" sorted by reactions
## Code Quality Checklist
Before committing changes, ensure:
- [ ] Commit and PR rules followed (see [PR and Commit Rules](.github/agents/pr-and-commit-rules.md))
- [ ] `yarn typecheck` passes
- [ ] `yarn lint:fix` has been run
- [ ] Relevant tests pass
- [ ] User-facing strings are translated
- [ ] Prefer `type` over `interface`
- [ ] Named exports used (not default exports)
- [ ] Imports are properly ordered
- [ ] Platform-specific code uses proper exports
- [ ] No unnecessary type assertions
## Pull Request Guidelines
See [PR and Commit Rules](.github/agents/pr-and-commit-rules.md) for complete PR creation rules, including title prefix requirements, labeling, and PR template handling.
## Code Review Guidelines
When performing code reviews (especially for LLM agents): **see [CODE_REVIEW_GUIDELINES.md](./CODE_REVIEW_GUIDELINES.md)** for specific guidelines.
## Performance Considerations
- **Bundle Size**: Check with rollup-plugin-visualizer
- **Type Checking**: Uses incremental compilation
- **Testing**: Tests run in parallel by default
- **Linting**: ESLint caches results for faster subsequent runs
## Workspace Commands Reference
```bash
# List all workspaces
yarn workspaces list
# Run command in specific workspace
yarn workspace <workspace-name> run <command>
# Run command in all workspaces
yarn workspaces foreach --all run <command>
# Install production dependencies only (for server deployment)
yarn install:server
```
## Environment Requirements
- **Node.js**: >=22
- **Yarn**: ^4.9.1 (managed by packageManager field)
- **Browser Targets**: Electron >= 35.0, modern browsers (see browserslist)
## Migration Notes
The codebase is actively being migrated:
- **JavaScript → TypeScript**: sync-server is in progress
| Sync Server | `yarn start:server-dev` | 5006 | Optional (sync features only) |
All storage is **SQLite** (file-based via `better-sqlite3`). No external databases or services are needed.
### Running the app
- `yarn start` builds the plugins-service worker, loot-core browser backend, and starts the Vite dev server on port **3001**.
- `yarn start:server-dev` starts both the sync server (port 5006) and the web frontend together.
- The Vite HMR dev server serves many unbundled modules. In constrained environments, the browser may hit `ERR_INSUFFICIENT_RESOURCES`. If that happens, use `yarn build:browser` followed by serving the built output from `packages/desktop-client/build/` with proper COOP/COEP headers (`Cross-Origin-Opener-Policy: same-origin`, `Cross-Origin-Embedder-Policy: require-corp`).
### Lint, test, typecheck
Standard commands documented in `package.json` scripts and the Quick Start section above:
When running the app for manual testing or demos, use **"View demo"** on the initial setup screen (after selecting "Don't use a server"). This creates a test budget pre-populated with realistic sample data (accounts, transactions, categories, and budgeted amounts), which is far more useful than starting with an empty budget.
### Gotchas
- The `engines` field requires **Node.js >=22** and **Yarn ^4.9.1**. The `.nvmrc` specifies `v22/*`.
- Pre-commit hook runs `lint-staged` (oxfmt + oxlint) via Husky. Run `yarn prepare` once after install to set up hooks.
- Lage caches test results in `.lage/`. If tests behave unexpectedly, clear with `rm -rf .lage`.
- Native modules (`better-sqlite3`, `bcrypt`) require build tools (`gcc`, `make`, `python3`). These are pre-installed in the Cloud VM.
- All yarn commands must be run from the repository root, never from child workspaces.
# CODE_REVIEW_GUIDELINES.md - Guidelines for LLM Agents Performing Code Reviews
This document provides specific guidelines for LLM agents performing code reviews on the Actual Budget codebase. These guidelines help maintain code quality, consistency, and follow the project's design principles.
## Settings Proliferation
**Do NOT add new settings for every little UI tweak.**
Actual Budget follows a design philosophy that prioritizes simplicity and avoids settings bloat. Before introducing code that adds new settings:
- Consider if the UI tweak can be achieved through existing theme/design tokens
- Evaluate whether the setting provides meaningful value to users
- Check if the change aligns with Actual's design guidelines
- Prefer hardcoded values or theme-based solutions over adding user-facing settings
## TypeScript Strict Mode Suppressions
**Do NOT approve code that adds new `@ts-strict-ignore` comments.**
The project uses strict TypeScript checking via `typescript-strict-plugin`. Adding `@ts-strict-ignore` comments undermines type safety. Instead, review should encourage:
- Fixing the underlying type issue
- Using proper type definitions
- Refactoring code to satisfy strict type checking
- Only in exceptional cases, document why strict checking cannot be applied and seek alternative solutions
## Linter Suppressions
**Do NOT approve code that adds new `eslint-disable` or `oxlint-disable` comments.**
Linter rules are in place for good reasons. Instead of suppressing them:
- Fix the underlying issue
- If the rule is incorrectly flagging valid code, consider if the code can be refactored
- Only approve suppressions if there's a documented, exceptional reason
## Type Assertions
**Prefer `x satisfies SomeType` over `x as SomeType` for type coercions.**
The `satisfies` operator provides better type safety by:
- Ensuring the value actually satisfies the type (narrowing)
- Preserving the actual type information for better inference
- Catching type mismatches at compile time
**Exception:** If you truly need to assert a type that TypeScript cannot verify (e.g., runtime type guards), use `as` but require a comment explaining why it's safe.
## Avoiding `any` and `unknown`
**Flag code that uses `any` or `unknown` unless absolutely necessary.**
The use of `any` or `unknown` should be rare and well-justified. Before approving:
- Require explicit justification for why the type cannot be determined
- Suggest using proper type definitions or generics
- Consider if the type can be narrowed or properly inferred
- Look for existing type definitions in `packages/loot-core/src/types/`
Only approve `any` or `unknown` if there's a documented, exceptional reason (e.g., interop with untyped external libraries, gradual migration).
## Internationalization (i18n)
**All user-facing strings must be translated.**
The project has custom ESLint rules (`actual/no-untranslated-strings`) that enforce i18n usage, but reviewers should actively flag untranslated strings:
- Use `Trans` component instead of `t()` function when possible
- All text visible to users must use i18n functions
- Flag hardcoded strings that should be translated
## Test Mocking
**Minimize mocked dependencies; prefer real implementations.**
When reviewing tests, encourage the use of real implementations over mocks:
- Prefer real dependencies, utilities, and data structures
- Only mock when the real implementation is impractical (e.g., external APIs, file system in unit tests)
- Ensure mocks accurately represent real behavior
Over-mocking makes tests brittle and less reliable. Real implementations provide better confidence that code works correctly.
## Financial Number Typography
Standalone financial numbers should have tabular number styles applied.
- Standalone financial numbers should be wrapped with `FinancialText` or `styles.tnum` should be applied directly if wrapping is not possible
## Related Documentation
- See [AGENTS.md](./AGENTS.md) for general development guidelines
- See [CONTRIBUTING.md](./CONTRIBUTING.md) for contribution guidelines
- Community documentation: [https://actualbudget.org/docs/contributing/](https://actualbudget.org/docs/contributing/)
For smaller improvements or features - feel free to submit a PR or an issue if you don't have the necessary skills to build it yourself. For larger features we would recommend first opening an issue to discuss it with the team.
We aren't going to take every single little change. Don't be offended if we close your PR. In order for the project to stay healthy, we need to guard our bandwidth and also only take changes that align with Actual.
Here are some initial guidelines for how contributions will be treated:
- The mental health of the maintainers will be prioritized above all else. If this means some things get lost and PRs are unreviewed because maintainers are spending time with family or on themselves, we celebrate that.
- Multiple maintainers are key to this being a healthy project. Currently a few people have maintainer rights (see list below). We are actively looking for more people to come on as maintainers. If nobody steps up, expect less activity on this project.
- An open PR does not automatically deserve time for a full review and acceptance. It's up to the PR author to convince the maintainers that the change is good and worth reviewing. This involves a clear description for why the the change is being made, detailing the tradeoffs.
- We especially welcome improvements in automation: creating github actions to automatically generate builds, making the release process easier, etc.
## Main contributors
(sorted alphabetically)
-@j-f1
-@jlongster
-@MatissJanis
-@rich-howell
-@trevdor
## Project ideas
We welcome all contributions from the community. If you have an idea for a feature you want to build - please go ahead and submit a PR with the implementation or if it's a larger feature - open a new issue so we can discuss it.
If you do not have ideas what to build: the issue list is always a good starting point. Look for issues labeled with "[help wanted](https://github.com/actualbudget/actual/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22)".
For first time contributions you can also filter the issues labeled with "[good first issue](https://github.com/actualbudget/actual/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22)".
Please review the contributing documentation on our website: https://actualbudget.org/docs/contributing/
Actual is a local-first personal finance tool. It is 100% free and open-source, written in NodeJS, it has a synchronization element so that all your changes can move between devices without any heavy lifting.
If you are interested in contributing, or want to know how development works, see [CONTRIBUTING.md](https://github.com/actualbudget/actual/blob/master/CONTRIBUTING.md) we would love to have you.
If you are interested in contributing, or want to know how development works, see our [contributing](https://actualbudget.org/docs/contributing/) document we would love to have you.
Want to say thanks? Click the ⭐ at the top of the page.
## Key Links
- Actual [discord](https://discord.gg/pRYNYr4W5A) community.
- Actual [Community Documentation](https://actualbudget.github.io/docs)
- Actual [Community Documentation](https://actualbudget.org/docs)
If you are only interested in running the latest version and not contributing to the source code, you don't need to clone this repo. You can get the latest version through npm.
1. Self-hosted by using [a Docker image](https://actualbudget.org/docs/install/docker)
1. Local-only apps - [downloadable Windows, Mac and Linux apps](https://actualbudget.org/download/) you can run on your device
The easiest way to get Actual running is to use the [actual-server](https://github.com/actualbudget/actual-server) project. That is the server for syncing changes across devices, and it comes with the latest version of Actual. The server will provide both the web project and a server for syncing.
Learn more in the [installation instructions docs](https://actualbudget.org/docs/install/).
You can get up and running quickly and easily by following our [Running Actual Locally Guide](https://actualbudget.github.io/docs/Installing/Local/your-own-machine)
## Ready to Start Budgeting?
Read about [Envelope budgeting](https://actualbudget.org/docs/getting-started/envelope-budgeting) to know more about the idea behind Actual Budget.
### Are you new to budgeting or want to start fresh?
Check out the community's [Starting Fresh](https://actualbudget.org/docs/getting-started/starting-fresh) guide so you can quickly get up and running!
### Are you migrating from other budgeting apps?
Check out the community's [Migration](https://actualbudget.org/docs/migration/) guide to start jumping on the Actual Budget train!
## Documentation
We have a wide range of documentation on how to use Actual, this is all available in our [Community Documentation](https://actualbudget.github.io/docs), this includes topics on Budgeting, Account Management, Tips & Tricks and some documentation for developers.
We have a wide range of documentation on how to use Actual, this is all available in our [Community Documentation](https://actualbudget.org/docs), this includes topics on Budgeting, Account Management, Tips & Tricks and some documentation for developers.
## Code structure
## Contributing
Actual is a community driven product. Learn more about [contributing to Actual](https://actualbudget.org/docs/contributing/).
### Code structure
The Actual app is split up into a few packages:
- loot-core - The core application that runs on any platform
- loot-design - The generic design components that make up the UI
- desktop-client - The desktop UI
- desktop-electron - The desktop app
More information on the project structure is available in our [community documentation](https://actualbudget.github.io/docs/Developers/project-layout).
More information on the project structure is available in our [community documentation](https://actualbudget.org/docs/contributing/project-details).
### Feature Requests
Current feature requests can be seen [here](https://github.com/actualbudget/actual/issues?q=is%3Aissue+label%3A%22needs+votes%22+sort%3Areactions-%2B1-desc).
Vote for your favorite requests by reacting :+1: to the top comment of the request.
To add new feature requests, open a new Issue of the "Feature Request" type.
### Translation
Make Actual Budget accessible to more people by helping with the [Internationalization](https://actualbudget.org/docs/contributing/i18n/) of Actual. We are using a crowd sourcing tool to manage the translations, see our [Weblate Project](https://hosted.weblate.org/projects/actualbudget/). Weblate proudly supports open-source software projects through their [Libre plan](https://weblate.org/en/hosting/#libre).
'To avoid having to enter your username, consider installing the official GitHub CLI (https://github.com/cli/cli) and logging in with `gh auth login`.',
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.