electron-tray-menu-builder
Generate system tray and context menu configurations with platform-specific icons, menu templates, and event handling
Best use case
electron-tray-menu-builder is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
Generate system tray and context menu configurations with platform-specific icons, menu templates, and event handling
Teams using electron-tray-menu-builder should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/electron-tray-menu-builder/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How electron-tray-menu-builder Compares
| Feature / Agent | electron-tray-menu-builder | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
Generate system tray and context menu configurations with platform-specific icons, menu templates, and event handling
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# electron-tray-menu-builder
Generate system tray and context menu configurations for Electron applications. This skill handles platform-specific icon requirements, menu template creation, and tray event handling across Windows, macOS, and Linux.
## Capabilities
- Generate Tray class implementation with proper lifecycle
- Create platform-specific icon sets (ICO, ICNS, PNG)
- Build menu templates with submenus and separators
- Handle click events (single, double, right-click)
- Implement tooltip and balloon notifications
- Support dynamic menu updates
- Handle tray icon state changes (normal, active, highlighted)
- Generate TypeScript types for menu items
## Input Schema
```json
{
"type": "object",
"properties": {
"projectPath": {
"type": "string",
"description": "Path to the Electron project root"
},
"menuStructure": {
"type": "array",
"description": "Menu item definitions",
"items": {
"type": "object",
"properties": {
"label": { "type": "string" },
"type": { "enum": ["normal", "separator", "submenu", "checkbox", "radio"] },
"accelerator": { "type": "string" },
"enabled": { "type": "boolean" },
"visible": { "type": "boolean" },
"click": { "type": "string", "description": "Handler function name" },
"submenu": { "type": "array" }
}
}
},
"iconPaths": {
"type": "object",
"properties": {
"default": { "type": "string" },
"pressed": { "type": "string" },
"highlighted": { "type": "string" }
}
},
"features": {
"type": "array",
"items": {
"enum": ["tooltip", "balloon", "click-handler", "double-click", "context-menu", "dynamic-update"]
}
},
"targetPlatforms": {
"type": "array",
"items": { "enum": ["win32", "darwin", "linux"] }
}
},
"required": ["projectPath", "menuStructure"]
}
```
## Output Schema
```json
{
"type": "object",
"properties": {
"success": { "type": "boolean" },
"files": {
"type": "array",
"items": {
"type": "object",
"properties": {
"path": { "type": "string" },
"description": { "type": "string" }
}
}
},
"iconRequirements": {
"type": "object",
"description": "Required icon files per platform"
},
"warnings": { "type": "array", "items": { "type": "string" } }
},
"required": ["success"]
}
```
## Platform Considerations
### Windows
- Icon format: ICO (16x16, 32x32, 48x48, 256x256)
- Supports balloon notifications
- Double-click shows main window (convention)
- Tray icon persists in system tray
### macOS
- Icon format: PNG (16x16, 32x32 @1x and @2x)
- Must be template images for dark/light mode
- Uses Menu Bar (not system tray)
- pressedImage for clicked state
- No balloon notifications (use Notification Center)
### Linux
- Icon format: PNG (various sizes)
- Behavior varies by desktop environment
- AppIndicator support recommended
- May require libappindicator
## Generated Code Example
```javascript
// tray-manager.js
const { app, Tray, Menu, nativeImage } = require('electron');
const path = require('path');
class TrayManager {
constructor(mainWindow) {
this.mainWindow = mainWindow;
this.tray = null;
}
create() {
const iconPath = this.getIconPath();
this.tray = new Tray(iconPath);
this.tray.setToolTip('My Application');
this.tray.setContextMenu(this.buildMenu());
// Platform-specific behavior
if (process.platform === 'win32') {
this.tray.on('double-click', () => this.showWindow());
} else if (process.platform === 'darwin') {
this.tray.on('click', () => this.toggleWindow());
}
}
getIconPath() {
const iconName = process.platform === 'win32'
? 'tray.ico'
: process.platform === 'darwin'
? 'trayTemplate.png' // Template image for macOS
: 'tray.png';
return path.join(__dirname, '../assets/icons', iconName);
}
buildMenu() {
const template = [
{
label: 'Show App',
click: () => this.showWindow()
},
{ type: 'separator' },
{
label: 'Status',
submenu: [
{ label: 'Online', type: 'radio', checked: true },
{ label: 'Away', type: 'radio' },
{ label: 'Busy', type: 'radio' }
]
},
{ type: 'separator' },
{
label: 'Quit',
accelerator: process.platform === 'darwin' ? 'Cmd+Q' : 'Ctrl+Q',
click: () => app.quit()
}
];
return Menu.buildFromTemplate(template);
}
showWindow() {
if (this.mainWindow) {
this.mainWindow.show();
this.mainWindow.focus();
}
}
toggleWindow() {
if (this.mainWindow.isVisible()) {
this.mainWindow.hide();
} else {
this.showWindow();
}
}
updateMenu(newTemplate) {
this.tray.setContextMenu(Menu.buildFromTemplate(newTemplate));
}
setIcon(iconPath) {
this.tray.setImage(iconPath);
}
destroy() {
if (this.tray) {
this.tray.destroy();
this.tray = null;
}
}
}
module.exports = TrayManager;
```
## Icon Requirements
### Template Images (macOS)
```javascript
// For macOS dark/light mode support
const icon = nativeImage.createFromPath('trayTemplate.png');
icon.setTemplateImage(true);
```
### Multi-Resolution Icons
```
assets/icons/
├── tray.ico # Windows (multi-resolution)
├── trayTemplate.png # macOS @1x (16x16 or 22x22)
├── trayTemplate@2x.png # macOS @2x
├── tray.png # Linux (24x24 or 22x22)
└── tray-active.png # State variant
```
## Best Practices
1. **Use template images on macOS**: Automatically adapts to dark/light mode
2. **Provide multiple resolutions**: Support high DPI displays
3. **Handle tray destruction**: Clean up on app quit
4. **Minimize tray updates**: Batch menu updates to avoid flicker
5. **Follow platform conventions**: Double-click on Windows, single-click on macOS
6. **Test on all platforms**: Behavior varies significantly
## Related Skills
- `electron-builder-config` - Include tray icons in build
- `native-notification-builder` - Notifications from tray
- `appkit-menu-bar-builder` - macOS native menu bar apps
## Related Agents
- `electron-architect` - Architecture guidance
- `platform-convention-advisor` - Platform UI conventionsRelated Skills
process-builder
Scaffold new babysitter process definitions following SDK patterns, proper structure, and best practices. Guides the 3-phase workflow from research to implementation.
developer-portal-builder
Build unified developer portals with Backstage or custom frameworks
cli-framework-builder
Build command-line interfaces for SDK interaction
probuilder
Unity ProBuilder skill for level prototyping.
menu-systems
Menu skill for navigation and settings.
protocol-builder
Skill for building standardized research protocols
interactive-dashboard-builder
Skill for building interactive data dashboards
qiskit-circuit-builder
IBM Qiskit integration skill for quantum circuit construction, transpilation, and execution on IBM Quantum hardware
qec-code-builder
Quantum error correction code implementation skill for fault-tolerant quantum computing
cirq-circuit-builder
Google Cirq integration skill for quantum circuit design and execution on Google quantum processors
reduction-builder
Construct and verify polynomial-time reductions between computational problems
operational-semantics-builder
Define and test operational semantics specifications for programming languages