Instance and configuration reference
Look up public Classic creation settings, updates, instance methods and UI controls.
Use this page to look up types, the quick start to integrate, and configuration and lifetime to choose an update strategy. Import types from @quirekit/classic-editor; Vue hosts create the runtime through /vue.
Creation options
preset selects the model and defaults, plugins installs product capabilities, and extensions adds content extensions. media and host establish instance services at creation and cannot be replaced through updates.
@quirekit/classic-editorAGPL-3.0-onlyOptions accepted when creating a Classic Editor product instance.
export interface ClassicEditorOptions {
readonly element?: HTMLElement | null | undefined;
readonly document?: QuireEditorContent | undefined;
readonly preset?: ClassicEditorPreset | undefined;
readonly locale?: ClassicEditorLocale | undefined;
readonly surfaceMode?: ClassicEditorSurfaceMode | undefined;
readonly features?: ClassicEditorFeatureOptions | undefined;
readonly plugins?: readonly ClassicEditorPlugin[] | undefined;
readonly extensions?: readonly QuireAnyExtension[] | undefined;
readonly editable?: boolean | undefined;
readonly view?: ClassicEditorViewOptions | undefined;
readonly canvasRuntime?: Readonly<Partial<CanvasMountedViewRuntimeOptions>> | undefined;
readonly svgRuntime?: Readonly<Partial<SvgMountedViewRuntimeOptions>> | undefined;
readonly theme?: QuireKitTheme | undefined;
readonly shell?: ClassicEditorShellOptions | undefined;
readonly ui?: ClassicEditorUiProfileOptions | undefined;
readonly webFonts?: ClassicEditorWebFontOptions | false | undefined;
readonly media?: ClassicEditorMediaServices | undefined;
readonly host?: ClassicEditorHostServices | undefined;
}Update options
Locale, editability and built-in preset theme updates retain the session; structural settings still rebuild Core. plugins / extensions replace arrays; options such as features / shell merge by field. Updating an array does not append entries. See configuration rules.
@quirekit/classic-editorAGPL-3.0-onlyRuntime options accepted by `ClassicEditorInstance.update()`.
export interface ClassicEditorUpdateOptions {
readonly document?: QuireEditorContent | undefined;
readonly preset?: ClassicEditorPreset | undefined;
readonly locale?: ClassicEditorLocale | undefined;
readonly features?: ClassicEditorFeatureOptions | undefined;
readonly plugins?: readonly ClassicEditorPlugin[] | undefined;
readonly extensions?: readonly QuireAnyExtension[] | undefined;
readonly editable?: boolean | undefined;
readonly view?: ClassicEditorViewOptions | undefined;
readonly canvasRuntime?: Readonly<Partial<CanvasMountedViewRuntimeOptions>> | undefined;
readonly svgRuntime?: Readonly<Partial<SvgMountedViewRuntimeOptions>> | undefined;
readonly theme?: QuireKitTheme | undefined;
readonly shell?: ClassicEditorShellOptions | undefined;
readonly ui?: ClassicEditorUiProfileOptions | undefined;
readonly webFonts?: ClassicEditorWebFontOptions | false | undefined;
}Product instance
Read instance.editor again after update() or unmount(), rather than sending commands to a cached old Core. getJSON() returns canonical content; the application separately manages product names, document IDs, media bytes and storage acknowledgements.
@quirekit/classic-editorAGPL-3.0-onlyPublic lifecycle and integration surface returned by `createClassicEditor`.
export interface ClassicEditorInstance {
readonly isMounted: boolean;
readonly isDestroyed: boolean;
readonly editor: QuireEditor | undefined;
readonly root: HTMLElement | undefined;
readonly features: ClassicEditorResolvedFeatures;
readonly locale: ClassicEditorLocale;
readonly documentName: string;
readonly backend: ClassicEditorViewBackend;
readonly registry: ClassicEditorRegistrySnapshot;
readonly ui: ClassicEditorUiController;
readonly documentFontStatus: ClassicEditorDocumentFontStatus;
readPageLayout?(document: PMNode): readonly ClassicEditorPageLayout[] | null;
readonly fontLibrary: ClassicEditorFontLibrary | undefined;
readonly media: ClassicEditorMediaServices;
readonly hostResources: ClassicEditorHostResourceController;
readonly tasks: ClassicEditorTaskFeedbackController;
readonly resourceTasks: ClassicEditorHostResourceTaskController;
setDocumentName(name: string): void;
mount(element: HTMLElement): void;
unmount(): void;
update(options: ClassicEditorUpdateOptions): void;
isContributionAvailable(behavior: ClassicEditorBehavior, payload?: unknown): boolean;
canExecuteContribution(behavior: ClassicEditorBehavior, payload?: unknown): boolean;
executeContribution(behavior: ClassicEditorBehavior, payload?: unknown, trigger?: ClassicEditorBehaviorTrigger): boolean | Promise<boolean>;
refreshProductUi(): void;
createReadOnlySnapshot(document: PMNode): QuireEditor;
importDocument(serviceId: string, input: ClassicEditorImportArtifact, options?: ClassicEditorImportOptions): Promise<void>;
exportDocument(serviceId: string): Promise<ClassicEditorExportArtifact>;
getJSON(): QuireJSONContent;
destroy(): void;
}UI controller
Use instance.ui for zoom, ruler and sidebar changes while retaining document and history. subscribe() returns a cleanup function. Panel IDs refer to installed sidebar contributions; opening a panel does not create a missing contribution.
@quirekit/classic-editorAGPL-3.0-onlyTyped runtime authority for non-document product UI state.
export interface ClassicEditorUiController {
readonly state: ClassicEditorUiState;
setZoom(percent: number): void;
setZoomMode(mode: ClassicEditorZoomMode): void;
setRulerVisible(visible: boolean): void;
setInvisibleCharactersVisible(visible: boolean): void;
setHiddenTextVisible(visible: boolean): void;
subscribe(listener: ClassicEditorUiStateListener): () => void;
setSidebarVisible(side: "left" | "right", visible: boolean): void;
toggleSidebar(side: "left" | "right"): void;
openSidebarPanel(side: "left" | "right", panelId: string, options?: ClassicEditorSidebarOpenOptions): void;
closeSidebar(side: "left" | "right"): void;
setSemanticSnapshot(snapshot: ClassicEditorUiSemanticSnapshot): void;
}Import cancellation and commit
Hosts cancel preparation through a signal. Custom services execute one synchronous document command inside context.commit(); invalid targets are rejected before writing. See files for usage and migration.
@quirekit/classic-editorAGPL-3.0-onlyOptional cancellation owned by the host that opens a document.
export interface ClassicEditorImportOptions {
readonly signal?: AbortSignal | undefined;
}@quirekit/classic-editorAGPL-3.0-onlyInstance-owned final write boundary supplied only to document import services.
export interface ClassicEditorImportContext extends ClassicEditorServiceContext {
readonly signal: AbortSignal;
commit(write: () => boolean): void;
}Preset presentation updates
This context refreshes an existing session's presentation. It cannot install extensions or change models. Explicit host color overrides should retain precedence.
@quirekit/classic-editorAGPL-3.0-onlyExisting session facts supplied while a preset refreshes its presentation.
export interface ClassicEditorPresetPresentationContext {
readonly editor: QuireEditor;
readonly theme: QuireKitTheme;
readonly locale: ClassicEditorLocale;
readonly canvasRuntime: Readonly<Partial<CanvasMountedViewRuntimeOptions>>;
readonly svgRuntime: Readonly<Partial<SvgMountedViewRuntimeOptions>>;
}Media and fonts
Follow durable media and fonts. Binary assets, browser font resources and logical document identities have separate owners.
@quirekit/classic-editorAGPL-3.0-onlyMedia authorities shared by one Classic Editor instance and its mounted views.
export interface ClassicEditorMediaServices {
readonly sink: QuireMediaAssetSink;
readonly registrar?: QuireMediaAssetRegistrar | undefined;
readonly resolver: QuireMediaAssetResolver;
createAssetId(kind: QuireMediaAssetKind): string;
}@quirekit/classic-editorAGPL-3.0-onlyHost policy and provider boundaries for Classic's external font library.
export interface ClassicEditorWebFontOptions {
readonly families: readonly ClassicEditorWebFontFamily[];
readonly mountedFamilies?: readonly ClassicEditorMountedFontFamily[] | undefined;
readonly sources?: readonly ClassicEditorWebFontSource[] | undefined;
readonly persistence?: ClassicEditorFontLibraryPersistence | undefined;
readonly catalogs: readonly QuireWebFontCatalog[];
readonly cache?: QuireWebFontCache | undefined;
readonly fetch?: QuireWebFontFetch | undefined;
readonly maxAssetBytes?: number | undefined;
readonly maxConcurrentAssets?: number | undefined;
}@quirekit/classic-editorAGPL-3.0-onlyMounted Classic authority for explicit external font installation.
export interface ClassicEditorFontLibrary {
readonly families: readonly ClassicEditorWebFontFamily[];
readonly sources: readonly ClassicEditorWebFontSource[];
readonly importedFamilies: readonly ClassicEditorImportedWebFontFamily[];
readonly mountedFamilies: readonly ClassicEditorMountedFontFamily[];
readonly recentFamilies: readonly string[];
rememberRecentFamily(family: string): void;
getInstallations(): readonly QuireWebFontInstallation[];
subscribe(listener: () => void): () => void;
getSourceSettings(sourceId: string): ClassicEditorWebFontSourceSettings;
configureSource(sourceId: string, settings: ClassicEditorWebFontSourceSettings): void;
search(sourceId: string, query: string, subsets?: readonly string[]): Promise<readonly ClassicEditorWebFontFamily[]>;
browse?(sourceId: string, query: string, limit: number, cursor?: string, subsets?: readonly string[]): Promise<ClassicEditorWebFontCatalogPage>;
inspectCustomSource?(descriptorUrl: string): Promise<ClassicEditorCustomWebFontSourceRecord>;
enableCustomSource?(record: ClassicEditorCustomWebFontSourceRecord): void;
inspectStylesheetSource?(url: string, name?: string): Promise<ClassicEditorStylesheetFontSourceRecord>;
enableStylesheetSource?(record: ClassicEditorStylesheetFontSourceRecord): void;
removeCustomSource?(sourceId: string): void;
previewFamily(family: ClassicEditorWebFontFamily): Promise<void>;
importFamily(family: ClassicEditorWebFontFamily, download?: boolean): Promise<void>;
removeFamily(family: ClassicEditorWebFontFamily | string): Promise<void>;
getStatus(family: string): QuireWebFontStatus;
install(family: string): Promise<void>;
}@quirekit/classic-editorAGPL-3.0-onlyProduct-facing logical and rendered font facts for the current document.
export interface ClassicEditorDocumentFontStatus {
readonly requestedFamily: string | null;
readonly renderedFamily: string | null;
readonly status: ClassicEditorDocumentFontStatusKind;
readonly source: QuireFontSubstitutionCandidateSource | null;
}