{"id":66,"date":"2025-12-08T00:00:00","date_gmt":"2025-12-08T00:00:00","guid":{"rendered":"https:\/\/wordpress.securinsight.ca\/index.php\/2025\/12\/08\/workers-configure-workers-programmatically-using-the-vite-plugin\/"},"modified":"2025-12-08T00:00:00","modified_gmt":"2025-12-08T00:00:00","slug":"workers-configure-workers-programmatically-using-the-vite-plugin","status":"publish","type":"post","link":"https:\/\/wordpress.securinsight.ca\/index.php\/2025\/12\/08\/workers-configure-workers-programmatically-using-the-vite-plugin\/","title":{"rendered":"Workers &#8211; Configure Workers programmatically using the Vite plugin"},"content":{"rendered":"<p>The <a href=\"https:\/\/developers.cloudflare.com\/workers\/vite-plugin\/\">Cloudflare Vite plugin<\/a> now supports programmatic configuration of Workers without a Wrangler configuration file. You can use the <code>config<\/code> option to define Worker settings directly in your Vite configuration, or to modify existing configuration loaded from a Wrangler config file. This is particularly useful when integrating with other build tools or frameworks, as it allows them to control Worker configuration without needing users to manage a separate config file.<\/p>\n<h4>The <code>config<\/code> option<\/h4>\n<p>The Vite plugin&#8217;s new <code>config<\/code> option accepts either a partial configuration object or a function that receives the current configuration and returns overrides. This option is applied after any config file is loaded, allowing the plugin to override specific values or define Worker configuration entirely in code.<\/p>\n<h4>Example usage<\/h4>\n<p>Setting <code>config<\/code> to an object to provide configuration values that merge with defaults and config file settings:<\/p>\n<div>\n<figure>\n<pre data-language=\"ts\"><code class=\"language-ts\"><div><div><span>import <\/span><span>{<\/span><span><span> <\/span><span>defineConfig<\/span><span> <\/span><\/span><span>}<\/span><span> from <\/span><span>\"vite\"<\/span><span>;<\/span><\/div><\/div><div><div><span>import <\/span><span>{<\/span><span><span> <\/span><span>cloudflare<\/span><span> <\/span><\/span><span>}<\/span><span> from <\/span><span>\"@cloudflare\/vite-plugin\"<\/span><span>;<\/span><\/div><\/div><div><div>\n<\/div><\/div><div><div><span>export<\/span><span> <\/span><span>default<\/span><span> <\/span><span>defineConfig<\/span><span>(<\/span><span>{<\/span><\/div><\/div><div><div><span><span>  <\/span><\/span><span>plugins<\/span><span>:<\/span><span> [<\/span><\/div><\/div><div><div><span>    <\/span><span>cloudflare<\/span><span>(<\/span><span>{<\/span><\/div><\/div><div><div><span><span>      <\/span><\/span><span>config<\/span><span>:<\/span><span> <\/span><span>{<\/span><\/div><\/div><div><div><span><span>        <\/span><\/span><span>name<\/span><span>:<\/span><span> <\/span><span>\"my-worker\"<\/span><span>,<\/span><\/div><\/div><div><div><span><span>        <\/span><\/span><span>compatibility_flags<\/span><span>:<\/span><span> [<\/span><span>\"nodejs_compat\"<\/span><span>]<\/span><span>,<\/span><\/div><\/div><div><div><span><span>        <\/span><\/span><span>send_email<\/span><span>:<\/span><span> [<\/span><\/div><\/div><div><div><span>          <\/span><span>{<\/span><\/div><\/div><div><div><span><span>            <\/span><\/span><span>name<\/span><span>:<\/span><span> <\/span><span>\"EMAIL\"<\/span><span>,<\/span><\/div><\/div><div><div><span>          <\/span><span>},<\/span><\/div><\/div><div><div><span><span>        <\/span><\/span><span>]<\/span><span>,<\/span><\/div><\/div><div><div><span>      <\/span><span>},<\/span><\/div><\/div><div><div><span>    <\/span><span>}<\/span><span>)<\/span><span>,<\/span><\/div><\/div><div><div><span><span>  <\/span><\/span><span>]<\/span><span>,<\/span><\/div><\/div><div><div><span>}<\/span><span>)<\/span><span>;<\/span><\/div><\/div><\/code><\/pre>\n<div><\/div>\n<\/figure>\n<\/div>\n<p>Use a function to modify the existing configuration:<\/p>\n<div>\n<figure>\n<pre data-language=\"ts\"><code class=\"language-ts\"><div><div><span>import <\/span><span>{<\/span><span><span> <\/span><span>defineConfig<\/span><span> <\/span><\/span><span>}<\/span><span> from <\/span><span>\"vite\"<\/span><span>;<\/span><\/div><\/div><div><div><span>import <\/span><span>{<\/span><span><span> <\/span><span>cloudflare<\/span><span> <\/span><\/span><span>}<\/span><span> from <\/span><span>\"@cloudflare\/vite-plugin\"<\/span><span>;<\/span><\/div><\/div><div><div><span>export<\/span><span> <\/span><span>default<\/span><span> <\/span><span>defineConfig<\/span><span>(<\/span><span>{<\/span><\/div><\/div><div><div><span><span>  <\/span><\/span><span>plugins<\/span><span>:<\/span><span> [<\/span><\/div><\/div><div><div><span>    <\/span><span>cloudflare<\/span><span>(<\/span><span>{<\/span><\/div><\/div><div><div><span>      <\/span><span>config<\/span><span>:<\/span><span> <\/span><span>(<\/span><span>userConfig<\/span><span>)<\/span><span> <\/span><span>=&gt;<\/span><span> <\/span><span>{<\/span><\/div><\/div><div><div><span>        <\/span><span>delete<\/span><span> <\/span><span>userConfig<\/span><span>.<\/span><span>compatibility_flags<\/span><span>;<\/span><\/div><\/div><div><div><span>      <\/span><span>},<\/span><\/div><\/div><div><div><span>    <\/span><span>}<\/span><span>)<\/span><span>,<\/span><\/div><\/div><div><div><span><span>  <\/span><\/span><span>]<\/span><span>,<\/span><\/div><\/div><div><div><span>}<\/span><span>)<\/span><span>;<\/span><\/div><\/div><\/code><\/pre>\n<div><\/div>\n<\/figure>\n<\/div>\n<p>Return an object with values to merge:<\/p>\n<div>\n<figure>\n<pre data-language=\"ts\"><code class=\"language-ts\"><div><div><span>import <\/span><span>{<\/span><span><span> <\/span><span>defineConfig<\/span><span> <\/span><\/span><span>}<\/span><span> from <\/span><span>\"vite\"<\/span><span>;<\/span><\/div><\/div><div><div><span>import <\/span><span>{<\/span><span><span> <\/span><span>cloudflare<\/span><span> <\/span><\/span><span>}<\/span><span> from <\/span><span>\"@cloudflare\/vite-plugin\"<\/span><span>;<\/span><\/div><\/div><div><div>\n<\/div><\/div><div><div><span>export<\/span><span> <\/span><span>default<\/span><span> <\/span><span>defineConfig<\/span><span>(<\/span><span>{<\/span><\/div><\/div><div><div><span><span>  <\/span><\/span><span>plugins<\/span><span>:<\/span><span> [<\/span><\/div><\/div><div><div><span>    <\/span><span>cloudflare<\/span><span>(<\/span><span>{<\/span><\/div><\/div><div><div><span>      <\/span><span>config<\/span><span>:<\/span><span> <\/span><span>(<\/span><span>userConfig<\/span><span>)<\/span><span> <\/span><span>=&gt;<\/span><span> <\/span><span>{<\/span><\/div><\/div><div><div><span>        <\/span><span>if<\/span><span> (<\/span><span>!<\/span><span>userConfig<\/span><span>.<\/span><span>compatibility_flags<\/span><span>.<\/span><span>includes<\/span><span>(<\/span><span>\"no_nodejs_compat\"<\/span><span>)) <\/span><span>{<\/span><\/div><\/div><div><div><span>          <\/span><span>return<\/span><span> <\/span><span>{<\/span><span> compatibility_flags<\/span><span>:<\/span><span> [<\/span><span>\"nodejs_compat\"<\/span><span>] <\/span><span>};<\/span><\/div><\/div><div><div><span>        <\/span><span>}<\/span><\/div><\/div><div><div><span>      <\/span><span>},<\/span><\/div><\/div><div><div><span>    <\/span><span>}<\/span><span>)<\/span><span>,<\/span><\/div><\/div><div><div><span><span>  <\/span><\/span><span>]<\/span><span>,<\/span><\/div><\/div><div><div><span>}<\/span><span>)<\/span><span>;<\/span><\/div><\/div><\/code><\/pre>\n<div><\/div>\n<\/figure>\n<\/div>\n<h4>Auxiliary Workers<\/h4>\n<p>Auxiliary Workers also support the <code>config<\/code> option, enabling multi-Worker architectures without config files.<\/p>\n<p>Define auxiliary Workers without config files using <code>config<\/code> inside the <code>auxiliaryWorkers<\/code> array:<\/p>\n<div>\n<figure>\n<pre data-language=\"ts\"><code class=\"language-ts\"><div><div><span>import <\/span><span>{<\/span><span><span> <\/span><span>defineConfig<\/span><span> <\/span><\/span><span>}<\/span><span> from <\/span><span>\"vite\"<\/span><span>;<\/span><\/div><\/div><div><div><span>import <\/span><span>{<\/span><span><span> <\/span><span>cloudflare<\/span><span> <\/span><\/span><span>}<\/span><span> from <\/span><span>\"@cloudflare\/vite-plugin\"<\/span><span>;<\/span><\/div><\/div><div><div>\n<\/div><\/div><div><div><span>export<\/span><span> <\/span><span>default<\/span><span> <\/span><span>defineConfig<\/span><span>(<\/span><span>{<\/span><\/div><\/div><div><div><span><span>  <\/span><\/span><span>plugins<\/span><span>:<\/span><span> [<\/span><\/div><\/div><div><div><span>    <\/span><span>cloudflare<\/span><span>(<\/span><span>{<\/span><\/div><\/div><div><div><span><span>      <\/span><\/span><span>config<\/span><span>:<\/span><span> <\/span><span>{<\/span><\/div><\/div><div><div><span><span>        <\/span><\/span><span>name<\/span><span>:<\/span><span> <\/span><span>\"entry-worker\"<\/span><span>,<\/span><\/div><\/div><div><div><span><span>        <\/span><\/span><span>main<\/span><span>:<\/span><span> <\/span><span>\".\/src\/entry.ts\"<\/span><span>,<\/span><\/div><\/div><div><div><span><span>        <\/span><\/span><span>services<\/span><span>:<\/span><span> [<\/span><span>{<\/span><span> binding<\/span><span>:<\/span><span> <\/span><span>\"API\"<\/span><span>,<\/span><span> service<\/span><span>:<\/span><span> <\/span><span>\"api-worker\"<\/span><span> <\/span><span>}<\/span><span>]<\/span><span>,<\/span><\/div><\/div><div><div><span>      <\/span><span>},<\/span><\/div><\/div><div><div><span><span>      <\/span><\/span><span>auxiliaryWorkers<\/span><span>:<\/span><span> [<\/span><\/div><\/div><div><div><span>        <\/span><span>{<\/span><\/div><\/div><div><div><span><span>          <\/span><\/span><span>config<\/span><span>:<\/span><span> <\/span><span>{<\/span><\/div><\/div><div><div><span><span>            <\/span><\/span><span>name<\/span><span>:<\/span><span> <\/span><span>\"api-worker\"<\/span><span>,<\/span><\/div><\/div><div><div><span><span>            <\/span><\/span><span>main<\/span><span>:<\/span><span> <\/span><span>\".\/src\/api.ts\"<\/span><span>,<\/span><\/div><\/div><div><div><span>          <\/span><span>},<\/span><\/div><\/div><div><div><span>        <\/span><span>},<\/span><\/div><\/div><div><div><span><span>      <\/span><\/span><span>]<\/span><span>,<\/span><\/div><\/div><div><div><span>    <\/span><span>}<\/span><span>)<\/span><span>,<\/span><\/div><\/div><div><div><span><span>  <\/span><\/span><span>]<\/span><span>,<\/span><\/div><\/div><div><div><span>}<\/span><span>)<\/span><span>;<\/span><\/div><\/div><\/code><\/pre>\n<div><\/div>\n<\/figure>\n<\/div>\n<p>For more details and examples, see <a href=\"https:\/\/developers.cloudflare.com\/workers\/vite-plugin\/reference\/programmatic-configuration\/\">Programmatic configuration<\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>The Cloudflare Vite plugin now supports programmatic configuration of Workers without a Wrangler configuration file. You can use the config option to define Worker settings directly in your Vite configuration, or to modify existing configuration loaded from a Wrangler config file. This is particularly useful when integrating with other build tools or frameworks, as it [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-66","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/posts\/66","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/comments?post=66"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/posts\/66\/revisions"}],"wp:attachment":[{"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/media?parent=66"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/categories?post=66"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.securinsight.ca\/index.php\/wp-json\/wp\/v2\/tags?post=66"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}