Skip to content

TinyMCE Integration

WriteTrack includes a native TinyMCE plugin, compatible with TinyMCE v6+ (including Moodle 4.4+).

Install WriteTrack alongside TinyMCE:

Terminal window
npm i writetrack tinymce

Import writetrack/tinymce to register the plugin, then add 'writetrack' to your plugins list:

import 'writetrack/tinymce';
tinymce.init({
selector: '#editor',
plugins: ['writetrack'],
writetrack_license: 'your-license-key',
});

The plugin works in both inline and iframe (default) editor modes. No extra configuration needed — iframe document context is detected automatically.

Pass options as TinyMCE editor options, prefixed with writetrack_:

tinymce.init({
selector: '#editor',
plugins: ['writetrack'],
writetrack_license: 'your-license-key',
writetrack_userId: 'user-123',
writetrack_contentId: 'document-456',
writetrack_metadata: { formName: 'signup' },
writetrack_autoStart: true,
});
OptionTypeDefaultDescription
writetrack_licensestringundefinedWriteTrack license key
writetrack_userIdstringundefinedUser identifier included in metadata
writetrack_contentIdstringundefinedContent identifier included in metadata
writetrack_metadataRecord<string, unknown>undefinedAdditional metadata
writetrack_autoStartbooleantrueStart tracking when editor initializes
writetrack_wasmUrlstringundefinedURL to WASM binary for analysis
writetrack_persistbooleanfalseEnable IndexedDB session persistence (requires writetrack_contentId)
writetrack_onTick(data: { activeTime: number; totalTime: number; tracker: WriteTrack }) => voidundefinedCallback fired every ~1s with active session time and tracker instance
writetrack_onReady(tracker: WriteTrack) => voidundefinedCallback fired when tracker is ready

The plugin API is available at editor.plugins.writetrack after the editor’s init event:

tinymce.init({
selector: '#editor',
plugins: ['writetrack'],
writetrack_license: 'your-license-key',
setup: (editor) => {
editor.on('init', () => {
const wt = editor.plugins.writetrack;
const data = wt.tracker?.getData();
const isTracking = wt.isTracking;
});
},
});

Or use the writetrack_onReady callback:

tinymce.init({
selector: '#editor',
plugins: ['writetrack'],
writetrack_license: 'your-license-key',
writetrack_onReady: (tracker) => {
console.log('WriteTrack ready', tracker.getData());
},
});
PropertyTypeDescription
trackerWriteTrack | nullThe WriteTrack instance (null until init)
isTrackingbooleanWhether capture is active
destroy()() => voidStop tracking and clean up
getMetadata()() => { name: string; url: string }Plugin metadata (for TinyMCE Help plugin)

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

editor.plugins.writetrack.destroy();
import type { WriteTrackTinyMCEPlugin } from 'writetrack/tinymce';