I built MenuFields after repeatedly running into the same limitation with Shopify navigation. Merchants often want to add things like New, Sale or Popular labels to individual menu links, or give certain links a different colour, but doing this usually means hard coding it into the theme.
MenuFields lets merchants add badges, icons, colours and highlighted links through a visual editor. It also lets developers create structured fields for individual menu items and access the published data in Liquid.
There is a free plan available. I would genuinely appreciate feedback from merchants and developers, particularly on how you currently handle richer navigation data and which menu customisations cause the most trouble.
You can have a look here:
Happy to answer any questions about how it works or how the data is exposed in Liquid.
Hi @lewismcleod00 Welcome To Shopify Community So This solves a real annoyance, adding a “Sale” badge to one menu item usually means editing header-group.json or the nav snippet directly and hardcoding a conditional for that specific link’s handle, which breaks the moment the merchant renames or reorders the menu. Having it exposed as structured data in Liquid rather than just a visual-only feature is the right call too, that means theme developers can build custom rendering logic around it (like different badge styles per section) instead of being locked into whatever default styling the app ships with. The customization that’s usually most painful in my experience is conditional visibility, showing/hiding a menu item based on customer tags or login status, that’s a step beyond styling but tends to get requested alongside badges/highlighting since merchants think of both as “making the nav smarter.” Hope this helps solve your problem, and if it does, don’t forget to like and mark it as the solution. Thank you!
Hi Lewis, this looks like a genuinely useful solution especially for merchants who want to add badges without breaking their nav every time they reorder menu items.
A few thoughts based on what I’ve seen merchants struggle with:
1. Conditional visibility is a big one Merchants often want to show different nav items based on customer login status or tags. Example: “Wholesale” only visible to wholesale customers. This tends to be requested more than badges, honestly.
2. Another common pain point is adding custom descriptions or subtitles under menu items (especially in mega menus). Right now, merchants either hardcode it or use workarounds that aren’t sustainable. If you could add a “description” or “subtitle” field per menu item, that would solve a huge headache.
3. For developers, exposing the data cleanly in Liquid is the right move. One thing that would be useful: clear documentation on exactly which object properties are available (badge text, badge color, icon URL, etc.) so developers can build custom rendering without guessing.
One question: Have you considered how this would integrate with different themes (Dawn, Impulse, etc.)? The navigation structure varies quite a bit between them, and that’s where most app integrations hit friction.
Hi @lewismcleod00
I think the structured data approach is a really useful part of this, especially for developers who need more control than just the styling options provided by the app.
One thing I’d definitely look at is what happens after the merchant has configured a menu item and then changes the navigation itself, renaming, reordering, removing or duplicating items. That’s one of the pain points with hardcoded theme conditions, so making sure the MenuFields data stays correctly mapped in those situations could be a big advantage.
I’d also test the experience across desktop navigation, mobile drawers and mega menus, since themes can handle those quite differently. A preview showing how the badge, icon or colour will actually appear on each would probably save merchants a lot of trial and error.
And for developers, having an easy way to see the actual Liquid data being returned for a selected menu item could make custom implementations and debugging much easier.
Overall, I like that you’re solving the underlying navigation-data problem rather than just adding another styling layer. Curious to see how it handles heavily customized themes as well as Dawn.
Thanks everyone so far! You have all landed on exactly why I built the structured data side of MenuFields alongside the visual options.
Conditional visibility is already possible. A developer can create a true or false field, or a choice field, for something like Wholesale only, Members only or Logged in customers. They can then combine that value with Shopify’s customer object or customer tags in Liquid to decide whether the menu item should be rendered.
Descriptions and subtitles are supported too. You can create single line or multi line text fields for individual menu items and output them wherever the theme needs them, including inside a mega menu.
For developers, MenuFields generates Liquid examples inside the app for every field definition. The published data includes each menu item’s structured values, including text, numbers, true or false values, choices, colours, URLs, files and metaobject references.
Theme compatibility was an important part of the build as well. MenuFields can automatically match standard navigation, dropdowns, mobile drawers, details and summary based menus, and common custom theme structures. It maps the published menu data to the relevant theme navigation while keeping identical links in different menus separate.
The main requirement is that the theme outputs genuine Shopify menu links with valid destinations. If a custom theme hard codes menu items without their Shopify URLs, it cannot safely identify them.
I clearly need to communicate these capabilities better because both of your suggestions are already supported but that was not obvious from my original post or the App Store listing. That is really useful feedback in itself, so thank you.