pulumi-component

Author reusable Pulumi ComponentResource classes with multi-language packaging and distribution.

Updated Apr 30, 2026
One-click install
npx skills add https://github.com/AdityaBorkar/igbot-fork --skill pulumi-component-adityaborkar
Or copy as Structured Prompt for Agent▼
Please help me install this Agent Skill.
Skill: pulumi-component
Source: https://github.com/AdityaBorkar/igbot-fork/tree/main/.agents/skills/pulumi-component
Command: npx skills add https://github.com/AdityaBorkar/igbot-fork --skill pulumi-component-adityaborkar

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Designing reusable Pulumi infrastructure components is error-prone: missing registerOutputs leaves components stuck in "creating", hardcoded child names cause collisions, and union types in args break multi-language SDK generation. This Skill provides the patterns and anti-patterns needed to author correct, distributable ComponentResource classes. ## Core Features & Use Cases - Component Anatomy Guidance: Covers the four required elements of every component: extending ComponentResource with a type URN, accepting standard constructor parameters, setting parent on children, and calling registerOutputs. - Args Interface Design: Enforces Input<T> wrapping, flat structures, no union types, and no callbacks so components remain serializable across TypeScript, Python, Go, C#, Java, and YAML. - Multi-Language Packaging & Distribution: Explains PulumiPlugin.yaml setup, per-language entry points, pulumi package add consumption, and publishing via private registry, git tags, or package managers. - Use Case: A platform team refactors repeated S3 bucket configurations into a SecureBucket component with encryption and versioning on by default, then publishes it to the Pulumi private registry so Python and YAML teams can consume it. ## Quick Start Ask the assistant to create a new Pulumi ComponentResource class for your infrastructure pattern, following the component anatomy and args design rules.

Frequently Asked Questions about pulumi-component

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I create a Pulumi ComponentResource in TypeScript?▼

Extend pulumi.ComponentResource, call super() with a type URN like "myorg:index:StaticSite", create child resources with { parent: this }, expose outputs as public readonly properties, and call this.registerOutputs() as the last line of the constructor.

How do I make a Pulumi component work across multiple languages?▼

Add a PulumiPlugin.yaml declaring the runtime, provide the language-specific entry point, and keep args serializable with no union types or callbacks. Consumers install it with pulumi package add, which generates a local SDK in their language.

Why is my Pulumi component stuck in creating state?▼

The component is missing a registerOutputs() call at the end of its constructor. Without it, outputs are not persisted to state and the component appears stuck in a creating state in the Pulumi console.

Can Pulumi component args use union types or functions?▼

No. Union types like string | number break SDK generation for Python, Go, and C#, and functions cannot be serialized across language boundaries. Use single types with separate optional properties and configuration values instead of callbacks.

How do I publish a Pulumi component for my organization?▼

Publish to the Pulumi private registry with pulumi package publish using a git repository URL and publisher name, versioning releases with v-prefixed git tags. A README is required and becomes the component's documentation page.

When should I not create a Pulumi component?▼

Avoid creating a component for a single-use resource grouping, since the abstraction adds overhead without reuse benefit. Use inline resources until a pattern repeats, and skip multi-language packaging if all consumers share one language and codebase.