Tintero Developers

Tintero for developers

Make Tintero yours.

Your writing is yours and always will be. Your projects are saved as plain files, documented here down to the last field, so you can build something of your own that reads and writes your work with no Tintero anywhere in sight.

tintero-plugin-sdk.d.ts covers the whole API and the manifest. Drop it next to your source and a misspelled permission becomes a compile error.

A plugin, in about a minute

two files, one command

plugin.json

{
  "id": "com.example.hello",
  "name": "Hello",
  "version": "1.0.0",
  "description": "The smallest possible Tintero plugin",
  "author": {
    "name": "You"
  },
  "type": "sidebar-panel",
  "surfaces": [
    "sidebar"
  ],
  "main": "plugin.js",
  "scopes": [
    "ui.sidebar",
    "project.read"
  ],
  "ui": {
    "sidebar": {
      "label": "Hello"
    }
  }
}

plugin.js

(function () {
  const plugin = new TinteroPlugin();

  plugin.onActivate = async function () {
    const project = await tintero.project.getMetadata();
    document.body.innerHTML = '<h1>' + project.name + '</h1>';
  };

  registerPlugin(plugin);
})();

then

cd my-plugin && zip ../my-plugin.zip plugin.json plugin.js

Open Settings → Plugins → Load local plugin (dev) and pick the zip. The panel appears in the sidebar. The full walkthrough →

Nothing here is written down twice

The API tables, the permission list, the manifest fields, the events, the theme variables, every field of the file format and every node the editor can write are read out of the Tintero source when the site is built. The document schema is not even read: it is produced by running the editor's own schema builder, because nothing else would be honest. Rename a method, move a permission, add a field, and these pages change with it. And if a sentence somebody typed disagrees with the code, the build stops rather than publishing.

API methods
97
Permissions
55
Events
18
Theme variables
157
Format fields
677
Document types
52

project 39 ui 9 media 9 editor 7 convert 6 fs 5 storage 4 backup 4 export 4 app 3 settings 2 events 2 import 2 debug 2 net 1

How it actually runs

Worth knowing early, because it explains most of the rules.

In numbers: 100 calls / 1 s per plugin, arguments capped at 5 MB, and calls give up after 30 s. The whole model →