#Plugin API

#Meta information

In order to effectively showcase our product in the marketplace and during installation, it is crucial to include the meta information.

#id

plugin.${string}.${string} required

Unique id of module. Consists of type (plugin), author and name.

// Example
id: "plugin.inlang.json" 

#displayName

Record<LanguageTag, string> required The name that is displayed in the marketplace. The name will be localized in the future that's why there is the languageTag. For now en is fine.

// Example
displayName: { en: "Plugin Name" }

#description

Record<LanguageTag, string> required The description that is displayed in the marketplace. It will be localized in the future that's why there is the languageTag. For now en is fine.

// Example
description: { en: "This is the plugin description" }

#Message Handling

The load and save functions specify how the SDK loads and saves messages to build the query.

#loadMessages

function

Retrieve messages from storage for the SDK. (For the message-format plugin, messages are stored in json files.)

	loadMessages?: (args: {
		settings: ProjectSettings & ExternalSettings
		nodeishFs: NodeishFilesystemSubset
	}) => Promise<Message[]> | Message[]

#saveMessages

function Save messages from SDK to storage.

	saveMessages?: (args: {
		messages: Message[]
		settings: ProjectSettings & ExternalSettings
		nodeishFs: NodeishFilesystemSubset
	}) => Promise<void> | void

#Add Information

If Apps need specific information or configuration you can also pass in a custom api. This is for example used for the matcher plugins.

#addCustomApi

function The entries are per app. That's why the key needs to be the id of an app.

	addCustomApi?: (args: {
		settings: ProjectSettings & ExternalSettings
	}) =>
		| Record<`app.${string}.${string}`, unknown>
		| { "app.inlang.ideExtension": CustomApiInlangIdeExtension }

Was this helpful?

Thank you for your feedback ♥️