---
title: Charmhub | Deploy Synapse using Charmhub - The Open Operator Collection
description: Deploy the latest version of Synapse as a Kubernetes Operator on any
  cloud.
url: https://charmhub.io/synapse/docs/how-to-contribute
---

# Synapse

[Canonical IS DevOps](https://charmhub.io/publisher/canonical-is-devops "View all packages from Canonical IS DevOps")

* [Canonical IS DevOps](https://charmhub.io/publisher/canonical-is-devops "View all packages from Canonical IS DevOps")

Platform:

stable 426

```
juju deploy synapse
```

[Learn to deploy on juju >](https://juju.is/docs/juju/manage-applications)

---

#### Relevant links

* [Homepage](https://github.com/canonical/synapse-operator)

---

#### Contacts

##### Maintainers

+ [Launchpad Team](https://launchpad.net/~canonical-is-devops)

* [Submit a bug](https://github.com/canonical/synapse-operator/issues)

---

Share your thoughts on this charm with the community on discourse.

[Join the discussion](https://discourse.charmhub.io/)

# How to contribute

## [Overview](https://charmhub.io/synapse/docs/how-to-contribute#p-29230-overview)

This document explains the processes and practices recommended for contributing
enhancements to the Synapse operator.

* Generally, before developing enhancements to this charm, you should consider
  [opening an issue](https://github.com/canonical/synapse-operator/issues)
  explaining your use case.
* If you would like to chat with us about your use-cases or proposed
  implementation, you can reach us at [Canonical Matrix public channel](https://matrix.to/#/#charmhub-charmdev:ubuntu.com)
  or [Discourse](https://discourse.charmhub.io/).
* Familiarising yourself with the [Charmed Operator Framework](https://juju.is/docs/sdk)
  library will help you a lot when working on new features or bug fixes.
* All enhancements require review before being merged. Code review typically
  examines
  + code quality
  + test coverage
  + user experience for Juju operators of this charm.
* Please help us out in ensuring easy to review branches by rebasing your pull
  request branch onto the `main` branch. This also avoids merge commits and
  creates a linear Git commit history.
* Please generate src documentation for every commit. See the section below for
  more details.

## [Developing](https://charmhub.io/synapse/docs/how-to-contribute#p-29230-developing)

The code for this charm can be downloaded as follows:

```
git clone https://github.com/canonical/synapse-operator
```

You can use the environments created by `tox` for development:

```
tox --notest -e unit
source .tox/unit/bin/activate
```

### [Testing](https://charmhub.io/synapse/docs/how-to-contribute#p-29230-testing)

Note that the Synapse image need to be built and
pushed to microk8s for the tests to run. It should be tagged as
`localhost:32000/synapse:latest`so that Kubernetes knows how to pull them
from the MicroK8s repository. Note that the MicroK8s registry needs to be
enabled using `microk8s enable registry`. More details regarding the OCI image
below. The following commands can then be used to run the tests:

* `tox`: Runs all of the basic checks (`lint`, `unit`, `static`, and `coverage-report`).
* `tox -e fmt`: Runs formatting using `black` and `isort`.
* `tox -e lint`: Runs a range of static code analysis to check the code.
* `tox -e static`: Runs other checks such as `bandit` for security issues.
* `tox -e unit`: Runs the unit tests.
* `tox -e integration`: Runs the integration tests.

### [Generating src docs for every commit](https://charmhub.io/synapse/docs/how-to-contribute#p-29230-generating-src-docs-for-every-commit)

Run the following command:

```
echo -e "tox -e src-docs\ngit add src-docs\n" >> .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit
```

## [Build charm](https://charmhub.io/synapse/docs/how-to-contribute#p-29230-build-charm)

Build the charm in this git repository using:

```
charmcraft pack
```

For the integration tests (and also to deploy the charm locally), the synapse
image is required in the microk8s registry. To enable it:

```
microk8s enable registry
```

The following commands import the images in the Docker daemon and push them into
the registry:

```
cd [project_dir]/synapse_rock && rockcraft pack
skopeo --insecure-policy copy --dest-tls-verify=false oci-archive:synapse_1.0_amd64.rock docker://localhost:32000/synapse:latest
```

### [Deploy](https://charmhub.io/synapse/docs/how-to-contribute#p-29230-deploy)

```
# Create a model
juju add-model synapse-dev
# Enable DEBUG logging
juju model-config logging-config="<root>=INFO;unit=DEBUG"
# Deploy the charm (assuming you're on amd64)
juju deploy ./synapse_ubuntu-22.04-amd64.charm \
  --resource synapse-image=localhost:32000/synapse:latest
```

### [Configure `server_name`](https://charmhub.io/synapse/docs/how-to-contribute#p-29230-configure-server_name)

Synapse requires a `server_name` to be set before starting. Note that this cannot
be changed later.

The following command will configure the `server_name` [mychat.test.com](http://mychat.test.com):

```
juju configure synapse server_name=mychat.test.com
```

Read more about `server_name` in [Configuring Synapse](https://matrix-org.github.io/synapse/latest/usage/configuration/config_documentation.html#server_name).

## [Canonical Contributor Agreement](https://charmhub.io/synapse/docs/how-to-contribute#p-29230-canonical-contributor-agreement)

Canonical welcomes contributions to the Synapse Operator. Please check out our [contributor agreement](https://ubuntu.com/legal/contributors) if you’re interested in contributing to the solution.

---
