This repository uses PNPM. Install packages
pnpm installThe project uses TypeScript. Build packages with
pnpm buildThe PowerSync Service requires Postgres and MongoDB server connections. These configuration details can be specified in a powersync.yaml (or JSON) configuration file.
See the self-hosting demo for demos of starting these services.
A quick method for running all required services with a handy backend and frontend is to run the following in a checked-out self-host-demo folder.
docker compose -f demos/nodejs/docker-compose.yaml up --scale powersync=0Note: The mongo hostname specified in the MongoDB replica set needs to be accessible by your host machine if using the Mongo service above.
One method to obtain access is to add the following to /etc/hosts (on Unix-like operating systems)
127.0.0.1 mongo
This will start all the services defined in the self-hosting demo except for the PowerSync Service - which will be started from this repository.
The ./service folder contains a NodeJS project which starts all PowerSync service operations.
Copy the template configuration files and configure any changes to your local needs.
cd ./service
cp local-dev/powersync-template.yaml powersync.yaml
cp local-dev/sync-rules-template.yaml sync-rules.yamlThe service can be started with watching changes to any consumed source files by running the pnpm watch:service command in the repository root.
Most packages should contain a test script which can be executed with pnpm test. Some packages may require additional setup to run tests.
Some tests for these packages require a connection to MongoDB and Postgres. Connection strings for these services should be available as environment variables. See Running Tests for details on configuring those services.
These can be set in a terminal/shell
export MONGO_TEST_URL="mongodb://localhost:27017/powersync_test"
export PG_TEST_URL="postgres://postgres:postgres@localhost:5432/powersync_test"or by copying the .env.template file and using a loader such as Direnv
cp .env.template .envThe default PG_TEST_URL points to a powersync_test database. Ensure this is created by executing the following SQL on your connection.
CREATE DATABASE powersync_test;prettier is used to automatically format most source files. To ensure all contributions have consistent formatting, use one or more of these options:
- Configure your editor to use prettier on save.
- Use
pnpm format:dirtyto format changes before committing. - Use
pnpm configure-hooksto install pre-commit hooks, that validate the formatting when committing.
This repository uses Changesets. Add changesets to changed packages before merging PRs.
changeset addMerging a PR with changeset files will automatically create a release PR. Merging the release PR will bump versions, tag and publish packages.
The Docker image is published by manually triggering the Docker Image Release Github Action. The Docker image version is extracted from the ./service/package.json version field.