Penpot Uiux Design
GitHubOfficialFirst committed by JcardifDistributed by GitHub
- Skill
- Tool integration
- Design and creative
- MIT
- Low risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a structured approach to UI/UX design within Penpot, leveraging the penpot-mcp server to automate design tasks, manage components, and ensure accessibility. It covers the entire design lifecycle, from initial setup and design system discovery to layout creation, validation, and export. The guide emphasizes user-centered principles, consistent design patterns, and technical best practices for Penpot's API.
What it does
- Automates design tasks and modifications via Penpot MCP tools.
- Provides workflows for building and maintaining design systems.
- Offers guidance on applying accessibility standards (WCAG) to designs.
- Includes patterns for common UI components like buttons, forms, and navigation.
- Facilitates design validation through visual inspection and code analysis.
- Provides technical guidance for Penpot API interactions and layout management.
When to use it
- When creating new UI/UX designs for web, mobile, or desktop applications.
- When building or maintaining a design system with components and tokens.
- When designing specific interface elements like dashboards, forms, or landing pages.
- When auditing existing Penpot designs for usability and accessibility compliance.
- When needing to follow platform-specific guidelines like Material Design or iOS.
Advantages
- Enforces consistency through reusable design tokens and component patterns.
- Reduces manual effort by automating repetitive design and layout tasks.
- Ensures accessibility is integrated into the design process from the start.
- Provides clear technical guardrails for using the Penpot API effectively.
- Supports a professional, user-centered design workflow.
Usage examples
- “Design a mobile login form for my app.”
- The agent will guide you through creating a mobile-friendly form, ensuring it meets touch target requirements, uses proper input labels, and follows the defined spacing scale.
- “Check if my current Penpot design is accessible.”
- The agent will walk you through a checklist covering color contrast, touch target sizes, and heading hierarchy, while suggesting code-based validation for specific elements.
- “Create a new dashboard layout using my existing design system.”
- The agent will first discover your existing components and tokens, then help you structure the dashboard layout using your established brand colors and typography.
- “How do I add a button component to my design?”
- The agent will provide the recommended button specifications, including size, padding, and state handling, and help you implement it using the Penpot MCP tools.
Install
Download the skill as a ZIP:
https://autogineer.com/agent-skills/github/penpot-uiux-design/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip penpot-uiux-design.zip -d .agents/skills
Documentation by Jcardif
Penpot UI/UX Design Guide
Create professional, user-centered designs in Penpot using the penpot/penpot-mcp MCP server and proven UI/UX principles.
Available MCP Tools
| Tool | Purpose |
|---|---|
mcp__penpot__execute_code | Run JavaScript in Penpot plugin context to create/modify designs |
mcp__penpot__export_shape | Export shapes as PNG/SVG for visual inspection |
mcp__penpot__import_image | Import images (icons, photos, logos) into designs |
mcp__penpot__penpot_api_info | Retrieve Penpot API documentation |
MCP Server Setup
The Penpot MCP tools require the penpot/penpot-mcp server running locally. For detailed installation and troubleshooting, see setup-troubleshooting.md.
Before Setup: Check If Already Running
Always check if the MCP server is already available before attempting setup:
Try calling a tool first: Attempt
mcp__penpot__penpot_api_info- if it succeeds, the server is running and connected. No setup needed.If the tool fails, ask the user:
"The Penpot MCP server doesn't appear to be connected. Is the server already installed and running? If so, I can help troubleshoot. If not, I can guide you through the setup."
Only proceed with setup instructions if the user confirms the server is not installed.
Quick Start (Only If Not Installed)
# Clone and install
git clone https://github.com/penpot/penpot-mcp.git
cd penpot-mcp
npm install
# Build and start servers
npm run bootstrapThen in Penpot:
Open a design file
Go to Plugins → Load plugin from URL
Enter:
http://localhost:4400/manifest.jsonClick "Connect to MCP server" in the plugin UI
VS Code Configuration
Add to settings.json:
{
"mcp": {
"servers": {
"penpot": {
"url": "http://localhost:4401/sse"
}
}
}
}Troubleshooting (If Server Is Installed But Not Working)
| Issue | Solution |
|---|---|
| Plugin won't connect | Check servers are running (npm run start:all in penpot-mcp dir) |
| Browser blocks localhost | Allow local network access prompt, or disable Brave Shield, or try Firefox |
| Tools not appearing in client | Restart VS Code/Claude completely after config changes |
| Tool execution fails/times out | Ensure Penpot plugin UI is open and shows "Connected" |
| "WebSocket connection failed" | Check firewall allows ports 4400, 4401, 4402 |
Quick Reference
| Task | Reference File |
|---|---|
| MCP server installation & troubleshooting | setup-troubleshooting.md |
| Component specs (buttons, forms, nav) | component-patterns.md |
| Accessibility (contrast, touch targets) | accessibility.md |
| Screen sizes & platform specs | platform-guidelines.md |
Core Design Principles
The Golden Rules
Clarity over cleverness: Every element must have a purpose
Consistency builds trust: Reuse patterns, colors, and components
User goals first: Design for tasks, not features
Accessibility is not optional: Design for everyone
Test with real users: Validate assumptions early
Visual Hierarchy (Priority Order)
Size: Larger = more important
Color/Contrast: High contrast draws attention
Position: Top-left (LTR) gets seen first
Whitespace: Isolation emphasizes importance
Typography weight: Bold stands out
Design Workflow
Check for design system first: Ask user if they have existing tokens/specs, or discover from current Penpot file
Understand the page: Call
mcp__penpot__execute_codewithpenpotUtils.shapeStructure()to see hierarchyFind elements: Use
penpotUtils.findShapes()to locate elements by type or nameCreate/modify: Use
penpot.createBoard(),penpot.createRectangle(),penpot.createText()etc.Apply layout: Use
addFlexLayout()for responsive containersValidate: Call
mcp__penpot__export_shapeto visually check your work
Design System Handling
Before creating designs, determine if the user has an existing design system:
Ask the user: "Do you have a design system or brand guidelines to follow?"
Discover from Penpot: Check for existing components, colors, and patterns
// Discover existing design patterns in current file
const allShapes = penpotUtils.findShapes(() => true, penpot.root);
// Find existing colors in use
const colors = new Set();
allShapes.forEach(s => {
if (s.fills) s.fills.forEach(f => colors.add(f.fillColor));
});
// Find existing text styles (font sizes, weights)
const textStyles = allShapes
.filter(s => s.type === 'text')
.map(s => ({ fontSize: s.fontSize, fontWeight: s.fontWeight }));
// Find existing components
const components = penpot.library.local.components;
return { colors: [...colors], textStyles, componentCount: components.length };If user HAS a design system:
Use their specified colors, spacing, typography
Match their existing component patterns
Follow their naming conventions
If user has NO design system:
Use the default tokens below as a starting point
Offer to help establish consistent patterns
Reference specs in component-patterns.md
Key Penpot API Gotchas
width/heightare READ-ONLY → useshape.resize(w, h)parentX/parentYare READ-ONLY → usepenpotUtils.setParentXY(shape, x, y)Use
insertChild(index, shape)for z-ordering (notappendChild)Flex children array order is REVERSED for
dir="column"ordir="row"After
text.resize(), resetgrowTypeto"auto-width"or"auto-height"
Positioning New Boards
Always check existing boards before creating new ones to avoid overlap:
// Find all existing boards and calculate next position
const boards = penpotUtils.findShapes(s => s.type === 'board', penpot.root);
let nextX = 0;
const gap = 100; // Space between boards
if (boards.length > 0) {
// Find rightmost board edge
boards.forEach(b => {
const rightEdge = b.x + b.width;
if (rightEdge + gap > nextX) {
nextX = rightEdge + gap;
}
});
}
// Create new board at calculated position
const newBoard = penpot.createBoard();
newBoard.x = nextX;
newBoard.y = 0;
newBoard.resize(375, 812);Board spacing guidelines:
Use 100px gap between related screens (same flow)
Use 200px+ gap between different sections/flows
Align boards vertically (same y) for visual organization
Group related screens horizontally in user flow order
Default Design Tokens
Use these defaults only when user has no design system. Always prefer user's tokens if available.
Spacing Scale (8px base)
| Token | Value | Usage |
|---|---|---|
spacing-xs | 4px | Tight inline elements |
spacing-sm | 8px | Related elements |
spacing-md | 16px | Default padding |
spacing-lg | 24px | Section spacing |
spacing-xl | 32px | Major sections |
spacing-2xl | 48px | Page-level spacing |
Typography Scale
| Level | Size | Weight | Usage |
|---|---|---|---|
| Display | 48-64px | Bold | Hero headlines |
| H1 | 32-40px | Bold | Page titles |
| H2 | 24-28px | Semibold | Section headers |
| H3 | 20-22px | Semibold | Subsections |
| Body | 16px | Regular | Main content |
| Small | 14px | Regular | Secondary text |
| Caption | 12px | Regular | Labels, hints |
Color Usage
| Purpose | Recommendation |
|---|---|
| Primary | Main brand color, CTAs |
| Secondary | Supporting actions |
| Success | #22C55E range (confirmations) |
| Warning | #F59E0B range (caution) |
| Error | #EF4444 range (errors) |
| Neutral | Gray scale for text/borders |
Common Layouts
Mobile Screen (375×812)
┌─────────────────────────────┐
│ Status Bar (44px) │
├─────────────────────────────┤
│ Header/Nav (56px) │
├─────────────────────────────┤
│ │
│ Content Area │
│ (Scrollable) │
│ Padding: 16px horizontal │
│ │
├─────────────────────────────┤
│ Bottom Nav/CTA (84px) │
└─────────────────────────────┘
Desktop Dashboard (1440×900)
┌──────┬──────────────────────────────────┐
│ │ Header (64px) │
│ Side │──────────────────────────────────│
│ bar │ Page Title + Actions │
│ │──────────────────────────────────│
│ 240 │ Content Grid │
│ px │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │
│ │ │Card │ │Card │ │Card │ │Card │ │
│ │ └─────┘ └─────┘ └─────┘ └─────┘ │
│ │ │
└──────┴──────────────────────────────────┘
Component Checklist
Buttons
[ ] Clear, action-oriented label (2-3 words)
[ ] Minimum touch target: 44×44px
[ ] Visual states: default, hover, active, disabled, loading
[ ] Sufficient contrast (3:1 against background)
[ ] Consistent border radius across app
Forms
[ ] Labels above inputs (not just placeholders)
[ ] Required field indicators
[ ] Error messages adjacent to fields
[ ] Logical tab order
[ ] Input types match content (email, tel, etc.)
Navigation
[ ] Current location clearly indicated
[ ] Consistent position across screens
[ ] Maximum 7±2 top-level items
[ ] Touch-friendly on mobile (48px targets)
Accessibility Quick Checks
Color contrast: Text 4.5:1, Large text 3:1
Touch targets: Minimum 44×44px
Focus states: Visible keyboard focus indicators
Alt text: Meaningful descriptions for images
Hierarchy: Proper heading levels (H1→H2→H3)
Color independence: Never rely solely on color
Design Review Checklist
Before finalizing any design:
[ ] Visual hierarchy is clear
[ ] Consistent spacing and alignment
[ ] Typography is readable (16px+ body text)
[ ] Color contrast meets WCAG AA
[ ] Interactive elements are obvious
[ ] Mobile-friendly touch targets
[ ] Loading/empty/error states considered
[ ] Consistent with design system
Validating Designs
Use these validation approaches with mcp__penpot__execute_code:
| Check | Method |
|---|---|
| Elements outside bounds | penpotUtils.analyzeDescendants() with isContainedIn() |
| Text too small (<12px) | penpotUtils.findShapes() filtering by fontSize |
| Missing contrast | Call mcp__penpot__export_shape and visually inspect |
| Hierarchy structure | penpotUtils.shapeStructure() to review nesting |
Export CSS
Use penpot.generateStyle(selection, { type: 'css', includeChildren: true }) via mcp__penpot__execute_code to extract CSS from designs.
Tips for Great Designs
Start with content: Real content reveals layout needs
Design mobile-first: Constraints breed creativity
Use a grid: 8px base grid keeps things aligned
Limit colors: 1 primary + 1 secondary + neutrals
Limit fonts: 1-2 typefaces maximum
Embrace whitespace: Breathing room improves comprehension
Be consistent: Same action = same appearance everywhere
Provide feedback: Every action needs a response
Files
- ATTRIBUTION.mdAdded by AutoGineer867 B
- LICENSELicence file added by AutoGineer1.0 KiB
- SKILL.md12.6 KiB
- references/accessibility.md7.3 KiB
- references/component-patterns.md11.4 KiB
- references/platform-guidelines.md9.9 KiB
- references/setup-troubleshooting.md8.2 KiB
Requirements and compatibility
Written for: GitHub Copilot
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs an MCP server, Needs a command-line tool, Needs Node.js
Security
What our scanner noticed· Low risk
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- First committed by
Jcardif
- Publisher
- GitHub (Official)
- Distributed by
- GitHub
- Source
- github/awesome-copilot · skills/penpot-uiux-design · commit 797337f
- Licence
- MIT License (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
- Contributors
- Jcardif
AutoGineer is not affiliated with or endorsed by Jcardif or GitHub.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download penpot-uiux-design.zip