Theme App Extensions vs Sections: File Size & Settings Limitations

I’d like to discuss current limitations with Theme App Extensions that are significantly impacting app development capabilities.

Current Limitations:

  1. Theme App Extensions are limited to 25 settings per block
  2. Total Liquid file size is capped at 100KB across all blocks
  3. A single traditional section can be 256KB - more than double the total allowed for Theme App Extensions

The Impact:

  • We cannot create blocks with the same level of functionality as traditional sections
  • Complex features need to be severely trimmed down or split awkwardly across blocks
  • The 100KB limit across all blocks (vs 256KB for a single section) forces us to make significant compromises

Previous Solution:
Built for Shopify Apps could request increased limits up to 500KB through a form, but this option is no longer available.

Alternative Approaches:
The Asset API has been suggested as an alternative, but it comes with a major drawback: injected code persists in the theme even after app uninstallation.

To effectively replace section API use cases with Theme App Extensions, we need comparable capabilities. Has anyone else run into walls with these limitations? How are you handling complex feature requirements within these constraints?

6 Likes

Totally agree - these limitations are extremely frustrating to work with. The file size has good intention, but it is severely limiting the scope of my apps.

1 Like

Our app supports multiple designs and when migrating away from Asset API and Script Tag, we run into this size limitation. The workaround was to keep most commonly used templates in liquid and extract the others into very basic liquid code and gets enriched with JavaScript. It’s not ideal but at least it doesn’t affect everyone.
I don’t really understand this limit from Shopify, at least 250KB would be more reasonable.

Thanks for sharing what you’re doing in order to mitigate reaching this limit.

There are ways to bypass this limit by using Javascript extensively. But that (in my opinion) defeats the purpose of using liquid, I want to build the complete UI in liquid so that it’s all server side rendered and all the UI elements are super performant while move the dynamic content and functionality to Javascript.

If we are to move away from Assets API - we need to have an alternative that’s at par with Assets API.

I would even agree to having a limit of “enabled” blocks at a time and that limit can be increased on category basis.

For example - you have 10 app blocks in the extension, that results to 500KB but at a time only 2 are available to the brand using available_if and that 2 only has 40KB. That should be possible.

But the current restriction are 100% very limiting while building a seamless and beautiful customer experience.

1 Like