A lightweight content layer for your family: a shared wiki for recipes and traditions, an event calendar, and an announcements board. Structured content that outlasts any social post.
nself-cms is included in both the ɳFamily and ClawDE bundles. Installing either bundle provides the same plugin binary. A single install serves both products simultaneously.
nself license set nself_pro_...
nself plugin install cms
nself build
nself startnself-cms stores structured content in three categories: wiki pages, calendar events, and announcements. Each category has its own schema, visibility rules, and editing permissions. Unlike nself-social, CMS content is meant to persist and be updated in place — a recipe wiki page is not a post that scrolls away.
Wiki pages support Markdown with a structured front-matter header (title, tags, last-edited-by). Any family member with write access can update a page. Edit history is stored as a JSON diff array — you can diff any two versions or roll back. Events have a start datetime, optional end, location, RSVP list, and a description. Announcements are pinned notices with an expiry date.
For ClawDE, the cms plugin stores project context pages that the AI assistant can reference. The category model is the same — ClawDE just writes to a different category namespace (clawde.* vs family.*).
| Variable | Required | Default | Description |
|---|---|---|---|
PLUGIN_CMS_ENABLED_CATEGORIES | No | wiki,events,announcements | Comma-separated list of categories to activate |
PLUGIN_CMS_WIKI_EDIT_ROLE | No | member | Minimum nself role that can edit wiki pages. Options: member, admin |
PLUGIN_CMS_EVENT_RSVP | No | true | Enable RSVP tracking on calendar events |
PLUGIN_CMS_HISTORY_MAX_VERSIONS | No | 50 | Max edit versions stored per wiki page |
PLUGIN_CMS_ANNOUNCEMENT_MAX_DAYS | No | 90 | Maximum expiry window for pinned announcements |
| Endpoint | Method | Description |
|---|---|---|
/cms/wiki | GET / POST | List wiki pages or create a new page |
/cms/wiki/:slug | GET / PUT / DELETE | Get current version, update, or delete a wiki page |
/cms/wiki/:slug/history | GET | List edit history for a page |
/cms/events | GET / POST | List upcoming events or create one |
/cms/events/:id/rsvp | POST | RSVP to an event. Body: { attending: true|false|maybe } |
/cms/announcements | GET / POST | List active announcements or create one (admin only) |
/health | GET | Plugin health check |
| Table | Purpose |
|---|---|
np_cms_pages | Wiki page: slug, title, category, body (Markdown), visibility, last_edited_by |
np_cms_page_history | Edit versions as JSON diffs with editor ID and timestamp |
np_cms_events | Event: title, start_at, end_at, location, description, organizer_id |
np_cms_event_rsvps | RSVP: event_id, member_id, attending enum (yes/no/maybe) |
np_cms_announcements | Announcement: title, body, pinned_until, author_id |
| Event | Payload |
|---|---|
cms.post.published | Page or announcement ID, category, author ID, title |
cms.event.created | Event ID, title, start_at, organizer ID |
cms.rsvp.updated | Event ID, member ID, attending status |
The nself-activity-feed plugin subscribes to cms.post.published to surface new wiki pages and announcements in the family timeline. Wire cms.event.created to nself-notify to send push reminders before events.
| Feature | nself-cms | Notion | Google Sites |
|---|---|---|---|
| Self-hosted | Yes | No | No |
| Edit history | Full diff history | Yes (paid plans) | Limited |
| Event + RSVP built-in | Yes | No (database workaround) | No |
| Data privacy | Your VPS, no sharing | Notion servers | Google servers |
| Symptom | Fix |
|---|---|
| Wiki edit returns 403 | Check PLUGIN_CMS_WIKI_EDIT_ROLE. The member may not have the required role. Admins can always edit. |
| Slug conflict on page create | Slugs are unique per category. Use a different slug or update the existing page via PUT. |
| Event not appearing in activity feed | Confirm events is in PLUGIN_ACTIVITY_SOURCES and nself-activity-feed is installed. |
Port: 3828 | Bundles: ɳFamily + ClawDE ($0.99/mo each) or ɳSelf+ ($3.99/mo) | Last Updated: May 2026 | Plugin Version 1.0.13