Developers / Plugin SDK

Extend the channel. Not an iframe.

Plugins are part of the product, not embedded in a 90s frame. Add custom blocks, channel tabs and slash commands that read and write the same data model the rest of Slick uses.

One package. TypeScript first.

The SDK is published on npm and ships full types for every block and event.

npm install @slick/plugin-sdk

A plugin in a dozen lines.

Declare what you contribute — a slash command, a block renderer, a channel tab — and the runtime wires it into the composer, the feed and the channel rail.

import { definePlugin, block, command } from "@slick/plugin-sdk";

export default definePlugin({
  id: "standup",
  name: "Standup",

  // A /standup slash command that posts a structured block.
  commands: [
    command("standup", async (ctx) => {
      await ctx.post(block.card({
        title: "Daily standup",
        rows: ctx.members.map((m) => ({ who: m.handle, status: "—" })),
      }));
    }),
  ],

  // A channel tab backed by your own state.
  tabs: [{ id: "board", title: "Board", mount: "./board" }],
});
Build something worth installing.