Skip to main content

Your First Extension

caution

This is currently under development.

In this guide, we'll walk you through the process of building your first extension and integrating it into Jan.

Steps to Create Your First Extension

To create your own extension, you can follow the steps below:

  1. Click the Use this template button at the top of the extension-template repository.
  2. Select Create a new repository.
  3. Choose an owner and name for your new repository.
  4. Click Create repository.
  5. Clone your new repository to your local machine.

Initial Setup

After you have cloned the repository to your local machine or codespace, you will need to perform some initial setup steps before you can develop your extension.

info

You will need to have a reasonably modern version of Node.js handy. If you are using a version manager like nodenv or nvm, you can run nodenv install in the root of your repository to install the version specified in package.json. Otherwise, 20.x or later should work!

  1. 🛠 Install the dependencies
npm install
  1. 🏗 Package the TypeScript for distribution
npm run bundle
  1. Check your artifact

There will be a .tgz file in your extension directory now. This is the file you will need to import into Jan. You can import this file into Jan by following the instructions in the Import Extension guide.

Update the Extension Metadata

The package.json file defines metadata about your extension, such as extension name, main entry, description and version.

When you copy this repository, update package.json with the name, and description for your extension.

Update the Extension Code

The src/ directory is the heart of your extension! This contains the source code that will be run when your extension extension functions are invoked. You can replace the contents of this directory with your own code.

There are a few things to keep in mind when writing your extension code:

  • Most Jan Extension functions are processed asynchronously. In index.ts, you will see that the extension function will return a Promise<any>.

    import { core } from "@janhq/core";

    function onStart(): Promise<any> {
    return core.invokePluginFunc(MODULE_PATH, "run", 0);
    }

For more information about the Jan Extension Core module, see the documentation.

Now, go ahead and start customizing your extension! Happy coding!