Guides · August 7, 2023
Open-Core for Design Assets: Free Registry, Paid Pro Blocks
Open core components work for design assets the same way they worked for infrastructure software: give away a real, usable registry for free, and charge for the polish, depth, and support layered on top. Here is how that model actually holds together for themes, kits, and code.
By Polo Themes
Open core components mean shipping a genuinely useful free tier — a component registry, a base theme, a starter kit — and reserving the deeper, more polished, or more specialized variants for a paid tier. Applied to design assets, that means a free set of buttons, cards, and layout primitives anyone can install and ship with, alongside paid pro blocks: fully composed page sections, edge-case variants, and production-hardened patterns that would take a team days to build from scratch. The model works when the free tier is complete enough to build a real product on, not a demo designed to frustrate you into upgrading.
This is not a new idea. Open core has funded infrastructure software for two decades — think of the pattern behind GitLab, Elastic, or Sentry before hosted plans took over: a genuinely functional open-source core, with enterprise features, hosting, and support sold on top. Design tooling is now running the same playbook, and for good reason. A component registry distributed as open core solves a problem that closed, all-or-nothing design systems never solved well: it lets a developer try the real thing, in a real codebase, before paying anything.
Why Design Assets Are Following the Open-Core Path
The shift toward open-core component registries did not happen in a vacuum. It is downstream of three things happening at once in how modern interfaces get built.
Copy-paste beat npm install for component code
Tools like shadcn/ui popularized a distribution model that looks nothing like a traditional npm component library: instead of installing a black-box package and importing from it, you run a CLI that copies the actual source files — the JSX, the Tailwind classes, the Radix wiring — directly into your project. You own the code the moment it lands. There is no library version to be locked to, no breaking change from an upstream maintainer, and no black box to debug when something renders wrong. This distribution model is exactly what makes open core viable for design assets: the free tier is not a teaser, it is code sitting in your repository that you can read, edit, and ship.
Headless commerce and Next.js pulled design assets toward code, not just Figma
A decade ago, "buy a theme" mostly meant buying a themed template for a hosted platform, edited through a visual editor. Headless commerce architectures — a Next.js or similar frontend talking to a commerce backend like Medusa over an API — moved the actual UI back into a real codebase that developers own outright. That shift raises the bar for what a "theme" or "kit" even is. It is no longer just a look; it is components, data-fetching patterns, and interaction logic that need to survive real engineering scrutiny. Open-core distribution fits that world far better than a locked template file does, because engineers evaluate code by reading it, not by watching a sales demo.
AI-assisted design-to-code raised expectations for what "free" should include
AI tools that turn a Figma frame or a prompt into working code have made it dramatically easier to produce a plausible-looking component in minutes. That has quietly reset the bar for what counts as a compelling free tier: a free registry that only offers three basic buttons looks thin next to what an AI assistant can scaffold on demand. The free layer of an open-core design system now has to be a genuinely broad, coherent set — enough primitives, enough consistency, enough real-world polish — that reaching for it beats prompting a model from scratch. Depth is what preserves the case for the paid tier.
What Belongs in the Free Registry vs. the Pro Tier
The hardest part of designing an open-core offering is not the business model — it is the line. Draw it too conservatively and the free tier feels like bait; draw it too generously and there is nothing left worth paying for. A useful way to think about the split is by asking what changes as a component's job gets more specific.
- Primitives go free. Buttons, inputs, cards, badges, tabs, dialogs — the atomic building blocks every interface needs regardless of domain. These should be complete, accessible, and themeable out of the box. If a developer has to patch accessibility gaps in your free primitives, you have shipped a demo, not a registry.
- Composed page sections go paid. A hero section tuned for a SaaS landing page, a pricing table with plan comparison logic, a product gallery built for a specific commerce vertical — these save real hours because they encode decisions, not just markup. That saved time is the actual product being sold.
- Domain-specific variants go paid. A generic product card is free; a product card with prescription-lens option groups, or one built around a course catalog's metadata, reflects domain expertise that took real iteration to get right. This is where a components business can lean on genuine specialization instead of competing purely on breadth.
- Edge-case robustness goes paid. RTL support, dense data-table variants, empty-state and error-state handling across a whole section family — the unglamorous 20% of the work that eats 80% of the polish time is a legitimate thing to charge for, because most teams underestimate it until they are the ones building it.
- Support, updates, and licensing clarity go paid. Even when the code itself is nearly identical to the free version, teams will pay for a commercial license they can put in front of legal, and for a maintainer who will fix a regression instead of leaving an open issue.
The MCP and Agent Layer Is Changing How Components Get Chosen
The Model Context Protocol (MCP) is starting to change how design assets get discovered and installed at all. Instead of a developer browsing a marketplace and copy-pasting a CLI command, an AI coding agent can query a registry directly — asking what components exist, what their props and variants are, and pulling the exact source it needs into the project it is working on. That shifts the unit of distribution from "a page a human reads" to "a machine-readable catalog an agent queries," and it rewards registries that expose clean, well-typed component metadata over ones that only look good in a screenshot.
This has a direct implication for the open-core split. A free registry that is agent-legible — consistent naming, real TypeScript types, predictable file structure — becomes more valuable than one that merely looks polished in a gallery, because it is what gets selected when an agent is deciding what to scaffold. Teams building in this space should treat MCP-friendliness as a core-tier investment, not a paid add-on, since it is largely what determines whether the free tier gets adopted at agent-driven speed or ignored.
Lessons From Shadcn, Radix, and the Registry Model
A few structural choices explain why the shadcn/ui-style registry model spread so quickly, and they are worth internalizing before building an open-core offering of your own.
First, unstyled behavior underneath styled defaults is what makes a registry both free-tier-friendly and paid-tier-extensible. Building on top of an accessible, unstyled primitives layer — the way shadcn/ui builds on Radix — means the free components already handle keyboard navigation, focus management, and ARIA semantics correctly, without your team reinventing that logic. Paid components then differentiate on visual composition and domain logic, not on redoing accessibility work that should have been solved once, at the bottom of the stack.
Second, ownership beats abstraction for developer trust. A registry that hands over real, editable source files earns more goodwill — and more upgrade intent — than one that hides its internals behind a package boundary. Developers who can read and modify what they installed are more likely to trust the team behind it enough to pay for the harder parts later.
Third, consistency across the free and paid tiers is the whole game. If pro blocks use a different styling convention, prop naming scheme, or file layout than the free registry, the paid tier stops feeling like a natural extension and starts feeling like a separate product bolted on for revenue. The strongest open-core design systems make the paid tier feel like "more of the same, but deeper," not "a different vendor."
Where This Sits Relative to Polo Themes Today
To be direct about where we stand: Polo Themes currently sells Figma UI kits and Shopify OS 2.0 themes — full, purchasable design and storefront products, not a registry. Our Figma kits cover verticals like optics, medical, and course platforms with the kind of domain-specific option handling and layout decisions described above, and our Shopify themes carry the same thinking into a live storefront. A code-first, open-core component registry — spanning a Next.js starter, headless-commerce primitives, and MCP-queryable component metadata — is a direction we are actively thinking about, not a product we are shipping today. We would rather say that plainly than imply a registry, starter kit, or agent template exists before it does.
What does carry over cleanly from our existing work is the free-tier discipline itself: a design asset that is genuinely complete enough to build with — correct spacing, accessible interaction states, sensible defaults — earns the right to sell a deeper, more specialized tier on top of it. That is true whether the medium is a Figma component library or a code registry, and it is the standard we hold our current kits and themes to.
A Practical Checklist for Evaluating an Open-Core Design Asset
If you are choosing between open-core registries, or deciding how to structure your own, a short checklist cuts through the marketing copy faster than a feature comparison table does.
- Can you build an actual, shippable feature using only the free tier — not a toy example, a real one?
- Are the free components accessible by default, or does the free tier quietly skip keyboard and screen-reader support to make the paid tier look more necessary?
- Is the paid tier priced against genuine time saved — composed sections, domain variants, edge-case handling — or is it re-selling primitives with a different color palette?
- Does the registry expose clean, typed metadata an AI agent could query directly, or does it only make sense browsed by a human in a gallery?
- Do free and paid components share the same conventions, so upgrading feels like depth rather than a vendor switch?
Frequently Asked Questions
What does "open core" mean for design assets specifically?
It means a real, usable free tier — usually a component registry or base kit distributed as actual source files — paired with a paid tier of composed sections, domain-specific variants, and edge-case handling that would take significant time to build independently. The free tier has to be complete enough to ship a real product with, not a stripped-down demo.
Is open core the same as open source?
Not exactly. Open source typically means the entire project is freely licensed. Open core means a meaningful subset is free and openly available, while a related, higher tier is commercially licensed. The free tier in an open-core model is usually genuinely open, but the paid tier is not — it is a separate commercial offering built on the same foundation.
Why would a company give away a component registry for free at all?
Because a broad, high-quality free tier is the fastest way to earn developer trust and distribution — people adopt what they can try in a real codebase with no procurement process. That adoption creates the audience who later has a reason to pay for the deeper, more specialized layer, and it does so far more efficiently than a locked demo or a sales-driven trial ever could.
Does Polo Themes sell an open-core component registry today?
No. Today we sell Figma UI kits and Shopify themes as complete, purchasable products — see our Figma kits and Shopify themes. A code-first, MCP-queryable component registry is a direction we are exploring for the future, not something available to buy right now.