eddev

Configuration

Configure eddev projects with theme-level JSON settings.

eddev projects are configured with ed.config.json in the theme root. The file is read by the JavaScript build/server process and, for some options, by the WordPress PHP runtime.

The generated .ed.config.schema.json file gives editor autocomplete and validation. It is generated from the Zod schema in eddev, so treat that schema as the source of truth when an option changes.

{
  "$schema": ".ed.config.schema.json",
  "version": "2",
  "legacyStitches": false,
  "favicon": {
    "mode": "svg"
  },
  "serverless": {
    "enabled": true,
    "uploads": "remote",
    "plugins": "remote",
    "admin": "hide",
    "themeAssets": ["assets/**/*"],
    "originProtection": {
      "requireLogin": false
    },
    "endpoints": {
      "cms.website.com": "website.com"
    }
  },
  "cache": {
    "*": {
      "pageDataTTL": 300,
      "appDataTTL": 300,
      "queryHooksTTL": 300,
      "serverless": {
        "isr": true,
        "dataCache": "in-memory"
      },
      "wordpress": {
        "cacheHeaders": true,
        "transients": true
      }
    }
  },
  "devUI": "enabled"
}

Keep cache and serverless.endpoints explicit on production projects. The JavaScript side applies schema defaults, but the WordPress PHP side also reads parts of the raw JSON file.

Where To Go Next

Top-Level Options

OptionWhat It Does
$schemaPoints editors at .ed.config.schema.json for autocomplete and validation.
versionConfig format version. Current projects should use "2".
faviconControls favicon generation. See Favicons.
legacyMetadataEnables older comment-based metadata parsing for projects that still need it. New projects should use exported metadata.
legacyStitchesMarks the project as using the old Stitches styling setup. New projects should leave this as false.
trackersAdds standard tracking snippets such as GA4 or GTM.
serverlessControls serverless deployment, proxied assets, admin URL behavior, endpoint mappings, CORS, and CSP. See Serverless.
cacheControls WordPress and serverless data/response caching. See Serverless cache settings and GraphQL caching.
devUIEnables or disables the eddev development UI. Use "enabled" for normal development.

favicon

favicon controls how eddev prepares favicon assets during the build.

ModeUse When
autoWordPress Site Icon should handle favicons. No .ico is generated by eddev.
svgThe project has a single SVG favicon source, optionally with light and dark variants.
pngsThe project has multiple PNG favicon source files.

The favicon page should carry the asset naming and export details once it is filled out: Favicons.

serverless

Most current projects deploy the public frontend to Vercel and keep WordPress as the CMS and route authority. serverless controls that deployment shape.

OptionWhat It Does
enabledEnables serverless deployment support.
uploadsChooses whether upload URLs are remote origin URLs or proxied through the serverless deployment.
pluginsChooses whether plugin asset URLs are remote origin URLs or proxied through the serverless deployment.
adminControls whether WordPress admin/API URLs are proxied or hidden on the serverless deployment.
originProtection.requireLoginForces eddev Access Control for the WordPress origin.
themeAssetsLists theme asset folders to include in the serverless deployment.
endpointsMaps WordPress hostnames to serverless hostnames for RPC and SPA/admin calls.
cors.originsAdds extra CORS origins beyond hosts inferred from endpoints.
cspConfigures Content Security Policy for the serverless app.

Use the serverless overview for deployment flow, SITE_URL, SITE_API_KEY, Access Control, endpoint mappings, and cache behavior: Serverless.

cache

cache is a map of WordPress origin hostnames to cache settings. Use "*" as the default, and add exact or wildcard host entries when staging and production need different behavior.

{
  "cache": {
    "*.staging.website.com": {
      "pageDataTTL": 60,
      "appDataTTL": 60,
      "queryHooksTTL": 60,
      "serverless": {
        "isr": false,
        "dataCache": "none"
      },
      "wordpress": {
        "cacheHeaders": false,
        "transients": false
      }
    },
    "*": {
      "pageDataTTL": 300,
      "appDataTTL": 300,
      "queryHooksTTL": 300,
      "serverless": {
        "isr": true,
        "dataCache": "in-memory"
      },
      "wordpress": {
        "cacheHeaders": true,
        "transients": true
      }
    }
  }
}

Cache host keys are matched as hostnames. Ports are ignored, exact hostnames win over wildcard patterns, and "*" is the fallback.

OptionWhat It Does
pageDataTTLSeconds to cache route data and rendered page responses.
appDataTTLSeconds to cache global app data from views/_app.graphql.
queryHooksTTLSeconds to cache named runtime GraphQL query hook responses.
serverless.isrEnables serverless response caching/ISR for pages and data routes.
serverless.dataCachein-memory uses the serverless LRU/SWR data cache. none fetches WordPress every time.
wordpress.cacheHeadersAllows WordPress data responses to emit cache headers.
wordpress.transientsAllows WordPress to cache GraphQL results in transients.

Individual GraphQL files can still override the duration with # ttl: 300 or disable caching with # nocache; see GraphQL caching.

trackers

trackers embeds standard tracking snippets collected by eddev.

{
  "trackers": [
    {
      "provider": "ga4",
      "id": "G-XXXXXXXXXX"
    },
    {
      "provider": "gtm",
      "id": "GTM-XXXXXXX"
    }
  ]
}

Supported providers are ga4 and gtm. Serverless CSP can auto-detect common tracker origins when CSP is enabled.

If you've got Slim SEO installed, you can just put them in Settings -> Slim SEO -> Code.

Legacy Flags

legacyMetadata and legacyStitches are compatibility switches for older projects. Leave them off unless the project already depends on those older conventions.

  • legacyMetadata keeps support for older metadata extraction.
  • legacyStitches marks the site as using the old Stitches styling path.

New projects should use exported block/view metadata and the current CSS/Tailwind setup.

On this page