How GitHub scaled engineering with Port

Custom Widgets: Build Your Own UI Components inside Port

Your data model is extensible. Now your UI is too.

Custom Widgets: Build Your Own UI Components inside Port

Custom Widgets let platform teams write their own frontend components and run them natively inside Port - with full access to catalog data, permissions, and real-time context.

They work like any other Port widget: place them on dashboards or entity pages, configure them with parameters, and they render alongside the rest of your portal. The difference is that you write the component yourself, in your IDE, using whatever stack your team already uses (React, plain HTML and JS, etc.), and Port hosts and serves it as an integral part of the platform.

What you can build

Port's built-in widgets cover the essentials: tables, charts, Markdown, entity details, and so on. Custom Widgets are for the other 20%, the visualizations and interfaces that are specific to how your organization works.

A deployment calendar that maps CI activity across services. An incident timeline tied to the on-call rotation. A production readiness panel that pulls scorecard results and triggers self-service actions. A cost visualization that groups cloud resources by team and environment. These are interfaces that know too much about your context to be generic - so they need to be built, not configured.

A newly added widget type: Custom widget

See it in action: the calendar plugin

A platform team that wants to visualize activity across entities over time. They build a calendar plugin. The plugin defines custom parameters that surface in Port's widget creation form: Blueprint and Date Property.

The calendar plugin exposes Blueprint and Date Property as configurable parameters in the widget creation form

An admin wires the plugin to a custom widget, selects "Incidents" as the blueprint and "Created At" as the date property. The widget renders a calendar view of incidents. Change the parameters to "Jira Issues" and "Resolved Date," and the same plugin renders a different calendar.

Inside the widget, the plugin receives Port context (the token, configured parameters, current page, dashboard filters, user and theme) using a simple PostMessage hook. The plugin then:

  • Gets the context and the token via PostMessage
  • Fetches entities from Port's API using the injected authentication token
  • Groups them by the selected date property
  • Renders the calendar view - scoped to the current user’s permissions and filtered to the parameters the admin configured.

Why this matters for Platform teams

Every organization's processes, tooling, and data model are different - and Port's catalog, blueprints, and automations have always been flexible to reflect that. The user interface wasn't. It's been one of the most consistent feature requests from our customers, and for good reason.

Before custom widgets, Platform teams had to stretch the built-in options past their limits: embedding HTML in Markdown widgets, pointing iframes at external dashboards, exporting data to external tools. Every workaround sacrificed an aspect of the unified experience that Port provides: Markdown widgets can not handle dynamic data or interactions. Iframe widgets lose Port context and authentication. External tools fragment the experience.

Custom Widgets close that gap - giving Platform teams full control over the UI that’s now as flexible as the rest of the platform. 

How Custom Widgets work

A Custom Widget is a standard web application. You write it in your IDE, upload it with the Port Plugins CLI, and Port hosts and serves it. No separate infrastructure needed.

The workflow:

  1. Write the plugin in your IDE. 
  2. Upload the plugin to Port using the Port Plugins CLI - it will appear in Port’s Plugin Manager
  3. Create a custom widget in Port and wire it to your plugin, configure the parameters.
  4. Place the widget in a dashboard or a specific entity page.

The Port Plugins CLI

The CLI supports upload, list, update, and delete, so it fits naturally into CI pipelines. Install:

npm install -g @port-labs/port-plugins-cli

Upload a plugin:

port-plugins upload --file <PATH> --identifier <IDENTIFIER> --title <TITLE> –description <DESCRIPTION> --params <JSON> 

The Port Plugins CLI supports upload, list, update, and delete operations
The plugins manager in Port's UI lists uploaded plugins and their status

What's next

Custom Widgets are the first step in making Port's UI as extensible as the rest of the platform. Next, we’re working on the ability to vibe-code widgets and pages directly in Port. Over time, teams will build libraries of internal plugins and reuse them across dashboards and entity pages, in the same way they already share blueprints and automations.

Get started

  1. Set up and build your plugin
  2. Upload your plugin
    • Install the package: npm install -g @port-labs/port-plugins-cli
    • Configure authentication
    • Upload your plugin 
    • Verify the upload: port-plugins list
  3. Add a custom widget to your dashboard and configure the plugin and its custom parameters.

See the Plugins documentation [link]

Tags:
{{survey-buttons}}

Get your survey template today

By clicking this button, you agree to our Terms of Use and Privacy Policy
{{survey}}

Download your survey template today

By clicking this button, you agree to our Terms of Use and Privacy Policy
{{roadmap}}

Free Roadmap planner for Platform Engineering teams

  • Set Clear Goals for Your Portal

  • Define Features and Milestones

  • Stay Aligned and Keep Moving Forward

{{rfp}}

Free RFP template for Internal Developer Portal

Creating an RFP for an internal developer portal doesn’t have to be complex. Our template gives you a streamlined path to start strong and ensure you’re covering all the key details.

{{ai_jq}}

Leverage AI to generate optimized JQ commands

test them in real-time, and refine your approach instantly. This powerful tool lets you experiment, troubleshoot, and fine-tune your queries—taking your development workflow to the next level.

{{cta_1}}

Check out Port's pre-populated demo and see what it's all about.

Check live demo

No email required

{{cta_survey}}

Check out the 2025 State of Internal Developer Portals report

See the full report

No email required

{{cta_2}}

Minimize engineering chaos. Port serves as one central platform for all your needs.

Explore Port
{{cta_3}}

Act on every part of your SDLC in Port.

Schedule a demo
{{cta_4}}

Your team needs the right info at the right time. With Port's software catalog, they'll have it.

{{cta_5}}

Learn more about Port's agentic engineering platform

Read the launch blog

Let’s start
{{cta_6}}

Contact sales for a technical walkthrough of Port

Let’s start
{{cta_7}}

Every team is different. Port lets you design a developer experience that truly fits your org.

{{cta_8}}

As your org grows, so does complexity. Port scales your catalog, orchestration, and workflows seamlessly.

{{cta_n8n}}

Port × n8n Boost AI Workflows with Context, Guardrails, and Control

{{port_builders_session}}
LIVE

Port Builders Session: A Single, Governed Interface for All MCP Servers

{{cta-demo}}
{{n8n-template-gallery}}

n8n + Port templates you can use today

walkthrough of ready-to-use workflows you can clone

Template gallery
{{reading-box-backstage-vs-port}}
{{cta-backstage-docs-button}}

Starting with Port is simple, fast, and free.