From 89cf9a1e2fd9063bfe90cb0bfb8d4a447d566de0 Mon Sep 17 00:00:00 2001 From: Jed Fox Date: Sat, 4 Mar 2023 12:56:58 -0500 Subject: [PATCH] Add Prettier with config matching main repo (#111) * Add Prettier with config matching main repo * Run Prettier on all files --- .github/ISSUE_TEMPLATE/DOCUMENTATION.yml | 14 +- .github/ISSUE_TEMPLATE/IMPROVEMENT.yml | 14 +- .github/ISSUE_TEMPLATE/bug-report.yml | 18 +- .github/ISSUE_TEMPLATE/change-request.yml | 12 +- .github/workflows/deploy.yml | 4 +- .github/workflows/stale.yml | 8 +- .prettierignore | 2 + .prettierrc.json | 5 + README.md | 1 + .../Transactions/bulk-editing-transactions.md | 9 +- docs/Accounts/Transactions/importing-trans.md | 1 - docs/Accounts/addaccount.md | 10 +- docs/Accounts/connecting-your-bank.md | 2 +- docs/Accounts/overview.md | 3 +- docs/Accounts/payees.md | 1 - docs/Accounts/reconcile.md | 20 +- .../Experimental-Features/goal-templates.md | 18 +- docs/Advanced/Scripts/modify-transfers.md | 283 +++++------ docs/Advanced/advanced-intro.md | 2 +- docs/Backup-Restore/Backups.md | 7 +- docs/Backup-Restore/Restore.md | 15 +- docs/Budgeting/categories.md | 10 +- docs/Budgeting/creditcards.md | 4 +- docs/Budgeting/filters.md | 20 +- docs/Budgeting/howitworks.md | 23 +- docs/Budgeting/jointaccounts.md | 18 +- docs/Budgeting/returnsandreimbursements.md | 17 +- docs/Budgeting/rules/rules-custom.md | 13 +- docs/Budgeting/rules/rules.md | 30 +- docs/Budgeting/schedules.md | 16 +- docs/Developers/API.md | 141 +++--- docs/Developers/ActualQL/Examples.md | 98 ++-- docs/Developers/ActualQL/Functions.md | 6 +- docs/Developers/ActualQL/Overview.md | 36 +- docs/Developers/Building-Windows.md | 7 +- docs/Developers/preview-builds.md | 4 +- docs/Developers/project-layout.md | 19 +- docs/Developers/types.js | 12 +- docs/Developers/using-the-API.md | 4 +- docs/FAQ.md | 35 +- docs/Getting-Started/managefiles.md | 10 +- .../migration/migration-intro.md | 4 +- docs/Getting-Started/migration/nynab.md | 33 +- docs/Getting-Started/migration/simple-sync.md | 2 +- docs/Getting-Started/migration/ynab4.md | 10 +- docs/Getting-Started/sync.md | 20 +- docs/Getting-Started/tipstricks.md | 21 +- docs/Getting-Started/using-actual/accounts.md | 4 +- docs/Getting-Started/using-actual/budget.md | 2 +- docs/Getting-Started/using-actual/files.md | 4 +- docs/Getting-Started/using-actual/overview.md | 12 +- .../Getting-Started/using-actual/schedules.md | 2 +- docs/Getting-Started/using-actual/settings.md | 17 +- docs/Getting-Started/using-actual/sidebar.md | 2 +- docs/Installing/Docker.md | 50 +- docs/Installing/fly/Fly-git.md | 71 ++- docs/Installing/fly/Fly-image.md | 27 +- docs/Installing/fly/Fly-persisting.md | 11 +- docs/Installing/fly/Fly-prerequisites.md | 1 + docs/Installing/fly/Fly-updating.md | 10 +- docs/Installing/fly/Fly.io.md | 6 +- docs/Release-Notes.md | 456 +++++++++--------- docs/Troubleshooting/Troubleshooting-Edge.md | 3 +- docs/components/Key.js | 2 +- docs/components/NextLink.js | 5 +- docs/components/Step.js | 2 +- docusaurus.config.js | 44 +- package-lock.json | 24 +- package.json | 7 +- sidebars.js | 4 +- src/components/HomepageFeatures/index.js | 2 +- src/components/Image.jsx | 38 +- src/remark/rewrite-images.js | 36 +- src/theme/MDXComponents.js | 1 - 74 files changed, 1035 insertions(+), 870 deletions(-) create mode 100644 .prettierignore create mode 100644 .prettierrc.json diff --git a/.github/ISSUE_TEMPLATE/DOCUMENTATION.yml b/.github/ISSUE_TEMPLATE/DOCUMENTATION.yml index 1904a9525..41e9b9873 100644 --- a/.github/ISSUE_TEMPLATE/DOCUMENTATION.yml +++ b/.github/ISSUE_TEMPLATE/DOCUMENTATION.yml @@ -1,14 +1,12 @@ -name: "🗄️ Documentation" +name: '🗄️ Documentation' description: Create a new ticket for documentation you would like to create or would like creating. -title: "🗄️ [Documentation] - " -labels: [ - "documentation" -] +title: '🗄️ [Documentation] - <title>' +labels: ['documentation'] body: - type: textarea id: description attributes: - label: "Description" + label: 'Description' description: Please enter an explicit description of what you would like documenting placeholder: Short and explicit description of your idea... validations: @@ -16,7 +14,7 @@ body: - type: textarea id: screenshot attributes: - label: "Screenshots" + label: 'Screenshots' description: If applicable, add screenshots to help explain what you would like documenting. value: | ![DESCRIPTION](LINK.png) @@ -26,7 +24,7 @@ body: - type: dropdown id: category attributes: - label: "Category" + label: 'Category' description: What category does this idea fall into? multiple: true options: diff --git a/.github/ISSUE_TEMPLATE/IMPROVEMENT.yml b/.github/ISSUE_TEMPLATE/IMPROVEMENT.yml index a8021be33..ca3e3239a 100644 --- a/.github/ISSUE_TEMPLATE/IMPROVEMENT.yml +++ b/.github/ISSUE_TEMPLATE/IMPROVEMENT.yml @@ -1,15 +1,12 @@ -name: "⭐ Documentation Improvement" +name: '⭐ Documentation Improvement' description: Create a new ticket to improve existing documentation. -title: "⭐ [Documentation] - <title>" -labels: [ - "documentation", - "enhancement" -] +title: '⭐ [Documentation] - <title>' +labels: ['documentation', 'enhancement'] body: - type: textarea id: description attributes: - label: "Description" + label: 'Description' description: Please enter a description of what needs changing placeholder: What needs changing? validations: @@ -17,9 +14,8 @@ body: - type: input id: url attributes: - label: "Documentation URL" + label: 'Documentation URL' description: Please enter the GitHub URL to the documentation file placeholder: ex. https://github.com/USERNAME/REPO_NAME/blob/main/docs/Budgeting/categories.md validations: required: true - diff --git a/.github/ISSUE_TEMPLATE/bug-report.yml b/.github/ISSUE_TEMPLATE/bug-report.yml index c0b8bfd22..dcad61beb 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.yml +++ b/.github/ISSUE_TEMPLATE/bug-report.yml @@ -1,14 +1,12 @@ -name: "🐛 Bug Report" +name: '🐛 Bug Report' description: Create a new ticket for a bug. -title: "🐛 [BUG] - <title>" -labels: [ - "bug" -] +title: '🐛 [BUG] - <title>' +labels: ['bug'] body: - type: textarea id: description attributes: - label: "Description" + label: 'Description' description: Please enter an explicit description of your issue placeholder: Short and explicit description of your incident... validations: @@ -16,7 +14,7 @@ body: - type: input id: reprod-url attributes: - label: "Reproduction URL" + label: 'Reproduction URL' description: Please enter your GitHub URL to provide a reproduction of the issue placeholder: ex. https://github.com/USERNAME/REPO-NAME validations: @@ -24,7 +22,7 @@ body: - type: textarea id: reprod attributes: - label: "Reproduction steps" + label: 'Reproduction steps' description: Please enter an explicit description of your issue value: | 1. Go to '...' @@ -37,7 +35,7 @@ body: - type: textarea id: screenshot attributes: - label: "Screenshots" + label: 'Screenshots' description: If applicable, add screenshots to help explain your problem. value: | ![DESCRIPTION](LINK.png) @@ -47,7 +45,7 @@ body: - type: dropdown id: browsers attributes: - label: "Browsers" + label: 'Browsers' description: What browsers are you seeing the problem on ? multiple: true options: diff --git a/.github/ISSUE_TEMPLATE/change-request.yml b/.github/ISSUE_TEMPLATE/change-request.yml index 3822d30a8..9072692ac 100644 --- a/.github/ISSUE_TEMPLATE/change-request.yml +++ b/.github/ISSUE_TEMPLATE/change-request.yml @@ -1,14 +1,12 @@ -name: "🔧 Change Request" +name: '🔧 Change Request' description: Create a new ticket for a change to the site, this doesn't include documentation. -title: "🔧 [CHANGE] - <title>" -labels: [ - "change" -] +title: '🔧 [CHANGE] - <title>' +labels: ['change'] body: - type: textarea id: description attributes: - label: "Description" + label: 'Description' description: Please enter an explicit description of what you would like to change placeholder: Short and explicit description of your change idea... validations: @@ -16,7 +14,7 @@ body: - type: textarea id: expbehav attributes: - label: "Expected behavior" + label: 'Expected behavior' description: Please explain how your change should work placeholder: Short and explicit description of your how this change should work. validations: diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 68588fe5d..a927b8a8e 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -12,7 +12,7 @@ permissions: id-token: write concurrency: - group: "pages" + group: 'pages' cancel-in-progress: true jobs: @@ -24,7 +24,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v3 with: - node-version: "16" + node-version: '16' cache: npm - name: Setup Pages uses: actions/configure-pages@v2 diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 931a7fe49..6ad49839c 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -1,7 +1,7 @@ name: Close inactive issues on: schedule: - - cron: "30 1 * * *" + - cron: '30 1 * * *' jobs: close-issues: @@ -14,9 +14,9 @@ jobs: with: days-before-issue-stale: 90 days-before-issue-close: 30 - stale-issue-label: "stale" - stale-issue-message: "🚧🚨 This issue is being marked as stale due to 90 days of inactivity. 🚧🚨" - close-issue-message: "🚧🚨 This issue was closed because it has been inactive for 14 days since being marked as stale. 🚧🚨" + stale-issue-label: 'stale' + stale-issue-message: '🚧🚨 This issue is being marked as stale due to 90 days of inactivity. 🚧🚨' + close-issue-message: '🚧🚨 This issue was closed because it has been inactive for 14 days since being marked as stale. 🚧🚨' days-before-pr-stale: -1 days-before-pr-close: -1 only-labels: 'needs triage' diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 000000000..d858cd651 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,2 @@ +.docusaurus +build diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 000000000..5393aaf2d --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,5 @@ +{ + "singleQuote": true, + "trailingComma": "all", + "arrowParens": "avoid" +} diff --git a/README.md b/README.md index fd0e6c9d6..107d6011b 100644 --- a/README.md +++ b/README.md @@ -65,6 +65,7 @@ more_data: or: arrays --- ``` + ### Document Headings The below shows how a document should be laid out. diff --git a/docs/Accounts/Transactions/bulk-editing-transactions.md b/docs/Accounts/Transactions/bulk-editing-transactions.md index 6542c0d65..20e93f77e 100644 --- a/docs/Accounts/Transactions/bulk-editing-transactions.md +++ b/docs/Accounts/Transactions/bulk-editing-transactions.md @@ -1,5 +1,5 @@ --- -title: 'Bulk Actions' +title: 'Bulk Actions' --- It can be extremely useful to be able to bulk edit or duplicate a number of transactions at once. @@ -32,7 +32,7 @@ Then Search or Filter to identify the transactions that you wish to change and s ![](/img/bulk-edit/4.png) -Now you are ready to alter one or more components of these selected transactions. Go to the drop down top right (in this case the arrow below “30 transactions”) +Now you are ready to alter one or more components of these selected transactions. Go to the drop down top right (in this case the arrow below “30 transactions”) ![](/img/bulk-edit/5.png) @@ -40,7 +40,7 @@ Now select the component you wish to change. In this case we are going to add a ![](/img/bulk-edit/6.png) -Press “Enter” and all the selected transactions are changed. +Press “Enter” and all the selected transactions are changed. ![](/img/bulk-edit/7.png) @@ -49,6 +49,7 @@ Here is another example. This time to bulk change a Category. ![](/img/bulk-edit/8.png) ### Duplicating transactions + To duplicate transactions (one or more), simply navigate to the Accounts page as described above, and select the tick box in the left hand column. Once selected, go to the drop down menu on the top right of the page, above the table header. Open the menu and select “Duplicate”. Your newly duplicated transactions will appear in the transactions table! -![](/img/duplicate-transactions.png) \ No newline at end of file +![](/img/duplicate-transactions.png) diff --git a/docs/Accounts/Transactions/importing-trans.md b/docs/Accounts/Transactions/importing-trans.md index 9717407ad..83f2fe1f5 100644 --- a/docs/Accounts/Transactions/importing-trans.md +++ b/docs/Accounts/Transactions/importing-trans.md @@ -26,4 +26,3 @@ Actual will automatically try to avoid duplicate transactions. This works best w After checking the **id**, Actual will look for transactions around the same date, with the same amount, and with a similar payee. If it thinks the transaction already exists, it will avoid creating a duplicate. This means you can manually enter a transaction, and later it will be matched when you import it from a file. It will always favor the imported transaction. It if matches a manually-entered transaction, it will update the date to match the imported transaction. **Keeping dates in sync with your bank is important** as it allows you compare the balance at any point in time with your bank. - diff --git a/docs/Accounts/addaccount.md b/docs/Accounts/addaccount.md index 6a665cf68..8e2057cd7 100644 --- a/docs/Accounts/addaccount.md +++ b/docs/Accounts/addaccount.md @@ -6,7 +6,7 @@ This page explains how to manage Bank Accounts within your Actual instance. ## Adding a new account -You can add an account to your budget at any time, however when you first install Actual you can use the `Add Account` button in the middle of the screen. +You can add an account to your budget at any time, however when you first install Actual you can use the `Add Account` button in the middle of the screen. ![](/img/AddAccount.png) @@ -16,10 +16,10 @@ You can also add an account using the `+` button next to the account list, as sh A box will appear asking you to fill in a few options -* Give your account a name -* Decide what type your account is -* Is the account on or off budget -* The current account balance +- Give your account a name +- Decide what type your account is +- Is the account on or off budget +- The current account balance :::note Off budget means that the balance is not reflected when you assign money to categories in your budget register diff --git a/docs/Accounts/connecting-your-bank.md b/docs/Accounts/connecting-your-bank.md index ff1425953..75beb7c00 100644 --- a/docs/Accounts/connecting-your-bank.md +++ b/docs/Accounts/connecting-your-bank.md @@ -4,4 +4,4 @@ Title: 'Conn Bank' # Connecting Your Bank -This will be added in a future release of Actual! \ No newline at end of file +This will be added in a future release of Actual! diff --git a/docs/Accounts/overview.md b/docs/Accounts/overview.md index fa0252fde..e717fd593 100644 --- a/docs/Accounts/overview.md +++ b/docs/Accounts/overview.md @@ -18,7 +18,6 @@ Depending on your usage, savings accounts can either be on or off the budget. If 2. Fill out the form describing the account. 3. Press **Create** - ## Closing or deleting an account 1. Navigate to the account by clicking on it in the sidebar @@ -29,4 +28,4 @@ Depending on your usage, savings accounts can either be on or off the budget. If You can still access this account under **Closed Accounts** in the sidebar, and even reopen it from the same actions menu. -**If you want to delete an account** even if it has existing balances, in the popup after selecting **Close Account**, click the **force close** at the bottom. \ No newline at end of file +**If you want to delete an account** even if it has existing balances, in the popup after selecting **Close Account**, click the **force close** at the bottom. diff --git a/docs/Accounts/payees.md b/docs/Accounts/payees.md index 22855eb0a..c3bae7705 100644 --- a/docs/Accounts/payees.md +++ b/docs/Accounts/payees.md @@ -59,4 +59,3 @@ You can individually select payees and merge them if you like, but filtering & m ## Transfer payees [Transfers](/accounts/transfers/) are just special payees that indicate which account to transfer to/from. Since they are payees, you can create rules like normal which will automatically create transfers. Find them at the bottom of the **Manage Payees** screen if you want to create custom rules. - diff --git a/docs/Accounts/reconcile.md b/docs/Accounts/reconcile.md index 144037f20..58d26df7c 100644 --- a/docs/Accounts/reconcile.md +++ b/docs/Accounts/reconcile.md @@ -3,12 +3,14 @@ title: 'Reconciliation' --- # Reconciliation -Keeping your Actual account ledgers consistent with your band ledgers is important to maintain a healthy budget and know exactly how much currency is available to spend. Some choose to reconcile monthly, weekly, or even daily. Actual provides the Reconciliation tool to help manage this process. + +Keeping your Actual account ledgers consistent with your band ledgers is important to maintain a healthy budget and know exactly how much currency is available to spend. Some choose to reconcile monthly, weekly, or even daily. Actual provides the Reconciliation tool to help manage this process. ## Work flow -When you reconcile, you will be comparing your bank statement, print or online, against Actual's ledger for that account. If you have made transactions against the budget that have not been verified against your account the **cleared** flag will be shown in grey. If the transaction has been moved out of the pending section (online) of your bank statement, click the grey circle to turn it green. This is a visual indication that the transaction is in both your budget and in your account statement, and they match. -By clicking on the green balance in the header of the account view, two more category balances will come into view. The **cleared total** only includes transactions that have been cleared while the **uncleared total** will represent the transactions you have entered but may not have entered the bank statement yet. +When you reconcile, you will be comparing your bank statement, print or online, against Actual's ledger for that account. If you have made transactions against the budget that have not been verified against your account the **cleared** flag will be shown in grey. If the transaction has been moved out of the pending section (online) of your bank statement, click the grey circle to turn it green. This is a visual indication that the transaction is in both your budget and in your account statement, and they match. + +By clicking on the green balance in the header of the account view, two more category balances will come into view. The **cleared total** only includes transactions that have been cleared while the **uncleared total** will represent the transactions you have entered but may not have entered the bank statement yet. ![](/img/reconcile-1.png) @@ -16,11 +18,11 @@ By clicking on the green balance in the header of the account view, two more cat Press the icon that has 3 horizontally spaced dots in the right hand corner of the account ledger and then press **Reconcile**. -Let's imagine that we have just checked our account balance for our Ally Savings account and the current balance is $1229.18. We enter the balance we want to match into the Reconciliation tool and press **Reconcile**. +Let's imagine that we have just checked our account balance for our Ally Savings account and the current balance is $1229.18. We enter the balance we want to match into the Reconciliation tool and press **Reconcile**. ![](/img/reconcile-2.png) -The tool will tell us exactly how much is different than the budget ledger. Now we can check the Actual ledger against the bank ledger and watch the difference come closer to 0. In this case, we're looking for transactions that add up to 262.72. This is much easier by looking at the Actual ledger and bank statement side by side to match the transactions. +The tool will tell us exactly how much is different than the budget ledger. Now we can check the Actual ledger against the bank ledger and watch the difference come closer to 0. In this case, we're looking for transactions that add up to 262.72. This is much easier by looking at the Actual ledger and bank statement side by side to match the transactions. ![](/img/reconcile-3.png) @@ -30,7 +32,7 @@ When the cleared amount of the Actual account ledger and the value you entered i ## Using the Reconciliation tool for Off-Budget Asset tracking -Some use off-budget accounts to track values of assets such as vehicles, real estate, retirement accounts, or other investment accounts or property. The reconciliation tool is useful to update these values as well. Let's say we have a house that was valued at 358,700 but with current changes in the market it is now valued at 385,000. We go to the ledger for the house, choose the reconciliation tool, and enter 385,000 as the new value into the tool. +Some use off-budget accounts to track values of assets such as vehicles, real estate, retirement accounts, or other investment accounts or property. The reconciliation tool is useful to update these values as well. Let's say we have a house that was valued at 358,700 but with current changes in the market it is now valued at 385,000. We go to the ledger for the house, choose the reconciliation tool, and enter 385,000 as the new value into the tool. ![](/img/reconcile-5.png) @@ -38,10 +40,10 @@ The tool tells us that we have a gain of 26,400. ![](/img/reconcile-6.png) -We can enter this difference into the ledger. We used **Reconciliation** as the payee, but you can use whatever payee you'd like. By using a payee that is not used anywhere else you can find these adjustment transactions using the search features more easily. +We can enter this difference into the ledger. We used **Reconciliation** as the payee, but you can use whatever payee you'd like. By using a payee that is not used anywhere else you can find these adjustment transactions using the search features more easily. ![](/img/reconcile-7.png) -When you finish entering the transaction, make sure you **clear** it by clicking on the grey checkmark on the right hand side. You should now have a reconciliation tool that is reporting that it is finished and you can enjoy a new higher net worth. +When you finish entering the transaction, make sure you **clear** it by clicking on the grey checkmark on the right hand side. You should now have a reconciliation tool that is reporting that it is finished and you can enjoy a new higher net worth. -![](/img/reconcile-8.png) \ No newline at end of file +![](/img/reconcile-8.png) diff --git a/docs/Advanced/Experimental-Features/goal-templates.md b/docs/Advanced/Experimental-Features/goal-templates.md index 954aaa0d0..be72fa411 100644 --- a/docs/Advanced/Experimental-Features/goal-templates.md +++ b/docs/Advanced/Experimental-Features/goal-templates.md @@ -8,12 +8,13 @@ This is an **experimental feature**. That means we’re still working on finishi Create a template by adding a note to a category and adding a line that begins with `#template`. - ![](/img/goal-template-1.png) +![](/img/goal-template-1.png) You are welcome to have other lines in your note, but the #template line must match the syntax. ## How to use the templates +<!-- prettier-ignore --> |Syntax|Description|Application| |---|---|---| |#template $50|Budget $50 each month|Regular monthly bills, such as internet| @@ -32,12 +33,14 @@ You are welcome to have other lines in your note, but the #template line must ma |#template $10 repeat every 9 weeks starting 2022-01-04 up to 30|Budget $10 every 9 weeks, up to a maximum of $30| ### Notes -* $ sign is optional, `#template $50` and `#template 50` are the same. -* Other currency symbols are not supported. -* Number formats that use comma for the decimal seperator are not supported (eg, 123,45). You must use 123.45. -* Thousands separators are not supported (eg, 1,234). You must use 1234. + +- $ sign is optional, `#template $50` and `#template 50` are the same. +- Other currency symbols are not supported. +- Number formats that use comma for the decimal seperator are not supported (eg, 123,45). You must use 123.45. +- Thousands separators are not supported (eg, 1,234). You must use 1234. ### Multiple Template Lines + You can add multiple `#template` lines for a single category note. Lines that don't have a 'by' keyword in them add together, where as lines that do have the 'by' keyword are run sequentially - only the next next due template line is applied. For examples: @@ -48,7 +51,6 @@ For examples: #template $1200 by 2021-06 repeat every 6 months - **Streaming Services: $42.97** Netflix @@ -65,10 +67,10 @@ For examples: ## Apply the templates -To apply the goal templates you create, enable the feature in the Settings experimental section. When the feature is on, two new options will appear in the monthly budget actions list. +To apply the goal templates you create, enable the feature in the Settings experimental section. When the feature is on, two new options will appear in the monthly budget actions list. ![](/img/goal-template-2.png) **Apply budget template** will only fill empty cells using the templates. -**Overwrite with budget template** will fill in all budget cells using the templates. \ No newline at end of file +**Overwrite with budget template** will fill in all budget cells using the templates. diff --git a/docs/Advanced/Scripts/modify-transfers.md b/docs/Advanced/Scripts/modify-transfers.md index 96c43066a..d4c8f9905 100644 --- a/docs/Advanced/Scripts/modify-transfers.md +++ b/docs/Advanced/Scripts/modify-transfers.md @@ -17,10 +17,11 @@ This process will only apply when the below conditions are met - The match only occurs once. This means transfers of equal value following the pattern below will not be applied. - `Account A` -> `Account B` -> `Account A/C` + `Account A` -> `Account B` -> `Account A/C` - As we cannot reliable tell the order of the transfers. -::: + As we cannot reliable tell the order of the transfers. + + ::: ## How To @@ -29,147 +30,147 @@ This process will only apply when the below conditions are met 3. Open the `db.sqlite` file with your preferred tool [sqlite3 cli](https://www.sqlite.org/cli.html), [heidiSQL](https://www.heidisql.com/), ect 4. Run the below query to first view the impacted transactions - ``` sql - SELECT t.id, - acct, - a.name, - amount, - t.date, - imported_description, - t.description, - t.transferred_id, - ( - SELECT id - FROM transactions s - WHERE s.tombstone = 0 - AND s.id != t.id - AND starting_balance_flag = 0 - AND s.amount = (t.amount * -1) - AND s.acct != t.acct - AND ( - ( - s.date >= t.date - AND s.date <= (t.date + 3) - ) - OR ( - s.date <= t.date - AND s.date >= (t.date -3) - ) - ) - ) AS "transferred_id_new", - ( - SELECT pa.id - FROM transactions s - LEFT JOIN payees pa ON s.acct = pa.transfer_acct - WHERE s.tombstone = 0 - AND s.id != t.id - AND starting_balance_flag = 0 - AND s.amount = (t.amount * -1) - AND s.acct != t.acct - AND ( - ( - s.date >= t.date - AND s.date <= (t.date + 3) - ) - OR ( - s.date <= t.date - AND s.date >= (t.date -3) - ) - ) - ) AS "description_new" - FROM transactions t - LEFT JOIN accounts a ON t.acct = a.id - LEFT JOIN payees p ON t.description = p.id - LEFT JOIN accounts ta ON p.transfer_acct = ta.id - WHERE t.tombstone = 0 - AND starting_balance_flag = 0 - AND ( - SELECT COUNT(*) - FROM transactions s - WHERE s.tombstone = 0 - AND s.id != t.id - AND starting_balance_flag = 0 - AND s.amount = (t.amount * -1) - AND s.acct != t.acct - AND ( - ( - s.date >= t.date - AND s.date <= (t.date + 3) - ) - OR ( - s.date <= t.date - AND s.date >= (t.date -3) - ) - ) - ) = 1 - ORDER BY DATE DESC; - ``` + ```sql + SELECT t.id, + acct, + a.name, + amount, + t.date, + imported_description, + t.description, + t.transferred_id, + ( + SELECT id + FROM transactions s + WHERE s.tombstone = 0 + AND s.id != t.id + AND starting_balance_flag = 0 + AND s.amount = (t.amount * -1) + AND s.acct != t.acct + AND ( + ( + s.date >= t.date + AND s.date <= (t.date + 3) + ) + OR ( + s.date <= t.date + AND s.date >= (t.date -3) + ) + ) + ) AS "transferred_id_new", + ( + SELECT pa.id + FROM transactions s + LEFT JOIN payees pa ON s.acct = pa.transfer_acct + WHERE s.tombstone = 0 + AND s.id != t.id + AND starting_balance_flag = 0 + AND s.amount = (t.amount * -1) + AND s.acct != t.acct + AND ( + ( + s.date >= t.date + AND s.date <= (t.date + 3) + ) + OR ( + s.date <= t.date + AND s.date >= (t.date -3) + ) + ) + ) AS "description_new" + FROM transactions t + LEFT JOIN accounts a ON t.acct = a.id + LEFT JOIN payees p ON t.description = p.id + LEFT JOIN accounts ta ON p.transfer_acct = ta.id + WHERE t.tombstone = 0 + AND starting_balance_flag = 0 + AND ( + SELECT COUNT(*) + FROM transactions s + WHERE s.tombstone = 0 + AND s.id != t.id + AND starting_balance_flag = 0 + AND s.amount = (t.amount * -1) + AND s.acct != t.acct + AND ( + ( + s.date >= t.date + AND s.date <= (t.date + 3) + ) + OR ( + s.date <= t.date + AND s.date >= (t.date -3) + ) + ) + ) = 1 + ORDER BY DATE DESC; + ``` 5. Run the below query to update the transactions - ``` sql - UPDATE transactions - SET transferred_id = ( - SELECT s.id - FROM transactions s - WHERE s.tombstone = 0 - AND s.id != transactions.id - AND starting_balance_flag = 0 - AND s.amount = (transactions.amount * -1) - AND s.acct != transactions.acct - AND ( - ( - s.date >= transactions.date - AND s.date <= (transactions.date + 3) - ) - OR ( - s.date <= transactions.date - AND s.date >= (transactions.date -3) - ) - ) - ), - description = ( - SELECT pa.id - FROM transactions s - LEFT JOIN payees pa ON s.acct = pa.transfer_acct - WHERE s.tombstone = 0 - AND s.id != transactions.id - AND starting_balance_flag = 0 - AND s.amount = (transactions.amount * -1) - AND s.acct != transactions.acct - AND ( - ( - s.date >= transactions.date - AND s.date <= (transactions.date + 3) - ) - OR ( - s.date <= transactions.date - AND s.date >= (transactions.date -3) - ) - ) - ) - WHERE tombstone = 0 - AND starting_balance_flag = 0 - AND ( - SELECT COUNT(*) - FROM transactions s - WHERE s.tombstone = 0 - AND s.id != transactions.id - AND starting_balance_flag = 0 - AND s.amount = (transactions.amount * -1) - AND s.acct != transactions.acct - AND ( - ( - s.date >= transactions.date - AND s.date <= (transactions.date + 3) - ) - OR ( - s.date <= transactions.date - AND s.date >= (transactions.date -3) - ) - ) - ) = 1; - ``` + ```sql + UPDATE transactions + SET transferred_id = ( + SELECT s.id + FROM transactions s + WHERE s.tombstone = 0 + AND s.id != transactions.id + AND starting_balance_flag = 0 + AND s.amount = (transactions.amount * -1) + AND s.acct != transactions.acct + AND ( + ( + s.date >= transactions.date + AND s.date <= (transactions.date + 3) + ) + OR ( + s.date <= transactions.date + AND s.date >= (transactions.date -3) + ) + ) + ), + description = ( + SELECT pa.id + FROM transactions s + LEFT JOIN payees pa ON s.acct = pa.transfer_acct + WHERE s.tombstone = 0 + AND s.id != transactions.id + AND starting_balance_flag = 0 + AND s.amount = (transactions.amount * -1) + AND s.acct != transactions.acct + AND ( + ( + s.date >= transactions.date + AND s.date <= (transactions.date + 3) + ) + OR ( + s.date <= transactions.date + AND s.date >= (transactions.date -3) + ) + ) + ) + WHERE tombstone = 0 + AND starting_balance_flag = 0 + AND ( + SELECT COUNT(*) + FROM transactions s + WHERE s.tombstone = 0 + AND s.id != transactions.id + AND starting_balance_flag = 0 + AND s.amount = (transactions.amount * -1) + AND s.acct != transactions.acct + AND ( + ( + s.date >= transactions.date + AND s.date <= (transactions.date + 3) + ) + OR ( + s.date <= transactions.date + AND s.date >= (transactions.date -3) + ) + ) + ) = 1; + ``` 6. Zip the `db.sqlite` file with the original `metadata.json` file 7. Follow the [restore](docs\Backup-Restore\Restore.md) process to apply these into your Actual Server instance diff --git a/docs/Advanced/advanced-intro.md b/docs/Advanced/advanced-intro.md index 90a6e3820..6856e67ef 100644 --- a/docs/Advanced/advanced-intro.md +++ b/docs/Advanced/advanced-intro.md @@ -1,5 +1,5 @@ --- -title: "Advanced Overview" +title: 'Advanced Overview' --- :::caution diff --git a/docs/Backup-Restore/Backups.md b/docs/Backup-Restore/Backups.md index 37758385c..75132bc74 100644 --- a/docs/Backup-Restore/Backups.md +++ b/docs/Backup-Restore/Backups.md @@ -9,6 +9,7 @@ This only applies to Actual Web ::: You can export your data from Actual at any time. To do so, + 1. Login to your budget and click the three dots ![](/img/actual-config-4.png) @@ -16,14 +17,16 @@ You can export your data from Actual at any time. To do so, 2. Select Settings ![](/img/actual-config-5.png) + 3. Scroll down to the Export section and click Export Data ![](/img/actual-config-6.png) + 4. Save the file somewhere on your computer - that is it done. ## Manually creating a backup from the desktop app This will force a backup to be created right now. Do this if you are going to do something that you might want to revert later (and don't want to use [undo](/Getting-Started/tipstricks/#undoredo)). -* Select the **File > Load Backup…** menu item -* Click **Backup Now** +- Select the **File > Load Backup…** menu item +- Click **Backup Now** diff --git a/docs/Backup-Restore/Restore.md b/docs/Backup-Restore/Restore.md index 6894f1549..57f95d587 100644 --- a/docs/Backup-Restore/Restore.md +++ b/docs/Backup-Restore/Restore.md @@ -6,24 +6,29 @@ If you previously followed the [steps](Backups) to back up your data and have an zip export, you can now import that using the web version of Actual. To do this, + 1. login to your budget, then in the top right corner click 'Server' ![](/img/actual-config-7.png) + 1. Then select Logout ![](/img/actual-config-8.png) + 1. Log back into your instance of Actual ![](/img/actual-config-9.png) + 1. From the next screen select Import File ![](/img/actual-config-10.png) + 1. Select Actual and then locate your Zip file, this will then import what you previously exported into -Actual. + Actual. ![](/img/actual-config-11.png) -That is it. A fresh budget will show in your budget list. If the imported data is a copy of your current budget, you may want to rename the new budget by clicking on it's name so you can tell them apart. Once you verify the new imported budget is correct, you can navigate back to the budget selection screen by closing the current budget and deleting the old copy. +That is it. A fresh budget will show in your budget list. If the imported data is a copy of your current budget, you may want to rename the new budget by clicking on it's name so you can tell them apart. Once you verify the new imported budget is correct, you can navigate back to the budget selection screen by closing the current budget and deleting the old copy. # Restore a backup in the desktop application @@ -39,9 +44,7 @@ Backups are only available on the desktop app currently. ## Loading a backup -* Select the **File > Load Backup…** menu item -* Choose the backup you want to load and select it +- Select the **File > Load Backup…** menu item +- Choose the backup you want to load and select it The app will reload with the data from that backup. If you want to keep using that backup, you don't have to do anything else, just keep using the app. If you want to go back to the previous data, open the backup menu again and select **Revert to original version**. This option will be available until another backup is made. - - diff --git a/docs/Budgeting/categories.md b/docs/Budgeting/categories.md index 73f81b5e3..3b7819916 100644 --- a/docs/Budgeting/categories.md +++ b/docs/Budgeting/categories.md @@ -62,8 +62,8 @@ If you don't have much experience tracking your finances yet, we recommend start The basic categories are: -* **Food:** all grocery and restaurant spending. -* **General:** everything else (you probably want to split this up over time, but having a general category is nice for a lot of miscellaneous expenses). -* **Bills:** all bills that charge that same amount each month. Some people like to split this up too, but we think reports will eventually make this clearer. -* **Bills (Flexible):** All bills that charge various amounts (power, water, bi-monthly bills, etc). -* **Savings:** any transfers to savings accounts. These are treated as expenses because it's moving money out of the budget, but if you add your savings account on the budget you'll want to budget all that money accordingly instead. +- **Food:** all grocery and restaurant spending. +- **General:** everything else (you probably want to split this up over time, but having a general category is nice for a lot of miscellaneous expenses). +- **Bills:** all bills that charge that same amount each month. Some people like to split this up too, but we think reports will eventually make this clearer. +- **Bills (Flexible):** All bills that charge various amounts (power, water, bi-monthly bills, etc). +- **Savings:** any transfers to savings accounts. These are treated as expenses because it's moving money out of the budget, but if you add your savings account on the budget you'll want to budget all that money accordingly instead. diff --git a/docs/Budgeting/creditcards.md b/docs/Budgeting/creditcards.md index d5ba383f4..f2a88b7db 100644 --- a/docs/Budgeting/creditcards.md +++ b/docs/Budgeting/creditcards.md @@ -4,7 +4,7 @@ title: 'Managing Credit Cards' Using a credit card in any budgeting software can be confusing, and Actual is no different. Of all the questions that are asked about budgeting, credit card usage is near the top of the list so don't feel bad if you're a little confused. We will try to walk through the process of using a credit card, paying a credit card, and carrying a balance on a credit card here. -I have made several purchases on my credit card. I enter these transactions just like every other transaction and make sure to choose the **Credit Card** account in the ledger. I also make sure that the correct category is chosen. You'll notice that the account balance is **red** and negative. Credit cards are debt, so our starting balance should be 0. Any transaction added to this account will spend money, therefore making the amount more negative. If you are first starting out with Actual, be sure to enter your current balance as a negative number for the starting balance. +I have made several purchases on my credit card. I enter these transactions just like every other transaction and make sure to choose the **Credit Card** account in the ledger. I also make sure that the correct category is chosen. You'll notice that the account balance is **red** and negative. Credit cards are debt, so our starting balance should be 0. Any transaction added to this account will spend money, therefore making the amount more negative. If you are first starting out with Actual, be sure to enter your current balance as a negative number for the starting balance. ![](/img/credit-1.png) @@ -24,4 +24,4 @@ I still need to pay that credit card bill though. I go to my checking account an ![](/img/credit-5.png) -Now my **Credit Card** account matches my **Credit Card** debt category. Next month that -30 will still be in my **Credit Card** debt category so I'm going to work extra hard to pay it off. \ No newline at end of file +Now my **Credit Card** account matches my **Credit Card** debt category. Next month that -30 will still be in my **Credit Card** debt category so I'm going to work extra hard to pay it off. diff --git a/docs/Budgeting/filters.md b/docs/Budgeting/filters.md index 45e6c6c2e..0453099f8 100644 --- a/docs/Budgeting/filters.md +++ b/docs/Budgeting/filters.md @@ -2,7 +2,7 @@ title: 'Filtering In Actual' --- -### Introduction +### Introduction Filter is a little known tool in Actual but is really quite a powerhouse. Filters go well beyond the simple Search tool and will allow you to create all sorts of useful transaction summaries. This will help you view various aspects of your spending, extract data for tax filing and so on. @@ -17,6 +17,7 @@ Inevitably, there are some restrictions but these offer a great opportunity for 5. Filters are just one way of searching and viewing your data. There is still great scope for the future development of graphical style reports in Actual. ### How to use the Filter tool + Well, having got that out of the way please don’t let any of this put you off. Filters are a great tool – and there is lots more scope for further development. :::note @@ -29,35 +30,34 @@ First go to the **Accounts** view. This is to be sure that you are picking up al Now select **Filter**. You will see from this drop-down that there are a number to choose from: -![](/img/filtering/filter.png) +![](/img/filtering/filter.png) -The great thing is that you are not limited to just one Filter. You can select multiple filters. In effect stacking one upon another. An example will help illustrate this. +The great thing is that you are not limited to just one Filter. You can select multiple filters. In effect stacking one upon another. An example will help illustrate this. There are further options to choose within each area, in order to narrow the Filter still further. Here are three just to illustrate the choices – Dates, Categories and Notes: ![](/img/filtering/conditions-1.png) -![](/img/filtering/conditions-2.png) +![](/img/filtering/conditions-2.png) -![](/img/filtering/conditions-3.png) +![](/img/filtering/conditions-3.png) ### Example In this example we are finding out how much the Mercedes car cost to run during the 2021 calendar year. To enhance this analysis a Note of each vehicle owned was added to transactions in the “Car” category group. Adding such a note is made much easier by ensuring that the Note is added to each relevant scheduled (recurring) transaction. In this instance the Note was added using the tag symbol (#Merc) but the # is not needed. It is a personal preference. Alternatively, you could just be more granular in your creation of Categories. -![](/img/filtering/multiple-filters.png) +![](/img/filtering/multiple-filters.png) Here is an image of the multiple filters that have been selected. In this example, these include a Date range, multiple Categories, and a Note. -![](/img/filtering/highlight.png) +![](/img/filtering/highlight.png) Now we want to see the total spent on the Mercedes car in 2021. This is shown at the top centre of the following image. -![](/img/filtering/highlight-2.png) +![](/img/filtering/highlight-2.png) But what if we need to drill down further and calculate just the costs were for servicing this particular car? By deselecting the non-applicable transactions a revised total appears as shown below. Alternatively just remove the non-applicable category filters. - ### Conclusion -This is just one possible use case. The filters you personally create will be dictated by your own needs. There is lots of room here for personal creativity! +This is just one possible use case. The filters you personally create will be dictated by your own needs. There is lots of room here for personal creativity! diff --git a/docs/Budgeting/howitworks.md b/docs/Budgeting/howitworks.md index 0665c4d56..397f4e602 100644 --- a/docs/Budgeting/howitworks.md +++ b/docs/Budgeting/howitworks.md @@ -19,7 +19,7 @@ If you are **creating a budget for the first time**, here's how that works: 1. Your total **account balance** is available to budget. It knows how much cash you have currently, and that is all you can currently budget. (Remember, your budget is always based on your current money!) 2. Click on the **budgeted** column of a category and enter a number for what you think you'll spend that month. **Tip**: don't overthink it. You can always adjust it later. 3. Continue to budget until the **To budget** amount is **0**. -4. You can also [customize the categories](/budgeting/categories/). +4. You can also [customize the categories](/budgeting/categories/). ## The budgeting workflow @@ -43,16 +43,16 @@ When you add income for a month, it becomes immediately available to budget. You Most likely, a common workflow will be to "hold" income you make this month for next month's budget. **Optionally, to hold money instead of budgeting it for a month:** - 1. Click the **To Budget** amount. - 2. Select **Hold for next month** in the menu. +1. Click the **To Budget** amount. +2. Select **Hold for next month** in the menu. - ![](/img/buffer-1.png) +![](/img/buffer-1.png) - 3. Press `Enter` to hold all available money, or enter a custom amount to hold. +3. Press `Enter` to hold all available money, or enter a custom amount to hold. This doesn't do anything except takes out money from the **To Budget** amount for that month, allowing you to "zero it out" and mark it to be used for later. That money will appear in next month's **To Budget**. You can also just leave the **To Budget** amount alone. -It is possible to hold money multiple months ahead. If you do this, those dollars will be delay to be budgeted until the last month of the hold. If you need to use that money in the current month to cover over spending, use the **Reset Next Months Buffer** button to bring that money to the current month. This needs to be done for each month there is a hold. +It is possible to hold money multiple months ahead. If you do this, those dollars will be delay to be budgeted until the last month of the hold. If you need to use that money in the current month to cover over spending, use the **Reset Next Months Buffer** button to bring that money to the current month. This needs to be done for each month there is a hold. :::note If you enter a new month and have a negative "To Be Budgeted" amount and you're sure it should be positive, try resetting next month's buffer to bring money that may be held back to the current month. @@ -97,9 +97,6 @@ Sometimes you want to keep a negative balance in a category across months. The m 2. Select **Keep negative spending in category** 3. For all future months, a negative balance will stay in the category - - - ## Recommended workflow for new users This might sound complex, but it's really not! You can get as detailed as you want, but it's still very effective if you keep it simple. If you're not sure where to start, we recommend this simple workflow: @@ -107,10 +104,10 @@ This might sound complex, but it's really not! You can get as detailed as you wa 1. We recommend opening a savings account if you don't have one. Add it in Actual as an off-budget account. 2. Stick with the basic categories (you will probably add a few more, but don't overdo it). 3. Try to budget less than what you are making so that you are saving money each month. -3. When the month ends, copy last month's budget. Whatever is leftover in **To budget** is the amount of money that you saved. -4. Note that this automatically will cover overspending from last month by taking it out of the leftover **To budget** amount. You're effectively taking out of savings. -5. Budget the leftover **To budget** amount to the **Savings** category -6. Transfer the leftover amount to your savings account and and categorize the transactions with the **Savings** category +4. When the month ends, copy last month's budget. Whatever is leftover in **To budget** is the amount of money that you saved. +5. Note that this automatically will cover overspending from last month by taking it out of the leftover **To budget** amount. You're effectively taking out of savings. +6. Budget the leftover **To budget** amount to the **Savings** category +7. Transfer the leftover amount to your savings account and and categorize the transactions with the **Savings** category If you don't have a savings account, you can simply skip step 6. The **Savings** category will build up a balance and represent the savings that you are keeping in your account. diff --git a/docs/Budgeting/jointaccounts.md b/docs/Budgeting/jointaccounts.md index d76f10454..da3056f1f 100644 --- a/docs/Budgeting/jointaccounts.md +++ b/docs/Budgeting/jointaccounts.md @@ -2,19 +2,20 @@ title: 'Strategies for handling joint accounts' --- -Situation: I am using Actual to keep track of my budget and finances, but I share a joint account with my partner. +Situation: I am using Actual to keep track of my budget and finances, but I share a joint account with my partner. ## Basic setup steps + 1. Create an **on-budget** account used to pay joint bills. 2. Create a **category group** used to group your shared expense categories. 3. Create the **categories** you plan to budget using your joint account. -4. **Optional:** Create an **Income Category** called **Partner Contribution** or something similar. This will be explained further below. +4. **Optional:** Create an **Income Category** called **Partner Contribution** or something similar. This will be explained further below. ## Adding funds to the joint account ### Your contribution -Each month you will add a transfer of your share to the joint account from one of your on-budget accounts. You don't need a category for your contribution since it is just a transfer from one of your accounts to another. +Each month you will add a transfer of your share to the joint account from one of your on-budget accounts. You don't need a category for your contribution since it is just a transfer from one of your accounts to another. ![](/img/jointaccount-2.png) @@ -22,25 +23,26 @@ Each month you will add a transfer of your share to the joint account from one o #### Option 1 -When your partner makes a contribution to the joint account, use the **Income Category** you created as the category. By having a separate category for this contribution, it will be easier to filter out when doing reports later since this isn't true income, though it is income to the budget. +When your partner makes a contribution to the joint account, use the **Income Category** you created as the category. By having a separate category for this contribution, it will be easier to filter out when doing reports later since this isn't true income, though it is income to the budget. ![](/img/jointaccount-3.png) #### Option 2 -If option 1 doesn't seem right to you, the same result could be achieved by treating the new income like a return to a store. In this case, you can assign your partners deposit directly to the shared categories. The deposit should be made into the **Joint Account** ledger. As you can see, you can fund each shared category using the **split transaction** option. +If option 1 doesn't seem right to you, the same result could be achieved by treating the new income like a return to a store. In this case, you can assign your partners deposit directly to the shared categories. The deposit should be made into the **Joint Account** ledger. As you can see, you can fund each shared category using the **split transaction** option. ![](/img/jointaccount-5.png) ## Budgeting ### Option 1 -If you are entering the data for the joint account according to option 1, budget the whole amount for the bill. The total budgeted of the shared expenses category group should equal the total amount available in the joint account. The joint account and category group are loosely connected in this scenario. There is no safeguard to prevent over budgeting for that account so you will need to monitor the balance of the account and the balance of the category group to be sure they are the same. + +If you are entering the data for the joint account according to option 1, budget the whole amount for the bill. The total budgeted of the shared expenses category group should equal the total amount available in the joint account. The joint account and category group are loosely connected in this scenario. There is no safeguard to prevent over budgeting for that account so you will need to monitor the balance of the account and the balance of the category group to be sure they are the same. ![](/img/jointaccount-1.png) ### Option 2 -If you've decided to fund the categories directly with the deposit, you only need to fund the budget categories for your portion of the shared expense. As you can see, each of the budget categories is still funded to the same level but in this case there is no **income** that will show in reports. The Joint account balance and budgeted amount should still be the same. +If you've decided to fund the categories directly with the deposit, you only need to fund the budget categories for your portion of the shared expense. As you can see, each of the budget categories is still funded to the same level but in this case there is no **income** that will show in reports. The Joint account balance and budgeted amount should still be the same. -![](/img/jointaccount-4.png) \ No newline at end of file +![](/img/jointaccount-4.png) diff --git a/docs/Budgeting/returnsandreimbursements.md b/docs/Budgeting/returnsandreimbursements.md index bf6a4676e..45c51db2b 100644 --- a/docs/Budgeting/returnsandreimbursements.md +++ b/docs/Budgeting/returnsandreimbursements.md @@ -1,11 +1,12 @@ --- title: 'Returns and Reimbursements' --- + [budgeting]: ./howitworks#overspending ## Returns -We have all been there. We purchased something that looked great at the time, but unfortunately it was the wrong size, didn't fit the purpose just as we had imagined, or just decided that we don't really need it and now we have to return it. But how do we do that with our budget? The thing to remember is that even though money will be flowing **in** to your budget, it isn't income. You used a budget category when you bought the item, so the most appropriate method to return that money to the budget is to allow the return amount to flow directly back to the category that was used to purchase it. +We have all been there. We purchased something that looked great at the time, but unfortunately it was the wrong size, didn't fit the purpose just as we had imagined, or just decided that we don't really need it and now we have to return it. But how do we do that with our budget? The thing to remember is that even though money will be flowing **in** to your budget, it isn't income. You used a budget category when you bought the item, so the most appropriate method to return that money to the budget is to allow the return amount to flow directly back to the category that was used to purchase it. You can see from this view, I've bought a pair of sandals from Amazon that I was really excited about...Until they didn't fit. @@ -15,7 +16,7 @@ From the Budget screen, you can see I've spent every last dollar of my **clothin ![](/img/returns-1.png) -I didn't like those sandals as much as I thought I did. They made my feet look big. So I decided to return them a few days later. To enter the return, I fill out a nearly identical transaction in the account that will be credited. In my case, I had Amazon put the money back on my Debit card. Instead of putting the return amount in the **payment** column, I've entered the amount in the **Deposit** column. I also made sure that I chose **Clothing** as my category. +I didn't like those sandals as much as I thought I did. They made my feet look big. So I decided to return them a few days later. To enter the return, I fill out a nearly identical transaction in the account that will be credited. In my case, I had Amazon put the money back on my Debit card. Instead of putting the return amount in the **payment** column, I've entered the amount in the **Deposit** column. I also made sure that I chose **Clothing** as my category. ![](/img/returns-3.png) @@ -25,13 +26,13 @@ Now when I check my budget, I have 32 dollars available to spend on clothing for ## Reimbursements -Handling reimbursements can be confusing. There are several ways to handle them in your budget and you may use each way at different times depending on the circumstances. When it comes to reimbursements, it is assumed you will be covering some purchases that you would not normally make in your normal monthly budget. Having a special category in your budget that captures these purchases is not uncommon. There are two fundamental ways to manage reimbursements. The first is by carrying debt and the second is to pre-fund the category. Ideally, carrying debt is a last resort. But if the reimbursable expense is large compared to your current on-budget account balances, there may be no other reasonable way. +Handling reimbursements can be confusing. There are several ways to handle them in your budget and you may use each way at different times depending on the circumstances. When it comes to reimbursements, it is assumed you will be covering some purchases that you would not normally make in your normal monthly budget. Having a special category in your budget that captures these purchases is not uncommon. There are two fundamental ways to manage reimbursements. The first is by carrying debt and the second is to pre-fund the category. Ideally, carrying debt is a last resort. But if the reimbursable expense is large compared to your current on-budget account balances, there may be no other reasonable way. -In this scenario, all of your reimbursable expenses would go to a credit card. Credit cards have negative balances in the account view until they are paid in full, because after all, they are a debt product. You will also want a category that is meant for these reimbursable expenses. Maybe a **Business** category or **Shared Expenses** category will fill that role. Whatever category name you choose, you need to make a decision. Will you be pre-funding this category and allowing it to draw down towards 0 until you're reimbursed or will you let the category be overdrawn and carry a negative balance and then refill the category when you are reimbursed. +In this scenario, all of your reimbursable expenses would go to a credit card. Credit cards have negative balances in the account view until they are paid in full, because after all, they are a debt product. You will also want a category that is meant for these reimbursable expenses. Maybe a **Business** category or **Shared Expenses** category will fill that role. Whatever category name you choose, you need to make a decision. Will you be pre-funding this category and allowing it to draw down towards 0 until you're reimbursed or will you let the category be overdrawn and carry a negative balance and then refill the category when you are reimbursed. ### Pros of pre-funding -This is the true zero-budget way. Pre-funding is just budgeting. You know you're going to spend some money, so you allocate money to spend. The end. +This is the true zero-budget way. Pre-funding is just budgeting. You know you're going to spend some money, so you allocate money to spend. The end. ### Cons of pre-funding @@ -43,11 +44,11 @@ Your regular categories can be funded at normal levels. ### Cons of not pre-funding -You don't have a zero based budget. This is essentially debt spending since you aren't allocating money to cover the expenses. If you spend too much on debt, you could run into a situation where you overdraft or start carrying a balance on a credit card. +You don't have a zero based budget. This is essentially debt spending since you aren't allocating money to cover the expenses. If you spend too much on debt, you could run into a situation where you overdraft or start carrying a balance on a credit card. ### Cover the spending by end-of-month or rollover -Ultimately this is a personal decision. If you are capable, there is less short term risk if the category is pre-funded. If you choose to let the category remain negative and fill it up when you are reimbursed, don't forget to toggle the "Rollover Spending" option on the category just in case you aren't reimbursed in the same month. If you already carry a credit card balance month-to-month, cover the reimbursable overspending by the credit card category so when you pay the credit card bill it's a little easier to manage. +Ultimately this is a personal decision. If you are capable, there is less short term risk if the category is pre-funded. If you choose to let the category remain negative and fill it up when you are reimbursed, don't forget to toggle the "Rollover Spending" option on the category just in case you aren't reimbursed in the same month. If you already carry a credit card balance month-to-month, cover the reimbursable overspending by the credit card category so when you pay the credit card bill it's a little easier to manage. ![](/img/reimbursement-1.png) @@ -57,4 +58,4 @@ Look for the red arrow when you allow over spending to carry from month to month ### Adding the reimbursement transaction -When you are reimbursed, you can use the same technique from the Returns section. Add a new transaction to the account the reimbursement is being deposited and choose the category you used to track your spending. +When you are reimbursed, you can use the same technique from the Returns section. Add a new transaction to the account the reimbursement is being deposited and choose the category you used to track your spending. diff --git a/docs/Budgeting/rules/rules-custom.md b/docs/Budgeting/rules/rules-custom.md index e72f83e3d..b5fee41cd 100644 --- a/docs/Budgeting/rules/rules-custom.md +++ b/docs/Budgeting/rules/rules-custom.md @@ -2,17 +2,16 @@ title: 'Supercharge your Budget' --- +This page has examples of custom rules that some of our users have found useful for their own budgets. If you have any custom rules you're proud of, click the “Edit this page” button below to propose adding them to this page [tell us about them](/Contact.md)! -This page has examples of custom rules that some of our users have found useful for their own budgets. If you have any custom rules you're proud of, click the “Edit this page” button below to propose adding them to this page [tell us about them](/Contact.md)! +**Q: How do I set a default account when I add transactions?** -**Q: How do I set a default account when I add transactions?** - -**A:** Set a **Pre** rule to check for an empty account field. When entering a transaction in the "All Accounts" ledger or from the ledger of a Category listing, your preferred default account will be auto filled. +**A:** Set a **Pre** rule to check for an empty account field. When entering a transaction in the "All Accounts" ledger or from the ledger of a Category listing, your preferred default account will be auto filled. ![](/img/custom-rules-1.png) -**Q: I have accounts (like cash or Venmo) that instantly “clear” at the moment of purchase. How can I automate toggling the "cleared" status?** +**Q: I have accounts (like cash or Venmo) that instantly “clear” at the moment of purchase. How can I automate toggling the "cleared" status?** -**A:** Set a **Post** rule to check for your account or accounts where instant transactions can be made, set the action to "cleared", and select the checkbox. Cash or Venmo are typical examples of this type of account. Any time a transaction is added to the accounts listed in this rule, those transactions will automatically get a cleared state from now on. +**A:** Set a **Post** rule to check for your account or accounts where instant transactions can be made, set the action to "cleared", and select the checkbox. Cash or Venmo are typical examples of this type of account. Any time a transaction is added to the accounts listed in this rule, those transactions will automatically get a cleared state from now on. -![](/img/custom-rules-2.png) \ No newline at end of file +![](/img/custom-rules-2.png) diff --git a/docs/Budgeting/rules/rules.md b/docs/Budgeting/rules/rules.md index c34a89d6e..b6d1b78ca 100644 --- a/docs/Budgeting/rules/rules.md +++ b/docs/Budgeting/rules/rules.md @@ -28,14 +28,14 @@ While ranking works for the most part, you might want to say "this rule _always_ Conditions can use the following fields: -* account -* imported payee -* payee -* date -* notes -* amount -* amount (inflow) -* amount (outflow) +- account +- imported payee +- payee +- date +- notes +- amount +- amount (inflow) +- amount (outflow) `imported payee` is different from `payee` in that it is _always_ the original text of the payee or description field when the transaction was imported. `payee` references a payee in Actual. This matters because it allows you to rename a payee before it is created in Actual. You can have several rules that all check `imported payee` and set the payee to something without worrying about them stepping on each other. (Conditions can't reliably check `payee` if previous rules changed it) @@ -45,13 +45,13 @@ All strings are matched case-insensitive. An `imported payee` of "PuBlix" will m Actions can set the following fields: -* payee -* notes -* date -* amount -* category -* account -* cleared +- payee +- notes +- date +- amount +- category +- account +- cleared ## Automatic rules diff --git a/docs/Budgeting/schedules.md b/docs/Budgeting/schedules.md index 4bc74339e..bdad513a6 100644 --- a/docs/Budgeting/schedules.md +++ b/docs/Budgeting/schedules.md @@ -1,19 +1,20 @@ --- title: 'Schedules' --- + [rules]: ./rules ## Creating a schedule -Schedules can be used to enter anticipated transactions early. Some of the available options to tailor schedules to your needs are: +Schedules can be used to enter anticipated transactions early. Some of the available options to tailor schedules to your needs are: 1. Set to be recurring or only entered once 2. Set to be automatically entered into the account register or choose to manually approve entries 3. Options for recurring entries for multiple specific days of the month. - 1. A single schedule can be created for a Cell phone plan that has multiple users and different payment cycles for each phone. If you have 3 cell phones that all get paid on different days of the month, each day can be defined in a single schedule for each phone. + 1. A single schedule can be created for a Cell phone plan that has multiple users and different payment cycles for each phone. If you have 3 cell phones that all get paid on different days of the month, each day can be defined in a single schedule for each phone. 4. Options to determine frequency of payments, such as every month, every 2 months, every 2 years, etc. -Once a schedule is started, Actual will search the transaction history for entries that match the schedule, select the matches, and the option to link those transactions to the schedule is given. You can click to the **Find missing transactions** button to have Actual look for matches. +Once a schedule is started, Actual will search the transaction history for entries that match the schedule, select the matches, and the option to link those transactions to the schedule is given. You can click to the **Find missing transactions** button to have Actual look for matches. ![](/img/schedules-1.png) @@ -23,13 +24,14 @@ Once a schedule is started, Actual will search the transaction history for entri ## How Actual finds schedules -In addition to the requirements you have specified when creating a schedule, a transaction must also meet the date requirements to be matched to a schedule. Transactions must be dated within 2 days before or after a schedule. +In addition to the requirements you have specified when creating a schedule, a transaction must also meet the date requirements to be matched to a schedule. Transactions must be dated within 2 days before or after a schedule. -For example: You have a schedule set up for your power bill for the 15th of every month. Today is the 10th of the month and you can see an upcoming scheduled transaction of your bill in Actual. The utility company decided to withdraw the funds on the 10th this month, so you post the transaction to Actual early and change the date of the transaction to match your bank statement. A problem just occurred because now the posted transaction is outside of the 2 day window to match scheduled transactions. You'll see your bill posted in the Actual account ledger but you'll also see an upcoming transaction for the power bill on the 15th even though you just entered it. This is the expected behavior when using schedules. +For example: You have a schedule set up for your power bill for the 15th of every month. Today is the 10th of the month and you can see an upcoming scheduled transaction of your bill in Actual. The utility company decided to withdraw the funds on the 10th this month, so you post the transaction to Actual early and change the date of the transaction to match your bank statement. A problem just occurred because now the posted transaction is outside of the 2 day window to match scheduled transactions. You'll see your bill posted in the Actual account ledger but you'll also see an upcoming transaction for the power bill on the 15th even though you just entered it. This is the expected behavior when using schedules. You can resolve this issue in one of two ways. + 1. Skip the next schedule by selecting the upcoming scheduled transaction and choosing the "Skip Scheduled Date" from the menu options. -2. Accept the date doesn't match and leave it as is so the schedule doesn't prompt a second transaction. +2. Accept the date doesn't match and leave it as is so the schedule doesn't prompt a second transaction. ## Schedule options that are not supported @@ -60,4 +62,4 @@ You can apply this newly made rule to any other of the linked transactions. Sele ![](/img/schedules-8.png) -Save the rule and any time this scheduled transaction gets entered into the register it can be automatically categorized with a helpful note. \ No newline at end of file +Save the rule and any time this scheduled transaction gets entered into the register it can be automatically categorized with a helpful note. diff --git a/docs/Developers/API.md b/docs/Developers/API.md index 362f7b846..a901c2344 100644 --- a/docs/Developers/API.md +++ b/docs/Developers/API.md @@ -8,65 +8,65 @@ import APIList from './APIList'; This is the documentation of all available API methods. The API has not been released yet, but it will be available in the next update. This section is a work in progress. <APIList title="Transactions" sections={[ - "Transaction", - "addTransactions", - "importTransactions", - "getTransactions", - "filterTransactions", - "updateTransaction", - "deleteTransaction" +"Transaction", +"addTransactions", +"importTransactions", +"getTransactions", +"filterTransactions", +"updateTransaction", +"deleteTransaction" ]} /> <APIList title="Accounts" sections={[ - "Account", - "getAccounts", - "createAccount", - "updateAccount", - "closeAccount", - "reopenAccount", - "deleteAccount" +"Account", +"getAccounts", +"createAccount", +"updateAccount", +"closeAccount", +"reopenAccount", +"deleteAccount" ]} /> <APIList title="Categories" sections={[ - "Category", - "getCategories", - "createCategory", - "updateCategory", - "deleteCategory" +"Category", +"getCategories", +"createCategory", +"updateCategory", +"deleteCategory" ]} /> <APIList title="Category Groups" sections={[ - "Category group", - "getCategoryGroups", - "createCategoryGroup", - "updateCategoryGroup", - "deleteCategoryGroup" +"Category group", +"getCategoryGroups", +"createCategoryGroup", +"updateCategoryGroup", +"deleteCategoryGroup" ]} /> <APIList title="Payees" sections={[ - "Payee", - "getPayees", - "createPayee", - "updatePayee", - "deletePayee" +"Payee", +"getPayees", +"createPayee", +"updatePayee", +"deletePayee" ]} /> <APIList title="Payee rules" sections={[ - "Payee rule", - "getPayeeRules", - "createPayeeRule", - "updatePayeeRule", - "deletePayeeRule" +"Payee rule", +"getPayeeRules", +"createPayeeRule", +"updatePayeeRule", +"deletePayeeRule" ]} /> ## Types of methods API methods are categorized into one of four types: -* `get` -* `create` -* `update` -* `delete` +- `get` +- `create` +- `update` +- `delete` Objects may have fields specific for a type of method. For example, the `payee` field of a `transaction` is only available in a `create` method. This field doesn't exist in objects returned from a `get` method (`payee_id` is used instead). @@ -76,7 +76,6 @@ Fields specific to a type of request are marked as such in the notes. All `update` and `delete` methods take an `id` to specify the desired object. `update` takes the fields to update as a second argument — it does not take a full object. That means even if a field is required, you don't have to pass it to `update`. For example, a `category` requires the `group_id` field, however `updateCategory(id, { name: "Food" })` is a valid call. Required means that an `update` can't set the field to `null` and `create` method must always have it. - ## Primitives These are types. @@ -91,15 +90,15 @@ These are types. #### `getBudgetMonth` -<Method name="getBudgetMonth" args={[{ name: 'month', type: 'month' }]} returns="Promise<Budget>" /> +<Method name="getBudgetMonth" args={[{ name: 'month', type: 'month' }]} returns="Promise<Budget>" /> #### `setBudgetAmount` -<Method name="setBudgetAmount" args={[{ name: 'month', type: 'month' }, { name: 'categoryId', type: 'id' }, { name: 'value', type: 'amount' }]} returns="Promise<null>" /> +<Method name="setBudgetAmount" args={[{ name: 'month', type: 'month' }, { name: 'categoryId', type: 'id' }, { name: 'value', type: 'amount' }]} returns="Promise<null>" /> #### `setBudgetCarryover` -<Method name="setBudgetCarryover" args={[{ name: 'month', type: 'month' }, { name: 'categoryId', type: 'id' }, { name: 'flag', type: 'bool' }]} returns="Promise<null>" /> +<Method name="setBudgetCarryover" args={[{ name: 'month', type: 'month' }, { name: 'categoryId', type: 'id' }, { name: 'flag', type: 'bool' }]} returns="Promise<null>" /> #### Examples @@ -117,9 +116,9 @@ an an array of sub-transactions in the `subtransactions` field. Subtransactions can specify the following fields, and `amount` is the only required field: -* `amount` -* `category_id` -* `notes` +- `amount` +- `category_id` +- `notes` If the amounts of the sub-transactions do not equal the total amount of the transaction, currently the API call will succeed but an error @@ -135,7 +134,7 @@ If you want to create a transfer, use the transfer payee for the account you wis #### `addTransactions` -<Method name="addTransactions" args={[{ name: 'accountId', type: 'id'}, { name: 'transactions', type: 'Transaction[]'}]} returns="Promise<id[]>" /> +<Method name="addTransactions" args={[{ name: 'accountId', type: 'id'}, { name: 'transactions', type: 'Transaction[]'}]} returns="Promise<id[]>" /> Adds multiple transactions at once. Does not reconcile (see `importTransactions`). Returns an array of ids of the newly created transactions. @@ -155,9 +154,9 @@ It will also create transfers if a transfer payee is specified. See [transfers]( This method returns an object with the following fields: -* `added`: an array of ids of transactions that were added -* `updated`: an array of ids of transactions that were updated (such as being cleared) -* `errors`: any errors that occurred during the process (most likely a single error with no changes to transactions) +- `added`: an array of ids of transactions that were added +- `updated`: an array of ids of transactions that were updated (such as being cleared) +- `errors`: any errors that occurred during the process (most likely a single error with no changes to transactions) #### `getTransactions` @@ -188,34 +187,36 @@ Delete a transaction. // automatically created if it does not exist already and // assigned to the transaction. -await importTransactions(accountId, [{ - account_id: "e2564e8c-ec96-43d7-92ce-3b91ee9d2d69", - date: "2019-08-20", - amount: 1200, - payee: "Kroger", - category_id: "c179c3f4-28a6-4fbd-a54d-195cced07a80" -}]) +await importTransactions(accountId, [ + { + account_id: 'e2564e8c-ec96-43d7-92ce-3b91ee9d2d69', + date: '2019-08-20', + amount: 1200, + payee: 'Kroger', + category_id: 'c179c3f4-28a6-4fbd-a54d-195cced07a80', + }, +]); ``` ```js // Get all transactions in an account for the month of August // (it doesn't matter that August 31st doesn't exist). -await getTransactions(accountId, "2019-08-01", "2019-08-31") +await getTransactions(accountId, '2019-08-01', '2019-08-31'); ``` ```js // Find transactions with the amount of 3.91. Currently this // assumes you are using a currency with two decimal places. -await filterTransactions(accountId, "3.91") +await filterTransactions(accountId, '3.91'); ``` ```js // Assign the "Food" category to a transaction - + let categories = await getCategories(); -let foodCategory = category.find(cat => cat.name === "Food"); -await updateTransaction(id, { category_id: foodCategory.id }) +let foodCategory = category.find(cat => cat.name === 'Food'); +await updateTransaction(id, { category_id: foodCategory.id }); ``` ## Accounts @@ -228,13 +229,13 @@ await updateTransaction(id, { category_id: foodCategory.id }) The account type must be one of these valid strings: -* `checking` -* `savings` -* `credit` -* `investment` -* `mortgage` -* `debt` -* `other` +- `checking` +- `savings` +- `credit` +- `investment` +- `mortgage` +- `debt` +- `other` The account type does not effect anything currently. It's simply extra information about the account. @@ -301,7 +302,7 @@ createAccount({ ```js // Get all accounts -let accounts = await getAccounts() +let accounts = await getAccounts(); ``` ## Categories @@ -357,7 +358,7 @@ Set `is_income` to `true` to create an income category. The `group_id` of the ca ```js { - name: "Bills" + name: 'Bills'; } ``` diff --git a/docs/Developers/ActualQL/Examples.md b/docs/Developers/ActualQL/Examples.md index d7e0fe465..138788fce 100644 --- a/docs/Developers/ActualQL/Examples.md +++ b/docs/Developers/ActualQL/Examples.md @@ -11,7 +11,7 @@ This part deserves better docs, but here's a reference example you can use to se ```js q('transactions') .filter({ date: { $transform: '$month', $eq: '2021-01' } }) - .select('*') + .select('*'); ``` This would return all transactions in the month of `2021-01`. We've applied the `$month` function to the `date` field and applied the condition of equaling `2021-01`. @@ -21,47 +21,85 @@ You can substitute `$year` to do the same thing for year. ## Total Amount per Payee between 6 Apr 2020 and 5 Apr 2021 ```js -(await $query($q('transactions') -.filter({ $and: [ {date: { $gte: '2020-04-06'}}, {date: {$lte: '2021-04-05'}}]}) -.groupBy('payee.name') -.orderBy('payee.name') -.select(['payee.name', {'amount': {$sum: '$amount'}}]) -)).data.map((row) => { console.log(`${row['payee.name']}: ${row.amount/100}`) }) +( + await $query( + $q('transactions') + .filter({ + $and: [ + { date: { $gte: '2020-04-06' } }, + { date: { $lte: '2021-04-05' } }, + ], + }) + .groupBy('payee.name') + .orderBy('payee.name') + .select(['payee.name', { amount: { $sum: '$amount' } }]), + ) +).data.map(row => { + console.log(`${row['payee.name']}: ${row.amount / 100}`); +}); ``` ## Total Amount of all transactions with Note containing #interest (P) between 6 Apr 2020 and 5 Apr 2021 ```js -(await $query($q('transactions') -.filter({ '$and': [ - {'date': { '$gte': '2020-04-06'}}, - {'date': {'$lte': '2021-04-05'}}, - {'notes': {'$like': '%#interest (P)%'}} ] -}) -.calculate({ '$sum': '$amount' }) -)).data/100 +( + await $query( + $q('transactions') + .filter({ + $and: [ + { date: { $gte: '2020-04-06' } }, + { date: { $lte: '2021-04-05' } }, + { notes: { $like: '%#interest (P)%' } }, + ], + }) + .calculate({ $sum: '$amount' }), + ) +).data / 100; ``` or ```js -(await $query($q('transactions') -.filter({ '$and': [ - {'date': { '$gte': '2020-04-06'}}, - {'date': {'$lte': '2021-04-05'}}, - {'notes': {'$like': '%#interest (P)%'}} -]}) -.select({ 'total': { '$sum': '$amount' } }) -)).data[0].total/100 +( + await $query( + $q('transactions') + .filter({ + $and: [ + { date: { $gte: '2020-04-06' } }, + { date: { $lte: '2021-04-05' } }, + { notes: { $like: '%#interest (P)%' } }, + ], + }) + .select({ total: { $sum: '$amount' } }), + ) +).data[0].total / 100; ``` ## Total Amount per Category between 6 Apr 2020 and 5 Apr 2021 ```js -(await $query($q('transactions') -.filter({ $and: [ {date: { $gte: '2020-04-06'}}, {date: {$lte: '2021-04-05'}}]}) -.groupBy('category.name') -.orderBy(['category.group.sort_order','category.sort_order']) -.select(['category.group.name','category.name', {'amount': {$sum: '$amount'}}]) -)).data.map((row) => { console.log(`${row['category.group.name']}/${row['category.name']}: ${row.amount/100}`) }) -``` \ No newline at end of file +( + await $query( + $q('transactions') + .filter({ + $and: [ + { date: { $gte: '2020-04-06' } }, + { date: { $lte: '2021-04-05' } }, + ], + }) + .groupBy('category.name') + .orderBy(['category.group.sort_order', 'category.sort_order']) + .select([ + 'category.group.name', + 'category.name', + { amount: { $sum: '$amount' } }, + ]), + ) +).data.map(row => { + console.log( + `${row['category.group.name']}/${row['category.name']}: ${ + row.amount / 100 + }`, + ); +}); +``` diff --git a/docs/Developers/ActualQL/Functions.md b/docs/Developers/ActualQL/Functions.md index 629df9a95..528da1a29 100644 --- a/docs/Developers/ActualQL/Functions.md +++ b/docs/Developers/ActualQL/Functions.md @@ -20,7 +20,7 @@ You can sort the results with the `orderBy` function: q('transactions') .filter({ 'category.is_income': true }) .select('*') - .orderBy('category.name') + .orderBy('category.name'); ``` This returns transactions with an income category sorted by category name. You can also pass an array to `orderBy` to sort by multiple fields. @@ -32,7 +32,7 @@ You can specify aggregate functions in `select` for things like sums and counts. ```js q('transactions') .filter({ 'category.name': 'Food' }) - .select({ total: { $sum: 'amount' } }) + .select({ total: { $sum: 'amount' } }); ``` This sums up the amount of all transactions with the `Food` category (usually, you will filter by date too). **Aggregate results must be named**; here we named it `total`. You will get an error if you don't name it. (In the future, we may remove this restriction) @@ -42,7 +42,7 @@ Since it's so common to select a single aggregate expression, ActualQL provides ```js q('transactions') .filter({ 'category.name': 'Food' }) - .calculate({ $sum: 'amount' }) + .calculate({ $sum: 'amount' }); ``` Not only did we not have to name the result, `data` in the result will also be the summed value itself. If you use `select`, data will be an array with one element. The difference is in the above you just use `data`, but if you used `select` you'd have to use `data[0].total`. diff --git a/docs/Developers/ActualQL/Overview.md b/docs/Developers/ActualQL/Overview.md index 0acd86cef..3e1c665e6 100644 --- a/docs/Developers/ActualQL/Overview.md +++ b/docs/Developers/ActualQL/Overview.md @@ -12,9 +12,9 @@ ActualQL provides a lightweight syntax for querying data. It looks like this: q('transactions') .filter({ 'category.name': 'Food', - date: '2021-02-20' + date: '2021-02-20', }) - .select(['id', 'date', 'amount']) + .select(['id', 'date', 'amount']); ``` The above query would return the `id`, `date`, and `amount` of all transactions with the `Food` category on `2021-02-20`. @@ -42,18 +42,16 @@ Split transactions complicate things: when you sum transaction amounts, do you s The `transactions` table provides two different interfaces for transaction data to help with this. You can configure the type of data to return using `options` and passing a `splits` option: ```js -q('transactions') - .select('*') - .options({ splits: 'inline' }) +q('transactions').select('*').options({ splits: 'inline' }); ``` -There are two different options for `splits`: `inline` or `grouped`<super>*</super>. **`inline` is the default**, and will not return the "parent" transaction of a split transaction. It will only show you subtransactions of split transaction, and the result is a flat array of transactions. This lets you sum all the amounts of transactions and by default it will ignore the "parent" transaction. +There are two different options for `splits`: `inline` or `grouped`<super>\*</super>. **`inline` is the default**, and will not return the "parent" transaction of a split transaction. It will only show you subtransactions of split transaction, and the result is a flat array of transactions. This lets you sum all the amounts of transactions and by default it will ignore the "parent" transaction. `grouped` always returns the full split transaction (parent and subtransaction), no matter which part of it matched a filter. The returned data is also grouped so that transactions have a `subtransactions` property that lists them. These two options gives you full control over how you want to handle split transactions. -_* There is a third option as well, `all`, which returns both transactions and subtransactions in a flat list. You only need this if doing something advanced._ +_\* There is a third option as well, `all`, which returns both transactions and subtransactions in a flat list. You only need this if doing something advanced._ ## Searching transactions @@ -65,9 +63,9 @@ The keys of a filter object are the names of the fields (see [Transaction](/deve q('transactions') .filter({ 'category.name': 'Food', - date: { $gte: '2021-01-01' } + date: { $gte: '2021-01-01' }, }) - .select('*') + .select('*'); ``` The `$gte` operator on `date` returns transactions on or after `2021-01-01`. Available operators are `$eq`, `$lt`, `$lte`, `$gt`, `$gte`, and `$like`. @@ -77,9 +75,9 @@ If you pass an array to a field, it will combine the conditions with `$and`: ```js q('transactions') .filter({ - date: [{ $gte: '2021-01-01' }, { $lte: '2021-12-31' }] + date: [{ $gte: '2021-01-01' }, { $lte: '2021-12-31' }], }) - .select('*') + .select('*'); ``` This is the same query but restricts it to transactions between `2021-01-01` and `2021-12-31`. This could have been written as: @@ -87,12 +85,9 @@ This is the same query but restricts it to transactions between `2021-01-01` and ```js q('transactions') .filter({ - $and: [ - { date: { $gte: '2021-01-01' } }, - { date: { $lte: '2021-12-31' } } - ] + $and: [{ date: { $gte: '2021-01-01' } }, { date: { $lte: '2021-12-31' } }], }) - .select('*') + .select('*'); ``` `$and` and `$or` takes an array and combines multiple conditions. For example, you could get transactions on multiple dates like this: @@ -100,12 +95,9 @@ q('transactions') ```js q('transactions') .filter({ - $or: [ - { date: '2021-01-01' }, - { date: '2021-01-02' } - ] + $or: [{ date: '2021-01-01' }, { date: '2021-01-02' }], }) - .select('*') + .select('*'); ``` -The above will return transactions on `2021-01-01` **or** `2021-01-02`. \ No newline at end of file +The above will return transactions on `2021-01-01` **or** `2021-01-02`. diff --git a/docs/Developers/Building-Windows.md b/docs/Developers/Building-Windows.md index 3ce157bcf..af58897ac 100644 --- a/docs/Developers/Building-Windows.md +++ b/docs/Developers/Building-Windows.md @@ -3,6 +3,7 @@ title: 'Building on Windows' --- Many of the build scripts are bash scripts and not natively invokable in Windows. To solve this, you can build the project using Git Bash. + 1. Install [Git & Git Bash for Windows](https://git-scm.com/downloads) 2. Ensure you have activated [Developer Mode](https://docs.microsoft.com/en-us/windows/apps/get-started/enable-your-device-for-development) 3. Install Node v16.x (latest version 17.x does not work due to issue with crypto package) @@ -12,10 +13,12 @@ Many of the build scripts are bash scripts and not natively invokable in Windows 7. From still inside the shell, run `yarn start:browser` 8. Open your browser to [http://localhost:3001](http://localhost:3001) -## How to build the Electron app on Windows +## How to build the Electron app on Windows + 1. Follow steps 1 - 6 above. 2. Run `yarn start`. If you get an error about bundle.desktop.js, just CTRL+C and rerun `yarn start`. 3. If you get an error from electron, run `yarn rebuild-electron` and rerun `yarn start`; ## `rsync: command not found` -If you run into this error, you will need to install the rsync binary to Git Bash. Follow the [directions here](https://prasaz.medium.com/add-rsync-to-windows-git-bash-f42736bae1b3). \ No newline at end of file + +If you run into this error, you will need to install the rsync binary to Git Bash. Follow the [directions here](https://prasaz.medium.com/add-rsync-to-windows-git-bash-f42736bae1b3). diff --git a/docs/Developers/preview-builds.md b/docs/Developers/preview-builds.md index 9e435395a..4113cfdf2 100644 --- a/docs/Developers/preview-builds.md +++ b/docs/Developers/preview-builds.md @@ -2,13 +2,13 @@ title: 'Preview Builds' --- -It is now possible using our deployment pipeline to run preview builds of Actual directly on Netlify. +It is now possible using our deployment pipeline to run preview builds of Actual directly on Netlify. To do this, Find the pull request (pr) that you would like to preview in GitHub, you can find the pull requests in scope of the preview builds [here](https://github.com/actualbudget/actual/pulls). Once you have the number of the pr navigate to the following URL https://deploy-preview-{pr_number}--actualbudget.netlify.app/ replacing {pr_number} with the number of the pr you would like to preview, for example https://deploy-preview-414--actualbudget.netlify.app/ -This will load directly on Netlify where you will be able to preview the changes in that pull request without the need to clone the specific branch. +This will load directly on Netlify where you will be able to preview the changes in that pull request without the need to clone the specific branch. :::info There is no sync server on preview builds so when asked "Where's the server" select "Don't use a server." Alternatively, you can use your own self-hosted server. You should exercise caution when doing using a server with preview builds because they are much more likely to have bugs that could damage your budget. Consider running a separate local server for preview builds. diff --git a/docs/Developers/project-layout.md b/docs/Developers/project-layout.md index 4000be683..718015122 100644 --- a/docs/Developers/project-layout.md +++ b/docs/Developers/project-layout.md @@ -2,15 +2,15 @@ title: 'The Actual Project Structure' --- -Actual is made up of lots of different *packages*. This article covers how they all fit together to form the project you know as Actual Budget. +Actual is made up of lots of different _packages_. This article covers how they all fit together to form the project you know as Actual Budget. All of the repositories can be found in the [Actual Budget](https://github.com/actualbudget) organization on GitHub, within that organization you will then find the following repositories -* [Actual](https://github.com/actualbudget/actual) -* [Actual Server](https://github.com/actualbudget/actual-server) -* [Releases](https://github.com/actualbudget/releases) -* [node-api](https://github.com/actualbudget/node-api) -* [docs](https://github.com/actualbudget/docs) +- [Actual](https://github.com/actualbudget/actual) +- [Actual Server](https://github.com/actualbudget/actual-server) +- [Releases](https://github.com/actualbudget/releases) +- [node-api](https://github.com/actualbudget/node-api) +- [docs](https://github.com/actualbudget/docs) ## Actual @@ -49,14 +49,13 @@ The development version of the importer for nYNAB into Actual. ### Loot Core - ### Loot Design ### Node Libofx ## Actual Server -Actual Server holds all of the code for the synchronization element of the Actual Budget application. Actual server has a dependency of Actual so when you pull Actual Server and deploy it to your hosting method of choice, be that Fly, Local etc. and run `yarn install` Actual will be downloaded as a dependency from npm and installed into the Actual Server deployment. +Actual Server holds all of the code for the synchronization element of the Actual Budget application. Actual server has a dependency of Actual so when you pull Actual Server and deploy it to your hosting method of choice, be that Fly, Local etc. and run `yarn install` Actual will be downloaded as a dependency from npm and installed into the Actual Server deployment. You can see this in the [package.json](https://github.com/actualbudget/actual-server/blob/master/package.json) file; @@ -76,9 +75,9 @@ You can see this in the [package.json](https://github.com/actualbudget/actual-se }, ``` -So, you might see some changes being made in the Actual repository but them changes are not reflected in your deployment despite you having the latest version pulled, why? Because Actual hasn't been updated in [npm](https://www.npmjs.com/package/@actual-app/web). +So, you might see some changes being made in the Actual repository but them changes are not reflected in your deployment despite you having the latest version pulled, why? Because Actual hasn't been updated in [npm](https://www.npmjs.com/package/@actual-app/web). -Actual is only updated in npm when a release is created. +Actual is only updated in npm when a release is created. ## Actual Releases diff --git a/docs/Developers/types.js b/docs/Developers/types.js index 4e52a5ef9..043ed6f77 100644 --- a/docs/Developers/types.js +++ b/docs/Developers/types.js @@ -228,7 +228,7 @@ function Table({ style, headers, className, children }) { <table className={`text-sm ${className}`} style={style}> <thead> <tr> - {headers.map((header) => ( + {headers.map(header => ( <th className="text-gray-900 font-thin">{header}</th> ))} </tr> @@ -241,7 +241,7 @@ function Table({ style, headers, className, children }) { export function PrimitiveTypeList() { return ( <Table headers={['Name', 'Type', 'Notes']} style={{ maxWidth: 700 }}> - {Object.keys(types).map((name) => { + {Object.keys(types).map(name => { return ( <PrimitiveType name={types[name].name} @@ -276,7 +276,7 @@ export function StructType({ name, fields }) { showBorder={true} headers={['Field', 'Type', 'Required?', 'Notes']} > - {fields.map((field) => { + {fields.map(field => { return ( <tr> <td valign="top"> @@ -305,9 +305,7 @@ function Argument({ arg }) { <span> {arg.name ? arg.name + ': ' : ''} {'{ '} - {arg.properties - .map((prop) => <Argument arg={prop} />) - .map(insertCommas)} + {arg.properties.map(prop => <Argument arg={prop} />).map(insertCommas)} {' }'} </span> ); @@ -337,7 +335,7 @@ export function Method({ name, args, returns = 'Promise<null>', children }) { <p className="method"> <div className="p-4 pb-6 rounded border-b bg-gray-100 overflow-auto"> <code className="text-blue-800"> - {name}({args.map((arg) => <Argument arg={arg} />).map(insertCommas)}){' '} + {name}({args.map(arg => <Argument arg={arg} />).map(insertCommas)}){' '} <span className="text-gray-500">→ {returns}</span> </code> </div> diff --git a/docs/Developers/using-the-API.md b/docs/Developers/using-the-API.md index e1cce5c8d..eeb9595e2 100644 --- a/docs/Developers/using-the-API.md +++ b/docs/Developers/using-the-API.md @@ -74,8 +74,8 @@ async function run() { await api.addTransactions( acctId, data.transactions - .filter((t) => t.acctId === acctId) - .map(convertTransaction) + .filter(t => t.acctId === acctId) + .map(convertTransaction), ); } } diff --git a/docs/FAQ.md b/docs/FAQ.md index 7b096560d..98b4483f3 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -2,59 +2,60 @@ title: 'Frequently Asked Questions' --- -- **Q.** *Can I use the mobile apps with my self hosted version of Actual?* +- **Q.** _Can I use the mobile apps with my self hosted version of Actual?_ **A.** No, the mobile applications are deprecated, the community however is working on a responsive version of Actual Web [PR#79](https://github.com/actualbudget/actual/pull/79) -- **Q.** *Can I sync my bank to Actual automatically?* +- **Q.** _Can I sync my bank to Actual automatically?_ **A.** At the moment no, but this is currently under development. - See [PR#53](https://github.com/actualbudget/actual-server/pull/53) + See [PR#53](https://github.com/actualbudget/actual-server/pull/53) -- **Q.** *Can I import my Actual Budget from the hosted instance of Actual to my Self Hosted version* +- **Q.** _Can I import my Actual Budget from the hosted instance of Actual to my Self Hosted version_ **A.** Yes, this has been added to the web version recently, we made a [guide for exporting](/Installing/fly/Fly-git#exporting-data-from-actual) and then [one for importing](/Installing/fly/Fly-git#importing-data-into-actual) -- **Q.** *How do I update my version of Actual after it has been updated?* +- **Q.** _How do I update my version of Actual after it has been updated?_ **A.** That depends how you’re hosting it. - - PikaPods seems to refresh their image automatically. - - Actual builds and publishes an updated docker image on each merge. - - If you're on Fly.io we have a [guide for that too](/Installing/fly/Fly-git#updating-actual). -- **Q.** *How do I make sure my data on Fly.io isn't deleted when I update?* + - PikaPods seems to refresh their image automatically. + - Actual builds and publishes an updated docker image on each merge. + - If you're on Fly.io we have a [guide for that too](/Installing/fly/Fly-git#updating-actual). + +- **Q.** _How do I make sure my data on Fly.io isn't deleted when I update?_ **A.** We have a guide for you [here](/Installing/fly/Fly-git#persisting-the-data-in-fly) -- **Q.** *I have deployed actual to Fly.io but I am being charged, why is this?* +- **Q.** _I have deployed actual to Fly.io but I am being charged, why is this?_ **A.** While we wouldn’t know for certain without seeing your configuration, it is likely that during deployment you created a Postgres database. Actual doesn’t need this so you can just delete it and charges should then stop. -- **Q.** *I'm new to budgeting and learned with nYNAB. I'm not completely clear on how to handle credit +- **Q.** _I'm new to budgeting and learned with nYNAB. I'm not completely clear on how to handle credit cards. I largely charge almost everything to them for rewards and pay off in full. How do I track - what's available/budgeted for per payment?* + what's available/budgeted for per payment?_ - **A.** So here's a way to think about it that may be helpful: When you "give every dollar a job," we + **A.** So here's a way to think about it that may be helpful: When you "give every dollar a job," we need to define what dollars we're talking about. In nYNAB's view, the dollars you're giving jobs to are the dollars you have in your cash accounts; - some of them have the job of paying off your credit card. So when you go to make a credit card + some of them have the job of paying off your credit card. So when you go to make a credit card payment, you draw from that category; when you make a purchase on the card, you need to move an equivalent amount into the payment category. In Actual's view, credit cards are equal to your bank accounts, but they contain negative dollars. - What you budget is the *net* number of dollars you have -- cash minus debt. When you spend on the + What you budget is the _net_ number of dollars you have -- cash minus debt. When you spend on the credit card, you're spending money by adding negative dollars into the mix, and the money leaves your categories. When you pay on the card, you're letting positive dollars and negative dollars touch each other -- - they go *poof* but don't change your budget because the number of *total* dollars hasn't changed. + they go _poof_ but don't change your budget because the number of _total_ dollars hasn't changed. Where Actual gets more complicated is if you're carrying a balance you can't afford to pay off yet. In that case, you need to keep some negative dollars from touching positive dollars by sticking them - in a category. Actual's default assumption is that you can pay off any card in full at any time and + in a category. Actual's default assumption is that you can pay off any card in full at any time and not touch your budget to do it. (Credit: evequefou) diff --git a/docs/Getting-Started/managefiles.md b/docs/Getting-Started/managefiles.md index ba0cecb00..cd33f7b5b 100644 --- a/docs/Getting-Started/managefiles.md +++ b/docs/Getting-Started/managefiles.md @@ -2,7 +2,7 @@ title: 'Managing Files' --- -A *file* is your data that consists of all budgets, transactions, accounts, and everything else. You can create as many files as you want. This lets you create multiple budgets, isolate accounts, and more. +A _file_ is your data that consists of all budgets, transactions, accounts, and everything else. You can create as many files as you want. This lets you create multiple budgets, isolate accounts, and more. :::note These instructions relate exclusively to the desktop application @@ -12,13 +12,13 @@ These instructions relate exclusively to the desktop application ### Desktop -* On the desktop app, go to the file management screen from the **File** > **Open file…** menu item, or press `CTRL & O`. -* Click **Create new file**. +- On the desktop app, go to the file management screen from the **File** > **Open file…** menu item, or press `CTRL & O`. +- Click **Create new file**. ## Delete a file -* On desktop, click the **X** next to the file on the file management screen. +- On desktop, click the **X** next to the file on the file management screen. ## Renaming a file -Open the file, and click on the name in the top left of the app. You will be able to rename it. \ No newline at end of file +Open the file, and click on the name in the top left of the app. You will be able to rename it. diff --git a/docs/Getting-Started/migration/migration-intro.md b/docs/Getting-Started/migration/migration-intro.md index 490b1c22b..a76923082 100644 --- a/docs/Getting-Started/migration/migration-intro.md +++ b/docs/Getting-Started/migration/migration-intro.md @@ -1,17 +1,17 @@ --- -title: "Migration Overview" +title: 'Migration Overview' --- :::note [Click here](simple-sync) if you are looking for the steps to migrate from "full sync" to (the more reliable) "simple sync" method. ::: - Keeping your existing transaction history is important. If you already use a different app, you probably want to migrate it over into Actual. Right now, only YNAB4 is officially supported. However, the [API](/developers/API/) allows anyone to write a custom importer. We will work with the community to help write other importers soon. ## Migration from the old Desktop App + :::note Are you coming from the original, managed Actual subscription service? That used an older version of the desktop app which doesn't have the export button, but you can log in to the Web version at app.actualbudget.com to export your data in a format suitable for importing in your new instance. See [Backups](https://actualbudget.github.io/docs/Backup-Restore/Backups) and [Restoring](https://actualbudget.github.io/docs/Backup-restore/Restore). diff --git a/docs/Getting-Started/migration/nynab.md b/docs/Getting-Started/migration/nynab.md index d13c9c3f8..fae0b8cb1 100644 --- a/docs/Getting-Started/migration/nynab.md +++ b/docs/Getting-Started/migration/nynab.md @@ -8,17 +8,17 @@ While we don't maintain this tool, you can also use https://json-exporter-for-yn ### Import json file -* Open Actual -* Select the drop down menu and **Close File** -* Select **Import file** +- Open Actual +- Select the drop down menu and **Close File** +- Select **Import file** ![](/img/actual-config-10.png) -* Select **nYnab** +- Select **nYnab** ![](/img/actual-config-12.png) -* Choose the exported json file +- Choose the exported json file ## Method 2: Beta export and import tools @@ -30,7 +30,7 @@ To run: npx @actual-app/import-ynab5 <path-to-ynab5-file> ``` -***Read below for how to get your YNAB5 file.*** +**_Read below for how to get your YNAB5 file._** <!-- Almost everything should be working now. @@ -62,7 +62,6 @@ If you haven't already got an API key, you'll need to: The API key is only shown once, so make sure you copy it down somewhere! More information on how to access the YNAB API can be found at https://api.youneedabudget.com/ ::: - Now open a terminal window / command prompt, and enter: ``` @@ -91,27 +90,29 @@ This will install the required libraries for the importer. #### Running the importer -* Have Actual running locally on your computer -* Open a terminal / command prompt in the unzipped directory from the previous steps -* Run the following command, substituting the /path/to with where ever you saved the budget.json file: +- Have Actual running locally on your computer +- Open a terminal / command prompt in the unzipped directory from the previous steps +- Run the following command, substituting the /path/to with where ever you saved the budget.json file: ``` npx @actual-app/import-ynab5 /path/to/budget.json ``` -If you have checked out this code and running it locally, do +If you have checked out this code and running it locally, do + ``` node index.js -``` +``` + instead of the npx command. Refresh the cache. Once the import is complete, it may not show all the up-to-date information correctly. In order to refresh the view: -* Click the gear icon next to the budget name -* Click Advanced -> Reset budget cache -* Restart Actual +- Click the gear icon next to the budget name +- Click Advanced -> Reset budget cache +- Restart Actual ### Contributions -If you would like to contribute, check out the documentation for the API, specifically about importers. All of the available methods can be found here. \ No newline at end of file +If you would like to contribute, check out the documentation for the API, specifically about importers. All of the available methods can be found here. diff --git a/docs/Getting-Started/migration/simple-sync.md b/docs/Getting-Started/migration/simple-sync.md index 3253f8b99..1b99f46d7 100644 --- a/docs/Getting-Started/migration/simple-sync.md +++ b/docs/Getting-Started/migration/simple-sync.md @@ -1,5 +1,5 @@ --- -title: "Migration from Full Sync to Simple Sync" +title: 'Migration from Full Sync to Simple Sync' --- The Full Sync method used at the launch of the self-hosted version of Actual had some reliability issues with some users and so a Simple Sync approach has replaced this. If you set up Actual before October 2022, you will be likely using the Full Sync method and upgrading Actual will require you to complete the following steps to migrate your transaction history before using Simple Sync. diff --git a/docs/Getting-Started/migration/ynab4.md b/docs/Getting-Started/migration/ynab4.md index 6202c0d18..32e120417 100644 --- a/docs/Getting-Started/migration/ynab4.md +++ b/docs/Getting-Started/migration/ynab4.md @@ -2,8 +2,8 @@ title: 'Migrating from YNAB4' --- -* Go to the **Create new file** screen (this is the first screen you see on first launch). -* Click **Import…** -* All of your existing YNAB4 budgets should be listed. Select the one you want to import. -* Click **Import** -* That's it! \ No newline at end of file +- Go to the **Create new file** screen (this is the first screen you see on first launch). +- Click **Import…** +- All of your existing YNAB4 budgets should be listed. Select the one you want to import. +- Click **Import** +- That's it! diff --git a/docs/Getting-Started/sync.md b/docs/Getting-Started/sync.md index 4f5914993..1d2080ae9 100644 --- a/docs/Getting-Started/sync.md +++ b/docs/Getting-Started/sync.md @@ -1,5 +1,5 @@ --- -title : 'Syncing Across Devices' +title: 'Syncing Across Devices' --- Actual is a different kind of app. Instead of storing all of your data on the internet by default, it stores all of your data locally. That means it works regardless of your network connection, and you always have direct access to your data. @@ -28,12 +28,12 @@ Data on your local device is still unencrypted. We recommend full disk encryptio There are some things to consider with end-to-end encryption: -* **Pro:** Your data is fully secure and nobody except you can read it -* **Pro:** If you don't want to sync across devices, this still allows you keep a fully encrypted backup of your data -* **Pro:** If you want to share the server with someone else, you can use different passwords to encrypt separate budget files, and you won’t be able to access each other’s budgets. -* **Con:** If you lose your local data copy and forget your password, you can never recover your data -* **Con:** It is not possible to turn off encryption. This is a one way process. If you would like to move back to an unencrypted file after enabling encryption, you can use the steps in the [Backup](/docs/Backup-Restore/Backups.md) and [Restore](/docs/Backup-Restore/Restore.md) sections. -* **Con:** There is a minor performance hit because of encoding & decoding your data whenever syncing +- **Pro:** Your data is fully secure and nobody except you can read it +- **Pro:** If you don't want to sync across devices, this still allows you keep a fully encrypted backup of your data +- **Pro:** If you want to share the server with someone else, you can use different passwords to encrypt separate budget files, and you won’t be able to access each other’s budgets. +- **Con:** If you lose your local data copy and forget your password, you can never recover your data +- **Con:** It is not possible to turn off encryption. This is a one way process. If you would like to move back to an unencrypted file after enabling encryption, you can use the steps in the [Backup](/docs/Backup-Restore/Backups.md) and [Restore](/docs/Backup-Restore/Restore.md) sections. +- **Con:** There is a minor performance hit because of encoding & decoding your data whenever syncing Note: even if you don’t have the password, you can still remove an encrypted file from the server. @@ -53,9 +53,9 @@ Since your data is local to each device and they all might not be up-to-date, ** A few scenarios where you want a sync reset: -* You restore from a backup. You wouldn't want to restore from a backup, only to find that it synced back up to where you were before! You want syncing to start fresh from the backup. -* You turn on end-to-end encryption. If you do this, the server needs to forget about any unencrypted data it already knows about. This requires starting fresh. -* In the worst case scenario, you have data that is out of sync. This should never happen, but just in case it ever does, you can manually reset sync from the file that you want to treat as the "true" version. +- You restore from a backup. You wouldn't want to restore from a backup, only to find that it synced back up to where you were before! You want syncing to start fresh from the backup. +- You turn on end-to-end encryption. If you do this, the server needs to forget about any unencrypted data it already knows about. This requires starting fresh. +- In the worst case scenario, you have data that is out of sync. This should never happen, but just in case it ever does, you can manually reset sync from the file that you want to treat as the "true" version. Resetting sync will clear all syncing data from the server, upload your existing data as the "true" version, and your device gets a new "sync id". All devices syncing data must have the same sync id. diff --git a/docs/Getting-Started/tipstricks.md b/docs/Getting-Started/tipstricks.md index fb9fa0599..65b891787 100644 --- a/docs/Getting-Started/tipstricks.md +++ b/docs/Getting-Started/tipstricks.md @@ -11,22 +11,21 @@ If you ever make a mistake, pressing `CTRL & Z` will undo, and `CTRL, SHIFT & Z` A few global shortcuts: -* `Ctrl & 1` will show the budget -* `Ctrl & 2` will show reports -* `Ctrl & 3` will show all accounts -* `Ctrl & o` will close the file and list other available files to open +- `Ctrl & 1` will show the budget +- `Ctrl & 2` will show reports +- `Ctrl & 3` will show all accounts +- `Ctrl & o` will close the file and list other available files to open ### Budget -* `Enter` while editing a budget amount will move to the next category. -* `shift & Enter` will move to the previous category. +- `Enter` while editing a budget amount will move to the next category. +- `shift & Enter` will move to the previous category. ### Transactions -* When editing, `Enter` and `shift & Enter` will move down and up. If a dropdown is open and you've typed a new value, this will instead save the value and close the dropdown. -* When editing, `Tab` and `Shift & Tab` will move left and right -* When adding a new transaction, `CTRL & Enter` will add it regardless of where you are editing. Pressing `Enter` in either the Payment or Deposit columns will add it as well. - +- When editing, `Enter` and `shift & Enter` will move down and up. If a dropdown is open and you've typed a new value, this will instead save the value and close the dropdown. +- When editing, `Tab` and `Shift & Tab` will move left and right +- When adding a new transaction, `CTRL & Enter` will add it regardless of where you are editing. Pressing `Enter` in either the Payment or Deposit columns will add it as well. ## View multiple months at once @@ -37,7 +36,7 @@ In the top left of the budget, you will see this control: This sets the maximum amount of months to render at once, and defaults to 1. If you want to view multiple months on the same page, click the boxes to increase the number. :::note -This only controls the *maximum* number of months. If the app is too small to render all of them it will only render the months that fit on the screen. +This only controls the _maximum_ number of months. If the app is too small to render all of them it will only render the months that fit on the screen. ::: ## Show running balances diff --git a/docs/Getting-Started/using-actual/accounts.md b/docs/Getting-Started/using-actual/accounts.md index 727567196..9b893e24d 100644 --- a/docs/Getting-Started/using-actual/accounts.md +++ b/docs/Getting-Started/using-actual/accounts.md @@ -6,6 +6,6 @@ title: 'The Account Register' ### Cleared/Uncleared Account Balance -When viewing your account in Actual, it is possible to show the Cleared & Uncleared totals of that account, to do this, hover over the account balance and an expando icon will appear, click that and your cleared and uncleared balances will appear. +When viewing your account in Actual, it is possible to show the Cleared & Uncleared totals of that account, to do this, hover over the account balance and an expando icon will appear, click that and your cleared and uncleared balances will appear. -![](/img/cleared-uncleared-expand.png) \ No newline at end of file +![](/img/cleared-uncleared-expand.png) diff --git a/docs/Getting-Started/using-actual/budget.md b/docs/Getting-Started/using-actual/budget.md index feebf14a6..5277d9c67 100644 --- a/docs/Getting-Started/using-actual/budget.md +++ b/docs/Getting-Started/using-actual/budget.md @@ -4,4 +4,4 @@ title: 'The Budget' ## The Budget -![](/img/using-actual/budget.png) \ No newline at end of file +![](/img/using-actual/budget.png) diff --git a/docs/Getting-Started/using-actual/files.md b/docs/Getting-Started/using-actual/files.md index fd5133f3f..7503ebdbb 100644 --- a/docs/Getting-Started/using-actual/files.md +++ b/docs/Getting-Started/using-actual/files.md @@ -6,9 +6,9 @@ The file list in Actual is where you will find a list of all your available budg ![](/img/using-actual/file-list.png) -Each budget has a status, for example you can see that the budget file is Syncing to the Actual Server as it has a Syncing status on the file entry. +Each budget has a status, for example you can see that the budget file is Syncing to the Actual Server as it has a Syncing status on the file entry. -If the budget didn't have a Syncing status next to it's name, this would be a local only budget, this means that none of the changes you make would be available on any other device other than the one your viewing Actual on right now. +If the budget didn't have a Syncing status next to it's name, this would be a local only budget, this means that none of the changes you make would be available on any other device other than the one your viewing Actual on right now. ![](/img/using-actual/file-list.png) diff --git a/docs/Getting-Started/using-actual/overview.md b/docs/Getting-Started/using-actual/overview.md index 7b7df5f9d..177cae20d 100644 --- a/docs/Getting-Started/using-actual/overview.md +++ b/docs/Getting-Started/using-actual/overview.md @@ -6,7 +6,7 @@ Now that you have Actual installed, you are going to be itching to get using it, ## The Interface -The Actual interface is simple but powerful at the same time, if you are new to the application this page will explain what each part of the interface does. +The Actual interface is simple but powerful at the same time, if you are new to the application this page will explain what each part of the interface does. ![](/img/using-actual/budget-main.png) @@ -18,25 +18,25 @@ It is possible to show more than one month on the budget, to do this select the ### Sync Status -This shows the sync status of your budget, this will display an error if the Sync Status is not functioning. +This shows the sync status of your budget, this will display an error if the Sync Status is not functioning. ![](/img/using-actual/budget-sync-status.png) ### Month Selector -You are able to select the current month by selecting it from the Month Selector, this allows you to move back and forward through your budget. +You are able to select the current month by selecting it from the Month Selector, this allows you to move back and forward through your budget. ![](/img/using-actual/budget-months.png) ### Selected Month Overview -This gives an overview of the current month from available funds, budgeted amount and more. +This gives an overview of the current month from available funds, budgeted amount and more. ![](/img/using-actual/budget-month-overview.png) ### Budget List -This is your budget, this is where all your category groups and category headings will show, this is also where you budget your money against these categories. +This is your budget, this is where all your category groups and category headings will show, this is also where you budget your money against these categories. ![](/img/using-actual/budget-list.png) @@ -50,4 +50,4 @@ This is the category group heading, each collection of categories has a heading, The category headings are the headings for each individual item in the budget, if we take the examples above, these might be **Holiday** or **Car** you can find out how to add a category [here](/Budgeting/categories#add-a-category) -![](/img/using-actual/budget-category.png) \ No newline at end of file +![](/img/using-actual/budget-category.png) diff --git a/docs/Getting-Started/using-actual/schedules.md b/docs/Getting-Started/using-actual/schedules.md index 67d41fdac..1f04f1afb 100644 --- a/docs/Getting-Started/using-actual/schedules.md +++ b/docs/Getting-Started/using-actual/schedules.md @@ -4,4 +4,4 @@ title: 'Schedules' The schedules screen is an advanced section of Actual that is covered in more detail in out [Schedules](/Budgeting/schedules) section, however let's have a look at what each part of the interface does here. -![](/img/schedules-1.png) \ No newline at end of file +![](/img/schedules-1.png) diff --git a/docs/Getting-Started/using-actual/settings.md b/docs/Getting-Started/using-actual/settings.md index ec346d932..b157c34d9 100644 --- a/docs/Getting-Started/using-actual/settings.md +++ b/docs/Getting-Started/using-actual/settings.md @@ -2,28 +2,28 @@ title: 'Settings' --- -The settings screens in Actual provide you with a number of options for managing the look and feel of your budget along with some more system specific settings. +The settings screens in Actual provide you with a number of options for managing the look and feel of your budget along with some more system specific settings. ![](/img/using-actual/settings-1.png) -### Formatting +### Formatting The formatting options allow you to select the following; -* Your preferred date format -* Your preferred number format +- Your preferred date format +- Your preferred number format ![](/img/using-actual/settings-1.png) ### Encryption -End to End Encryption is not actually available in Actual version 20.10.25, this is due to the way the Sync system was working, we are working on re-enabling this feature and will update this documentation once that is available. +End to End Encryption is not actually available in Actual version 20.10.25, this is due to the way the Sync system was working, we are working on re-enabling this feature and will update this documentation once that is available. ![](/img/using-actual/settings-1.png) ### Export -Actual is local first, with this, it is possible to export your data from Actual, when you do this you will be given a zip file to download which will contain the SQLite database along with your budget. +Actual is local first, with this, it is possible to export your data from Actual, when you do this you will be given a zip file to download which will contain the SQLite database along with your budget. ![](/img/using-actual/settings-1.png) @@ -31,7 +31,7 @@ Actual is local first, with this, it is possible to export your data from Actual ### Budget ID -Your Budget ID is a unique identifier that identifies the specific budget file that you have open, as you can have many budgets per install of Actual this allows you to identify which budget the data relates to. +Your Budget ID is a unique identifier that identifies the specific budget file that you have open, as you can have many budgets per install of Actual this allows you to identify which budget the data relates to. ![](/img/using-actual/settings-2.png) @@ -41,9 +41,8 @@ Resetting Sync is quite complicated, this is covered in detail [here](/Getting-S ![](/img/using-actual/settings-2.png) -### Global +### Global While these settings are available and by default checked, in the Open Source version of actual they have no function. ![](/img/using-actual/settings-3.png) - diff --git a/docs/Getting-Started/using-actual/sidebar.md b/docs/Getting-Started/using-actual/sidebar.md index 34480f415..5f3625d66 100644 --- a/docs/Getting-Started/using-actual/sidebar.md +++ b/docs/Getting-Started/using-actual/sidebar.md @@ -12,4 +12,4 @@ The sidebar in Actual holds all of the links to navigate around the application, The sidebar also holds all of your accounts both on and off budget, these will display in a list under the heading they belong E.G On Budget. You can find out how to add an account [here](/Accounts/addaccount#adding-a-new-account) -![](/img/using-actual/budget-sidebar-accounts.png) \ No newline at end of file +![](/img/using-actual/budget-sidebar-accounts.png) diff --git a/docs/Installing/Docker.md b/docs/Installing/Docker.md index da86f54e9..186cf569a 100644 --- a/docs/Installing/Docker.md +++ b/docs/Installing/Docker.md @@ -7,38 +7,37 @@ sidebar_position: 2 Actual is also available as a Docker image ready to be run in your own custom environment. -* [Docker Hub](https://hub.docker.com/r/jlongster/actual-server) -* [GitHub Registry](https://ghcr.io/actualbudget/actual-server) +- [Docker Hub](https://hub.docker.com/r/jlongster/actual-server) +- [GitHub Registry](https://ghcr.io/actualbudget/actual-server) ## Docker Tags -We publish a number of tags to the official repository now so that users who want to get the latest bleeding edge changes can do that without having to wait for the latest image to be updated. Details of the available tags are below. +We publish a number of tags to the official repository now so that users who want to get the latest bleeding edge changes can do that without having to wait for the latest image to be updated. Details of the available tags are below. ### `latest` Tag The `latest` tag points to the most recent official release of Actual. This is the recommended tag to use for most users. -* `latest` -* `latest-alpine` - Based on Alpine Linux, which is tiny so great for low powered devices. - +- `latest` +- `latest-alpine` - Based on Alpine Linux, which is tiny so great for low powered devices. + ### `edge` Tag The `edge` tag is updated every time a commit is pushed to the `master` branch. This is the recommended tag to use for users who want to get the latest changes. Note that `actual-server` will still use the latest official release of the web UI even when deploying from `edge` -* `edge` -* `edge-alpine` - Based on Alpine Linux, which is tiny so great for low powered devices. +- `edge` +- `edge-alpine` - Based on Alpine Linux, which is tiny so great for low powered devices. ## Launch container using Docker Compose -Pre-requisites: Docker +Pre-requisites: Docker A [docker-compose file](https://github.com/actualbudget/actual-server/raw/master/docker-compose.yml) is provided together with a [.env file](https://github.com/actualbudget/actual-server/raw/14eb9e969ac3aa878aa098736c34d7761d3c88f7/actual_server.env). These are you need to deploy Actual in your server with docker and you **only** need to edit the [.env file](https://github.com/actualbudget/actual-server/raw/14eb9e969ac3aa878aa098736c34d7761d3c88f7/actual_server.env). -The options for port assignments and persisting your budget on a volume mounted on your filesystem are all contained in the env file. This method will build and launch the most current build available from GitHub. - +The options for port assignments and persisting your budget on a volume mounted on your filesystem are all contained in the env file. This method will build and launch the most current build available from GitHub. To create and run the container: @@ -48,9 +47,9 @@ $ docker-compose --env-file actual_server.env up -d ## Launch container using docker command -Pre-requisites: Docker +Pre-requisites: Docker -Alternatively to using docker compose, you may also launch docker using this command. This command, as shown, will launch the latest stable build of Actual. +Alternatively to using docker compose, you may also launch docker using this command. This command, as shown, will launch the latest stable build of Actual. ```bash $ docker run --pull=always --restart=unless-stopped -d -p 5006:5006 -v YOUR/PATH/TO/DATA:/data --name my_actual_budget jlongster/actual-server:latest @@ -62,9 +61,9 @@ $ docker run --pull=always --restart=unless-stopped -d -p 5006:5006 -v YOUR/PATH `-d` -- starts the container as background application -`-p 5006:5006` -- sets the port to access Actual. (HOST PORT:DOCKER PORT) +`-p 5006:5006` -- sets the port to access Actual. (HOST PORT:DOCKER PORT) -`-v YOUR/PATH/TO/DATA:/data` -- tells the container where to store your budget data. This persists the data on your hard disk so it isn't lost if you remove the container. Change the current value to a folder on your host computer. The server will create `server-files` and `user-files` subfolders at this location. +`-v YOUR/PATH/TO/DATA:/data` -- tells the container where to store your budget data. This persists the data on your hard disk so it isn't lost if you remove the container. Change the current value to a folder on your host computer. The server will create `server-files` and `user-files` subfolders at this location. `--name my_actual_budget` -- gives your new docker container a name @@ -82,7 +81,7 @@ $ docker container rm my_actual_budget ```bash $ docker run --pull=always --restart=unless-stopped -d -p 5006:5006 -v YOUR/PATH/TO/DATA:/data --name my_actual_budget jlongster/actual-server:latest -``` +``` You can place all of these in a batch script for a 1 click or single command update. @@ -90,24 +89,26 @@ You can place all of these in a batch script for a 1 click or single command upd $ docker stop my_actual_budget && docker container rm my_actual_budget && docker run --pull=always --restart=unless-stopped -d -p 5006:5006 -v YOUR/PATH/TO/DATA:/data --name my_actual_budget jlongster/actual-server:latest ``` - ## Test connection within local network -On another PC within the local network connect to http://*serverIP*:*chosenPort* +On another PC within the local network connect to http://_serverIP_:_chosenPort_ ## Expose to internet with NGINX Use the [sample nginx conf file provided](https://github.com/actualbudget/actual-server/raw/14eb9e969ac3aa878aa098736c34d7761d3c88f7/actual.subdomain.conf.sample) and if needed change the line with: + ```text set $upstream_port 5006; ``` + to the chosen port (found [here](https://github.com/actualbudget/actual-server/raw/14eb9e969ac3aa878aa098736c34d7761d3c88f7/actual_server.env)). Using nginx web UI: -* Scheme -> http -* Forward Hostname/IP -> actual_budget -* Forward Port -> *The chosen port (found [here](https://github.com/actualbudget/actual-server/raw/14eb9e969ac3aa878aa098736c34d7761d3c88f7/actual_server.env))* + +- Scheme -> http +- Forward Hostname/IP -> actual_budget +- Forward Port -> _The chosen port (found [here](https://github.com/actualbudget/actual-server/raw/14eb9e969ac3aa878aa098736c34d7761d3c88f7/actual_server.env))_ ## Configuring the server URL @@ -179,10 +180,11 @@ server { } } ``` + ### docker-compose.yml ```yml -version: "3" +version: '3' services: actual_server: container_name: actual_server @@ -190,8 +192,8 @@ services: context: ./ dockerfile: Dockerfile ports: - - "${externalPort}:5006" + - '${externalPort}:5006' volumes: - ${dataPath}:/data restart: unless-stopped -``` \ No newline at end of file +``` diff --git a/docs/Installing/fly/Fly-git.md b/docs/Installing/fly/Fly-git.md index 66e1bd955..4004d42dc 100644 --- a/docs/Installing/fly/Fly-git.md +++ b/docs/Installing/fly/Fly-git.md @@ -11,10 +11,13 @@ Download git for Windows from here: [https://git-scm.com/download/win](https://g 1. Identify the version that is suitable for your operating system If you are unsure if you are running 32bit run this command in the command prompt: + ```cmd wmic os get OSArchitecture ``` + ![](/img/cmd-arch.png) + 1. Download the setup file that is right for your system: ![](/img/git-download.png) @@ -22,10 +25,12 @@ Download git for Windows from here: [https://git-scm.com/download/win](https://g It should then start downloading: ![](/img/git-download-progress.png) + 1. Once it is done, open it up - if asked click yes that you are happy for it to make changes to your device. ![](/img/git-install-1.png) + 1. Copy the settings as they are below and click next, next... ![](/img/git-install-2.png) @@ -61,10 +66,13 @@ Download git for Windows from here: [https://git-scm.com/download/win](https://g 1. Then git should begin installing: ![](/img/git-install-17.png) + 1. Open up a command prompt and type + ```cmd git --version ``` + to make sure it has installed correctly. If it has, you should see a version number as below: ![](/img/git-install-18.png) @@ -83,6 +91,7 @@ these are for Windows only but should work (with a few tweaks) for MacOSX & Linu when CMD appears in the search results, **right click** it and run it as **Administrator** ![](/img/windows-start-2.png) + 1. Navigate to the C:\ drive ```cmd cd C:\ @@ -94,45 +103,59 @@ these are for Windows only but should work (with a few tweaks) for MacOSX & Linu ``` ![](/img/cmd-2.png) 1. Once that is complete run this command + ```cmd flyctl auth login ``` + ![](/img/cmd-9.png) This should open a web browser and ask you to login - you will need to provide credit card details to proceed but actual shouldn't cost much if anything at all. ![](/img/cmd-10.png) + 1. Now we need to move into the GitHub directory we just created on the C:\ drive, to do that we can use this command + ```cmd cd C:\github ``` + ![](/img/cmd-3.png) **Note:** CD means *c*hange *d*irectory + 1. Now run this command + ```cmd git clone https://github.com/actualbudget/actual-server.git ``` + ![](/img/git-install-19.png) This will pull down the latest files for actual-server from the git hub repository to our local machine. + 1. Then we need to move into that folder, to do that use this command + ```cmd cd actual-server ``` + ![](/img/cmd-4.png) Let's check to make sure we are in the correct place + ```cmd dir ``` + ![](/img/cmd-5.png) You should see a list of files, one of them being `fly.template.toml`. If you don't see them go back to step 6 + 1. Copy `fly.template.toml` that is in the folder called actual-server within C:\GitHub and copy it back into the same directory with the name `fly.toml` ```cmd @@ -140,37 +163,44 @@ these are for Windows only but should work (with a few tweaks) for MacOSX & Linu ``` ![](/img/cmd-6.png) 1. Open the fly.toml file in notepad or a text editor of your choice like Visual Studio Code + ```cmd notepad fly.toml ``` + ![](/img/cmd-7.png) On line 1 change `app = "%NAME%"` to something of your choosing like `app = "Actual"` and save the file ![](/img/cmd-8.png) + 1. Go back to the command prompt and run ```cmd flyctl launch ``` 1. You will see a message that says `An existing fly.toml file was found for app Actual Budget ? - Would you like to copy its configuration to the new app? (y/N)` +Would you like to copy its configuration to the new app? (y/N)` Type Y and hit enter ![](/img/cmd-11.png) + 1. It asked me to give my application a name, I just left it blank and it picked one for me. I did this because no matter what I typed it errored. ![](/img/cmd-12.png) + 1. Select your location using the up/down arrow keys when prompted: ![](/img/cmd-13.png) + 1. When prompted with `? Would you like to setup a Postgresql database now? (y/N)` Type N and press enter: ![](/img/cmd-14.png) + 1. When prompted with `? Would you like to deploy now? (y/N)` Type Y and press enter: @@ -180,6 +210,7 @@ these are for Windows only but should work (with a few tweaks) for MacOSX & Linu The application should begin deploying. ![](/img/cmd-17.png) + 1. If you get a message about Windows Firewall, click 'Allow Access' ![](/img/cmd-16.png) @@ -193,31 +224,35 @@ When complete you should see something like this: Now everything is setup and configured, you should now be able to navigate to Actual using the URL provided by Fly in the dashboard. -1. To find that open [https://fly.io/dashboard](https://fly.io/dashboard) in a browser and click the - application you created, in my case **myfirstbudget**, it might have a really random name if you - left it blank a few steps ago +1. To find that open [https://fly.io/dashboard](https://fly.io/dashboard) in a browser and click the + application you created, in my case **myfirstbudget**, it might have a really random name if you + left it blank a few steps ago + + ![](/img/fly-dash.png) + +1. Once you are in there, you should see Hostname section under Application Information - click the + link + + ![](/img/fly-dash-2.png) + + https://myfirstbudget.fly.dev - ![](/img/fly-dash.png) -1. Once you are in there, you should see Hostname section under Application Information - click the - link + This will now open Actual so we can start configuring it. - ![](/img/fly-dash-2.png) +1. You should then see this screen - https://myfirstbudget.fly.dev + ![](/img/actual-config-1.png) - This will now open Actual so we can start configuring it. -1. You should then see this screen + Click the 'Use this domain' link - ![](/img/actual-config-1.png) + ![](/img/actual-config-2.png) - Click the 'Use this domain' link +1. Set a password - remember this, you will need it in the future. - ![](/img/actual-config-2.png) -1. Set a password - remember this, you will need it in the future. + ![](/img/actual-config-3.png) - ![](/img/actual-config-3.png) -1. If everything went well you should then be taken to your very first budget. +1. If everything went well you should then be taken to your very first budget. - ![](/img/actual-register.png) + ![](/img/actual-register.png) Actual is now up and running. Congratulations! diff --git a/docs/Installing/fly/Fly-image.md b/docs/Installing/fly/Fly-image.md index 2bd8b081c..94074f68c 100644 --- a/docs/Installing/fly/Fly-image.md +++ b/docs/Installing/fly/Fly-image.md @@ -11,22 +11,25 @@ should be comfortable with using the command line to set it up though. 1. [Install the `flyctl`](https://fly.io/docs/flyctl/installing/) utility. 1. [Create an account](https://fly.io/app/sign-in). You can also create your account by running + ```sh fly auth signup ``` Although you are required to enter payment details, the resources required to run Actual are within the free tier, and you shouldn't be charged. + 1. Copy [`fly.template.toml`](https://github.com/actualbudget/actual-server/raw/master/fly.template.toml) to an empty local directory, and rename the file `fly.toml`. - - *Optional*: Open `fly.toml` and customize the app name on the first line of the file. e.g.: + - _Optional_: Open `fly.toml` and customize the app name on the first line of the file. e.g.: ```toml app = "actual-budget" ``` - App names must be *globally* unique, so there is a meaningful probability that your chosen name + App names must be _globally_ unique, so there is a meaningful probability that your chosen name is unavailable. Later steps allow the fly.io system to generate a unique name for you. + 1. <a name="mount_config" />Persisting data means the server will retain your configuration and budget. Without this, each deployment or restart will wipe away all the data on the server. You would need to intialize (also known and listed as 'bootstrapping' in the user interface) the @@ -34,11 +37,13 @@ should be comfortable with using the command line to set it up though. mount a volume. Open `fly.toml` in a text editor and add the following: + ```toml [mounts] source="actual_data" destination="/data" - ``` + ``` + 1. Create your app using the following command: ```sh fly launch --image jlongster/actual-server:latest @@ -83,8 +88,9 @@ somewhere that persists. With [fly.io](https://fly.io) we can create a [volume]( 1. Select a deployment region. The closest region should be highlighted by default, so you may simply hit `enter` if you do not have specific needs. - *Fly volumes are encrypted at rest by default. See the fly.io docs if you wish to disable this, - though we do ***not*** recommend doing so.* + \*Fly volumes are encrypted at rest by default. See the fly.io docs if you wish to disable this, + though we do **_not_** recommend doing so.\* + 1. If you have not already added a mount to your fly config, follow [the instructions above](#mount_config) to do so. 1. Deploy your application: @@ -95,6 +101,7 @@ somewhere that persists. With [fly.io](https://fly.io) we can create a [volume]( You should have a running app now! Actual will check if the `/data`[¹](#note_1) directory exists and use it automatically. You can open the app using + ```sh fly apps open ``` @@ -102,23 +109,25 @@ fly apps open ## Updating Actual Whenever you want to update Actual, return to the directory containing your `fly.toml` file and run + ```sh fly deploy ``` If you wish to change the image source (eg to run an unstable build, or a specific tag), run + ```sh fly deploy --image [desired image tag] ``` -with `[desired image tag]` replaced with your desired tag. -<a name="note_1" />¹ *You can also configure the data dir with the `ACTUAL_USER_FILES` environment -variable.* +with `[desired image tag]` replaced with your desired tag. +<a name="note_1" />¹ _You can also configure the data dir with the `ACTUAL_USER_FILES` environment +variable._ ## Frequent Issues -- **Q.** *I have deployed actual to Fly.io but I am being charged, why is this?* +- **Q.** _I have deployed actual to Fly.io but I am being charged, why is this?_ **A.** While we wouldn’t know for certain without seeing your configuration, it is likely that during deployment you created a Postgres database. Actual doesn’t need this so you can just delete it and diff --git a/docs/Installing/fly/Fly-persisting.md b/docs/Installing/fly/Fly-persisting.md index 0b99cbac8..30da959dd 100644 --- a/docs/Installing/fly/Fly-persisting.md +++ b/docs/Installing/fly/Fly-persisting.md @@ -7,33 +7,42 @@ title: 'Persisting the data in Fly' When we update Actual, if we don't persist the data it will be erased each time we come to update. 1. Run the following command + ```cmd flyctl volumes create actual_data --region lhr ``` + This will create a volume in the london region. Replace `lhr` with another region code if desired. ![](/img/cmd-19.png) + 1. You should then get a message to say it was successful ![](/img/cmd-20.png) + 1. Open up `fly.toml` in notepad - you can do this from the command line ```cmd notepad fly.toml ``` 1. Add the following to the file + ```toml [mounts] source="actual_data" destination="/data" ``` + If you created a volume with a different name, put that in the source. Save the file. ![](/img/cmd-21.png) + 1. Now from the command prompt run + ```cmd flyctl deploy ``` + ![](/img/cmd-22.png) Your application should be re-deployed with the updated configuration @@ -42,4 +51,4 @@ When we update Actual, if we don't persist the data it will be erased each time If all went well, you should now be able to see your volume from the fly.io dashboard. -![](/img/fly-dash-3.png) \ No newline at end of file +![](/img/fly-dash-3.png) diff --git a/docs/Installing/fly/Fly-prerequisites.md b/docs/Installing/fly/Fly-prerequisites.md index 443db3253..a114f1a33 100644 --- a/docs/Installing/fly/Fly-prerequisites.md +++ b/docs/Installing/fly/Fly-prerequisites.md @@ -25,6 +25,7 @@ payment details, everything we do here will work on the free tier and you won't 1. Flyctl should start installing ![](/img/fly-install-2.png) + 1. Once done you should get a message saying `Run flyctl --help to get started`: ![](/img/fly-install-3.png) diff --git a/docs/Installing/fly/Fly-updating.md b/docs/Installing/fly/Fly-updating.md index 8a2fa9c65..3370d162b 100644 --- a/docs/Installing/fly/Fly-updating.md +++ b/docs/Installing/fly/Fly-updating.md @@ -19,31 +19,39 @@ when command prompt appears in the search results, **right click** it and run it ![](/img/windows-start-2.png) Navigate to the C:\ drive using this command + ```cmd cd C:\ ``` + ![](/img/cmd-1.png) Assuming you followed this guide before, navigate to the github directory you created to clone actual and then into the actual-server directory + ```cmd cd github\actual-server ``` + ![](/img/cmd-26.png) We now need to clone the latest changes made to the actual-server repo, to do this, run the following command from your command prompt: + ```cmd git pull origin master ``` + ![](/img/cmd-25.png) Once that is done, run the deployment command to push your changes to fly. + ```cmd flyctl deploy. ``` + Once that is complete, [delete your browsing history](https://www.howtogeek.com/304218/how-to-clear-your-history-in-any-browser/) and web files. Load up your budget and if required [restore your backup](#importing-data-into-actual) and that is -Actual Server updated. \ No newline at end of file +Actual Server updated. diff --git a/docs/Installing/fly/Fly.io.md b/docs/Installing/fly/Fly.io.md index d913fbae6..08fac7cad 100644 --- a/docs/Installing/fly/Fly.io.md +++ b/docs/Installing/fly/Fly.io.md @@ -3,7 +3,6 @@ [terraform-guide]: ./Fly-terraform [ci-build]: https://github.com/actualbudget/actual-server/blob/master/.github/workflows/build.yml - # Hosting Actual with [fly.io](https://fly.io) You should deploy your server so it's always running. [Fly.io](https://fly.io) provides an easy @@ -16,6 +15,7 @@ step unclear, [contact us](/Contact) for support. Fly offers a variety of ways to get an application deployed on their infrastructure. We currently have community contributed documentation for the following deployment methods + - Deploying [from a clone of the main git repository][git-guide] - Deploying [from a published Docker container image][image-guide] @@ -42,11 +42,11 @@ engine should be tuned differently, you can open the hood and go to work with yo approach also provides you a car, but the engine bay is sealed. If you want different cylinder timing, you'll need a new image. -<a name="deployment_1" />¹ *You can find the image build workflow [here][ci-build]* +<a name="deployment_1" />¹ _You can find the image build workflow [here][ci-build]_ ## Frequent Issues -- **Q.** *I have deployed actual to Fly.io but I am being charged, why is this?* +- **Q.** _I have deployed actual to Fly.io but I am being charged, why is this?_ **A.** While we wouldn’t know for certain without seeing your configuration, it is likely that during deployment you created a Postgres database. Actual doesn’t need this so you can just delete it and diff --git a/docs/Release-Notes.md b/docs/Release-Notes.md index 9252a7557..60d07d5e4 100644 --- a/docs/Release-Notes.md +++ b/docs/Release-Notes.md @@ -3,6 +3,7 @@ title: Release Notes --- ## 23.2.9 + **Docker tag: 23.2.9** :::info @@ -13,328 +14,343 @@ This release allows the user to bypass the SharedArrayBuffer warning that preven The release has the following improvement. -* Allow bypassing of SharedArrayBuffer warning when not using HTTPS +- Allow bypassing of SharedArrayBuffer warning when not using HTTPS + +### Actual -### Actual Version: 23.2.9 #### Features -* [#644](https://github.com/actualbudget/actual/pull/644) Allow bypassing SharedArrayBuffer override -- thanks [j-f1] +- [#644](https://github.com/actualbudget/actual/pull/644) Allow bypassing SharedArrayBuffer override -- thanks [j-f1] #### Bugfix -* [#640](https://github.com/actualbudget/actual/pull/640) Fix coloring of the “Split Transaction” button in the category picker -- thanks [j-f1] -* [#641](https://github.com/actualbudget/actual/pull/641) Fix prop name for button to enable e2ee -- thanks [j-f1] - +- [#640](https://github.com/actualbudget/actual/pull/640) Fix coloring of the “Split Transaction” button in the category picker -- thanks [j-f1] +- [#641](https://github.com/actualbudget/actual/pull/641) Fix prop name for button to enable e2ee -- thanks [j-f1] #### Maintenance -* [#638](https://github.com/actualbudget/actual/pull/638) Allow the Netlify frontend to connect to arbitrary servers -- thanks [j-f1] -* [#639](https://github.com/actualbudget/actual/pull/639) Move desktop-client deps to devDeps -- thanks [j-f1] +- [#638](https://github.com/actualbudget/actual/pull/638) Allow the Netlify frontend to connect to arbitrary servers -- thanks [j-f1] +- [#639](https://github.com/actualbudget/actual/pull/639) Move desktop-client deps to devDeps -- thanks [j-f1] + +### Actual Server -### Actual Server Version: 23.2.9 #### Maintenance -* [#128](https://github.com/actualbudget/actual-server/pull/128) Upgrade to ESM, update to latest dependencies -- thanks [j-f1] -* [#131](https://github.com/actualbudget/actual-server/pull/131) Move source code to an src/ directory -- thanks [j-f1] - +- [#128](https://github.com/actualbudget/actual-server/pull/128) Upgrade to ESM, update to latest dependencies -- thanks [j-f1] +- [#131](https://github.com/actualbudget/actual-server/pull/131) Move source code to an src/ directory -- thanks [j-f1] ## 23.2.5 + **Docker tag: 23.2.5** :::warning -This release introduces a breaking change, there is now a requirement for Actual to be served over HTTPS when not running on localhost. If you don't have a reverse proxy or certificate Actual will not load your budget. +This release introduces a breaking change, there is now a requirement for Actual to be served over HTTPS when not running on localhost. If you don't have a reverse proxy or certificate Actual will not load your budget. ::: The release has notable security improvements. Highlights: -* e2e encryption -* login invalidation when changing password -* dependency upgrades to remove potential actual-server security vulnerabilities (although we don’t believe there were any severe issues) +- e2e encryption +- login invalidation when changing password +- dependency upgrades to remove potential actual-server security vulnerabilities (although we don’t believe there were any severe issues) + +### Actual -### Actual Version: 23.2.5 #### Features -* [#355](https://github.com/actualbudget/actual/pull/355) Schedule Editor: Keep payee list open while toggling transfer payees focus -- thanks [trevdor] -* [#467](https://github.com/actualbudget/actual/pull/467) Add an “Experimental Features” section in the settings -- thanks [j-f1] -* [#475](https://github.com/actualbudget/actual/pull/475) Add support for filtering the rules list -- thanks [j-f1] -* [#482](https://github.com/actualbudget/actual/pull/482) Add option to control the "cleared state" in Rules -- thanks [shall0pass] -* [#569](https://github.com/actualbudget/actual/pull/569) List of categories in transfer money dialog -- thanks [shall0pass] -* [#570](https://github.com/actualbudget/actual/pull/570) Use navigitor.userAgent to determine isMobile -- thanks [shall0pass] -* [#573](https://github.com/actualbudget/actual/pull/573) Goal templates -- thanks [shall0pass] -* [#579](https://github.com/actualbudget/actual/pull/579) Add 'View on Hover' to Category Notes for #563 -- thanks [gsumpster] -* [#580](https://github.com/actualbudget/actual/pull/580) Added date to export file name -- thanks [rich-howell] -* [#584](https://github.com/actualbudget/actual/pull/585) Cover Overspending dropdown menu, open on click -- thanks [shall0pass] -* [#590](https://github.com/actualbudget/actual/pull/590) Add support for filtering the schedules table -- thanks [j-f1] -* [#593](https://github.com/actualbudget/actual/pull/593) Allow creating a payee with a name matching an existing account -- thanks [j-f1] -* [#598](https://github.com/actualbudget/actual/pull/595) Allow configuring the server from any page on the management app -- thanks [j-f1] -* [#600](https://github.com/actualbudget/actual/pull/600) Add a warning when SharedArrayBuffer is not available -- thanks [j-f1] -* [#601](https://github.com/actualbudget/actual/pull/601) Improve handling of schedules that are missing a date -- thanks [j-f1] -* [#602](https://github.com/actualbudget/actual/pull/602) Support arbitrary currency symbols in expressions -- thanks [j-f1] -* [#617](https://github.com/actualbudget/actual/pull/617) Improve behavior of deleted payees/categories/accounts in rules -- thanks [j-f1] +- [#355](https://github.com/actualbudget/actual/pull/355) Schedule Editor: Keep payee list open while toggling transfer payees focus -- thanks [trevdor] +- [#467](https://github.com/actualbudget/actual/pull/467) Add an “Experimental Features” section in the settings -- thanks [j-f1] +- [#475](https://github.com/actualbudget/actual/pull/475) Add support for filtering the rules list -- thanks [j-f1] +- [#482](https://github.com/actualbudget/actual/pull/482) Add option to control the "cleared state" in Rules -- thanks [shall0pass] +- [#569](https://github.com/actualbudget/actual/pull/569) List of categories in transfer money dialog -- thanks [shall0pass] +- [#570](https://github.com/actualbudget/actual/pull/570) Use navigitor.userAgent to determine isMobile -- thanks [shall0pass] +- [#573](https://github.com/actualbudget/actual/pull/573) Goal templates -- thanks [shall0pass] +- [#579](https://github.com/actualbudget/actual/pull/579) Add 'View on Hover' to Category Notes for #563 -- thanks [gsumpster] +- [#580](https://github.com/actualbudget/actual/pull/580) Added date to export file name -- thanks [rich-howell] +- [#584](https://github.com/actualbudget/actual/pull/585) Cover Overspending dropdown menu, open on click -- thanks [shall0pass] +- [#590](https://github.com/actualbudget/actual/pull/590) Add support for filtering the schedules table -- thanks [j-f1] +- [#593](https://github.com/actualbudget/actual/pull/593) Allow creating a payee with a name matching an existing account -- thanks [j-f1] +- [#598](https://github.com/actualbudget/actual/pull/595) Allow configuring the server from any page on the management app -- thanks [j-f1] +- [#600](https://github.com/actualbudget/actual/pull/600) Add a warning when SharedArrayBuffer is not available -- thanks [j-f1] +- [#601](https://github.com/actualbudget/actual/pull/601) Improve handling of schedules that are missing a date -- thanks [j-f1] +- [#602](https://github.com/actualbudget/actual/pull/602) Support arbitrary currency symbols in expressions -- thanks [j-f1] +- [#617](https://github.com/actualbudget/actual/pull/617) Improve behavior of deleted payees/categories/accounts in rules -- thanks [j-f1] #### Bugfix -* [#88](https://github.com/actualbudget/actual/pull/88) Fix some YNAB4 importer bugs -- thanks [rianmcguire] -* [#414](https://github.com/actualbudget/actual/pull/414) Fix condition mapping for payee rule creation from payee modal -- thanks [winklevos] -* [#451](https://github.com/actualbudget/actual/pull/451) Fix bug where rules page may not load due to link-schedule payee dependency -- thanks [winklevos] -* [#486](https://github.com/actualbudget/actual/pull/486) Fix TypeScript warning about too many files -- thanks [j-f1] -* [#489](https://github.com/actualbudget/actual/pull/489) Fix “Repair split transactions” button being missing -- thanks [j-f1] -* [#490](https://github.com/actualbudget/actual/pull/490) 🐛 (ynab4) transaction cleared state in imports -- thanks [MatissJanis] -* [#574](https://github.com/actualbudget/actual/pull/574) Fix #488 -- thanks [MatissJanis] -* [#572](https://github.com/actualbudget/actual/pull/572) fix: typo in reconcilation transaction creation -- thanks [MatissJanis] -* [#591](https://github.com/actualbudget/actual/pull/591) Allow libofx to handle decoding imported files -- thanks [j-f1] -* [#592](https://github.com/actualbudget/actual/pull/592) Update SelectedBalance to use useSheetValue -- thanks [j-f1] -* [#599](https://github.com/actualbudget/actual/pull/599) Don’t crash when loading an invalid account ID -- thanks [j-f1] -* [#605](https://github.com/actualbudget/actual/pull/605) Add a suggestion to upload the imported file if reporting an import bug -- thanks [j-f1] -* [#620](https://github.com/actualbudget/actual/pull/620) Fixes editing closed account names issue #616 -- thanks [n1thun] -* [#629](https://github.com/actualbudget/actual/pull/629) Fix form submission on TransferTooltip when pressing enter -- thanks [gsumpster] -* [#630](https://github.com/actualbudget/actual/pull/630) Skip the “Starting Balance” transaction if the balance is 0 -- thanks [j-f1] -* [#632](https://github.com/actualbudget/actual/pull/632) Fix default value of “Move to a category” -- thanks [j-f1] +- [#88](https://github.com/actualbudget/actual/pull/88) Fix some YNAB4 importer bugs -- thanks [rianmcguire] +- [#414](https://github.com/actualbudget/actual/pull/414) Fix condition mapping for payee rule creation from payee modal -- thanks [winklevos] +- [#451](https://github.com/actualbudget/actual/pull/451) Fix bug where rules page may not load due to link-schedule payee dependency -- thanks [winklevos] +- [#486](https://github.com/actualbudget/actual/pull/486) Fix TypeScript warning about too many files -- thanks [j-f1] +- [#489](https://github.com/actualbudget/actual/pull/489) Fix “Repair split transactions” button being missing -- thanks [j-f1] +- [#490](https://github.com/actualbudget/actual/pull/490) 🐛 (ynab4) transaction cleared state in imports -- thanks [MatissJanis] +- [#574](https://github.com/actualbudget/actual/pull/574) Fix #488 -- thanks [MatissJanis] +- [#572](https://github.com/actualbudget/actual/pull/572) fix: typo in reconcilation transaction creation -- thanks [MatissJanis] +- [#591](https://github.com/actualbudget/actual/pull/591) Allow libofx to handle decoding imported files -- thanks [j-f1] +- [#592](https://github.com/actualbudget/actual/pull/592) Update SelectedBalance to use useSheetValue -- thanks [j-f1] +- [#599](https://github.com/actualbudget/actual/pull/599) Don’t crash when loading an invalid account ID -- thanks [j-f1] +- [#605](https://github.com/actualbudget/actual/pull/605) Add a suggestion to upload the imported file if reporting an import bug -- thanks [j-f1] +- [#620](https://github.com/actualbudget/actual/pull/620) Fixes editing closed account names issue #616 -- thanks [n1thun] +- [#629](https://github.com/actualbudget/actual/pull/629) Fix form submission on TransferTooltip when pressing enter -- thanks [gsumpster] +- [#630](https://github.com/actualbudget/actual/pull/630) Skip the “Starting Balance” transaction if the balance is 0 -- thanks [j-f1] +- [#632](https://github.com/actualbudget/actual/pull/632) Fix default value of “Move to a category” -- thanks [j-f1] #### Maintenance -* [#469](https://github.com/actualbudget/actual/pull/469) 🚨 enabling no-unused-vars eslint rule -- thanks [MatissJanis] -* [#472](https://github.com/actualbudget/actual/pull/372) 👷 disable failing electron builds -- thanks [MatissJanis] -* [#485](https://github.com/actualbudget/actual/pull/485) Regenerate icons without the .web.js extension -- thanks [j-f1] -* [#575](https://github.com/actualbudget/actual/pull/575) Add an issue template for feature requests -- thanks [j-f1] -* [#586](https://github.com/actualbudget/actual/pull/586) ⬆️ upgrade caniuse-lite -- thanks [MatissJanis] -* [#609](https://github.com/actualbudget/actual/pull/609) ⬆️ upgrade node-fetch to ^2.6.9 -- thanks [MatissJanis] -* [#610](https://github.com/actualbudget/actual/pull/610) 🔖 (api) 4.1.6: node-fetch upgrade -- thanks [MatissJanis] -* [#624](https://github.com/actualbudget/actual/pull/624) Fatal error dialog update to reflect open source -- thanks [rich-howell] -* [#627](https://github.com/actualbudget/actual/pull/627) Remove all references to help@actualbudget.com -- thanks [rich-howell] -* [#633](https://github.com/actualbudget/actual/pull/633) Removed reference to blog -- thanks [rich-howell] -* [#635](https://github.com/actualbudget/actual/pull/635) Removing dead links [rich-howell] +- [#469](https://github.com/actualbudget/actual/pull/469) 🚨 enabling no-unused-vars eslint rule -- thanks [MatissJanis] +- [#472](https://github.com/actualbudget/actual/pull/372) 👷 disable failing electron builds -- thanks [MatissJanis] +- [#485](https://github.com/actualbudget/actual/pull/485) Regenerate icons without the .web.js extension -- thanks [j-f1] +- [#575](https://github.com/actualbudget/actual/pull/575) Add an issue template for feature requests -- thanks [j-f1] +- [#586](https://github.com/actualbudget/actual/pull/586) ⬆️ upgrade caniuse-lite -- thanks [MatissJanis] +- [#609](https://github.com/actualbudget/actual/pull/609) ⬆️ upgrade node-fetch to ^2.6.9 -- thanks [MatissJanis] +- [#610](https://github.com/actualbudget/actual/pull/610) 🔖 (api) 4.1.6: node-fetch upgrade -- thanks [MatissJanis] +- [#624](https://github.com/actualbudget/actual/pull/624) Fatal error dialog update to reflect open source -- thanks [rich-howell] +- [#627](https://github.com/actualbudget/actual/pull/627) Remove all references to help@actualbudget.com -- thanks [rich-howell] +- [#633](https://github.com/actualbudget/actual/pull/633) Removed reference to blog -- thanks [rich-howell] +- [#635](https://github.com/actualbudget/actual/pull/635) Removing dead links [rich-howell] +### Actual Server -### Actual Server Version: 23.2.5 #### Features -* [#115](https://github.com/actualbudget/actual-server/pull/115) Add support for HTTPS -- thanks [j-f1] +- [#115](https://github.com/actualbudget/actual-server/pull/115) Add support for HTTPS -- thanks [j-f1] #### Bugfix -* [#109](https://github.com/actualbudget/actual-server/pull/109) fix: listen also listen on ipv6 addresses -- thanks [heilerich] +- [#109](https://github.com/actualbudget/actual-server/pull/109) fix: listen also listen on ipv6 addresses -- thanks [heilerich] #### Maintenance -* [#116](https://github.com/actualbudget/actual-server/pull/116) 🔥 remove unused code (plaid, sync-full) -- thanks [MatissJanis] -* [#110](https://github.com/actualbudget/actual-server/pull/110) build(deps): bump node-fetch from 2.2.0 to 2.6.7 -* [#111](https://github.com/actualbudget/actual-server/pull/111) build(deps): bump minimatch from 3.0.4 to 3.1.2 -* [#112](https://github.com/actualbudget/actual-server/pull/112) build(deps): bump moment from 2.29.3 to 2.29.4 -* [#117](https://github.com/actualbudget/actual-server/pull/117) build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 -* [#118](https://github.com/actualbudget/actual-server/pull/118) ⬆️ upgrade @actual-app/api to 4.1.6: node-fetch v2 support -- thanks [MatissJanis] -* [#119](https://github.com/actualbudget/actual-server/pull/119) ⬆️ upgrade express*, bcrypt and body-parser -- thanks [MatissJani]s +- [#116](https://github.com/actualbudget/actual-server/pull/116) 🔥 remove unused code (plaid, sync-full) -- thanks [MatissJanis] +- [#110](https://github.com/actualbudget/actual-server/pull/110) build(deps): bump node-fetch from 2.2.0 to 2.6.7 +- [#111](https://github.com/actualbudget/actual-server/pull/111) build(deps): bump minimatch from 3.0.4 to 3.1.2 +- [#112](https://github.com/actualbudget/actual-server/pull/112) build(deps): bump moment from 2.29.3 to 2.29.4 +- [#117](https://github.com/actualbudget/actual-server/pull/117) build(deps): bump http-cache-semantics from 4.1.0 to 4.1.1 +- [#118](https://github.com/actualbudget/actual-server/pull/118) ⬆️ upgrade @actual-app/api to 4.1.6: node-fetch v2 support -- thanks [MatissJanis] +- [#119](https://github.com/actualbudget/actual-server/pull/119) ⬆️ upgrade express\*, bcrypt and body-parser -- thanks [MatissJani]s ## 23.1.12 + **Docker tag: 23.1.12** The release has notable of improvements of: -* Read-only responsive view, this replaces our mobile apps, it is notable that this is read only only at this stage. -* Improvements to the sidebar design -### Actual +- Read-only responsive view, this replaces our mobile apps, it is notable that this is read only only at this stage. +- Improvements to the sidebar design + +### Actual + Version: 23.1.12 - + #### Features -* [#403](https://github.com/actualbudget/actual/pull/403) Replace URLs to point to https://actualbudget.github.io/docs -- thanks [shall0pass] -* [#413](https://github.com/actualbudget/actual/pull/413) feat: allow creating test budget in netlify deployments -- thanks [MatissJanis] -* [#420](https://github.com/actualbudget/actual/pull/420) feat: creating test budget on the config page -- thanks [MatissJanis] -* [#426](https://github.com/actualbudget/actual/pull/426) Move “Find schedules” to a button on the Schedules page [j-f1] -* [#435](https://github.com/actualbudget/actual/pull/435) Read-only Responsive view -- thanks [trevdor] -* [#440](https://github.com/actualbudget/actual/pull/440) Further iteration on the sidebar design -- thanks [j-f1] + +- [#403](https://github.com/actualbudget/actual/pull/403) Replace URLs to point to https://actualbudget.github.io/docs -- thanks [shall0pass] +- [#413](https://github.com/actualbudget/actual/pull/413) feat: allow creating test budget in netlify deployments -- thanks [MatissJanis] +- [#420](https://github.com/actualbudget/actual/pull/420) feat: creating test budget on the config page -- thanks [MatissJanis] +- [#426](https://github.com/actualbudget/actual/pull/426) Move “Find schedules” to a button on the Schedules page [j-f1] +- [#435](https://github.com/actualbudget/actual/pull/435) Read-only Responsive view -- thanks [trevdor] +- [#440](https://github.com/actualbudget/actual/pull/440) Further iteration on the sidebar design -- thanks [j-f1] #### Bugfix -* [#423](https://github.com/actualbudget/actual/pull/423) Improve handling of “no server” state -- thanks [j-f1] -* [#430](https://github.com/actualbudget/actual/pull/430) fix: select date filtering by month #406 🚑 -- thanks [iurynogueira] -* [#441](https://github.com/actualbudget/actual/pull/441) Fix overlap of version info and server URL -- thanks [trevdor] + +- [#423](https://github.com/actualbudget/actual/pull/423) Improve handling of “no server” state -- thanks [j-f1] +- [#430](https://github.com/actualbudget/actual/pull/430) fix: select date filtering by month #406 🚑 -- thanks [iurynogueira] +- [#441](https://github.com/actualbudget/actual/pull/441) Fix overlap of version info and server URL -- thanks [trevdor] #### Maintenance -* [#401](https://github.com/actualbudget/actual/pull/401) Update git attributes for better End of Line handling -- thanks [winklevos] -* [#412](https://github.com/actualbudget/actual/pull/412) test: re-enable skipped unit tests -- thanks [MatissJanis] -* [#415](https://github.com/actualbudget/actual/pull/415) chore: fix eslint issues and make warnings CI blocking -- thanks [MatissJanis] -* [#418](https://github.com/actualbudget/actual/pull/418) fix: some react warnings -- thanks [MatissJanis] -* [#421](https://github.com/actualbudget/actual/pull/421) chore: remove unused variables -- thanks [MatissJanis] -* [#425](https://github.com/actualbudget/actual/pull/425) fix: re-disable no-unused-vars eslint rule -- thanks [MatissJanis] -* [#428](https://github.com/actualbudget/actual/pull/428) chore: remove more unused variables -- thanks [MatissJanis] -* [#429](https://github.com/actualbudget/actual/pull/429) prune: remove unused icons -- thanks [MatissJanis] -* [#431](https://github.com/actualbudget/actual/pull/431) prune: remove unused variables -- thanks [MatissJanis] -* [#434](https://github.com/actualbudget/actual/pull/434) Split the Settings component into multiple files -- thanks [j-f1] -* [#437](https://github.com/actualbudget/actual/pull/437) chore: remove unsed vars & cleanups -- thanks [MatissJanis] -* [#439](https://github.com/actualbudget/actual/pull/439) docs: add netlify as sponsors to README -- thanks [MatissJanis] -* [#442](https://github.com/actualbudget/actual/pull/442) 🔥 removal of react-native mobile apps -- thanks [MatissJanis] -* [#443](https://github.com/actualbudget/actual/pull/443) ⬆️ upgrade prettier and fix new issues -- thanks [MatissJanis] - -### Actual Server + +- [#401](https://github.com/actualbudget/actual/pull/401) Update git attributes for better End of Line handling -- thanks [winklevos] +- [#412](https://github.com/actualbudget/actual/pull/412) test: re-enable skipped unit tests -- thanks [MatissJanis] +- [#415](https://github.com/actualbudget/actual/pull/415) chore: fix eslint issues and make warnings CI blocking -- thanks [MatissJanis] +- [#418](https://github.com/actualbudget/actual/pull/418) fix: some react warnings -- thanks [MatissJanis] +- [#421](https://github.com/actualbudget/actual/pull/421) chore: remove unused variables -- thanks [MatissJanis] +- [#425](https://github.com/actualbudget/actual/pull/425) fix: re-disable no-unused-vars eslint rule -- thanks [MatissJanis] +- [#428](https://github.com/actualbudget/actual/pull/428) chore: remove more unused variables -- thanks [MatissJanis] +- [#429](https://github.com/actualbudget/actual/pull/429) prune: remove unused icons -- thanks [MatissJanis] +- [#431](https://github.com/actualbudget/actual/pull/431) prune: remove unused variables -- thanks [MatissJanis] +- [#434](https://github.com/actualbudget/actual/pull/434) Split the Settings component into multiple files -- thanks [j-f1] +- [#437](https://github.com/actualbudget/actual/pull/437) chore: remove unsed vars & cleanups -- thanks [MatissJanis] +- [#439](https://github.com/actualbudget/actual/pull/439) docs: add netlify as sponsors to README -- thanks [MatissJanis] +- [#442](https://github.com/actualbudget/actual/pull/442) 🔥 removal of react-native mobile apps -- thanks [MatissJanis] +- [#443](https://github.com/actualbudget/actual/pull/443) ⬆️ upgrade prettier and fix new issues -- thanks [MatissJanis] + +### Actual Server + Version: 23.1.12 No pull requests were merged in this release. ## 22.12.03 + **Docker tag: 22.12.9** :::warning - If you are upgrading from a release older than 22.10.25, read that versions release notes for steps regarding a breaking change. +If you are upgrading from a release older than 22.10.25, read that versions release notes for steps regarding a breaking change. - Using Docker tags 22.12.3 or 22.12.8 have errors. **Use Docker tag 22.12.9** +Using Docker tags 22.12.3 or 22.12.8 have errors. **Use Docker tag 22.12.9** ::: The release has notable of improvements of: -* Large values are supported -* Fix YNAB 4 and nYnab importers -* Fixed crashes in certain situations -* Accounts can now have notes -* Icon design was changed for more contrast. -A full accounting of the changes are listed below. Thank you to everyone who contributed! +- Large values are supported +- Fix YNAB 4 and nYnab importers +- Fixed crashes in certain situations +- Accounts can now have notes +- Icon design was changed for more contrast. + +A full accounting of the changes are listed below. Thank you to everyone who contributed! ### Actual + Version: 22.12.03 -* [#218](https://github.com/actualbudget/actual/pull/218) Fix enter to create accounts -- thanks [ezfe]) -* [#266](https://github.com/actualbudget/actual/pull/266) RUpdate data-file-index.txt -- thanks [j-f1] -* [#272](https://github.com/actualbudget/actual/pull/272) a11y: update cleared state display for clarity -- thanks [rickdoesdev] -* [#273](https://github.com/actualbudget/actual/pull/273) Remove the hold for future months button -- thanks [shall0pass] -* [#385](https://github.com/actualbudget/actual/pull/385) feat: ability to add notes to accounts -- thanks [MatissJanis] -* [#386](https://github.com/actualbudget/actual/pull/386) Always pull in API package from workspace (fixes #378) -- thanks [jlongster] -* [#387](https://github.com/actualbudget/actual/pull/387) Remove 32bit limit on amounts -- thanks [jlongster] -* [#389](https://github.com/actualbudget/actual/pull/389) Add a help button to the menu -- thanks [shall0pass] -* [#394](https://github.com/actualbudget/actual/pull/389) fix(useSheetValue): default value should be null not undefined -- thanks [MatissJanis] -* [#396](https://github.com/actualbudget/actual/pull/396) Avoid pulling in the bundled app from API in backend -- thanks [jlongster] +- [#218](https://github.com/actualbudget/actual/pull/218) Fix enter to create accounts -- thanks [ezfe]) +- [#266](https://github.com/actualbudget/actual/pull/266) RUpdate data-file-index.txt -- thanks [j-f1] +- [#272](https://github.com/actualbudget/actual/pull/272) a11y: update cleared state display for clarity -- thanks [rickdoesdev] +- [#273](https://github.com/actualbudget/actual/pull/273) Remove the hold for future months button -- thanks [shall0pass] +- [#385](https://github.com/actualbudget/actual/pull/385) feat: ability to add notes to accounts -- thanks [MatissJanis] +- [#386](https://github.com/actualbudget/actual/pull/386) Always pull in API package from workspace (fixes #378) -- thanks [jlongster] +- [#387](https://github.com/actualbudget/actual/pull/387) Remove 32bit limit on amounts -- thanks [jlongster] +- [#389](https://github.com/actualbudget/actual/pull/389) Add a help button to the menu -- thanks [shall0pass] +- [#394](https://github.com/actualbudget/actual/pull/389) fix(useSheetValue): default value should be null not undefined -- thanks [MatissJanis] +- [#396](https://github.com/actualbudget/actual/pull/396) Avoid pulling in the bundled app from API in backend -- thanks [jlongster] ### Actual Server + Version : 22.12.09 Builds with Actual 22.12.03 and API 4.1.5. - ## 22.10.25 + **Docker tag: 22.10.25** :::warning This release includes a breaking change to the sync component that requires manual migration ([migration guide](/Getting-Started/migration/simple-sync)). Ensure your budget is [backed up](/Backup-Restore/Backups) before you update to avoid data loss ::: -This release of Actual does not include any of the following +This release of Actual does not include any of the following -* Actual Electron Desktop Application -* iOS Application -* Android Application +- Actual Electron Desktop Application +- iOS Application +- Android Application ### Actual + Version: 22.10.25 -* [#1](https://github.com/actualbudget/actual/pull/1) Add fields to package.json -- thanks [coliff] -* [#3](https://github.com/actualbudget/actual/pull/3) Create .editorconfig -- thanks [coliff] -* [#7](https://github.com/actualbudget/actual/pull/7) Add missing comma in package.json -- thanks [S3B4S] -* [#20](https://github.com/actualbudget/actual/pull/20) add: tsconfig.json -- thanks [wmertens] -* [#25](https://github.com/actualbudget/actual/pull/25) Building for Windows -- thanks [ejmurra] -* [#46](https://github.com/actualbudget/actual/pull/46) Minor fixes to package.json file formatting -- thanks [TomAFrench] -* [#47](https://github.com/actualbudget/actual/pull/47) Add missing comma to jest.config.js -- thanks [TomAFrench] -* [#48](https://github.com/actualbudget/actual/pull/48) Remove some unnecessary files + add logs to gitignore -- thanks [TomAFrench] -* [#50](https://github.com/actualbudget/actual/pull/50) Migrate to yarn v3 -- thanks [TomAFrench] -* [#52](https://github.com/actualbudget/actual/pull/52) Remove unused imports -- thanks [TomAFrench] -* [#53](https://github.com/actualbudget/actual/pull/53) Remove unused patch for react-native-safe-area-view -- thanks [TomAFrench] -* [#54](https://github.com/actualbudget/actual/pull/54) Update importer packages package.json to point to monorepo -- thanks [TomAFrench] -* [#55](https://github.com/actualbudget/actual/pull/55) Lock packages to the versions for which patches have been made -- thanks [TomAFrench] -* [#59](https://github.com/actualbudget/actual/pull/59) Fix timestamp test suite -- thanks [TomAFrench] -* [#64](https://github.com/actualbudget/actual/pull/64) Group CRDT files into their own directory -- thanks [TomAFrench] -* [#65](https://github.com/actualbudget/actual/pull/65) Add documentation on how to build the protobuf -- thanks [TomAFrench] -* [#68](https://github.com/actualbudget/actual/pull/68) Route all imports of AQL code through an index.js file -- thanks [TomAFrench] -* [#69](https://github.com/actualbudget/actual/pull/69) Enforce sorting of contents of data-file-index.txt -- thanks [TomAFrench] -* [#70](https://github.com/actualbudget/actual/pull/70) Add linting job to CI -- thanks [TomAFrench] -* [#71](https://github.com/actualbudget/actual/pull/71) Add ability to import Actual files; enable export on desktop -- thanks [jlongster] -* [#72](https://github.com/actualbudget/actual/pull/72) Fix some errors caused by using bash syntax with sh shebang -- thanks [TomAFrench] -* [#73](https://github.com/actualbudget/actual/pull/73) Add a CI workflow to perform builds of api, web and electron packages -- thanks [TomAFrench] -* [#80](https://github.com/actualbudget/actual/pull/80) Improved yarn scripts in desktop-electron package -- thanks [TomAFrench] -* [#81](https://github.com/actualbudget/actual/pull/81) Remove unused yarn scripts -- thanks [TomAFrench] -* [#94](https://github.com/actualbudget/actual/pull/94) currency-formatter -> Intl.NumberFormat -- thanks [trevdor] -* [#95](https://github.com/actualbudget/actual/pull/95) Fix official node version to 16.15.0 -- thanks [TomAFrench] -* [#96](https://github.com/actualbudget/actual/pull/96) Fix yaml formatting in CI config -- thanks [TomAFrench] -* [#99](https://github.com/actualbudget/actual/pull/99) Dependency cleanup -- thanks [TomAFrench] -* [#102](https://github.com/actualbudget/actual/pull/102) Fix test failure due to non-integer weight values -- thanks [TomAFrench] -* [#104](https://github.com/actualbudget/actual/pull/104) Delete unused directory browser/build -- thanks [TomAFrench] -* [#107](https://github.com/actualbudget/actual/pull/107) Update downshift patch to match installed version -- thanks [TomAFrench] -* [#111](https://github.com/actualbudget/actual/pull/111) Remove holiday text from README -- thanks [TomAFrench] -* [#112](https://github.com/actualbudget/actual/pull/112) display version on settings page -- thanks [PartyLich] -* [#117](https://github.com/actualbudget/actual/pull/117) Fix: parse dates without a delimiter in CSV import -- thanks [PartyLich] -* [#124](https://github.com/actualbudget/actual/pull/124) fix: hitting enter after setting password redirects to demo page -- thanks [andremralves] -* [#129](https://github.com/actualbudget/actual/pull/129) Add action to mark new issues for triage -- thanks [TomAFrench] -* [#130](https://github.com/actualbudget/actual/pull/130) Enforce prettier rules -- thanks [TomAFrench] -* [#131](https://github.com/actualbudget/actual/pull/131) Silence warning for missing moment.js install -- thanks [TomAFrench] -* [#132](https://github.com/actualbudget/actual/pull/132) Replace jwl-dev-utils with react-dev-utils -- thanks [TomAFrench] -* [#135](https://github.com/actualbudget/actual/pull/135) Remove unused dependencies -- thanks [TomAFrench] -* [#137](https://github.com/actualbudget/actual/pull/137) Skip failing test suites -- thanks [TomAFrench] -* [#139](https://github.com/actualbudget/actual/pull/139) Remove unused rollup config and dependencies -- thanks [TomAFrench] -* [#163](https://github.com/actualbudget/actual/pull/163) Force react-error-overlay to 6.0.9 to fix error -- thanks [jlongster] -* [#164](https://github.com/actualbudget/actual/pull/164) build on windows -- thanks [bdoherty] -* [#202](https://github.com/actualbudget/actual/pull/202) Run tests on github actions -- thanks [TomAFrench] -* [#219](https://github.com/actualbudget/actual/pull/219) 199 Adding translation to schedules list -- thanks [manuelcanepa] -* [#203](https://github.com/actualbudget/actual/pull/203) Replace babel-jest with ts-jest -- thanks [TomAFrench] -* [#204](https://github.com/actualbudget/actual/pull/204) Use workspace ranges for monorepo dependencies -- thanks [TomAFrench] -* [#208](https://github.com/actualbudget/actual/pull/208) Bug Report Template & Issues Configuration -- thanks [rich-howell] -* [#213](https://github.com/actualbudget/actual/pull/213) Enforce linting in desktop-client -- thanks [TomAFrench] -* [#214](https://github.com/actualbudget/actual/pull/214) Fix adm-zip install failure -- thanks [trevdor] -* [#217](https://github.com/actualbudget/actual/pull/217) Remove unused imports and sort imports in desktop-client -- thanks [TomAFrench] -* [#222](https://github.com/actualbudget/actual/pull/222) Remove patch-package dependency from loot-design -- thanks [TomAFrench] -* [#224](https://github.com/actualbudget/actual/pull/224) Adding translation to rule editor and transaction table -- thanks [manuelcanepa] -* [#225](https://github.com/actualbudget/actual/pull/225) Implement localization for schedule descriptions -- thanks [j-f1] -* [#228](https://github.com/actualbudget/actual/pull/228) Add macOS to list of operating systems in the issue template -- thanks [rich-howell] -* [#229](https://github.com/actualbudget/actual/pull/229) Fix handling of -0 in budget summary -- thanks [j-f1] -* [#230](https://github.com/actualbudget/actual/pull/230) Revert change to make importers use the api bundle from inside the monorepo -- thanks [TomAFrench] -* [#234](https://github.com/actualbudget/actual/pull/234) Allow enter to create new transaction when focused on cleared column -- thanks [ezfe] -* [#232](https://github.com/actualbudget/actual/pull/232) Fix linter issues -- thanks [TomAFrench] -* [#233](https://github.com/actualbudget/actual/pull/233) Enforce linting in loot-design -- thanks [TomAFrench] -* [#237](https://github.com/actualbudget/actual/pull/237) Separate external, monorepo and internal imports -- thanks [TomAFrench] -* [#238](https://github.com/actualbudget/actual/pull/238) Sort import in alphabetical order -- thanks [TomAFrench] -* [#240](https://github.com/actualbudget/actual/pull/240) Fix CI to an exact node version -- thanks [TomAFrench] -* [#244](https://github.com/actualbudget/actual/pull/244) Remove dollar sign from close account modal -- thanks [TomAFrench] -* [#262](https://github.com/actualbudget/actual/pull/262) Render a schedule rule with the mapped payee id; fixes crash -- thanks [jlongster] +- [#1](https://github.com/actualbudget/actual/pull/1) Add fields to package.json -- thanks [coliff] +- [#3](https://github.com/actualbudget/actual/pull/3) Create .editorconfig -- thanks [coliff] +- [#7](https://github.com/actualbudget/actual/pull/7) Add missing comma in package.json -- thanks [S3B4S] +- [#20](https://github.com/actualbudget/actual/pull/20) add: tsconfig.json -- thanks [wmertens] +- [#25](https://github.com/actualbudget/actual/pull/25) Building for Windows -- thanks [ejmurra] +- [#46](https://github.com/actualbudget/actual/pull/46) Minor fixes to package.json file formatting -- thanks [TomAFrench] +- [#47](https://github.com/actualbudget/actual/pull/47) Add missing comma to jest.config.js -- thanks [TomAFrench] +- [#48](https://github.com/actualbudget/actual/pull/48) Remove some unnecessary files + add logs to gitignore -- thanks [TomAFrench] +- [#50](https://github.com/actualbudget/actual/pull/50) Migrate to yarn v3 -- thanks [TomAFrench] +- [#52](https://github.com/actualbudget/actual/pull/52) Remove unused imports -- thanks [TomAFrench] +- [#53](https://github.com/actualbudget/actual/pull/53) Remove unused patch for react-native-safe-area-view -- thanks [TomAFrench] +- [#54](https://github.com/actualbudget/actual/pull/54) Update importer packages package.json to point to monorepo -- thanks [TomAFrench] +- [#55](https://github.com/actualbudget/actual/pull/55) Lock packages to the versions for which patches have been made -- thanks [TomAFrench] +- [#59](https://github.com/actualbudget/actual/pull/59) Fix timestamp test suite -- thanks [TomAFrench] +- [#64](https://github.com/actualbudget/actual/pull/64) Group CRDT files into their own directory -- thanks [TomAFrench] +- [#65](https://github.com/actualbudget/actual/pull/65) Add documentation on how to build the protobuf -- thanks [TomAFrench] +- [#68](https://github.com/actualbudget/actual/pull/68) Route all imports of AQL code through an index.js file -- thanks [TomAFrench] +- [#69](https://github.com/actualbudget/actual/pull/69) Enforce sorting of contents of data-file-index.txt -- thanks [TomAFrench] +- [#70](https://github.com/actualbudget/actual/pull/70) Add linting job to CI -- thanks [TomAFrench] +- [#71](https://github.com/actualbudget/actual/pull/71) Add ability to import Actual files; enable export on desktop -- thanks [jlongster] +- [#72](https://github.com/actualbudget/actual/pull/72) Fix some errors caused by using bash syntax with sh shebang -- thanks [TomAFrench] +- [#73](https://github.com/actualbudget/actual/pull/73) Add a CI workflow to perform builds of api, web and electron packages -- thanks [TomAFrench] +- [#80](https://github.com/actualbudget/actual/pull/80) Improved yarn scripts in desktop-electron package -- thanks [TomAFrench] +- [#81](https://github.com/actualbudget/actual/pull/81) Remove unused yarn scripts -- thanks [TomAFrench] +- [#94](https://github.com/actualbudget/actual/pull/94) currency-formatter -> Intl.NumberFormat -- thanks [trevdor] +- [#95](https://github.com/actualbudget/actual/pull/95) Fix official node version to 16.15.0 -- thanks [TomAFrench] +- [#96](https://github.com/actualbudget/actual/pull/96) Fix yaml formatting in CI config -- thanks [TomAFrench] +- [#99](https://github.com/actualbudget/actual/pull/99) Dependency cleanup -- thanks [TomAFrench] +- [#102](https://github.com/actualbudget/actual/pull/102) Fix test failure due to non-integer weight values -- thanks [TomAFrench] +- [#104](https://github.com/actualbudget/actual/pull/104) Delete unused directory browser/build -- thanks [TomAFrench] +- [#107](https://github.com/actualbudget/actual/pull/107) Update downshift patch to match installed version -- thanks [TomAFrench] +- [#111](https://github.com/actualbudget/actual/pull/111) Remove holiday text from README -- thanks [TomAFrench] +- [#112](https://github.com/actualbudget/actual/pull/112) display version on settings page -- thanks [PartyLich] +- [#117](https://github.com/actualbudget/actual/pull/117) Fix: parse dates without a delimiter in CSV import -- thanks [PartyLich] +- [#124](https://github.com/actualbudget/actual/pull/124) fix: hitting enter after setting password redirects to demo page -- thanks [andremralves] +- [#129](https://github.com/actualbudget/actual/pull/129) Add action to mark new issues for triage -- thanks [TomAFrench] +- [#130](https://github.com/actualbudget/actual/pull/130) Enforce prettier rules -- thanks [TomAFrench] +- [#131](https://github.com/actualbudget/actual/pull/131) Silence warning for missing moment.js install -- thanks [TomAFrench] +- [#132](https://github.com/actualbudget/actual/pull/132) Replace jwl-dev-utils with react-dev-utils -- thanks [TomAFrench] +- [#135](https://github.com/actualbudget/actual/pull/135) Remove unused dependencies -- thanks [TomAFrench] +- [#137](https://github.com/actualbudget/actual/pull/137) Skip failing test suites -- thanks [TomAFrench] +- [#139](https://github.com/actualbudget/actual/pull/139) Remove unused rollup config and dependencies -- thanks [TomAFrench] +- [#163](https://github.com/actualbudget/actual/pull/163) Force react-error-overlay to 6.0.9 to fix error -- thanks [jlongster] +- [#164](https://github.com/actualbudget/actual/pull/164) build on windows -- thanks [bdoherty] +- [#202](https://github.com/actualbudget/actual/pull/202) Run tests on github actions -- thanks [TomAFrench] +- [#219](https://github.com/actualbudget/actual/pull/219) 199 Adding translation to schedules list -- thanks [manuelcanepa] +- [#203](https://github.com/actualbudget/actual/pull/203) Replace babel-jest with ts-jest -- thanks [TomAFrench] +- [#204](https://github.com/actualbudget/actual/pull/204) Use workspace ranges for monorepo dependencies -- thanks [TomAFrench] +- [#208](https://github.com/actualbudget/actual/pull/208) Bug Report Template & Issues Configuration -- thanks [rich-howell] +- [#213](https://github.com/actualbudget/actual/pull/213) Enforce linting in desktop-client -- thanks [TomAFrench] +- [#214](https://github.com/actualbudget/actual/pull/214) Fix adm-zip install failure -- thanks [trevdor] +- [#217](https://github.com/actualbudget/actual/pull/217) Remove unused imports and sort imports in desktop-client -- thanks [TomAFrench] +- [#222](https://github.com/actualbudget/actual/pull/222) Remove patch-package dependency from loot-design -- thanks [TomAFrench] +- [#224](https://github.com/actualbudget/actual/pull/224) Adding translation to rule editor and transaction table -- thanks [manuelcanepa] +- [#225](https://github.com/actualbudget/actual/pull/225) Implement localization for schedule descriptions -- thanks [j-f1] +- [#228](https://github.com/actualbudget/actual/pull/228) Add macOS to list of operating systems in the issue template -- thanks [rich-howell] +- [#229](https://github.com/actualbudget/actual/pull/229) Fix handling of -0 in budget summary -- thanks [j-f1] +- [#230](https://github.com/actualbudget/actual/pull/230) Revert change to make importers use the api bundle from inside the monorepo -- thanks [TomAFrench] +- [#234](https://github.com/actualbudget/actual/pull/234) Allow enter to create new transaction when focused on cleared column -- thanks [ezfe] +- [#232](https://github.com/actualbudget/actual/pull/232) Fix linter issues -- thanks [TomAFrench] +- [#233](https://github.com/actualbudget/actual/pull/233) Enforce linting in loot-design -- thanks [TomAFrench] +- [#237](https://github.com/actualbudget/actual/pull/237) Separate external, monorepo and internal imports -- thanks [TomAFrench] +- [#238](https://github.com/actualbudget/actual/pull/238) Sort import in alphabetical order -- thanks [TomAFrench] +- [#240](https://github.com/actualbudget/actual/pull/240) Fix CI to an exact node version -- thanks [TomAFrench] +- [#244](https://github.com/actualbudget/actual/pull/244) Remove dollar sign from close account modal -- thanks [TomAFrench] +- [#262](https://github.com/actualbudget/actual/pull/262) Render a schedule rule with the mapped payee id; fixes crash -- thanks [jlongster] ### Actual Server + Version: 22.10.25 -* [#1](https://github.com/actualbudget/actual-server/pull/1) - Adjust Dockerfile to build successfully -- thanks [Kovah] -* [#2](https://github.com/actualbudget/actual-server/pull/2) - Instructions for running via Docker -- thanks [ajtrichards] -* [#6](https://github.com/actualbudget/actual-server/pull/6) - Add hostname binding -- thanks [UnexomWid] -* [#7](https://github.com/actualbudget/actual-server/pull/7) - added a basic docker-compose file -- thanks [Kk-ships] -* [#11](https://github.com/actualbudget/actual-server/pull/11) - Add Github Actions workflow to automatically build a Docker image -- thanks [Kovah] -* [#12](https://github.com/actualbudget/actual-server/pull/12) - Adjust Dockerfile to use multi-stage builds -- thanks [Kovah] -* [#13](https://github.com/actualbudget/actual-server/pull/13) - add: tsconfig.json -- thanks [wmertens] -* [#14](https://github.com/actualbudget/actual-server/pull/14) - Use Alpine Linux as base image for docker container -- thanks [ldotlopez] -* [#19](https://github.com/actualbudget/actual-server/pull/19) - Add GH Action workflow to publish Docker image -- thanks [m3nu] -* [#20](https://github.com/actualbudget/actual-server/pull/20) - Add one-click hosting option -- thanks [m3nu] -* [#21](https://github.com/actualbudget/actual-server/pull/21) - Health Check Endpoint -- thanks [Silvenga] -* [#22](https://github.com/actualbudget/actual-server/pull/22) - Add Dockerfile.alpine for alpine build add tini to debian image -- thanks [brtwrst] -* [#28](https://github.com/actualbudget/actual-server/pull/28) Transition to typescript -- thanks [PartyLich] -* [#31](https://github.com/actualbudget/actual-server/pull/31) Correct fly template port -- thanks [ciwchris] -* [#33](https://github.com/actualbudget/actual-server/pull/33) Add more appropriate linting setup -- thanks [TomAFrench] -* [#37](https://github.com/actualbudget/actual-server/pull/37) Add linter checks to CI -- thanks [TomAFrench] -* [#41](https://github.com/actualbudget/actual-server/pull/41) Check builds are successful on PRs/master -- thanks [TomAFrench] -* [#43](https://github.com/actualbudget/actual-server/pull/43) Enforce prettier rules -- thanks [TomAFrench] -* [#46](https://github.com/actualbudget/actual-server/pull/46) fix: error handling middleware signature -- thanks [JazzaG] -* [#50](https://github.com/actualbudget/actual-server/pull/50) Fix Cross-Origin issues to enable SharedArrayBuffer -- thanks [jlongster] -* [#51](https://github.com/actualbudget/actual-server/pull/51) Bump Actual to 4.1.0 -- thanks [jlongster] -* [#52](https://github.com/actualbudget/actual-server/pull/52) Fix 'Out of sync' error -- thanks [7brend7] -* [#64](https://github.com/actualbudget/actual-server/pull/64) build: add node GC argument to fly template -- thanks [PartyLich] -* [#65](https://github.com/actualbudget/actual-server/pull/65) build: add tini subreaper arg to fly template -- thanks [PartyLich] -* [#70](https://github.com/actualbudget/actual-server/pull/70) Update Express to version 4.17 -- thanks [rich-howell] -* [#72](https://github.com/actualbudget/actual-server/pull/72) Fix/download only necessary files -- thanks [PartyLich] -* [#75](https://github.com/actualbudget/actual-server/pull/75) Switch syncing to simple sync method -- thanks [jlongster] -* [#78](https://github.com/actualbudget/actual-server/pull/78) Respect configuration for user-files and don't init the app -- thanks [jlongster] -* [#81](https://github.com/actualbudget/actual-server/pull/81) Store user files as blobs instead of unzipping them -- thanks [jlongster] -* [#82](https://github.com/actualbudget/actual-server/pull/82) Build docker image on push to master or tag -- thanks [trevdor] +- [#1](https://github.com/actualbudget/actual-server/pull/1) - Adjust Dockerfile to build successfully -- thanks [Kovah] +- [#2](https://github.com/actualbudget/actual-server/pull/2) - Instructions for running via Docker -- thanks [ajtrichards] +- [#6](https://github.com/actualbudget/actual-server/pull/6) - Add hostname binding -- thanks [UnexomWid] +- [#7](https://github.com/actualbudget/actual-server/pull/7) - added a basic docker-compose file -- thanks [Kk-ships] +- [#11](https://github.com/actualbudget/actual-server/pull/11) - Add Github Actions workflow to automatically build a Docker image -- thanks [Kovah] +- [#12](https://github.com/actualbudget/actual-server/pull/12) - Adjust Dockerfile to use multi-stage builds -- thanks [Kovah] +- [#13](https://github.com/actualbudget/actual-server/pull/13) - add: tsconfig.json -- thanks [wmertens] +- [#14](https://github.com/actualbudget/actual-server/pull/14) - Use Alpine Linux as base image for docker container -- thanks [ldotlopez] +- [#19](https://github.com/actualbudget/actual-server/pull/19) - Add GH Action workflow to publish Docker image -- thanks [m3nu] +- [#20](https://github.com/actualbudget/actual-server/pull/20) - Add one-click hosting option -- thanks [m3nu] +- [#21](https://github.com/actualbudget/actual-server/pull/21) - Health Check Endpoint -- thanks [Silvenga] +- [#22](https://github.com/actualbudget/actual-server/pull/22) - Add Dockerfile.alpine for alpine build add tini to debian image -- thanks [brtwrst] +- [#28](https://github.com/actualbudget/actual-server/pull/28) Transition to typescript -- thanks [PartyLich] +- [#31](https://github.com/actualbudget/actual-server/pull/31) Correct fly template port -- thanks [ciwchris] +- [#33](https://github.com/actualbudget/actual-server/pull/33) Add more appropriate linting setup -- thanks [TomAFrench] +- [#37](https://github.com/actualbudget/actual-server/pull/37) Add linter checks to CI -- thanks [TomAFrench] +- [#41](https://github.com/actualbudget/actual-server/pull/41) Check builds are successful on PRs/master -- thanks [TomAFrench] +- [#43](https://github.com/actualbudget/actual-server/pull/43) Enforce prettier rules -- thanks [TomAFrench] +- [#46](https://github.com/actualbudget/actual-server/pull/46) fix: error handling middleware signature -- thanks [JazzaG] +- [#50](https://github.com/actualbudget/actual-server/pull/50) Fix Cross-Origin issues to enable SharedArrayBuffer -- thanks [jlongster] +- [#51](https://github.com/actualbudget/actual-server/pull/51) Bump Actual to 4.1.0 -- thanks [jlongster] +- [#52](https://github.com/actualbudget/actual-server/pull/52) Fix 'Out of sync' error -- thanks [7brend7] +- [#64](https://github.com/actualbudget/actual-server/pull/64) build: add node GC argument to fly template -- thanks [PartyLich] +- [#65](https://github.com/actualbudget/actual-server/pull/65) build: add tini subreaper arg to fly template -- thanks [PartyLich] +- [#70](https://github.com/actualbudget/actual-server/pull/70) Update Express to version 4.17 -- thanks [rich-howell] +- [#72](https://github.com/actualbudget/actual-server/pull/72) Fix/download only necessary files -- thanks [PartyLich] +- [#75](https://github.com/actualbudget/actual-server/pull/75) Switch syncing to simple sync method -- thanks [jlongster] +- [#78](https://github.com/actualbudget/actual-server/pull/78) Respect configuration for user-files and don't init the app -- thanks [jlongster] +- [#81](https://github.com/actualbudget/actual-server/pull/81) Store user files as blobs instead of unzipping them -- thanks [jlongster] +- [#82](https://github.com/actualbudget/actual-server/pull/82) Build docker image on push to master or tag -- thanks [trevdor] [7brend7]: https://github.com/7brend7 [ajtrichards]: https://github.com/ajtrichards @@ -369,4 +385,4 @@ Version: 22.10.25 [trevdor]: https://github.com/trevdor [UnexomWid]: https://github.com/UnexomWid [winklevos]: https://github.com/winklevos -[wmertens]: https://github.com/wmertens \ No newline at end of file +[wmertens]: https://github.com/wmertens diff --git a/docs/Troubleshooting/Troubleshooting-Edge.md b/docs/Troubleshooting/Troubleshooting-Edge.md index 6bd3224ce..3809ebb4d 100644 --- a/docs/Troubleshooting/Troubleshooting-Edge.md +++ b/docs/Troubleshooting/Troubleshooting-Edge.md @@ -11,11 +11,12 @@ Check the browser console. If it has an error reading ```bash Error: no native wasm support detected ``` + Edge (assuming you have a recent version) may be disabling WASM for your Actual domain. This seems to be standard behavior for their security features. To mitigate this, we will add an exception. + 1. Open Edge's settings and navigate to the section labeled "Enhance your security on the web". 2. Select the arrow adjacent to "Exceptions": 3. Click the "Add a site" button and enter the domain where your Actual instance is hosted: - diff --git a/docs/components/Key.js b/docs/components/Key.js index af76453fc..1c6d10f6d 100644 --- a/docs/components/Key.js +++ b/docs/components/Key.js @@ -46,7 +46,7 @@ export default function Key({ mod, mods = [], k }) { acc.push(<span className="ml-1"></span>); } acc.push( - <div className="bg-gray-300 inline-block rounded px-1">{key}</div> + <div className="bg-gray-300 inline-block rounded px-1">{key}</div>, ); return acc; }, [])} diff --git a/docs/components/NextLink.js b/docs/components/NextLink.js index bedfd4f68..69a33bc5e 100644 --- a/docs/components/NextLink.js +++ b/docs/components/NextLink.js @@ -4,7 +4,10 @@ export default function NextLink({ href, children }) { return ( <div className="flex flex-col items-center mt-16"> <div className="link-color-inherit text-white"> - <a className="no-underline bg-blue-500 px-6 py-4 rounded-full shadow-lg" href={href}> + <a + className="no-underline bg-blue-500 px-6 py-4 rounded-full shadow-lg" + href={href} + > {children} </a> </div> diff --git a/docs/components/Step.js b/docs/components/Step.js index 4c9794241..c6f875ed9 100644 --- a/docs/components/Step.js +++ b/docs/components/Step.js @@ -2,7 +2,7 @@ import React from 'react'; export default function Step({ n, text }) { return ( - <div className="flex items-center flex-row mb-6 mt-12"> + <div className="flex items-center flex-row mb-6 mt-12"> <div className="w-10 h-10 text-teal-100 relative flex items-center justify-center"> <div className="w-10 h-10 rounded-full bg-teal-500 absolute top-0 left-0" /> <div className="z-10" style={{ lineHeight: '1em' }}> diff --git a/docusaurus.config.js b/docusaurus.config.js index 6f9cbe5fa..dd79a31c1 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -6,7 +6,6 @@ const darkCodeTheme = require('prism-react-renderer/themes/dracula'); /** @type {import('@docusaurus/types').Config} */ module.exports = { - title: 'Actual Budget Documentation', tagline: 'Dinosaurs are cool', url: 'https://actualbudget.github.io', @@ -38,11 +37,8 @@ module.exports = { sidebarPath: require.resolve('./sidebars.js'), // Please change this to your repo. // Remove this to remove the "edit this page" links. - editUrl: - 'https://github.com/actualbudget/docs/tree/master/', - beforeDefaultRemarkPlugins: [ - require('./src/remark/rewrite-images') - ], + editUrl: 'https://github.com/actualbudget/docs/tree/master/', + beforeDefaultRemarkPlugins: [require('./src/remark/rewrite-images')], }, theme: { customCss: require.resolve('./src/css/custom.css'), @@ -91,9 +87,9 @@ module.exports = { { label: 'Discord', href: 'https://discord.gg/8JfAXSgfRf', - } + }, ], - } + }, ], copyright: `Copyright © ${new Date().getFullYear()} Actual Budget. Built with Docusaurus.`, }, @@ -101,20 +97,18 @@ module.exports = { theme: lightCodeTheme, darkTheme: darkCodeTheme, }, - } - ), - plugins: [ - [ - require.resolve("@cmfcmf/docusaurus-search-local"), - { - indexDocs: true, - indexDocSidebarParentCategories: 0, - indexPages: false, - language: "en", - style: undefined, - maxSearchResults: 8, - lunr: { - + }), + plugins: [ + [ + require.resolve('@cmfcmf/docusaurus-search-local'), + { + indexDocs: true, + indexDocSidebarParentCategories: 0, + indexPages: false, + language: 'en', + style: undefined, + maxSearchResults: 8, + lunr: { tokenizerSeparator: /[\s\-]+/, b: 0.75, @@ -126,8 +120,8 @@ module.exports = { tagsBoost: 3, parentCategoriesBoost: 2, // Only used when indexDocSidebarParentCategories > 0 }, - }, - ], - ['@docusaurus/plugin-ideal-image', { disableInDev: false }], + }, ], + ['@docusaurus/plugin-ideal-image', { disableInDev: false }], + ], }; diff --git a/package-lock.json b/package-lock.json index 1c75b4628..2db90c7a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,7 +21,8 @@ "react-dom": "^17.0.2" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^2.3.1" + "@docusaurus/module-type-aliases": "^2.3.1", + "prettier": "^2.8.4" }, "engines": { "node": ">=16.14" @@ -9721,6 +9722,21 @@ "node": ">=4" } }, + "node_modules/prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, "node_modules/pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", @@ -20140,6 +20156,12 @@ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==" }, + "prettier": { + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.4.tgz", + "integrity": "sha512-vIS4Rlc2FNh0BySk3Wkd6xmwxB0FpOndW5fisM5H8hsZSxU2VWVB5CWIkIjWvrHjIhxk2g3bfMKM87zNTrZddw==", + "dev": true + }, "pretty-error": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", diff --git a/package.json b/package.json index 3b831d115..60b655a37 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,9 @@ "clear": "docusaurus clear", "serve": "docusaurus serve", "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids" + "write-heading-ids": "docusaurus write-heading-ids", + "format": "prettier --write .", + "lint": "prettier --check ." }, "dependencies": { "@cmfcmf/docusaurus-search-local": "^0.11.0", @@ -27,7 +29,8 @@ "react-dom": "^17.0.2" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^2.3.1" + "@docusaurus/module-type-aliases": "^2.3.1", + "prettier": "^2.8.4" }, "browserslist": { "production": [ diff --git a/sidebars.js b/sidebars.js index 694ae97d3..8ec270fb6 100644 --- a/sidebars.js +++ b/sidebars.js @@ -12,7 +12,7 @@ // @ts-check /** @type {(title: string) => unknown} */ -const unavailable = (title) => ({ +const unavailable = title => ({ type: 'html', value: title, className: 'menu__link menu__link--unavailable', @@ -80,7 +80,7 @@ const sidebars = { items: [ 'Installing/fly/Fly-prerequisites', 'Installing/fly/Fly-git', - 'Installing/fly/Fly-image', + 'Installing/fly/Fly-image', 'Installing/fly/Fly-updating', 'Installing/fly/Fly-persisting', ], diff --git a/src/components/HomepageFeatures/index.js b/src/components/HomepageFeatures/index.js index 78f410ba6..c1c1b45f8 100644 --- a/src/components/HomepageFeatures/index.js +++ b/src/components/HomepageFeatures/index.js @@ -35,7 +35,7 @@ const FeatureList = [ }, ]; -function Feature({Svg, title, description}) { +function Feature({ Svg, title, description }) { return ( <div className={clsx('col col--4')}> <div className="text--center"> diff --git a/src/components/Image.jsx b/src/components/Image.jsx index 1801013a2..12be30d4e 100644 --- a/src/components/Image.jsx +++ b/src/components/Image.jsx @@ -26,29 +26,31 @@ const theme = { top: 0, left: 0, }, -} +}; export default function Image({ img, ...props }) { if (img) { - const { src, ...rest } = img - const match = src.src.match(/@(\d+)x/) + const { src, ...rest } = img; + const match = src.src.match(/@(\d+)x/); if (match) { - const scale = parseInt(match[1]) - return <IdealImage - img={{ - src: { - ...src, - width: src.width / scale, - height: src.height / scale - }, - ...rest - }} - theme={theme} - {...props} - /> + const scale = parseInt(match[1]); + return ( + <IdealImage + img={{ + src: { + ...src, + width: src.width / scale, + height: src.height / scale, + }, + ...rest, + }} + theme={theme} + {...props} + /> + ); } - return <IdealImage img={img} theme={theme} {...props} /> + return <IdealImage img={img} theme={theme} {...props} />; } else { - return <img {...props} /> + return <img {...props} />; } } diff --git a/src/remark/rewrite-images.js b/src/remark/rewrite-images.js index b16aa3985..5f3b4f08f 100644 --- a/src/remark/rewrite-images.js +++ b/src/remark/rewrite-images.js @@ -1,5 +1,5 @@ const visit = require('unist-util-visit-parents'); -const path = require('node:path') +const path = require('node:path'); const plugin = () => { const transformer = async (ast, file) => { @@ -12,19 +12,41 @@ const plugin = () => { node.value = `<img img={require(${JSON.stringify(node.url)})} />`; const parent = ancestors[ancestors.length - 1]; if (parent.type === 'paragraph') { - if (parent.children.length === 1 || parent.children.every(c => c == node || (c.type === 'text' && c.value.trim() === ''))) { + if ( + parent.children.length === 1 || + parent.children.every( + c => c == node || (c.type === 'text' && c.value.trim() === ''), + ) + ) { parent.type = 'jsx'; parent.value = node.value; parent.children = []; } else { const fileName = path.relative(file.cwd, file.path); - const pos = node.position.start.line + ':' + node.position.start.column; - console.error(JSON.stringify(parent, (key, value) => key === 'position' ? undefined : value, 2)); - file.fail(`rewrite-images: ${fileName}:${pos} Cannot convert image to JSX: images must be in their own paragraph`); + const pos = + node.position.start.line + ':' + node.position.start.column; + console.error( + JSON.stringify( + parent, + (key, value) => (key === 'position' ? undefined : value), + 2, + ), + ); + file.fail( + `rewrite-images: ${fileName}:${pos} Cannot convert image to JSX: images must be in their own paragraph`, + ); } } else { - console.error(JSON.stringify(parent, (key, value) => key === 'position' ? undefined : value, 2)); - file.fail(`rewrite-images: Cannot convert image to JSX: Expected parent to be a paragraph, got ${parent.type}`); + console.error( + JSON.stringify( + parent, + (key, value) => (key === 'position' ? undefined : value), + 2, + ), + ); + file.fail( + `rewrite-images: Cannot convert image to JSX: Expected parent to be a paragraph, got ${parent.type}`, + ); } }); }; diff --git a/src/theme/MDXComponents.js b/src/theme/MDXComponents.js index 193f46177..d2efc9903 100644 --- a/src/theme/MDXComponents.js +++ b/src/theme/MDXComponents.js @@ -5,4 +5,3 @@ export default { ...MDXComponents, img: Image, }; -