Group your property controls
When we started building our first few code components, the right panel quickly turned into chaos.
Twenty-plus sliders, color pickers, toggles all stacked vertically with no structure.
It worked, but it felt wrong. Designers had to scroll endlessly to find what they needed, and it didn’t look anything like Framer’s native components.
That’s when we realized the fix was ridiculously simple: group related controls into one object.
This single change makes your component panels cleaner, faster to use, and easier to maintain.
Why this matters
When designers drop a component onto the canvas, the first thing they see is your right-panel layout. That’s your UX.
If it’s cluttered, your component feels messy.
If It’s tidy with “Colors,” “Spacing,” or “Layout” sections it immediately feels professional, like it was built by the Framer team itself.
Grouping controls with ControlType.Object
also helps you:
Keep related values (like padding, radius, and shadow) together.
Prevent default overrides (Framer loves to inject random colors if you don’t define defaults).
Simplify state management by passing one object (
ui
) instead of four different props.
Example
Here’s a compact version of how we now organize most of our visual settings:
What this does
Now your panel shows one neat collapsible menu called Appearance.
Designers can open it to tweak padding, radius, background, and shadow all grouped in context.
It’s faster to edit, easier to scan, and looks just like Framer’s native property panels.
Pro tip
You can create multiple grouped objects like:
ui
for colors, radius, shadowstypography
for fonts and sizesmeta
for behavioral settings
Each one adds structure and reduces clutter without changing how your component works.
In short
Organizing controls this way doesn’t just clean up your code it elevates your component’s user experience.
It’s one of those subtle details that turns a “working component” into a designed one.