Files
actual/packages/docs
a862d463d7 [AI] api: attach stable error codes that survive the worker boundary (#8437)
* [AI] Attach stable error codes that survive the worker boundary

Rejections from the backend worker reached consumers as an English
message only: the machine-readable reason was stripped when the error
was serialized for postMessage, so API consumers had to regex the prose
to categorize failures.

- Serialize rejected handler errors through a shared helper that lifts
  the reason slug onto a `code` field (plus `name`) on the envelope, so
  it survives the worker/utility-process boundary. `message` is
  unchanged, so the change is purely additive.
- Tag the common connect failures with codes at their throw sites:
  init auth failures (network-failure, invalid-password, token-expired)
  and api/download-budget, api/load-budget, api/sync, api/bank-sync
  (budget-not-found, missing-key, decrypt-failure, ...).
- Harden the error post: if the original error holds a non-cloneable
  value (e.g. an Emscripten ErrnoError carrying methods), postMessage
  used to throw a DataCloneError in the worker and that clone failure
  replaced the real error. Retry with a plain cloneable shape instead.
- Add an integration test driving the real web client/server connection
  pair across a structured-clone channel, document the codes in the API
  reference, and add a release note.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AG6f77cRxhwPFjsNpQRmYo

* [AI] Remove worker-boundary connection integration test

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AG6f77cRxhwPFjsNpQRmYo

* [AI] Remove prose comment from connection error helpers

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AG6f77cRxhwPFjsNpQRmYo

* [AI] Simplify worker-boundary error posting

- Hoist the three-way reply-envelope dispatch out of the two platform
  connection files into a single postErrorReply helper, so the envelope
  rules and the DataCloneError fallback live in one place.
- Return APIError envelopes from coerceError unchanged, and drop the
  unreachable fallbacks and unused meta field from the cloneable shape.
- Let withErrorCode accept an undefined code, removing the one-off
  ternary at the bank-sync throw site.
- Declare the client-side connection error shape once as
  ConnectionError instead of twice inline.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AG6f77cRxhwPFjsNpQRmYo

* [AI] Address review feedback on error-code contract wording and types

- Docs and release note: scope the stable-code promise to the common
  documented failures, and say errors "usually" carry a message.
- ConnectionError: model APIError (message required) and ServerError
  (message may be absent) as separate variants to match the wire shape,
  and adapt the sendCatch consumers in SavedFilterMenuButton.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01AG6f77cRxhwPFjsNpQRmYo

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-07-16 06:08:18 +00:00
..
2026-07-02 16:10:16 +00:00
2026-06-26 14:59:00 +00:00

Actual Budget Community Documentation

This repo is the Actual Budget community documentation website, built using Docusaurus 3, a modern static website generator.

Docusaurus 3 uses Node.js, so if you are running Actual on your local machine, you should be able to easily run Docusaurus 3.

Welcome

Firstly, thank you for stopping by and giving up some of your time to either check out the documentation we have already produced or pick off some of the issues and help create some new documentation for our future users. Check out the guidelines for more information on how the documentation is structured and tips for consistent formatting.

Installation Methods

Actual Budget can be installed on many different platforms. However, at this time, the official Actual Budget documentation only supports the following methods:

  • Local Installation (on your own machine)
    • Actual-server
    • Desktop apps
  • Fly.io
  • PikaPods
  • Docker

If you would like to write documentation for another installation variant, please feel free to continue to do this and host it on your own personal blog, Medium, Tumblr, or any other short-form publication service. We will be more than happy to add a link to that from our documentation. Open a PR and add it to the list in the installation overview.

However, in doing so, you would become responsible for these instructions. If they become out of date or people want in-depth help with them, we will point them to you for assistance if the community is unable to help. If lots of people report issues with them, we may have to remove the link altogether.

Contributing 

Please review the contributing documentation on our website: https://actualbudget.org/docs/contributing/

Issues

If you know of a part of Actual that isn't documented and you would like to know more about that part of the software, open an Issue and one of the documentation team will get to it. Or have a go at writing it yourself; we could really use all the help we can get.

Pull Requests

When submitting a pull request, please make sure that your contributions are complete. I am checking this repo regularly, so if I see an open PR, the likelihood of me pulling it and merging it is high.

Documentation submitted will be proofread and amended before merging. Please don't take this personally if any of your documentation gets amended; we just want to make sure all documents are ready to go before merging them into master.

Installing the Docs

Firstly, pull this repo into a local area on your machine, navigate to that directory, and run the following command:

$ yarn

Local Development

To start Docusaurus 3 navigate to the folder where the repo resides from a command prompt and issue the following command.

$ yarn start

This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server.

Build

$ yarn build

This command generates static content into the build directory and can be served using any static contents hosting service.

Deployment

Using SSH:

$ USE_SSH=true yarn deploy

Not using SSH:

$ GIT_USER=<Your GitHub username> yarn deploy

If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the gh-pages branch.

Writing Good Release Notes

For general guidelines, see Contributing section of the documentation. The Documentation site is not versioned in the same manner as the rest of the project. The Documentation website is more of a living document. Merges into master will have the title and PR# as commit message, with the PR description as extended git commit description.