diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8eb2db5..39a92b8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
## [Unreleased]
+## 0.5.0 (May 11, 2026)
+
+### Added
+- **Columns** field on the content plugin and site module — comma-separated list of columns to show in list view (e.g. `time,name,location,address,service_body`). Omit a name to hide that column. Can be overridden per shortcode on the content plugin via `columns="…"`.
+
## 0.4.0 (May 10, 2026)
### Added
diff --git a/README.md b/README.md
index 83d78dc..d362990 100644
--- a/README.md
+++ b/README.md
@@ -39,7 +39,7 @@ By default, the plugin reads its settings (server URL, service body IDs, etc.) f
{crumb server="https://bmlt.example.org/main_server" service_body="42" view="map"}
```
-Recognised shortcode args: `server`, `service_body`, `format_ids`, `view` (`list`/`map`), `geolocation` (`true`/`false`), `geolocation_radius`, `update_url`.
+Recognised shortcode args: `server`, `service_body`, `format_ids`, `view` (`list`/`map`), `geolocation` (`true`/`false`), `geolocation_radius`, `update_url`, `columns`.
### In a module position (module)
@@ -57,6 +57,7 @@ Both the plugin and the module expose the same fields:
| **CSS Template** | `Full Width` or `Full Width (Force Viewport)` for breaking out of narrow content areas. |
| **Base Path for Pretty URLs** | e.g. `meetings` → `/meetings/monday-night-meeting-42` (History API routing). Empty = hash-based routing. |
| **Update Meeting URL** | Optional. URL template for the "Update Meeting Info" link on the meeting detail panel. Tokens: `{meeting_id}`, `{meeting_name}`, `{server_url}`, `{return_url}`. Works with bmlt-workflow, hosted forms, or `mailto:` URLs. |
+| **Columns** | Optional. Comma-separated list of columns to show in list view (e.g. `time,name,location,address,service_body`). Omit a name to hide that column. Empty = widget default. |
| **Widget Configuration (JSON)** | Advanced. JSON for `CrumbWidgetConfig`. See the [widget docs](https://crumb.bmlt.app/) for the full schema (`darkMode`, `geolocation`, `nowOffset`, `columns`, etc.). |
## Local development
diff --git a/packages/module/language/en-GB/mod_crumb.ini b/packages/module/language/en-GB/mod_crumb.ini
index a9ed3d1..24915d6 100644
--- a/packages/module/language/en-GB/mod_crumb.ini
+++ b/packages/module/language/en-GB/mod_crumb.ini
@@ -34,5 +34,8 @@ MOD_CRUMB_FIELD_BASE_PATH_DESC="Optional. The path where the widget lives (e.g.
MOD_CRUMB_FIELD_UPDATE_URL_LABEL="Update Meeting URL"
MOD_CRUMB_FIELD_UPDATE_URL_DESC="Optional. URL template for the "Update Meeting Info" link shown at the bottom of the meeting detail panel. Supported tokens (URL-encoded on substitution): {meeting_id}, {meeting_name}, {server_url}, {return_url}. Works with bmlt-workflow, any hosted form, or a mailto: URL. Leave empty to hide the link."
+MOD_CRUMB_FIELD_COLUMNS_LABEL="Columns"
+MOD_CRUMB_FIELD_COLUMNS_DESC="Optional. Comma-separated list of columns to show in list view (e.g. time,name,location,address,service_body). Omit a name to hide that column. Leave empty to use the widget default."
+
MOD_CRUMB_FIELD_WIDGET_CONFIG_LABEL="Widget Configuration (JSON)"
MOD_CRUMB_FIELD_WIDGET_CONFIG_DESC="Optional. CrumbWidgetConfig in JSON format. See https://crumb.bmlt.app/ for available options."
diff --git a/packages/module/mod_crumb.xml b/packages/module/mod_crumb.xml
index b0f29d9..817f704 100644
--- a/packages/module/mod_crumb.xml
+++ b/packages/module/mod_crumb.xml
@@ -7,7 +7,7 @@
GPL v2 or laterbmlt-enabled@googlegroups.comhttps://github.com/bmlt-enabled/crumb-joomla
- 0.4.0
+ 0.5.0MOD_CRUMB_XML_DESCRIPTIONBmltEnabled\Module\Crumb\Site
@@ -101,6 +101,15 @@
filter="raw"
default=""
/>
+