{"id":32713905,"url":"https://github.com/sitecoreops/experience-edge-emu","last_synced_at":"2026-05-18T05:44:24.659Z","repository":{"id":321678893,"uuid":"1086721026","full_name":"sitecoreops/experience-edge-emu","owner":"sitecoreops","description":"Lightweight Experience Edge emulator for local (offline) development and test automation.","archived":false,"fork":false,"pushed_at":"2025-12-30T11:21:30.000Z","size":2301,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-03T00:52:30.914Z","etag":null,"topics":["graphql-server","sitecore"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sitecoreops.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-30T20:06:42.000Z","updated_at":"2025-12-30T11:21:33.000Z","dependencies_parsed_at":"2025-10-31T09:32:22.201Z","dependency_job_id":null,"html_url":"https://github.com/sitecoreops/experience-edge-emu","commit_stats":null,"previous_names":["sitecoreops/eee","sitecoreops/experience-edge-emu"],"tags_count":19,"template":false,"template_full_name":null,"purl":"pkg:github/sitecoreops/experience-edge-emu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sitecoreops%2Fexperience-edge-emu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sitecoreops%2Fexperience-edge-emu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sitecoreops%2Fexperience-edge-emu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sitecoreops%2Fexperience-edge-emu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sitecoreops","download_url":"https://codeload.github.com/sitecoreops/experience-edge-emu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sitecoreops%2Fexperience-edge-emu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33166774,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-18T05:43:36.989Z","status":"ssl_error","status_checked_at":"2026-05-18T05:43:19.133Z","response_time":71,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["graphql-server","sitecore"],"created_at":"2025-11-02T11:01:26.136Z","updated_at":"2026-05-18T05:44:24.653Z","avatar_url":"https://github.com/sitecoreops.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🪶 Experience Edge Emu (EEE) 🪶\n\nLightweight Sitecore Experience Edge emulator for local (offline) cross-platform development and test automation.\n\n[![cicd](https://github.com/sitecoreops/experience-edge-emu/actions/workflows/cicd.yml/badge.svg)](https://github.com/sitecoreops/experience-edge-emu/actions/workflows/cicd.yml)\n[![Latest Release](https://img.shields.io/github/v/release/sitecoreops/experience-edge-emu)](https://github.com/sitecoreops/experience-edge-emu/releases/latest)\n[![Docker Image](https://img.shields.io/badge/docker-ghcr.io/sitecoreops/eee-blue)](https://ghcr.io/sitecoreops/eee)\n\n## Features\n\n- GraphQL endpoint\n  - Experience Edge compatibility:\n    - `site` queries.\n    - `layout` queries.\n    - `item` queries.\n    - `search` queries **NOT SUPPORTED**⚠️.\n  - Extras:\n    - `crawl` mutation, crawls existing Experience Edge endpoint to seed emulator with data and media 🚀.\n- Hosting media items.\n- [GraphiQL UI](https://github.com/graphql-dotnet/server) accessible on `/`.\n- Hot reloading data when files in data root is modified.\n- Health endpoint `/healthz`.\n- Docker multi platform images `docker image pull ghcr.io/sitecoreops/eee` (runs on both Windows x64 and Linux x64).\n- Native binaries for Windows x64 and Linux x64.\n- Predefined \"skatepark\" dataset, use argument `--dataset skatepark`. \n\n## Data layout\n\nUnder your data root (default `./data`, configured with the `EMU__DATAROOTPATH` environment variable) the following rules apply:\n\n```text\n./data\n   ├── /items/**/*.json (any structure supported, files must contain at least the required fields of type Item in the schema)\n   ├── /site\n         ├── /**/\u003clanguage\u003e.json (language specific siteInfo data such as dictionary and routes)\n         ├── sitedata.json (SiteData.allSiteInfo is stored here )\n   ├── /media/** (stored as the media path)\n   ├── /imported-schema.graphqls (will be create first time the crawl mutation is executed)\n```\n\n\u003e 💡TIP: Run a `crawl` mutation to get some data to learn from.\n\n## Crawling preview endpoints (preview context id's or local SitecoreAI CMS instances)\n\nIf you want to crawl Experience Edge with *preview** context id's or a local SitecoreAI CMS instances, then you will hit a CM server. This requires the following patch to increase the Sitecore GraphQL complexity configuration:\n\n```xml\n\u003c?xml version=\"1.0\" encoding=\"utf-8\" ?\u003e\n\u003cconfiguration\u003e\n  \u003csitecore\u003e\n    \u003capi\u003e\n      \u003cGraphQL\u003e\n        \u003cdefaults\u003e\n          \u003csecurity\u003e\n            \u003cpublicService type=\"Sitecore.Services.GraphQL.Hosting.Security.GraphQLSecurity, Sitecore.Services.GraphQL\"\u003e\n              \u003ccomplexityConfiguration type=\"GraphQL.Validation.Complexity.ComplexityConfiguration, GraphQL\"\u003e\n                \u003cmaxDepth\u003e50\u003c/maxDepth\u003e\n                \u003cmaxComplexity\u003e500000\u003c/maxComplexity\u003e\n              \u003c/complexityConfiguration\u003e\n            \u003c/publicService\u003e\n          \u003c/security\u003e\n        \u003c/defaults\u003e\n      \u003c/GraphQL\u003e\n    \u003c/api\u003e\n  \u003c/sitecore\u003e\n\u003c/configuration\u003e\n```\n\n## Limitations \u0026 known issues\n\nCurrently there a few limitations/gotchas, some may be fixed in the future:\n\n1. When running `eee` in Docker, you cannot crawl a local SitecoreAI CMS instance *unless* they share the same Docker network.\n1. Using the `maxWidth` and `maxHeight` on `src` property fields does nothing.\n1. `SiteInfo.RoutesResult` only supports the `language` and `first` parameters, `excludedPaths`, `includePaths` and `after` does nothing.\n1. `SiteInfo.DictionaryResult` only supports the `language` and `first` parameters, `after` does nothing.\n\n## Quick start\n\nYou can run in Docker or download native binaries for Linux and Windows. Running with SSL is important if your head application also runs SSL to avoid the browser blocks loading media on non SSL urls.\n\n### Docker\n\nrun without SSL:\n\n```powershell\ndocker run -e \"EMU__MEDIAHOST=http://localhost:5710\" -p 5710:8080 ghcr.io/sitecoreops/eee\n```\n\nor with persistence:\n\n```powershell\ndocker run -v \"./data/eee:/app/data\" -e \"EMU__MEDIAHOST=http://localhost:5710\" -p 5710:8080 ghcr.io/sitecoreops/eee\n```\n\nor with the skatepark dataset:\n\n```powershell\ndocker run -e \"EMU__MEDIAHOST=http://localhost:5710\" -p 5710:8080 ghcr.io/sitecoreops/eee --dataset skatepark\n```\n\nor with SSL:\n\n1. Use [./compose.yml](./compose.yml) as reference, modify as needed, for example change image data volumes. Add `command: --dataset skatepark` to use the skatepark dataset.\n1. Then `docker compose up -d`.\n1. Make your machine trust the certificate, run `certutil -addstore -f \"ROOT\" \".\\\\docker\\\\caddy\\\\data\\\\caddy\\\\pki\\\\authorities\\\\local\\\\root.crt\"`.\n\n### Native binary\n\n1. Download one of the binaries from \u003chttps://github.com/sitecoreops/eee/releases\u003e.\n1. Without SSL, run `.\\eee.exe` (Windows) or `eee` (Linux).\n1. For SSL, add the arguments:\n   1. `--Kestrel:Endpoints:HttpsDefaultCert:Url=https://localhost:5711` to use the developer certificate from `dotnet dev-certs`.\n   1. or `--Kestrel:Endpoints:Https:Url=https://localhost:5711 --Kestrel:Endpoints:Https:Certificate:Subject=localhost` to use your own.\n\n### Usage\n\nRun `query`:\n\n```powershell\ncurl -k \"https://localhost:5711/graphql\" -H \"Content-Type: application/json\" --data-raw '{\"query\":\"{item(path:\\\"/sitecore/content/tests/minimal\\\",language:\\\"en\\\"){id,path,name,displayName}}\"}'\n```\n\nRun `crawl` mutation:\n\n```powershell\ncurl -k \"https://localhost:5711/graphql\" -H \"Content-Type: application/json\" --data-raw '{\"query\":\"mutation{crawl(edgeContextId:\\\"\u003cEDGE-CONTEXT-ID\u003e\\\",languages:[\\\"en\\\"]){success,itemsProcessed,sitesProcessed,durationMs,message}}\"}'\n```\n\nOr open \u003chttps://localhost:5711\u003e to use the GraphiQL UI.\n\nWhen you have seeded some data, change your local head application to use \u003chttps://localhost:5711/graphql\u003e instead of your usual Experience Edge url.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsitecoreops%2Fexperience-edge-emu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsitecoreops%2Fexperience-edge-emu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsitecoreops%2Fexperience-edge-emu/lists"}