Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased]

  • fix: Support Juju 4 in integration tests.

  • docs: Review the Ubuntu 26.04 LTS documentation. Correct the juju events, custom relations, paas-config.yaml, uv migration, upgrade (--base), Rockcraft project-structure and 2.0 release notes pages, and the app-secret-key guidance. Document packaging cos_custom/ on Ubuntu 26.04 LTS and the Charmcraft latest/edge requirement. Fix typos, resource names per base and extension part names in the examples.

  • docs: Standardize all six Ubuntu 26.04 framework tutorial VMs on 60 GB disks and clarify that the packaged port key replaces the Juju app-port option.

  • docs: Install Rockcraft from latest/candidate in all Ubuntu 26.04 framework tutorials.

2.0.0b1 - 2026-10-20

  • breaking: The application port of the FastAPI, Go, ExpressJS, and Spring Boot charms is no longer read from the webserver-port, app-port, or port charm configuration options. Set port in paas-config.yaml; the framework default applies otherwise. Workload environment variables (UVICORN_PORT, PORT, SERVER_PORT) are unchanged.

  • breaking: All frameworks now store charm state (database migration status, original Pebble services) in /tmp/paas-charm instead of per-framework paths (/tmp/<framework>/state, /app/state). The directory is created by the charm, so rocks no longer need to provide /app/state.

  • docs: Use Gateway IP-mode endpoints returned by its action in all six Ubuntu 26.04 tutorials instead of development hostnames and DNS overrides.

  • docs: Link the feedback form at the end of every Ubuntu 26.04 tutorial.

  • docs: Reuse the setup VM address throughout the Ubuntu 26.04 tutorials and distinguish host browser checks from guest shell variables.

  • docs: Align initial, configurable greeting, and visitor responses across the Ubuntu 26.04 tutorials as plain text with no trailing newline.

  • docs: Make all six Ubuntu 26.04 tutorial apps initially return the identical 12-byte body Hello world!, without a trailing newline or JSON wrapper.

  • docs: Align Ubuntu 26.04 tutorial snippets with generated configuration, fix version highlights, and return to the Express rock directory before repacking.

  • docs: Document the Maven incremental-pack bug and clean the build environment before subsequent rock packs in the Ubuntu 26.04 Spring Boot tutorial.

  • docs: Use Java 25 for the Spring Boot tutorial app.

  • docs: Allocate 75 GB for the Django and Express tutorial VMs and deploy stable PostgreSQL charms in all framework tutorials.

  • docs: Keep Ubuntu 26.04 tutorial rocks on the bare base, install uv during shared setup, and clarify packaged application configuration.

  • docs: Consolidate identical Ubuntu 26.04 tutorial fixtures while preserving framework-specific examples. Generate the small packaged port and greeting configurations directly in each tutorial’s task rather than maintaining separate YAML fixtures.

  • docs: Move the six Ubuntu 26.04 framework tutorials from Charmcraft into the 12-Factor app support documentation, including their example apps and task files used as documentation snippet sources.

  • refactor: Declare Spring Boot’s built-in Valkey relation directly instead of using a relation replacement hook.

  • fix: Use compatible stable Temporal charms in the Flask integration test.

  • feat: Rename environment variables for config options and secret entries using config.options in paas-config.yaml, including framework outputs and generated secret keys. Unmapped options retain their existing protection against framework field names.

  • fix: Relation outputs now override FastAPI and Spring Boot framework-generated settings when names collide, even without explicit environment mappings.

  • feat: Add the public paas_charm.relations.CustomRelation extension API so charm authors can add their own Juju relations to a 12-factor charm (environment variables, readiness/blocking, reconcile) without importing or extending paas-charm internals. Register a relation via the charm custom_relations class attribute; required-vs-optional is read from the metadata optional flag.

  • feat: Add the stable Context, OnChange, and CustomRelation public types and re-export InvalidRelationDataError/RelationDataError from paas_charm.relations.

  • docs: Add a how-to and reference for custom relations. The example Flask implementation uses CustomRelation to integrate with a Temporal server.

  • chore: Add a unit test that keeps the example charm dependencies in sync with the root pyproject.toml.

  • breaking: Remove the paas_app_charmer import path.

  • fix: Replace the deprecated hydra.oauth charm library with charmlibs.interfaces.oauth.

  • breaking: Unify the Flask and Django application root directory under /app instead of /flask or /django, matching the FastAPI and ExpressJS convention, while keeping the mutable gunicorn.conf.py under the separate /var/lib/gunicorn directory. Access and error logs continue to use stdout and stderr. Requires rebuilding the rock with an Ubuntu 26.04 LTS base or build base.

  • feat: Rename the secret-storage peer relation (and its interface) to peers, and store the auto-generated application secret key in a Juju application-owned secret instead of the peer relation databag. The peer relation is now used only for peer coordination (such as PEER_FQDNS). This is a breaking change: on upgrade a fresh application secret key is generated. Applications that use this key for session signing (including Flask, Django, FastAPI, ExpressJS, and Spring Boot) may invalidate existing sessions. Use a type: secret config option for user-provided secrets.

  • breaking: Replace Redis integration examples and tests with Valkey, including Spring Data Valkey support in the Spring Boot example.

  • fix: Activate the Spring Boot Valkey example only when a Valkey relation is available.

  • feat: Move application and metrics endpoint customization to top-level port, metrics-port, and metrics-path fields in paas-config.yaml while always exposing the resolved framework defaults to workloads.

  • feat: Support additional Prometheus jobs through prometheus.scrape_configs while preserving framework metrics scraping.

  • fix: Use OpenTelemetry auto-instrumentation for metrics in the FastAPI example application.

  • fix: Serve ExpressJS Prometheus metrics on the configured METRICS_PORT.

  • breaking: Standardize the secret key configuration of all frameworks (including the former flask-secret-key and django-secret-key) as a single app-secret-key option of type: secret that accepts a Juju user secret ID, replacing the previous string app-secret-key and app-secret-key-id options. Framework-prefixed workload variables (FLASK_SECRET_KEY, DJANGO_SECRET_KEY) are preserved.

  • fix: Use the charm application name for the OpenFGA store name.

  • fix: Replace the deprecated OpenFGA Charmhub library with charmlibs.interfaces.openfga.

  • breaking: Remove support for the v0 version of the loki_push_api library; charms must fetch the v1 library (charmcraft fetch-lib charms.loki_k8s.v1.loki_push_api).

  • docs: Onboarded documentation into Copier-based platform-engineering-documentation-files central management solution.

  • fix: Replace the deprecated tracing Charmhub library with charmlibs.interfaces.tracing.

1.12.0 - 2026-07-03

  • fix: Set alert_rules_path of LogProxyConsumer and LogForwarder when using the v1 version of the Loki library.

  • docs: Migrate the RTD documentation URL under the Canonical domain.

1.11.3 - 2026-05-26

  • feat: Add support for the valkey_client interface.

  • fix: Prevent duplicate allowed_hosts when ingress hostname matches charm config. This avoids duplicating hostnames that were already configured by the user via the django-allowed-hosts charm config option.

1.11.2 - 2026-04-30

  • fix: Remove trailing / character from the base URL when building the OIDC redirect URI.

  • docs: Add how-to guide for publishing a 12-factor app charm to Charmhub.

  • docs: Update release notes template and workflow to showcase CODA contributors.

1.11.1 - 2026-03-17

  • fix: Fix an issue where the custom COS directory was merged on all events instead of just once.

1.11.0 - 2026-03-16

  • feat: Add structured logs to FastAPI (Uvicorn).

  • feat: Add structured logs to Django and Flask (Gunicorn).

  • feat: Add support for custom COS directories, allowing users to provide their own Grafana dashboards, Loki alert rules and Prometheus alert rules.

  • feat: Add RabbitMQ HA support with a new RABBITMQ_CONNECT_STRINGS environment variable.

  • fix: Use ops.charm_dir instead of os.getcwd() for locating charm configuration files, enabling scenario tests to work correctly.

2026-02-23

  • feat: Add support for custom COS directories, allowing users to provide their own Grafana dashboards, Loki alert rules and Prometheus alert rules.

2026-02-13

  • feat: Add paas-config.yaml support for custom Prometheus scrape configurations.

  • feat: Add @scheduler placeholder support in Prometheus targets for unit 0 scraping.

2026-01-12

  • docs: Maintenance of the landing pages, including some reorganization of content.

2025-12-15

  • docs: Add user journey diagram to the explanation section.

2025-11-25

  • chore(docs): Update RTD project to latest version of the starter pack.

  • chore(docs): Update RTD-related workflows to use consolidated workflow.

1.9.2 2025-11-24

  • chore: Update Express grafana dashboard.

  • fix: Fix bug in the Grafana Dashboards of Django, Express, FastAPI and Flask where when all the variables hold the value All (which it does in default), Loki throws an error.

1.9.1 2025-11-14

  • docs: Updated “how to upgrade” documentation.

  • feat: Add http-proxy integration support for all frameworks.

  • docs: Added release notes for paas-charm v1.9.

  • fix: Fixed FastAPI example and changed to use edge PostgreSQL for integration tests.

  • feat: Add grafana dashboard for FastAPI.

  • docs: Add extension to open links in a new tab.

  • docs: Added a how-to guide on getting support.

  • docs: Incorporated feedback from UX session.

  • docs: Fix misspelling words and broken links.

1.9.0 - 2025-10-07

  • feat: Add profiles configuration option to Spring Boot.

  • fix: Fix bug in rabbitmq relation. When an application with units integrate with rabbitmq-server it can fail with RelationDataAccessError.

  • docs: Add link to Matrix channel in README.

  • docs: Update paas-charm v1.8 release notes to include Charmcraft updates.

  • docs: Add explanation document describing the value proposition of the tooling.

  • docs: Add explanation document describing the opinionated nature of the 12-factor tooling.

1.8.7 - 2025-09-10

  • fix: Unintentional removal of trailing / character from redirect-path is fixed.

  • docs: Refactor explanation documentation in the RTD site.

  • docs: Add links to Spring Boot documentation.

  • docs: Update RTD project to latest version of the starter pack.

  • docs: Add release notes for paas-charm v1.8.

  • fix: The ingress library doesn’t properly handle pod restarts, and in some cases using the nginx-integrator charm, the IP field is not updated correctly. As a workaround, refresh the ingress relation data on every update-status hook.

1.8.6 - 2025-08-01

  • feat: Add OIDC support for Express.

1.8.5 - 2025-08-01

  • feat: Add OIDC support for Go.

  • docs: Refactor how-to landing page.

1.8.4 - 2025-07-29

  • feat: Add OIDC support for FastAPI.

1.8.3 - 2025-07-29

  • feat: Add OIDC support for Spring Boot.

1.8.2 - 2025-07-28

  • feat: Add OIDC support for Django.

  • docs: Added “Supported customizable features and capabilities”.

1.8.1 - 2025-07-25

  • feat: add X-Request-ID header to Gunicorn logs if present in response.

1.8.0 - 2025-07-24

  • feat: Add OIDC support for Flask.

2025-07-23

  • docs: Added “How to add a new framework”.

2025-07-21

  • docs: Refactor reference documentation.

2025-07-17

  • docs: Added release notes to the project.

2025-07-15

  • feat: Spring Boot support for RabbitMQ.

2025-07-11

  • docs: Refactored the RTD tutorial landing page.

1.7.9 - 2025-06-26

  • feat: Added Prometheus support for Spring Boot.

1.7.8 - 2025-06-25

  • feat: Added OpenFGA support for Spring Boot.

1.7.7 - 2025-06-25

  • feat: Added Tracing support for Spring Boot.

1.7.6 - 2025-06-24

  • feat: Added MySQL support for Spring Boot.

1.7.5 - 2025-06-20

  • feat: Added MongoDB support for Spring Boot.

1.7.4 - 2025-06-20

  • feat: Added S3 support for Spring Boot.

1.7.3 - 2025-06-17

  • feat: Added Redis support for Spring boot.

  • docs: Refactored the RTD home page. Moved content into Explanation.

1.7.2 - 2025-06-17

  • feat: Added SAML support for Spring Boot.

1.7.1 - 2025-06-12

  • docs: Added an edit button to the RTD project.

  • feat: Added SMTP support for Spring Boot.

1.7.0 - 2025-06-11

  • feat: Added support for Spring Boot.

1.6.0 - 2025-05-26

  • feat: Added support for Express.

v1.5.3 - 2025-05-08

v1.5.2 - 2025-04-29

  • fix: Properly update ingress integration and opened ports when configuration changes.

  • fix: Ensure Prometheus scraping information refreshes correctly on configuration changes.

  • docs: Updated README and contributing guide. Added links to Charmcraft and Rockcraft.

v1.5.1 - 2025-04-24

  • fix: Fix issue with typehint leading to errors due to missing import

v1.5.0 - 2025-04-14

  • feat: Added support for OpenFGA integration.

v1.4.2 - 2025-04-24

  • feat: Added peer(s) FQDN(s) as an environment variable

v1.4.2 - 2025-04-03

  • fix: Fixed a bug that occurred when users attempted to use [ args ] in service commands for the Django and Flask frameworks.

  • fix: Updated broken doc links.

v1.4.1 - 2025-03-26

  • feat(docs): Add Google Analytics capabilities to RTD build.

v1.4.1 - 2025-03.25

  • fix: Added event handler for secret_storage_relation_changed event.

v1.4.0 - 2025-03-04

  • feat: Added support for smtp integration.

v1.3.2 - 2025-02-27

  • chore: Changed workload container name to a constant value for the go-framework

v1.3.0 - 2025-02-24

  • feat: Added support for non-optional configuration options.

v1.2.3 - 2025-02-07

  • fix: Missing charm libraries at import time are now logged as a warning rather than an exception.

v1.2.2 - 2025-02-07

  • fix: Removed __init__.py file for templates and included the Jinja templates in the package-data in pyproject.toml.

v1.2.1 - 2025-02-07

  • fix: Added an init file to fix missing templates folder issue in the pypi package.

v1.2.0 - 2025-02-06

  • docs: Updated the home page for the Read the Docs site to align closer to the standard model for Canonical products.

v1.2.0 - 2025-02-06

  • feat: Added support for tracing web applications using an integration with Charmed Tempo HA.

v1.1.0 - 2024-12-19

  • docs: Updated the home page for the Read the Docs site to provide relevant information about the project.

  • feat: Added support for async workers for Gunicorn services (flask and Django).

v1.0.0 - 2024-11-29