Skip to main content
The @janhq/core package provides all the APIs, types, and interfaces needed to build Jan extensions.

Installation

Import

Base Classes

BaseExtension

All extensions extend from BaseExtension:

Key Methods

() => void
required
Called when the extension is loaded. Initialize your extension here.
() => void
required
Called when the extension is unloaded. Clean up resources here.
() => ExtensionTypeEnum | undefined
Returns the extension type. Return undefined for generic extensions.
(settings: SettingComponentProps[]) => Promise<void>
Register settings for your extension that appear in Jan’s UI.
<T>(key: string, defaultValue: T) => Promise<T>
Get a setting value by key. Returns defaultValue if not found.
(settings: Partial<SettingComponentProps>[]) => Promise<void>
Update one or more settings programmatically.
<T>(key: string, value: T) => void
Called when a setting is updated by the user. Override to react to changes.
(models: Model[]) => Promise<void>
Register models that can be used in Jan.

InferenceExtension

Extends BaseExtension for inference implementations:
(data: MessageRequest) => Promise<ThreadMessage>
required
Perform inference on a message request and return the response.

ConversationalExtension

Extends BaseExtension for conversation management:

AssistantExtension

Extends BaseExtension for assistant management:

Extension Types

Event System

The event system allows extensions to communicate:

Message Events

Example:

Inference Events

Core Types

Model

Thread

ThreadMessage

ThreadContent

MessageRequest

Assistant

Settings

Utility Functions

File System

Path Utilities

UI Utilities

Example: Complete Extension

Next Steps

Building Extensions

Learn how to package and distribute

Examples

Explore real extension examples