Skip to content

TinyMCE Integration

WriteTrack includes a first-party TinyMCE integration, compatible with TinyMCE v6+.

Install WriteTrack alongside TinyMCE:

Terminal window
npm i writetrack tinymce
import tinymce from 'tinymce';
import { createWriteTrackTinyMCE } from 'writetrack/tinymce';
tinymce.init({
selector: '#editor',
inline: true, // recommended for full WriteTrack support
setup: (editor) => {
const handle = createWriteTrackTinyMCE(editor, {
license: 'your-license-key',
});
// Access WriteTrack data after editor init
editor.on('init', () => {
const data = handle.tracker?.getData();
});
},
});

Pass options as the second argument:

const handle = createWriteTrackTinyMCE(editor, {
license: 'your-license-key',
userId: 'user-123',
contentId: 'document-456',
metadata: { formName: 'signup' },
autoStart: true, // default
});
OptionTypeDefaultDescription
licensestringundefinedWriteTrack license key
userIdstringundefinedUser identifier included in metadata
contentIdstringundefinedContent identifier included in metadata
metadataRecord<string, unknown>undefinedAdditional metadata
autoStartbooleantrueStart tracking when editor initializes
wasmUrlstringundefinedURL to WASM binary for analysis
persistbooleanfalseEnable IndexedDB session persistence (requires contentId)

The tracker is available after TinyMCE’s init event fires:

tinymce.init({
selector: '#editor',
inline: true,
setup: (editor) => {
const handle = createWriteTrackTinyMCE(editor, {
license: 'your-license-key',
});
editor.on('init', () => {
const tracker = handle.tracker;
const data = tracker?.getData();
const isTracking = handle.isTracking;
});
},
});

If you prefer not to use the integration, you can attach WriteTrack directly in inline mode:

import WriteTrack from 'writetrack';
import tinymce from 'tinymce';
tinymce.init({
selector: '#editor',
inline: true,
setup: (editor) => {
editor.on('init', () => {
const tracker = new WriteTrack({
target: editor.getBody(),
license: 'your-license-key',
});
tracker.start();
});
},
});

The integration automatically cleans up when TinyMCE’s remove event fires. You can also call destroy() manually:

handle.destroy();
import type {
WriteTrackTinyMCEOptions,
WriteTrackTinyMCEHandle,
} from 'writetrack/tinymce';