
Product
Introducing Repository Access Permissions and Custom Roles
Socket now supports Custom Roles and Repository Access Permissions so organizations can control who can access specific repositories and actions.
markstream-core
Advanced tools
Framework-agnostic smooth streaming controller and streaming text state utilities for Markstream
Framework-agnostic smooth streaming controller and streaming text state utilities for Markstream.
This package extracts the core pacing algorithm and streaming text resolution logic shared across all Markstream framework packages (Vue 3, Vue 2, React, Angular, Svelte).
npm install markstream-core
createSmoothMarkdownStreamFactory API for a framework-agnostic streaming controller with snapshot + subscribe semantics.
import { createSmoothMarkdownStream } from 'markstream-core'
const controller = createSmoothMarkdownStream({ minCharsPerSecond: 40, maxCharsPerSecond: 1000 })
const unsubscribe = controller.subscribe(() => {
const snapshot = controller.getSnapshot()
updateUI(snapshot.visible)
if (snapshot.final)
onStreamDone()
})
controller.enqueue(chunk)
controller.finish()
controller.flush()
controller.pause()
controller.resume()
controller.destroy()
controller.dispose() // alias of destroy()
unsubscribe()
SmoothMarkdownStreamController is the public controller interface type returned by createSmoothMarkdownStream.
SmoothMarkdownStreamOptions)| Option | Default | Description |
|---|---|---|
minCharsPerSecond | 40 | Minimum reveal speed |
maxCharsPerSecond | 1000 | Maximum reveal speed |
targetLatencyMs | 900 | Target latency for pacing calculation |
catchUpLatencyMs | 350 | Latency threshold for catch-up mode |
catchUpThreshold | 600 | Character backlog that triggers catch-up |
maxCommitFps | 30 | Maximum commits per second |
startDelayMs | 80 | Delay before first reveal |
maxCharsPerCommit | 80 | Maximum characters per animation frame |
flushOnFinish | false | Auto-flush when finish() is called |
resolveStreamingTextStateResolves the next streaming text state for simple append detection.
import { resolveStreamingTextState } from 'markstream-core'
const result = resolveStreamingTextState({
nextContent: 'hello world',
previousContent: 'hello',
typewriterEnabled: true,
})
// result = { settledContent: 'hello', streamedDelta: ' world', appended: true }
resolveStreamingTextUpdateExtended resolver that handles React StrictMode replay guards and stream version resets.
import { resolveStreamingTextUpdate } from 'markstream-core'
const result = resolveStreamingTextUpdate({
nextContent: 'hello world!',
currentState: { settledContent: 'hello', streamedDelta: ' world' },
typewriterEnabled: true,
})
markstream-core exports shared helpers used by Markstream adapters to normalize Shiki language and theme options before calling stream-markdown.
import {
getHighlightRegistrationKey,
getRegisterHighlightOptions,
getRuntimeShikiRegistrationConfig,
getShikiLangs,
getShikiRendererOptions,
getShikiThemes,
normalizeShikiLanguage,
registerHighlightOnce,
} from 'markstream-core'
getShikiLangs(langs) normalizes common Shiki language aliases, removes duplicates, and sorts the result because language preload order has no priority semantics.getShikiThemes(themes) keeps valid string themes, removes duplicates, and preserves caller order so theme priority is not changed.getRegisterHighlightOptions(themes, langs) and getShikiRendererOptions(themes, langs) return normalized options for registerHighlight() and createShikiStreamRenderer().getHighlightRegistrationKey(themes, langs) returns a normalized key. Language order is stable for equivalent preload sets, while theme order is preserved because renderer theme priority is order-sensitive.getRuntimeShikiRegistrationConfig(themes, langs, options) returns framework-neutral runtime config for adapters that may have a renderer without registerHighlight().registerHighlightOnce(registerHighlight, opts, key) coalesces in-flight registrations for the same registerHighlight function and key.useSmoothMarkdownStream in markstream-vue wraps the core controller with Vue reactivity.markstream-core internally.
Import core APIs directly from markstream-core when needed.MIT
FAQs
Framework-agnostic smooth streaming controller and streaming text state utilities for Markstream
We found that markstream-core demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket now supports Custom Roles and Repository Access Permissions so organizations can control who can access specific repositories and actions.

Product
Socket MCP now lets AI assistants review org alerts, investigate threats using the Socket threat feed, and inspect package files in addition to dependency scoring.

Product
Socket Firewall blocks malicious VS Code and Open VSX extensions before install, protecting developers from compromised editor marketplaces.