Skip to content

Segment Sink

The Segment sink sends session data as a track event using your existing @segment/analytics-next client. WriteTrack doesn’t bundle the Segment SDK — you provide your initialized client.

You need @segment/analytics-next v1.8.0 or later already initialized in your application.

Terminal window
npm i @segment/analytics-next
import { WriteTrack, segment } from 'writetrack';
import { AnalyticsBrowser } from '@segment/analytics-next';
// Initialize Segment (your existing setup)
const analytics = AnalyticsBrowser.load({
writeKey: 'YOUR_WRITE_KEY',
});
const tracker = new WriteTrack({
target: textarea,
userId: 'u_abc123',
});
tracker.pipe(
segment({
client: analytics,
})
);
tracker.start();
OptionTypeDefaultDescription
clientSegmentClientInitialized Segment analytics client Required
eventNamestring'WriteTrack Session'Custom track event name

The sink calls client.track(eventName, properties) with the following properties:

PropertySourceDescription
durationmetadata.durationSession duration in ms
keystrokeCountsession.events.lengthTotal keystroke events
qualityLevelquality.qualityLevelPOOR / FAIR / GOOD / EXCELLENT
targetElementmetadata.targetElementElement type (e.g. textarea)
schemaVersionversionSchema version
userIdmetadata.userIdUser ID (if provided)
contentIdmetadata.contentIdContent ID (if provided)
custommetadata.customCustom metadata (if provided)
tracker.pipe(
segment({
client: analytics,
eventName: 'Typing Session Captured',
})
);

Track events appear in the Segment Debugger with:

  • Event name: WriteTrack Session (or your custom name)
  • Properties: duration, keystrokeCount, qualityLevel, etc.

From Segment, the data flows to any connected destination (warehouses, analytics tools, marketing platforms).

tracker.on('pipe:error', (err, sink) => {
console.error('Segment sink failed:', err);
});