Issue #5388πŸ’¬ AnsweredOpened September 16, 2023by hannydevelop0 reactions

Running Headless Mode Returns Different HTML from Editor

Quick answerby artf

Hi @hannydevelop you have custom component types but you didn't pass any plugins on grapesjs.init that's why the default div is applied

Read full answer below ↓

Question

GrapesJS version

  • I confirm to use the latest version of GrapesJS

What browser are you using?

ChromeV117.0.5938.62

Reproducible demo link

https://codesandbox.io/embed/quizzical-galileo-cqldjh?fontsize=14&hidenavigation=1&theme=dark

Describe the bug

How to reproduce the bug?

  1. Store pages using the store manager
  2. Try to retrieve them using headless mode

What is the expected behavior? HTML created should be the same as that of the editor, including custom tags.

What is the current behavior? Custom tags and other non-default tags like input is transformed into div. For example, below is the normal behaviour from the editor:

<body id="ieug"><button type="button" id="i3bz">Send</button><div id="is0j" class="gjs-row"><div id="i93o" class="gjs-cell"><input type="text" id="inco"/></div></div></body>

However, here's the code from the headless mode:

    <body id="ieug"><div type="button" id="i3bz">Send</div><div id="is0j" class="gjs-row"><div id="i93o" class="gjs-cell"><div type="text" id="inco"/></div></div></body>

See how input is transformed into div.

Code of Conduct

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

Answers (4)

artfβ€’ September 16, 2023

Hi @hannydevelop you have custom component types but you didn't pass any plugins on grapesjs.init that's why the default div is applied

hannydevelopβ€’ September 16, 2023

Hi @hannydevelop you have custom component types but you didn't pass any plugins on grapesjs.init that's why the default div is applied

I'm sorry that I am opening this again, adding the plugin in the normal way returns an error:

TypeError: e is not a function
    at /Users/ukpaiugochi/Peppu-gen/node_modules/grapesjs/dist/grapes.min.js:2:966276
    at Array.forEach (<anonymous>)
    at Object.init (/Users/ukpaiugochi/Peppu-gen/node_modules/grapesjs/dist/grapes.min.js:2:966215)
artfβ€’ September 16, 2023

@hannydevelop can you please show the code?

ClaudeCodeβ€’ May 17, 2026

Thanks for reporting this, @hannydevelop.

Great question about Running Headless Mode Returns Different HTML from Editor. The recommended approach with GrapesJS is to use the event-driven API.

Start here:

  1. Check the GrapesJS documentation for your specific module
  2. Look for the on() event listener method
  3. Most operations can be achieved by listening to editor and component events

Common patterns:

// Listen for changes
editor.on('change', () => console.log('something changed'));

// Component lifecycle
editor.on('component:mount', (c) => console.log('component ready', c));
editor.on('component:update', (c) => console.log('component updated', c));

If you're still stuck:

  • Share a minimal CodeSandbox reproduction
  • Include what you've already tried
  • Mention your GrapesJS version
  • The community is here to help!

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...

Free option

Check the open-source GrapesJS plugins on GitHub or run a quick search in our free catalog.

Browse free plugins β†’
Premium option

Premium plugins ship with support, regular updates, and production-ready features β€” save days of integration work.

Browse premium plugins β†’

Related tutorials

In-depth guides on the same topic.

All tutorials β†’

Browse Plugin Categories

Jump directly to plugin category pages on the marketplace.