gNode-CMS

Geodineum

gNode-CMS

The default content-management extension for the gNode daemon: Tera template rendering, content storage, asset bundling, and message-format handling, added to gNode as signed commands.

Built by Niels Erik Toren · signed gNode extension (compiles into the daemon); version in extension.yaml


What it is

gNode-CMS is a signed gNode extension, not a standalone program. It has no binary of its own - its Rust handlers and Lua library are verified against the author key and compiled into the gNode daemon through the signed-extension pipeline. It ships loaded by default with every install and is the reference implementation of the gNode extension system.

Once loaded, it adds a content-management surface to the daemon: rendering templates, storing and bundling content and assets, and registering message formats - all reached the same way as any gNode command, over the ValKey wire.

Public build surface

What you build against is the command and Lua surface gNode-CMS adds to the daemon - 23 commands across template, content, asset, and format domains, plus the GNODE_ASSET_* FCALL library. You invoke them through the gNode wire protocol (an XADD to the unified stream, or via gNode-Client), exactly like a base command; you never call this repository directly.

That surface has one catalogue, and it is gNode's: gNode/COMMAND_SCHEMA.md lists every CMS command and every GNODE_ASSET_* function with its parameters - and gNode's own schema checker verifies it against a CMS-loaded build, so the catalogue can't silently drift. This extension's integration specifics live in CONTRACT.md.

Internal - the handler sources under src/handlers/ and functions/gnode_asset.lua are implementation; they are covered by the extension signature and change together with a re-sign.

Capabilities

Contract

The precise integration surface - each command's parameters and returns, the GNODE_ASSET_* FCALL contract, the ValKey key patterns, and the configuration schema - is in CONTRACT.md. Agents should prime from CONTRACT.scn.md. The full command catalogue is gNode/COMMAND_SCHEMA.md.

Quick start

gNode-CMS is already loaded on any standard install - there is nothing to install. Confirm the daemon sees it, then call a CMS command over the wire (the braces are a literal ValKey cluster hash-tag):

AUTH="$(sudo cat /etc/geodineum/credentials/valkey.password)"

# Is the extension loaded?
REDISCLI_AUTH="$AUTH" redis-cli -p 47445 XADD '{mysite}:gnode:unified:production' '*' \
    id req-1 t c c extension_list p '{}' ss mysite sn node-1 ts 1718000000000
REDISCLI_AUTH="$AUTH" redis-cli -p 47445 GET '{mysite}:res:req-1'   # lists "cms"

# Store a minified, compressed asset (asset_store) the same way
REDISCLI_AUTH="$AUTH" redis-cli -p 47445 XADD '{mysite}:gnode:unified:production' '*' \
    id req-2 t c c asset_store ss mysite sn node-1 ts 1718000000000 \
    p '{"key":"main.css","content":"body{color:#111}","content_type":"text/css","minify":true,"gzip":true}'

Each command's parameters are in gNode/COMMAND_SCHEMA.md. In practice the WordPress themes reach these commands through gCore and gNode-Client rather than raw XADD.

Limits worth knowing

Collaborate

Contributions are welcome. Open issues and pick up work on the ecosystem board at geodineum.com; issues tagged good-first-issue are a good place to start.

Author & support

Built by Niels Erik Toren.

If you want to support the work:

Currency Address
Bitcoin (BTC) bc1qwf78fjgapt2gcts4mwf3gnfkclvqgtlg4gpu4d
Ethereum (ETH) 0xf38b517Dd2005d93E0BDc1e9807665074c5eC731 / nierto.eth
Monero (XMR) 8BPaSoq1pEJH4LgbGNQ92kFJA3oi2frE4igHvdP9Lz2giwhFo2VnNvGT8XABYasjtoVY2Qb3LVHv6CP3qwcJ8UnyRtjWRZ5

Disclaimer

This software is provided "as is", without warranty of any kind, express or implied. Use of this software is entirely at your own risk. In no event shall the author or contributors be held liable for any damages arising from the use or inability to use this software.

License

Licensed under either of

at your option.