Repository navigation
Plugin Compatibility
Allison Bayless edited this page Oct 17, 2026
·
1 revision
Plugin API v1 is versioned independently of TideMail releases. Breaking protocol changes require a new API version.
The same number appears in three places, and all three must be 1:
- the manifest's
apifield: the protocol the plugin speaks; - every request's
api: the protocol TideMail is using; - every response's
api: the protocol the plugin answered in.
A TideMail build supports one API version. A manifest with another api is
rejected at startup with a message naming both versions, and a response with
another api fails the call.
- the request and response envelopes, and the error object;
- the five methods (
ping,message.metadata,message.received,plugin.test,report.run) and their payloads; - the report round protocol, and the query methods, parameters, fields, and result shapes in queries.md and analytics.md;
- structured view format 1 (views.md); new block types or fields
come with a higher
context.views; - the
message.metadatafields; - the manifest fields, permission names, and setting types;
- the annotation format, its validation limits, and replace-on-success;
- stdout for the response only, stderr for diagnostics.
These are additions or runtime policy, not protocol:
- New optional fields, in requests, metadata, or envelopes. Ignore fields you do not recognize.
- New methods, events, or capabilities, which a plugin receives only if it declares them or TideMail calls them by hand. Answer unknown methods with an error.
- New query methods, fields, scopes, filters, or result fields. Ignore result fields you do not recognize.
- Runtime limits: timeouts, queue sizes, rate limits, process counts, pause thresholds (see events.md), and report limits (rounds, queries, page and result sizes).
- Presentation: how, where, and in what colors annotations appear, and which conventional keys and values TideMail's views use.
- User interface for running, configuring, and inspecting plugins.
- removing or renaming a field, method, permission, or setting type;
- changing a field's type or meaning;
- tightening validation so that previously valid responses fail;
- changing replace-on-success semantics.
These do not exist in API v1. Do not rely on them:
- custom plugin panes, screens, or HTML UI (structured views are drawn by TideMail from semantic blocks);
- plugin-defined colors, styles, or glyphs;
- toolbar or menu extensions, or plugin-defined keybindings;
- mutating mail (moving, deleting, flagging, sending), or any write through queries;
- direct database access, SQL, or arbitrary query expressions;
- long-running background daemons: every call is one short-lived process;
- message bodies beyond the encrypted or signed parts sent by
message.decodeandmessage.prepare(themessage_bodypermission is reserved).
Plugin support in TideMail is experimental. The protocol rules above apply to API v1, but the plugin UI and runtime policy may change freely, and there is no promise yet about how long a given API version will be supported.