@bluedynamics/cdk8s-plone 0.1.41 → 0.1.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/.jsii +28 -20
  2. package/API.md +21 -9
  3. package/CLAUDE.md +1 -1
  4. package/README.md +4 -4
  5. package/documentation/sources/explanation/architecture.md +7 -6
  6. package/documentation/sources/explanation/features.md +9 -7
  7. package/documentation/sources/how-to/{deploy-classic-ui.md → deploy-blicca.md} +43 -39
  8. package/documentation/sources/how-to/deploy-production-volto.md +1 -1
  9. package/documentation/sources/how-to/index.md +1 -1
  10. package/documentation/sources/reference/api/index.md +1 -1
  11. package/documentation/sources/reference/configuration-options.md +16 -10
  12. package/documentation/sources/tutorials/01-quick-start.md +1 -1
  13. package/examples/{classic-ui → blicca}/README.md +24 -25
  14. package/examples/{classic-ui → blicca}/__snapshots__/main.test.ts.snap +3 -3
  15. package/examples/{classic-ui → blicca}/config/varnish.tpl.vcl +1 -1
  16. package/examples/{classic-ui → blicca}/main.test.ts +3 -3
  17. package/examples/{classic-ui → blicca}/main.ts +6 -6
  18. package/examples/{classic-ui → blicca}/package.json +2 -2
  19. package/lib/httpcache.js +1 -1
  20. package/lib/plone.d.ts +13 -5
  21. package/lib/plone.js +14 -6
  22. package/lib/vinylcache.js +1 -1
  23. package/package.json +1 -1
  24. /package/examples/{classic-ui → blicca}/.env.example +0 -0
  25. /package/examples/{classic-ui → blicca}/cdk8s.yaml +0 -0
  26. /package/examples/{classic-ui → blicca}/ingress.ts +0 -0
  27. /package/examples/{classic-ui → blicca}/jest.config.js +0 -0
  28. /package/examples/{classic-ui → blicca}/postgres.bitnami.ts +0 -0
  29. /package/examples/{classic-ui → blicca}/postgres.cloudnativepg.ts +0 -0
package/.jsii CHANGED
@@ -108,7 +108,7 @@
108
108
  },
109
109
  "name": "@bluedynamics/cdk8s-plone",
110
110
  "readme": {
111
- "markdown": "# CDK8S Plone\n\n> TypeScript and Python library for deploying Plone CMS to Kubernetes using CDK8S\n\n[![npm version](https://badge.fury.io/js/%40bluedynamics%2Fcdk8s-plone.svg)](https://www.npmjs.com/package/@bluedynamics/cdk8s-plone)\n[![PyPI version](https://badge.fury.io/py/cdk8s-plone.svg)](https://pypi.org/project/cdk8s-plone/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n\n## Overview\n\ncdk8s-plone provides CDK8S constructs for deploying [Plone CMS](https://plone.org/) on Kubernetes. Define your infrastructure using TypeScript or Python and generate Kubernetes manifests automatically.\n\n**Key Features:**\n- 🚀 Supports Volto (modern React frontend) and Classic UI\n- 📦 High availability with configurable replicas\n- ⚡ Optional Varnish HTTP caching via kube-httpcache (`PloneHttpcache`) or cloud-vinyl VinylCache operator (`PloneVinylCache`)\n- 🔧 Fine-grained resource and probe configuration\n- 🌍 Multi-language support (TypeScript/JavaScript and Python)\n- ✅ Type-safe infrastructure as code\n\n## Quick Start\n\n### Installation\n\n**TypeScript/JavaScript:**\n```bash\nnpm install @bluedynamics/cdk8s-plone\n```\n\n**Python:**\n```bash\npip install cdk8s-plone\n```\n\n### Basic Example\n\n```typescript\nimport { App, Chart } from 'cdk8s';\nimport { Plone, PloneVariant } from '@bluedynamics/cdk8s-plone';\n\nconst app = new App();\nconst chart = new Chart(app, 'PloneDeployment');\n\nnew Plone(chart, 'my-plone', {\n variant: PloneVariant.VOLTO,\n backend: {\n image: 'plone/plone-backend:6.1.3',\n replicas: 3,\n },\n frontend: {\n image: 'plone/plone-frontend:16.0.0',\n replicas: 2,\n },\n});\n\napp.synth();\n```\n\nGenerate Kubernetes manifests:\n```bash\ncdk8s synth\nkubectl apply -f dist/\n```\n\n## Documentation\n\n**📚 Full documentation:** https://bluedynamics.github.io/cdk8s-plone/\n\n- [Quick Start Tutorial](https://bluedynamics.github.io/cdk8s-plone/tutorials/01-quick-start.html)\n- [Configuration Reference](https://bluedynamics.github.io/cdk8s-plone/reference/configuration-options.html)\n- [Architecture Overview](https://bluedynamics.github.io/cdk8s-plone/explanation/architecture.html)\n- [Complete API Documentation](./API.md)\n\n## Examples\n\nComplete working examples are available in the [`examples/`](examples/) directory:\n\n- **[Production Volto](examples/production-volto/)** - Production-ready Plone 6 deployment with modern UI:\n - Volto frontend (React) + REST API backend\n - PostgreSQL with RelStorage (CloudNativePG or Bitnami)\n - Varnish HTTP caching with kube-httpcache\n - Ingress support (Traefik/Kong) with TLS\n\n- **[Classic UI](examples/classic-ui/)** - Traditional Plone deployment with server-side rendering:\n - Classic UI (traditional Plone interface)\n - PostgreSQL with RelStorage (CloudNativePG or Bitnami)\n - Varnish HTTP caching with kube-httpcache\n - Ingress support (Traefik/Kong) with TLS\n - Simpler architecture (no separate frontend)\n\n### Prometheus Metrics\n\nEnable Prometheus ServiceMonitor for metrics collection (requires Prometheus Operator):\n\n```typescript\nnew Plone(chart, 'my-plone', {\n backend: {\n servicemonitor: true,\n metricsPath: '/metrics', // optional, defaults to '/metrics'\n },\n frontend: {\n servicemonitor: true,\n metricsPort: 9090, // optional, defaults to service port\n },\n});\n```\n\n**Note:** You must instrument your Plone backend/frontend to expose metrics at the configured endpoint. For Volto/Node.js frontends, consider using [prom-client](https://www.npmjs.com/package/prom-client) or [express-prometheus-middleware](https://www.npmjs.com/package/express-prometheus-middleware).\n\n## Requirements\n- **kubectl** - [Install kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)\n- **Node.js 16+** (for TypeScript/JavaScript) - [Install Node.js](https://nodejs.org/)\n- **Python 3.8+** (for Python) - [Install Python](https://www.python.org/)\n- **Kubernetes cluster** (local or cloud)\n\nFor detailed setup instructions, see [Setup Prerequisites](https://bluedynamics.github.io/cdk8s-plone/how-to/setup-prerequisites.html).\n\n## Development\n\nThis project uses [Projen](https://projen.io/) for project management.\n\n```bash\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Build\nnpm run build\n\n# Update project configuration\n# Edit .projenrc.ts, then run:\nnpx projen\n```\n\nFor detailed development instructions, see [CONTRIBUTING.md](./CONTRIBUTING.md) (if available).\n\n## Resources\n\n- [CDK8S Documentation](https://cdk8s.io/)\n- [Plone CMS](https://plone.org/)\n- [kube-httpcache](https://github.com/mittwald/kube-httpcache) (for HTTP caching)\n- [CloudNativePG](https://cloudnative-pg.io/) (for PostgreSQL management)\n\n## License\n\n[Apache 2.0](LICENSE)\n\n## Maintainers\n\nMaintained by [Blue Dynamics Alliance](https://github.com/bluedynamics)\n\n**Author:** Jens W. Klein (jk@kleinundpartner.at)\n"
111
+ "markdown": "# CDK8S Plone\n\n> TypeScript and Python library for deploying Plone CMS to Kubernetes using CDK8S\n\n[![npm version](https://badge.fury.io/js/%40bluedynamics%2Fcdk8s-plone.svg)](https://www.npmjs.com/package/@bluedynamics/cdk8s-plone)\n[![PyPI version](https://badge.fury.io/py/cdk8s-plone.svg)](https://pypi.org/project/cdk8s-plone/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](LICENSE)\n\n## Overview\n\ncdk8s-plone provides CDK8S constructs for deploying [Plone CMS](https://plone.org/) on Kubernetes. Define your infrastructure using TypeScript or Python and generate Kubernetes manifests automatically.\n\n**Key Features:**\n- 🚀 Supports Volto (React frontend) and Blicca (formerly Classic UI)\n- 📦 High availability with configurable replicas\n- ⚡ Optional Varnish HTTP caching via kube-httpcache (`PloneHttpcache`) or cloud-vinyl VinylCache operator (`PloneVinylCache`)\n- 🔧 Fine-grained resource and probe configuration\n- 🌍 Multi-language support (TypeScript/JavaScript and Python)\n- ✅ Type-safe infrastructure as code\n\n## Quick Start\n\n### Installation\n\n**TypeScript/JavaScript:**\n```bash\nnpm install @bluedynamics/cdk8s-plone\n```\n\n**Python:**\n```bash\npip install cdk8s-plone\n```\n\n### Basic Example\n\n```typescript\nimport { App, Chart } from 'cdk8s';\nimport { Plone, PloneVariant } from '@bluedynamics/cdk8s-plone';\n\nconst app = new App();\nconst chart = new Chart(app, 'PloneDeployment');\n\nnew Plone(chart, 'my-plone', {\n variant: PloneVariant.VOLTO,\n backend: {\n image: 'plone/plone-backend:6.1.3',\n replicas: 3,\n },\n frontend: {\n image: 'plone/plone-frontend:16.0.0',\n replicas: 2,\n },\n});\n\napp.synth();\n```\n\nGenerate Kubernetes manifests:\n```bash\ncdk8s synth\nkubectl apply -f dist/\n```\n\n## Documentation\n\n**📚 Full documentation:** https://bluedynamics.github.io/cdk8s-plone/\n\n- [Quick Start Tutorial](https://bluedynamics.github.io/cdk8s-plone/tutorials/01-quick-start.html)\n- [Configuration Reference](https://bluedynamics.github.io/cdk8s-plone/reference/configuration-options.html)\n- [Architecture Overview](https://bluedynamics.github.io/cdk8s-plone/explanation/architecture.html)\n- [Complete API Documentation](./API.md)\n\n## Examples\n\nComplete working examples are available in the [`examples/`](examples/) directory:\n\n- **[Production Volto](examples/production-volto/)** - Production-ready Plone 6 deployment with the React single-page frontend:\n - Volto frontend (React) + REST API backend\n - PostgreSQL with RelStorage (CloudNativePG or Bitnami)\n - Varnish HTTP caching with kube-httpcache\n - Ingress support (Traefik/Kong) with TLS\n\n- **[Blicca](examples/blicca/)** - Plone deployment with server-side rendering (formerly Classic UI):\n - Blicca (backend renders the UI, no separate frontend)\n - PostgreSQL with RelStorage (CloudNativePG or Bitnami)\n - Varnish HTTP caching with kube-httpcache\n - Ingress support (Traefik/Kong) with TLS\n - Simpler architecture (no separate frontend)\n\n### Prometheus Metrics\n\nEnable Prometheus ServiceMonitor for metrics collection (requires Prometheus Operator):\n\n```typescript\nnew Plone(chart, 'my-plone', {\n backend: {\n servicemonitor: true,\n metricsPath: '/metrics', // optional, defaults to '/metrics'\n },\n frontend: {\n servicemonitor: true,\n metricsPort: 9090, // optional, defaults to service port\n },\n});\n```\n\n**Note:** You must instrument your Plone backend/frontend to expose metrics at the configured endpoint. For Volto/Node.js frontends, consider using [prom-client](https://www.npmjs.com/package/prom-client) or [express-prometheus-middleware](https://www.npmjs.com/package/express-prometheus-middleware).\n\n## Requirements\n- **kubectl** - [Install kubectl](https://kubernetes.io/docs/tasks/tools/#kubectl)\n- **Node.js 16+** (for TypeScript/JavaScript) - [Install Node.js](https://nodejs.org/)\n- **Python 3.8+** (for Python) - [Install Python](https://www.python.org/)\n- **Kubernetes cluster** (local or cloud)\n\nFor detailed setup instructions, see [Setup Prerequisites](https://bluedynamics.github.io/cdk8s-plone/how-to/setup-prerequisites.html).\n\n## Development\n\nThis project uses [Projen](https://projen.io/) for project management.\n\n```bash\n# Install dependencies\nnpm install\n\n# Run tests\nnpm test\n\n# Build\nnpm run build\n\n# Update project configuration\n# Edit .projenrc.ts, then run:\nnpx projen\n```\n\nFor detailed development instructions, see [CONTRIBUTING.md](./CONTRIBUTING.md) (if available).\n\n## Resources\n\n- [CDK8S Documentation](https://cdk8s.io/)\n- [Plone CMS](https://plone.org/)\n- [kube-httpcache](https://github.com/mittwald/kube-httpcache) (for HTTP caching)\n- [CloudNativePG](https://cloudnative-pg.io/) (for PostgreSQL management)\n\n## License\n\n[Apache 2.0](LICENSE)\n\n## Maintainers\n\nMaintained by [Blue Dynamics Alliance](https://github.com/bluedynamics)\n\n**Author:** Jens W. Klein (jk@kleinundpartner.at)\n"
112
112
  },
113
113
  "repository": {
114
114
  "type": "git",
@@ -268,7 +268,7 @@
268
268
  "base": "constructs.Construct",
269
269
  "docs": {
270
270
  "example": "new Plone(chart, 'my-plone', {\n variant: PloneVariant.VOLTO,\n backend: {\n image: 'plone/plone-backend:6.0.10',\n replicas: 3,\n },\n frontend: {\n image: 'plone/plone-frontend:16.0.0',\n },\n});",
271
- "remarks": "This construct creates all necessary Kubernetes resources for running Plone:\n- Deployment(s) for backend (and optionally frontend)\n- Service(s) for network access\n- Optional PodDisruptionBudget for high availability\n\nSupports two deployment variants:\n- VOLTO: Modern React frontend with REST API backend (default)\n- CLASSICUI: Traditional server-side rendered Plone",
271
+ "remarks": "This construct creates all necessary Kubernetes resources for running Plone:\n- Deployment(s) for backend (and optionally frontend)\n- Service(s) for network access\n- Optional PodDisruptionBudget for high availability\n\nSupports two deployment variants:\n- VOLTO: React single-page frontend talking to the REST API backend (default)\n- BLICCA: the Plone backend renders the UI server-side and serves HTML directly",
272
272
  "stability": "stable",
273
273
  "summary": "Plone construct for deploying Plone CMS to Kubernetes."
274
274
  },
@@ -279,7 +279,7 @@
279
279
  },
280
280
  "locationInModule": {
281
281
  "filename": "src/plone.ts",
282
- "line": 408
282
+ "line": 417
283
283
  },
284
284
  "parameters": [
285
285
  {
@@ -306,7 +306,7 @@
306
306
  "kind": "class",
307
307
  "locationInModule": {
308
308
  "filename": "src/plone.ts",
309
- "line": 385
309
+ "line": 394
310
310
  },
311
311
  "name": "Plone",
312
312
  "properties": [
@@ -319,7 +319,7 @@
319
319
  "immutable": true,
320
320
  "locationInModule": {
321
321
  "filename": "src/plone.ts",
322
- "line": 390
322
+ "line": 399
323
323
  },
324
324
  "name": "backendServiceName",
325
325
  "type": {
@@ -334,7 +334,7 @@
334
334
  "immutable": true,
335
335
  "locationInModule": {
336
336
  "filename": "src/plone.ts",
337
- "line": 406
337
+ "line": 415
338
338
  },
339
339
  "name": "siteId",
340
340
  "type": {
@@ -344,12 +344,12 @@
344
344
  {
345
345
  "docs": {
346
346
  "stability": "stable",
347
- "summary": "The deployment variant being used (VOLTO or CLASSICUI)."
347
+ "summary": "The deployment variant being used (VOLTO or BLICCA)."
348
348
  },
349
349
  "immutable": true,
350
350
  "locationInModule": {
351
351
  "filename": "src/plone.ts",
352
- "line": 401
352
+ "line": 410
353
353
  },
354
354
  "name": "variant",
355
355
  "type": {
@@ -365,7 +365,7 @@
365
365
  "immutable": true,
366
366
  "locationInModule": {
367
367
  "filename": "src/plone.ts",
368
- "line": 396
368
+ "line": 405
369
369
  },
370
370
  "name": "frontendServiceName",
371
371
  "optional": true,
@@ -1471,7 +1471,7 @@
1471
1471
  "kind": "interface",
1472
1472
  "locationInModule": {
1473
1473
  "filename": "src/plone.ts",
1474
- "line": 318
1474
+ "line": 327
1475
1475
  },
1476
1476
  "name": "PloneOptions",
1477
1477
  "properties": [
@@ -1485,7 +1485,7 @@
1485
1485
  "immutable": true,
1486
1486
  "locationInModule": {
1487
1487
  "filename": "src/plone.ts",
1488
- "line": 343
1488
+ "line": 352
1489
1489
  },
1490
1490
  "name": "backend",
1491
1491
  "optional": true,
@@ -1504,7 +1504,7 @@
1504
1504
  "immutable": true,
1505
1505
  "locationInModule": {
1506
1506
  "filename": "src/plone.ts",
1507
- "line": 350
1507
+ "line": 359
1508
1508
  },
1509
1509
  "name": "frontend",
1510
1510
  "optional": true,
@@ -1524,7 +1524,7 @@
1524
1524
  "immutable": true,
1525
1525
  "locationInModule": {
1526
1526
  "filename": "src/plone.ts",
1527
- "line": 358
1527
+ "line": 367
1528
1528
  },
1529
1529
  "name": "imagePullSecrets",
1530
1530
  "optional": true,
@@ -1548,7 +1548,7 @@
1548
1548
  "immutable": true,
1549
1549
  "locationInModule": {
1550
1550
  "filename": "src/plone.ts",
1551
- "line": 331
1551
+ "line": 340
1552
1552
  },
1553
1553
  "name": "siteId",
1554
1554
  "optional": true,
@@ -1566,7 +1566,7 @@
1566
1566
  "immutable": true,
1567
1567
  "locationInModule": {
1568
1568
  "filename": "src/plone.ts",
1569
- "line": 337
1569
+ "line": 346
1570
1570
  },
1571
1571
  "name": "variant",
1572
1572
  "optional": true,
@@ -1585,7 +1585,7 @@
1585
1585
  "immutable": true,
1586
1586
  "locationInModule": {
1587
1587
  "filename": "src/plone.ts",
1588
- "line": 324
1588
+ "line": 333
1589
1589
  },
1590
1590
  "name": "version",
1591
1591
  "optional": true,
@@ -1996,7 +1996,7 @@
1996
1996
  "docs": {
1997
1997
  "remarks": "Deploys both frontend and backend services.",
1998
1998
  "stability": "stable",
1999
- "summary": "Volto variant: ReactJS frontend (Volto) with REST API backend."
1999
+ "summary": "Volto variant: ReactJS single-page frontend (Volto) talking to the Plone REST API."
2000
2000
  },
2001
2001
  "name": "VOLTO"
2002
2002
  },
@@ -2004,7 +2004,15 @@
2004
2004
  "docs": {
2005
2005
  "remarks": "Deploys only the backend service.",
2006
2006
  "stability": "stable",
2007
- "summary": "Classic UI variant: Traditional Plone with server-side rendering."
2007
+ "summary": "Blicca variant: the Plone backend renders the UI server-side and serves the HTML directly."
2008
+ },
2009
+ "name": "BLICCA"
2010
+ },
2011
+ {
2012
+ "docs": {
2013
+ "deprecated": "Renamed to {@link BLICCA }. Kept for backward compatibility and selects the\nsame backend-only deployment. Existing configuration using `CLASSICUI` (or the literal\nvalue `'classicui'`) keeps working unchanged. Will be removed in a future major release.",
2014
+ "stability": "deprecated",
2015
+ "summary": "Deprecated alias for the Blicca variant (formerly \"Classic UI\")."
2008
2016
  },
2009
2017
  "name": "CLASSICUI"
2010
2018
  }
@@ -3110,6 +3118,6 @@
3110
3118
  "symbolId": "src/vinylcache:VinylCacheToleration"
3111
3119
  }
3112
3120
  },
3113
- "version": "0.1.41",
3114
- "fingerprint": "9JNj9g1Gsl0Yh2odzC98CZU0Me9K8FN1awRs39FwVc0="
3121
+ "version": "0.1.42",
3122
+ "fingerprint": "D9/SxjjIZbxf8BCRqRbR2qAlxXiZY5YCDvyQS6+zHXQ="
3115
3123
  }
package/API.md CHANGED
@@ -12,8 +12,8 @@ This construct creates all necessary Kubernetes resources for running Plone:
12
12
  - Optional PodDisruptionBudget for high availability
13
13
 
14
14
  Supports two deployment variants:
15
- - VOLTO: Modern React frontend with REST API backend (default)
16
- - CLASSICUI: Traditional server-side rendered Plone
15
+ - VOLTO: React single-page frontend talking to the REST API backend (default)
16
+ - BLICCA: the Plone backend renders the UI server-side and serves HTML directly
17
17
 
18
18
  *Example*
19
19
 
@@ -150,7 +150,7 @@ Any object.
150
150
  | <code><a href="#@bluedynamics/cdk8s-plone.Plone.property.node">node</a></code> | <code>constructs.Node</code> | The tree node. |
151
151
  | <code><a href="#@bluedynamics/cdk8s-plone.Plone.property.backendServiceName">backendServiceName</a></code> | <code>string</code> | Name of the backend Kubernetes service. |
152
152
  | <code><a href="#@bluedynamics/cdk8s-plone.Plone.property.siteId">siteId</a></code> | <code>string</code> | The Plone site ID in ZODB. |
153
- | <code><a href="#@bluedynamics/cdk8s-plone.Plone.property.variant">variant</a></code> | <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant">PloneVariant</a></code> | The deployment variant being used (VOLTO or CLASSICUI). |
153
+ | <code><a href="#@bluedynamics/cdk8s-plone.Plone.property.variant">variant</a></code> | <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant">PloneVariant</a></code> | The deployment variant being used (VOLTO or BLICCA). |
154
154
  | <code><a href="#@bluedynamics/cdk8s-plone.Plone.property.frontendServiceName">frontendServiceName</a></code> | <code>string</code> | Name of the frontend Kubernetes service. |
155
155
 
156
156
  ---
@@ -201,7 +201,7 @@ public readonly variant: PloneVariant;
201
201
 
202
202
  - *Type:* <a href="#@bluedynamics/cdk8s-plone.PloneVariant">PloneVariant</a>
203
203
 
204
- The deployment variant being used (VOLTO or CLASSICUI).
204
+ The deployment variant being used (VOLTO or BLICCA).
205
205
 
206
206
  ---
207
207
 
@@ -2835,25 +2835,37 @@ Plone deployment variants.
2835
2835
 
2836
2836
  | **Name** | **Description** |
2837
2837
  | --- | --- |
2838
- | <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant.VOLTO">VOLTO</a></code> | Volto variant: ReactJS frontend (Volto) with REST API backend. |
2839
- | <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant.CLASSICUI">CLASSICUI</a></code> | Classic UI variant: Traditional Plone with server-side rendering. |
2838
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant.VOLTO">VOLTO</a></code> | Volto variant: ReactJS single-page frontend (Volto) talking to the Plone REST API. |
2839
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant.BLICCA">BLICCA</a></code> | Blicca variant: the Plone backend renders the UI server-side and serves the HTML directly. |
2840
+ | <code><a href="#@bluedynamics/cdk8s-plone.PloneVariant.CLASSICUI">CLASSICUI</a></code> | Deprecated alias for the Blicca variant (formerly "Classic UI"). |
2840
2841
 
2841
2842
  ---
2842
2843
 
2843
2844
  ##### `VOLTO` <a name="VOLTO" id="@bluedynamics/cdk8s-plone.PloneVariant.VOLTO"></a>
2844
2845
 
2845
- Volto variant: ReactJS frontend (Volto) with REST API backend.
2846
+ Volto variant: ReactJS single-page frontend (Volto) talking to the Plone REST API.
2846
2847
 
2847
2848
  Deploys both frontend and backend services.
2848
2849
 
2849
2850
  ---
2850
2851
 
2851
2852
 
2852
- ##### `CLASSICUI` <a name="CLASSICUI" id="@bluedynamics/cdk8s-plone.PloneVariant.CLASSICUI"></a>
2853
+ ##### `BLICCA` <a name="BLICCA" id="@bluedynamics/cdk8s-plone.PloneVariant.BLICCA"></a>
2853
2854
 
2854
- Classic UI variant: Traditional Plone with server-side rendering.
2855
+ Blicca variant: the Plone backend renders the UI server-side and serves the HTML directly.
2855
2856
 
2856
2857
  Deploys only the backend service.
2857
2858
 
2858
2859
  ---
2859
2860
 
2861
+
2862
+ ##### ~~`CLASSICUI`~~ <a name="CLASSICUI" id="@bluedynamics/cdk8s-plone.PloneVariant.CLASSICUI"></a>
2863
+
2864
+ - *Deprecated:* Renamed to {@link BLICCA }. Kept for backward compatibility and selects the
2865
+ same backend-only deployment. Existing configuration using `CLASSICUI` (or the literal
2866
+ value `'classicui'`) keeps working unchanged. Will be removed in a future major release.
2867
+
2868
+ Deprecated alias for the Blicca variant (formerly "Classic UI").
2869
+
2870
+ ---
2871
+
package/CLAUDE.md CHANGED
@@ -4,7 +4,7 @@ This document provides context and guidelines for Claude Code when working on th
4
4
 
5
5
  ## Project Overview
6
6
 
7
- **cdk8s-plone** is a TypeScript/Python library for deploying Plone CMS to Kubernetes using CDK8S constructs. It provides type-safe infrastructure as code with support for Volto (React frontend) and Classic UI deployments.
7
+ **cdk8s-plone** is a TypeScript/Python library for deploying Plone CMS to Kubernetes using CDK8S constructs. It provides type-safe infrastructure as code with support for Volto (React frontend) and Blicca (server-side rendered, formerly Classic UI) deployments.
8
8
 
9
9
  ## Git Workflow
10
10
 
package/README.md CHANGED
@@ -11,7 +11,7 @@
11
11
  cdk8s-plone provides CDK8S constructs for deploying [Plone CMS](https://plone.org/) on Kubernetes. Define your infrastructure using TypeScript or Python and generate Kubernetes manifests automatically.
12
12
 
13
13
  **Key Features:**
14
- - 🚀 Supports Volto (modern React frontend) and Classic UI
14
+ - 🚀 Supports Volto (React frontend) and Blicca (formerly Classic UI)
15
15
  - 📦 High availability with configurable replicas
16
16
  - ⚡ Optional Varnish HTTP caching via kube-httpcache (`PloneHttpcache`) or cloud-vinyl VinylCache operator (`PloneVinylCache`)
17
17
  - 🔧 Fine-grained resource and probe configuration
@@ -75,14 +75,14 @@ kubectl apply -f dist/
75
75
 
76
76
  Complete working examples are available in the [`examples/`](examples/) directory:
77
77
 
78
- - **[Production Volto](examples/production-volto/)** - Production-ready Plone 6 deployment with modern UI:
78
+ - **[Production Volto](examples/production-volto/)** - Production-ready Plone 6 deployment with the React single-page frontend:
79
79
  - Volto frontend (React) + REST API backend
80
80
  - PostgreSQL with RelStorage (CloudNativePG or Bitnami)
81
81
  - Varnish HTTP caching with kube-httpcache
82
82
  - Ingress support (Traefik/Kong) with TLS
83
83
 
84
- - **[Classic UI](examples/classic-ui/)** - Traditional Plone deployment with server-side rendering:
85
- - Classic UI (traditional Plone interface)
84
+ - **[Blicca](examples/blicca/)** - Plone deployment with server-side rendering (formerly Classic UI):
85
+ - Blicca (backend renders the UI, no separate frontend)
86
86
  - PostgreSQL with RelStorage (CloudNativePG or Bitnami)
87
87
  - Varnish HTTP caching with kube-httpcache
88
88
  - Ingress support (Traefik/Kong) with TLS
@@ -21,19 +21,20 @@ cdk8s-plone provides CDK8S constructs for deploying Plone CMS on Kubernetes. The
21
21
 
22
22
  cdk8s-plone supports two deployment variants:
23
23
 
24
- **Volto (Modern)**
24
+ **Volto (React single-page frontend)**
25
25
  - React-based frontend (Volto)
26
26
  - REST API backend (Plone)
27
27
  - Separate services for frontend and backend
28
- - Modern user experience
29
28
  - Headless CMS architecture
30
29
 
31
- **Classic UI (Traditional)**
32
- - Server-side rendered Plone
30
+ **Blicca (server-side rendered)**
31
+ - The Plone backend renders the UI and serves HTML directly
33
32
  - Single integrated service
34
- - Traditional Plone experience
35
33
  - Simpler deployment model
36
34
 
35
+ Blicca is the new name for the variant Plone formerly called "Classic UI".
36
+ Both approaches are equally current; they differ in where rendering happens, not in how modern they are.
37
+
37
38
  ### High availability
38
39
 
39
40
  **Replica Management**
@@ -251,7 +252,7 @@ For a typical Volto deployment, cdk8s-plone creates:
251
252
  - Better resource utilization
252
253
  - Clear separation of concerns
253
254
 
254
- **When to use Classic UI:**
255
+ **When to use Blicca:**
255
256
  - Simpler deployment model
256
257
  - Lower resource requirements
257
258
  - Legacy integrations
@@ -19,17 +19,19 @@ Complete overview of cdk8s-plone features and capabilities.
19
19
 
20
20
  cdk8s-plone supports two deployment modes to match your requirements:
21
21
 
22
- **Volto (Modern React Frontend)**
23
- - Modern React-based user interface
22
+ **Volto (React single-page frontend)**
23
+ - React-based user interface
24
24
  - Headless CMS architecture
25
25
  - Separate frontend and backend services
26
- - Best for: New projects, modern UX requirements, API-first architectures
26
+ - Best for: API-first architectures, SPA frontends
27
27
 
28
- **Classic UI (Traditional Plone)**
29
- - Server-side rendered interface
28
+ **Blicca (server-side rendered Plone)**
29
+ - The Plone backend renders the UI and serves HTML directly
30
30
  - Integrated single-service deployment
31
- - Traditional Plone experience
32
- - Best for: Legacy migrations, existing add-ons, simpler deployments
31
+ - Best for: single-service setups, legacy migrations, existing add-ons
32
+
33
+ Blicca is the new name for the variant Plone formerly called "Classic UI".
34
+ Both are equally current; they differ in their rendering approach.
33
35
 
34
36
  See {doc}`architecture` for a deeper architectural comparison of the two variants.
35
37
 
@@ -1,37 +1,40 @@
1
1
  ---
2
2
  myst:
3
3
  html_meta:
4
- "description": "Deploy the Classic UI example: server-side rendered Plone with PostgreSQL, Varnish caching, and ingress with TLS."
5
- "property=og:description": "Deploy the Classic UI example: server-side rendered Plone with PostgreSQL, Varnish caching, and ingress with TLS."
6
- "property=og:title": "Deploy Classic UI example"
7
- "keywords": "Plone, cdk8s, Kubernetes, Classic UI, PostgreSQL, Varnish, ingress"
4
+ "description": "Deploy the Blicca example: server-side rendered Plone with PostgreSQL, Varnish caching, and ingress with TLS."
5
+ "property=og:description": "Deploy the Blicca example: server-side rendered Plone with PostgreSQL, Varnish caching, and ingress with TLS."
6
+ "property=og:title": "Deploy Blicca example"
7
+ "keywords": "Plone, cdk8s, Kubernetes, Blicca, Classic UI, PostgreSQL, Varnish, ingress"
8
8
  ---
9
9
 
10
- # Deploy Classic UI example
10
+ # Deploy Blicca example
11
11
 
12
- This guide shows you how to deploy the Classic UI example to your Kubernetes cluster.
12
+ This guide shows you how to deploy the Blicca example to your Kubernetes cluster.
13
+
14
+ Blicca is the new name for what Plone formerly called "Classic UI".
13
15
 
14
16
  ## What you'll deploy
15
17
 
16
- The [Classic UI example](https://github.com/bluedynamics/cdk8s-plone/tree/main/examples/classic-ui) provides traditional Plone with server-side rendering:
18
+ The [Blicca example](https://github.com/bluedynamics/cdk8s-plone/tree/main/examples/blicca) provides Plone with server-side rendering:
17
19
 
18
- - **Plone 6.1 Classic UI** (traditional interface, no separate frontend)
20
+ - **Plone 6.1 Blicca** (backend renders the UI, no separate frontend)
19
21
  - **PostgreSQL** with RelStorage (CloudNativePG or Bitnami)
20
22
  - **Varnish HTTP caching** with kube-httpcache
21
23
  - **Ingress** with TLS (Traefik or Kong)
22
24
  - **Simpler architecture** (single backend service)
23
25
 
24
- ## Classic UI vs Volto
26
+ ## Blicca vs Volto
25
27
 
26
- | Feature | Classic UI | Volto |
28
+ | Feature | Blicca | Volto |
27
29
  |---------|-----------|-------|
28
30
  | **Architecture** | Single backend | Frontend + Backend |
29
31
  | **Rendering** | Server-side | Client-side (React) |
30
32
  | **Deployment** | Simpler | More complex |
31
- | **Best for** | Migrations, intranets | Modern projects |
33
+ | **Best for** | Single-service setups, migrations | API-first projects, SPA frontends |
32
34
 
33
35
  :::{tip}
34
- Choose Classic UI if you're migrating from older Plone versions or need specific Classic UI add-ons. For new projects, consider [Volto](deploy-production-volto.md).
36
+ Choose Blicca if you want a single backend service without a separate frontend, or if you need Blicca-specific add-ons.
37
+ For the React single-page frontend approach, consider [Volto](deploy-production-volto.md).
35
38
  :::
36
39
 
37
40
  ## Prerequisites
@@ -49,7 +52,7 @@ See [Setup Prerequisites](setup-prerequisites.md) for detailed instructions.
49
52
 
50
53
  ```shell
51
54
  git clone https://github.com/bluedynamics/cdk8s-plone.git
52
- cd cdk8s-plone/examples/classic-ui
55
+ cd cdk8s-plone/examples/blicca
53
56
  ```
54
57
 
55
58
  ## Step 2: Install dependencies
@@ -91,7 +94,8 @@ DATABASE=cloudnativepg
91
94
  ```
92
95
 
93
96
  :::{note}
94
- Classic UI only needs one image (backend). There's no frontend image configuration.
97
+ Blicca only needs one image (backend).
98
+ There's no frontend image configuration.
95
99
  :::
96
100
 
97
101
  ## Step 5: Generate manifests
@@ -100,28 +104,28 @@ Classic UI only needs one image (backend). There's no frontend image configurati
100
104
  npm run synth
101
105
  ```
102
106
 
103
- Creates `dist/plone-classic.k8s.yaml` (~27 KB, smaller than Volto's 32 KB).
107
+ Creates `dist/plone-blicca.k8s.yaml` (~27 KB, smaller than Volto's 32 KB).
104
108
 
105
109
  ## Step 6: Review manifests
106
110
 
107
111
  ```shell
108
112
  # Count resources
109
- grep "^kind:" dist/plone-classic.k8s.yaml | sort | uniq -c
113
+ grep "^kind:" dist/plone-blicca.k8s.yaml | sort | uniq -c
110
114
 
111
115
  # Dry run
112
- kubectl apply --dry-run=client -f dist/plone-classic.k8s.yaml
116
+ kubectl apply --dry-run=client -f dist/plone-blicca.k8s.yaml
113
117
  ```
114
118
 
115
119
  ## Step 7: Deploy
116
120
 
117
121
  ```shell
118
- kubectl apply -f dist/plone-classic.k8s.yaml
122
+ kubectl apply -f dist/plone-blicca.k8s.yaml
119
123
  ```
120
124
 
121
125
  Or to a specific namespace:
122
126
 
123
127
  ```shell
124
- kubectl apply -f dist/plone-classic.k8s.yaml -n plone
128
+ kubectl apply -f dist/plone-blicca.k8s.yaml -n plone
125
129
  ```
126
130
 
127
131
  ## Step 8: Monitor deployment
@@ -137,7 +141,7 @@ kubectl wait --for=condition=ready pod \
137
141
  ```
138
142
 
139
143
  :::{note}
140
- Classic UI deploys fewer pods than Volto (no frontend pods).
144
+ Blicca deploys fewer pods than Volto (no frontend pods).
141
145
  :::
142
146
 
143
147
  ## Step 9: Verify services
@@ -147,7 +151,7 @@ kubectl get svc -l app.kubernetes.io/part-of=plone
147
151
  ```
148
152
 
149
153
  You should see:
150
- - `plone-backend` (Classic UI service)
154
+ - `plone-backend` (Blicca service)
151
155
  - `plone-httpcache` (Varnish cache)
152
156
  - Database service
153
157
 
@@ -174,17 +178,17 @@ Once DNS and TLS are ready:
174
178
  - **Site ID**: `Plone`
175
179
  - **Title**: Your site name
176
180
  - **Language**: Select language
177
- - **Add-ons**: Choose Classic UI add-ons
181
+ - **Add-ons**: Choose Blicca add-ons
178
182
  4. Click "Create Plone Site"
179
183
 
180
184
  ## Key differences from Volto
181
185
 
182
186
  ### Architecture
183
187
 
184
- Classic UI routing is simpler - all traffic goes to the backend:
188
+ Blicca routing is simpler - all traffic goes to the backend:
185
189
 
186
190
  ```
187
- Traffic → Ingress → Varnish → Plone Backend (Classic UI)
191
+ Traffic → Ingress → Varnish → Plone Backend (Blicca)
188
192
  ```
189
193
 
190
194
  Compared to Volto:
@@ -195,7 +199,7 @@ Traffic → Ingress → {Varnish → Frontend, Backend}
195
199
 
196
200
  ### Ingress routes
197
201
 
198
- Classic UI uses virtual host rewriting for direct backend access:
202
+ Blicca uses virtual host rewriting for direct backend access:
199
203
 
200
204
  - **Cached**: Routes through Varnish to backend
201
205
  - **Uncached**: Direct to backend with VirtualHostBase rewrite
@@ -225,7 +229,7 @@ Common issues:
225
229
  - Memory limits too low
226
230
  - Image pull errors
227
231
 
228
- ### Classic UI interface not loading
232
+ ### Blicca interface not loading
229
233
 
230
234
  1. Check if backend pods are running:
231
235
  ```shell
@@ -244,14 +248,14 @@ Common issues:
244
248
 
245
249
  ### Add-on compatibility
246
250
 
247
- Some add-ons are Volto-specific. For Classic UI:
248
- - Use Classic UI themes (not Volto themes)
249
- - Check add-on compatibility with Plone 6 Classic UI
251
+ Some add-ons are Volto-specific. For Blicca:
252
+ - Use Blicca themes (not Volto themes)
253
+ - Check add-on compatibility with Plone 6 Blicca
250
254
  - Avoid Volto-specific frontend add-ons
251
255
 
252
256
  ## Migrating to Volto
253
257
 
254
- If you want to migrate from Classic UI to Volto later:
258
+ If you want to migrate from Blicca to Volto later:
255
259
 
256
260
  1. Keep your backend deployment (same configuration)
257
261
  2. Add Volto frontend from the [Volto example](deploy-production-volto.md)
@@ -268,7 +272,7 @@ Edit `main.ts` to customize:
268
272
 
269
273
  ```typescript
270
274
  const plone = new Plone(this, 'plone', {
271
- variant: PloneVariant.CLASSICUI,
275
+ variant: PloneVariant.BLICCA,
272
276
  backend: {
273
277
  image: 'plone/plone-backend:6.1.3',
274
278
  replicas: 2,
@@ -281,9 +285,9 @@ const plone = new Plone(this, 'plone', {
281
285
 
282
286
  ### Varnish caching
283
287
 
284
- Edit `config/varnish.tpl.vcl` for caching rules specific to Classic UI.
288
+ Edit `config/varnish.tpl.vcl` for caching rules specific to Blicca.
285
289
 
286
- Classic UI VCL is simpler than Volto's - all traffic routes to one backend.
290
+ Blicca VCL is simpler than Volto's - all traffic routes to one backend.
287
291
 
288
292
  ## Scaling
289
293
 
@@ -298,14 +302,14 @@ backend: {
298
302
  Then:
299
303
  ```shell
300
304
  npm run synth
301
- kubectl apply -f dist/plone-classic.k8s.yaml
305
+ kubectl apply -f dist/plone-blicca.k8s.yaml
302
306
  ```
303
307
 
304
308
  ## Performance
305
309
 
306
- Classic UI performance characteristics:
310
+ Blicca performance characteristics:
307
311
 
308
- - **Server-side rendering** can be slower than Volto's client-side
312
+ - **Server-side rendering** moves rendering work to the backend, so Varnish caching matters
309
313
  - **Varnish caching** is critical for performance
310
314
  - **Database** is the main bottleneck (use CloudNativePG for HA)
311
315
  - **Fewer HTTP requests** than Volto (no separate frontend API calls)
@@ -313,18 +317,18 @@ Classic UI performance characteristics:
313
317
  ## Cleanup
314
318
 
315
319
  ```shell
316
- kubectl delete -f dist/plone-classic.k8s.yaml
320
+ kubectl delete -f dist/plone-blicca.k8s.yaml
317
321
  ```
318
322
 
319
323
  ## Next steps
320
324
 
321
325
  - Follow {doc}`enable-prometheus-monitoring` to add Prometheus monitoring.
322
326
  - Configure [CloudNativePG backups](https://cloudnative-pg.io/documentation/).
323
- - Customize the Classic UI theme through [Plone 6 Classic UI documentation](https://6.docs.plone.org/classic-ui/).
327
+ - Customize the theme through the [Plone 6 Classic UI documentation](https://6.docs.plone.org/classic-ui/) (upstream docs; Blicca is the new name for Classic UI).
324
328
 
325
329
  ## See also
326
330
 
327
- - {doc}`deploy-production-volto` — For the modern React UI.
331
+ - {doc}`deploy-production-volto` — For the React single-page frontend.
328
332
  - {doc}`setup-prerequisites` — Cluster requirements.
329
333
  - {doc}`/reference/configuration-options` — API reference.
330
334
  - [Plone 6 Classic UI documentation](https://6.docs.plone.org/classic-ui/)
@@ -324,6 +324,6 @@ kubectl delete -f dist/plone-example.k8s.yaml
324
324
 
325
325
  ## See also
326
326
 
327
- - {doc}`deploy-classic-ui` — For the traditional Plone interface.
327
+ - {doc}`deploy-blicca` — For the server-side rendered Plone UI.
328
328
  - {doc}`setup-prerequisites` — Detailed cluster setup.
329
329
  - {doc}`/reference/configuration-options` — API reference.
@@ -40,7 +40,7 @@ maxdepth: 1
40
40
  titlesonly: true
41
41
  ---
42
42
  deploy-production-volto
43
- deploy-classic-ui
43
+ deploy-blicca
44
44
  deploy-with-vinyl-cache
45
45
  ```
46
46
 
@@ -15,7 +15,7 @@ Complete API reference for cdk8s-plone constructs, generated from TypeScript sou
15
15
 
16
16
  The cdk8s-plone library provides the following main constructs:
17
17
 
18
- - **Plone**: Main construct for deploying Plone CMS with support for both Volto (React frontend) and Classic UI variants
18
+ - **Plone**: Main construct for deploying Plone CMS with support for both Volto (React frontend) and Blicca (server-side rendered) variants
19
19
  - **PloneHttpcache**: HTTP caching layer using Varnish for improved performance
20
20
 
21
21
  ## Language support