Tabby Plugins
Discover, install, and develop plugins for Tabby terminal.
Installing Plugins
Plugins are installed through the Tabby Settings UI:
- •Open Settings (Ctrl+,)
- •Navigate to Plugins
- •Search for the plugin
- •Click Install
Plugins can also be configured in config.yaml:
yaml
plugins:
- name: "tabby-docker"
version: "latest"
- name: "tabby-save-output"
version: "latest"
Popular Plugins
Connection & Session
| Plugin | Description |
|---|---|
| tabby-docker | Connect to Docker containers |
| tabby-quick-cmds | Send commands to multiple tabs simultaneously |
| tabby-save-output | Record terminal output to file |
| tabby-workspace-manager | Save and restore workspace layouts |
Appearance & UI
| Plugin | Description |
|---|---|
| tabby-background | Custom background images |
| tabby-highlight | Keyword highlighting in terminal output |
| tabby-title-control | Customize tab titles |
Integration
| Plugin | Description |
|---|---|
| tabby-sftp-tab | SFTP file browser tab |
| tabby-sync-config | Sync config via Gist or Gitee |
| tabby-search-in-browser | Search selected text in browser |
| tabby-mcp-server | Model Context Protocol AI integration |
Plugin Development
Tabby plugins are npm packages built with Angular and TypeScript.
Plugin Structure
code
tabby-my-plugin/ ├── package.json # npm manifest with tabby keywords ├── tsconfig.json # TypeScript configuration ├── webpack.config.js # Webpack build configuration ├── src/ │ ├── index.ts # Module entry point │ ├── components/ # Angular components │ └── services/ # Angular services └── README.md
package.json
json
{
"name": "tabby-my-plugin",
"version": "1.0.0",
"description": "My Tabby plugin",
"keywords": ["tabby-plugin"],
"main": "dist/index.js",
"scripts": {
"build": "webpack --mode production",
"dev": "webpack --mode development --watch"
},
"peerDependencies": {
"tabby-core": "*",
"tabby-terminal": "*"
},
"devDependencies": {
"@angular/core": "^17.0.0",
"typescript": "^5.0.0",
"webpack": "^5.0.0"
}
}
Required: The tabby-plugin keyword is needed for plugin discovery.
Module Entry Point
typescript
// src/index.ts
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
@NgModule({
imports: [CommonModule],
declarations: [],
providers: [],
})
export default class MyPluginModule {
// Plugin initialization
}
Adding Tab Types
typescript
import { NgModule } from '@angular/core';
import { TabRecoveryProvider, NewTabParameters } from 'tabby-core';
@Injectable()
export class MyTabRecoveryProvider extends TabRecoveryProvider {
async recover(token: any): Promise<NewTabParameters | null> {
// Recover tab state after restart
return null;
}
}
@NgModule({
providers: [
{ provide: TabRecoveryProvider, useClass: MyTabRecoveryProvider, multi: true },
],
})
export default class MyPluginModule {}
Adding Settings
typescript
import { ConfigProvider, Platform } from 'tabby-core';
@Injectable()
export class MyConfigProvider extends ConfigProvider {
defaults = {
myPlugin: {
enabled: true,
option1: 'default',
},
};
platformDefaults = {
[Platform.Windows]: {},
[Platform.macOS]: {},
[Platform.Linux]: {},
};
}
Adding Terminal Decorators
typescript
import { TerminalDecorator, BaseTerminalTabComponent } from 'tabby-terminal';
@Injectable()
export class MyTerminalDecorator extends TerminalDecorator {
attach(tab: BaseTerminalTabComponent): void {
// Subscribe to terminal events
tab.sessionChanged$.subscribe(() => {
// React to session changes
});
tab.output$.subscribe(data => {
// Process terminal output
});
}
detach(tab: BaseTerminalTabComponent): void {
// Cleanup
}
}
Adding Hotkeys
typescript
import { HotkeyProvider, HotkeyDescription } from 'tabby-core';
@Injectable()
export class MyHotkeyProvider extends HotkeyProvider {
hotkeys: HotkeyDescription[] = [
{
id: 'my-plugin:action',
name: 'My Plugin Action',
},
];
}
Plugin API Core Concepts
| Concept | Description |
|---|---|
TabRecoveryProvider | Restore tab state after restart |
ConfigProvider | Define default configuration |
TerminalDecorator | Hook into terminal events |
HotkeyProvider | Register custom hotkeys |
ToolbarButtonProvider | Add toolbar buttons |
ProfileProvider | Add new profile types |
SettingsTabProvider | Add settings UI sections |
Local Development
- •Clone the Tabby repository
- •Create your plugin in a separate directory
- •Link it:
npm linkin plugin dir,npm link tabby-my-pluginin Tabby - •Build:
npm run buildornpm run devfor watch mode - •Restart Tabby to load changes
Publishing
- •Ensure
tabby-pluginkeyword in package.json - •Build:
npm run build - •Publish to npm:
npm publish - •Plugin appears in Tabby Settings > Plugins search
Plugin API Documentation
Full API reference: https://docs.tabby.sh/
Best Practices
- •Use peerDependencies for tabby-core and tabby-terminal
- •Handle errors gracefully - Don't crash the terminal
- •Clean up on unload - Unsubscribe from observables
- •Test across platforms - Windows, macOS, Linux
- •Support configuration - Use ConfigProvider for user settings
- •Follow Angular patterns - Dependency injection, modules, services