Updates to the latest version of electron and moves the backend-frontend communication from node-ipc to websockets. This resolves the previous roadblock regarding `nodeIntegration` . Done - Remove node-ipc in favour of websockets. - Move file copying out of `preload.js` to avoid importing module `fs` there - Bump all electron pacakge versions to the latest - Added new package for finding open ports as node-ipc is gone - Tweaked webpack config for above changes Partially fixes #468 Questions/ Pending: - Literally every single test fails for me, presumably some issue with my setup/environment. - The websocket communication is not using TLS. I'm not sure how to enable this, or if we even need to as its all local. - Still need to create the CI for building/deploying but I'm not sure where start in this regard as i have no exp with it. Presumably we will need to point the electron auto-updater to the github releases url's. If people are happy with this PR I will look at adding the CI before its merged. - In dev mode only, I have disabled TLS security becuase my docker container's cert is not signed. I _assume_ this will be true for other people who spin up the server on thier own hardware. Perhaps I just need to change my cert to one from letsencrypt or something... Notes. I have not touched javascript in eons so my apologies if the commit trail is a bit fragmented. I tried to keep them fairly contained and then there is a slightly gnarly final commit fixing all the linter issues... Please let me know if you want me to squash some commits etc. I initially tried to move this to web workers the same way the web app does it but this was unsuccessful. I have found no way to spin up a worker in one place (frontend/backend) and then pass this worker to the other. The electron ipc channels don't allow you to directly pass objects such as workers, everything is cloned/serialised. Passing a port number so the other end can spin up its own socket works fine. --------- Co-authored-by: Shazib Hussain <contact@shazib.com> Co-authored-by: Jed Fox <git@jedfox.com>
Getting Started
Actual is a local-first personal finance tool. It is 100% free and open-source, written in NodeJS, it has a synchronization element so that all your changes can move between devices without any heavy lifting.
If you are interested in contributing, or want to know how development works, see CONTRIBUTING.md we would love to have you.
Want to say thanks? Click the ⭐ at the top of the page.
Key Links
- Actual discord community.
- Actual Community Documentation
Installation
If you are only interested in running the latest version and not contributing to the source code, you don't need to clone this repo. You can get the latest version through npm.
The easy way: using a server (recommended)
The easiest way to get Actual running is to use the actual-server project. That is the server for syncing changes across devices, and it comes with the latest version of Actual. The server will provide both the web project and a server for syncing.
You can get up and running quickly and easily by following our Running Actual Locally Guide
Documentation
We have a wide range of documentation on how to use Actual, this is all available in our Community Documentation, this includes topics on Budgeting, Account Management, Tips & Tricks and some documentation for developers.
Code structure
The Actual app is split up into a few packages:
- loot-core - The core application that runs on any platform
- loot-design - The generic design components that make up the UI
- desktop-client - The desktop UI
- desktop-electron - The desktop app
More information on the project structure is available in our community documentation.
Feature Requests
Current feature requests can be seen here. Vote for your favorite requests by reacting 👍 to the top comment of the request.
To add new feature requests, open a new Issue of the "Feature Request" type.
Sponsors
Thanks to our wonderful sponsors who make Actual budget possible!
