{"id":44498335,"url":"https://github.com/canonical/penpot-operator","last_synced_at":"2026-05-07T05:05:16.393Z","repository":{"id":243199579,"uuid":"811750297","full_name":"canonical/penpot-operator","owner":"canonical","description":"penpot-operator - charm repository.","archived":false,"fork":false,"pushed_at":"2026-04-18T21:19:18.000Z","size":3393,"stargazers_count":0,"open_issues_count":8,"forks_count":2,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-04-18T23:28:24.085Z","etag":null,"topics":["charm","platform-engineering","product-penpot","squad-apac"],"latest_commit_sha":null,"homepage":"https://charmhub.io/penpot","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/canonical.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-06-07T08:18:46.000Z","updated_at":"2026-04-03T09:34:11.000Z","dependencies_parsed_at":"2024-06-26T09:03:59.907Z","dependency_job_id":"ea88787d-64f0-4832-abf5-997ba1077b4a","html_url":"https://github.com/canonical/penpot-operator","commit_stats":null,"previous_names":["canonical/penpot-operator"],"tags_count":60,"template":false,"template_full_name":"canonical/platform-engineering-charm-template","purl":"pkg:github/canonical/penpot-operator","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fpenpot-operator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fpenpot-operator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fpenpot-operator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fpenpot-operator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/canonical","download_url":"https://codeload.github.com/canonical/penpot-operator/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/canonical%2Fpenpot-operator/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32067626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-20T21:26:33.338Z","status":"ssl_error","status_checked_at":"2026-04-20T21:26:22.081Z","response_time":94,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["charm","platform-engineering","product-penpot","squad-apac"],"created_at":"2026-02-13T06:23:55.383Z","updated_at":"2026-04-20T22:01:16.261Z","avatar_url":"https://github.com/canonical.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Penpot charm\n\n[![CharmHub Badge](https://charmhub.io/penpot/badge.svg)](https://charmhub.io/penpot)\n[![Publish to edge](https://github.com/canonical/penpot-operator/actions/workflows/publish_charm.yaml/badge.svg)](https://github.com/canonical/penpot-operator/blob/main/.github/workflows/publish_charm.yaml)\n[![Promote charm](https://github.com/canonical/penpot-operator/actions/workflows/promote_charm.yaml/badge.svg)](https://github.com/canonical/penpot-operator/blob/main/.github/workflows/promote_charm.yaml)\n[![Discourse Status](https://img.shields.io/discourse/status?server=https%3A%2F%2Fdiscourse.charmhub.io\u0026style=flat\u0026label=CharmHub%20Discourse)](https://discourse.charmhub.io)\n\nA [Juju](https://canonical.com/juju) [charm](https://documentation.ubuntu.com/juju/3.6/reference/charm/)\nfor deploying and managing the [Penpot](https://penpot.app) open-source\ndesign tool for design and code collaboration in your systems.\n\nThis charm simplifies the configuration and maintenance of Penpot across a\nrange of environments, allowing designers to create stunning designs and interactive prototypes,\ndesign systems at scale, and make their workflow easy and fast with ready-to-use code.\n\n## Get started\n\nIn this section, we will deploy the Penpot charm.\n\u003c!-- vale off --\u003e\nYou’ll need a workstation, e.g., a laptop, with sufficient resources to launch a virtual machine with 4 CPUs, 8 GB RAM, and 50 GB disk space.\n\u003c!-- vale on --\u003e\n\n### Set up\n\nYou can follow the [tutorial](https://documentation.ubuntu.com/juju/3.6/howto/manage-your-juju-deployment/set-up-your-juju-deployment-local-testing-and-development/#set-things-up) to set up a test environment for Juju with LXD.\n\n### Deploy\n\nFrom inside the virtual machine, deploy Penpot charm's dependencies using the `juju deploy` command.\n\n```bash\njuju deploy minio --config access-key=minioadmin --config secret-key=minioadmin\njuju deploy postgresql-k8s --channel 14/stable --trust\njuju deploy redis-k8s --channel latest/edge\njuju deploy s3-integrator --config \"endpoint=http://minio-endpoints.penpot-test.svc.cluster.local:9000\" --config bucket=penpot\njuju deploy nginx-ingress-integrator --trust --config service-hostname=penpot.local --config path-routes=/\njuju deploy self-signed-certificates\njuju integrate self-signed-certificates nginx-ingress-integrator\n```\n\nConfigure minio to provide a S3 compatible storage for the Penpot charm.\n\n```bash\nexport AWS_ACCESS_KEY_ID=minioadmin\nexport AWS_SECRET_ACCESS_KEY=minioadmin\nexport AWS_ENDPOINT_URL=http://$(juju status --format=json | jq -r '.applications.minio.units.\"minio/0\".address'):9000\naws s3 mb s3://penpot --endpoint-url $AWS_ENDPOINT_URL\njuju run s3-integrator/0 sync-s3-credentials --string-args access-key=minioadmin secret-key=minioadmin\n```\n\nDeploy the Penpot charm and integrate the Penpot charm with all its dependencies.\n\n```bash\njuju deploy penpot --channel latest/edge\njuju integrate penpot postgresql-k8s\njuju integrate penpot redis-k8s\njuju integrate penpot s3-integrator\njuju integrate penpot nginx-ingress-integrator\n```\n\n### Basic operations\n\nWhen the Penpot charm has completed deployment and installation, you can access Penpot from a browser.\nFirst, we need to modify the `/etc/hosts` file to point the `penpot.local` domain to the IP address of the virtual machine.\nAfter that, we can access the Penpot instance in the browser using the address `https://penpot.local`.\nNote that `https` is required for Penpot to function. You may need to bypass the certificate security warning in the browser, as we are using a self-signed certificate.\n\nInside the virtual machine, run the following command to create a Penpot account, and use the returned credentials to log in with this account.\n\n```bash\njuju run penpot/0 create-profile --string-args email=example@example.com fullname=\"John Doe\"\n```\n\nFor additional configurations and actions available for the Penpot charm, refer to the [`charmcraft.yaml`](./charmcraft.yaml) file.\n\n## Learn more\n\n* [Read more](https://charmhub.io/penpot)\n* [Official webpage](https://penpot.app/)\n* [Troubleshooting](https://matrix.to/#/#charmhub-charmdev:ubuntu.com)\n\n## Project and community\n\n* [Issues](https://github.com/canonical/penpot-operator/issues)\n* [Contributing](docs/how-to/contribute.md)\n* [Matrix](https://matrix.to/#/#charmhub-charmdev:ubuntu.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanonical%2Fpenpot-operator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcanonical%2Fpenpot-operator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcanonical%2Fpenpot-operator/lists"}