Extending tinymash
Themes change public presentation. Plugins add optional behavior, administration, routes, commands, storage, or content lifecycle handling.
Keep extension code outside authoritative runtime state. A staged upgrade copies configuration, users, content, drafts, media, and plugin data, but it does not copy third-party theme or plugin code. Add compatible extensions to the new release before running the final upgrade preparation.
Use the documented theme and plugin surfaces. Internal classes, copied first-party templates, storage details, HTML structure, and CSS selectors are not stable extension interfaces.
Document extension settings, storage, routes, scheduled work, CLI commands, backup behavior, and removal steps. Test upgrades with a copy of the site before replacing the live release.