Skip to content

Conversation

@DeJeune
Copy link
Collaborator

@DeJeune DeJeune commented Jan 11, 2026

What this PR does

Before this PR:

  • Plugins could only be discovered from statically packaged sources
  • No way to install custom plugin packages

After this PR:

  • Users can install plugin packages from ZIP files by drag-and-drop
  • Users can install plugin packages from directories (folders)
  • Unified drag zone supports both ZIP and folder drops
  • Installed plugins are grouped by package with package-level uninstall option
  • Security: Path traversal protection and ZIP bomb prevention

Why we need it and why it was done in this way

This enables users to install custom Claude Code plugins from ZIP packages or local directories, following the Claude Code plugin specification (.claude-plugin/plugin.json).

The following tradeoffs were made:

  • Used HTTP-based approach (no git dependency) for future marketplace support
  • ZIP extraction limits (100MB, 1000 files) to prevent resource exhaustion

The following alternatives were considered:

  • Git-based installation: Rejected to avoid requiring users to install git

Breaking changes

None. This is a new feature that doesn't affect existing functionality.

Special notes for your reviewer

Key changes:

  1. PluginService.ts - Core installation logic with security protections
  2. PluginZipUploader.tsx - Drag-drop UI supporting both ZIP and folders
  3. InstalledPluginsList.tsx - Package grouping and uninstall package feature
  4. isDirectory API - New preload API to detect dropped directories

Checklist

  • PR: The PR description is expressive enough and will help future contributors
  • Code: Write code that humans can understand and Keep it simple
  • Refactor: You have left the code cleaner than you found it (Boy Scout Rule)
  • Upgrade: Impact of this change on upgrade flows was considered and addressed if required
  • Documentation: A user-guide update was considered and is present (link) or not required.

Release note

feat: Add plugin package installation from ZIP files and directories with drag-and-drop support

🤖 Generated with Claude Code

@DeJeune DeJeune requested a review from 0xfullex as a code owner January 11, 2026 13:24
@DeJeune DeJeune requested review from kangfenmao and vaayne January 11, 2026 13:30
@DeJeune DeJeune linked an issue Jan 11, 2026 that may be closed by this pull request
4 tasks
@DeJeune DeJeune added this to the v1.7.14 milestone Jan 19, 2026
@kangfenmao
Copy link
Collaborator

image

@kangfenmao
Copy link
Collaborator

kangfenmao commented Jan 27, 2026

Note

This comment was translated by Claude.

  1. After successful installation, it should switch to the installed tab
  2. After successful plugin uninstallation, it should remain in the installed plugins directory
  3. The "Installed Plugins" tab should be changed to "Install Plugin", and then move the installation drag-and-drop feature under this tab
image
Original Content
  1. 安装成功之后应该切换到已经安装的 Tab
  2. 卸载插件成功之后应该留在已安装插件目录
  3. "已安装插件" Tab 应该修改成"安装插件",然后把安装拖拽功能放到这个 Tab 下面
image

@DeJeune DeJeune modified the milestones: v1.7.14, v1.7.16 Jan 29, 2026
@DeJeune DeJeune changed the title feat: add plugin package installation from ZIP and directory feat: add plugin package installation from ZIP,directory, remote Jan 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature]: Add skill functionality

3 participants