Introducing Experience Edge Emu (EEE)
Just released Experience Edge Emu (EEE)! The lightweight Experience Edge emulator for local (offline) cross-platform development and test automation.
This is a small application that emulates the Sitecore Experience Edge so you can use it as a complete replacement. You can add your own data files which is the JSON response from a GraphQL query OR you can crawl existing edge endpoints to seed the emulator with data!
Check the current features!
Most of what you can do on a real Experience Edge endpoint is supported, item, layout and site queries, but search is not supported at the moment, see limitations & known issues.
Why use an emulator?
In a normal XM Cloud setup, all developers share the same Experience Edge endpoint, which makes isolated testing difficult. Or they are forced to run a local XM Cloud, but that is Windows only. EEE gives you your own private, cross-platform, local instance with (almost)full Experience Edge API compatibility.
Possible reasons to run EEE:
- You want to work in isolation from other developers using the same shared XM Cloud instance.
- You want to run some automated integration tests using fixed data.
- You want to work offline.
Try it out
EEE is released as native binaries and a Docker multi-platform image that runs on both Linux and Windows. For this example I'm using Docker on Windows.
Let's start EEE, make sure
./dataexists beforehand since we are on Windows:docker run -d --name eee -v "./data:C:/app/data" -e "EMU__MEDIAHOST=http://localhost:5710" -p 5710:8080 ghcr.io/sitecoreops/eee
Check the logs to see if everything looks good:
docker logs eee, you will see a message like[13:39:49 INF] Finished indexing, duration=00:00:00.004294, items=1, sites=0.Success! Let's query for that 1 item that was indexed: Open the UI at http://localhost:5710/ and run the query (shortcut:
Ctrl+Enter). You should see response similar to this:{ "data": { "item": { "name": "minimal", "path": "/sitecore/content/tests/minimal", "displayName": "Minimal Test Item" } } }Now let's put some more data in there, try to execute the crawl mutation that crawls an existing edge endpoint for all sites in the languages defined. Update
<LIVE CONTEXT ID>with your own. You can filter sites to crawl using thesiteNamesparameter if you only want to crawl some sites.You are now ready to change your local head app edge endpoint to the EEE endpoint instead: http://localhost:5710/graphql.
Conclusion
Besides being fun to implement, could this be useful to you? Try it out and share your feedback or ideas - contributions are welcome!.
Maybe Sitecore announces something to get rid of local XM Cloud instances completely at Symposium 2025, who knows 🙂 - but till then, EEE could be a good fit if you want to work in isolation!
Posted 2025-10-31, tagged: sitecore, xmcloud, graphql