Issue #6663Opened November 26, 2025by lexoyo0 reactions

BUG: Symbols break when loading pages progressively (instances lose __symbol link)

Question

Here is a video showing the bug:

https://github.com/user-attachments/assets/0fdc76ed-cee5-4481-98b1-cbbf52572b31

GrapesJS version

  • I confirm to use the latest version of GrapesJS

What browser are you using?

firefox latest and Chrome v141.0.7390.122

Reproducible demo link

https://canary.silex.me/

I can do a fiddle/codepen if needed, or you can reproduce using https://canary.silex.me (you need a gitlab.com account), no setup needed, bug reproduces immediately

Or even easier, without a gitlab.com account:

npx @silexlabs/[email protected]

Then you have a blank site on http://localhost:6805

Describe the bug

Hello!

When loading a project progressively (pages loaded one by one to avoid browser freez, like this code), it breaks the Symbols bidirectional link:

  • Instance → main symbol sync works - i had to add editor.trigger('symbol') for that to work
  • Main symbol → instances sync fails
  • Instance → Instance fails (this is a result of the Main → Instance problem)

The root cause seems to be that GrapesJS correctly resolves __symbols (array of instance refs) but instances keep __symbol: 0 if they were created later (after the symbols), so the link stays broken

Maybe what we need is a non-blocking way of loading many pages, or a way to have symbols "linked" after loading each page, or both :)

Reproduce

  1. Create a symbol
  2. Place two instances of that symbol on the canvas (same page or different pages)
  3. Save the project
  4. Reload the editor (pages load progressively)
  5. Edit one of the two instances (style, attributes, or text via RTE)

Expected

The changes should be applied to the other instance

Actual

The changes are not applied to the other instance, but if you drop another instance on the canvas, it will have the latest changes from after reload

Note: Instances have __symbol: 0, so changing the instance never updates the symbol

Code of Conduct

  • I agree to follow this project's Code of Conduct

Answers (3)

lexoyoNovember 26, 20250 reactions

Oh and i'd be happy to contribute if you tell me what solution i should focus on (a command to re-connect instances, an async method to load project data like what i do in silex, ...)

cc @artf

artfNovember 28, 20250 reactions

yeah looks like an issue with that way of loading pages 🤔 I don't see any issue on my side (full project load). What is the reason behind loading pages in that way?

lexoyoNovember 28, 20250 reactions

yeah looks like an issue with that way of loading pages 🤔 I don't see any issue on my side (full project load). What is the reason behind loading pages in that way?

It avoids blocking the main thread for too long. When users load a real life website it usually displays a warning that a script has frozen the browser. Or is there a mechanism I don't know about to load the sites?

Related Questions and Answers

Continue research with similar issue discussions.

Paid Plugins That Match This Issue

Curated by issue keywords and label relevance to help you ship faster.

View all plugins

Loading paid plugin recommendations...

Browse Plugin Categories

Jump directly to plugin category pages on the marketplace.