create-cloudflare 2.72.13 → 2.73.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -105744,7 +105744,7 @@ function mapWorkerMetadataBindings(bindings) {
105744
105744
  }, {});
105745
105745
  }
105746
105746
  __name(mapWorkerMetadataBindings, "mapWorkerMetadataBindings");
105747
- var DEFAULT_COMPAT_DATE = "2026-09-25";
105747
+ var DEFAULT_COMPAT_DATE = "2026-09-26";
105748
105748
  function constructWranglerConfig(config50) {
105749
105749
  const mappedBindings = mapWorkerMetadataBindings(config50.bindings);
105750
105750
  const durableObjectClassNames = config50.bindings.filter(
@@ -113904,7 +113904,7 @@ var Yargs = YargsFactory(esm_default2);
113904
113904
  var yargs_default = Yargs;
113905
113905
 
113906
113906
  // package.json
113907
- var version2 = "2.72.13";
113907
+ var version2 = "2.73.0";
113908
113908
 
113909
113909
  // src/metrics.ts
113910
113910
  var import_node_async_hooks = require("node:async_hooks");
@@ -117110,6 +117110,25 @@ var config9 = {
117110
117110
  };
117111
117111
  var c3_default8 = config9;
117112
117112
 
117113
+ // templates/django/c3.ts
117114
+ var c3_default9 = {
117115
+ configVersion: 1,
117116
+ id: "django",
117117
+ displayName: "Django",
117118
+ description: "A Django application running on Cloudflare Workers",
117119
+ platform: "workers",
117120
+ copyFiles: {
117121
+ variants: {
117122
+ python: {
117123
+ path: "./py"
117124
+ }
117125
+ }
117126
+ },
117127
+ workersTypes: "none",
117128
+ devScript: "dev",
117129
+ deployScript: "deploy"
117130
+ };
117131
+
117113
117132
  // templates/docusaurus/pages/c3.ts
117114
117133
  var { npm: npm4 } = detectPackageManager();
117115
117134
  var generate6 = async (ctx) => {
@@ -117136,7 +117155,7 @@ var config10 = {
117136
117155
  previewScript: "preview",
117137
117156
  workersTypes: "none"
117138
117157
  };
117139
- var c3_default9 = config10;
117158
+ var c3_default10 = config10;
117140
117159
 
117141
117160
  // templates/docusaurus/workers/c3.ts
117142
117161
  var { npm: npm5 } = detectPackageManager();
@@ -117166,14 +117185,52 @@ var config11 = {
117166
117185
  previewScript: "preview",
117167
117186
  workersTypes: "none"
117168
117187
  };
117169
- var c3_default10 = config11;
117188
+ var c3_default11 = config11;
117170
117189
 
117171
117190
  // templates/docusaurus/c3.ts
117172
117191
  var config12 = {
117173
117192
  displayName: "Docusaurus",
117174
- platformVariants: { pages: c3_default9, workers: c3_default10 }
117193
+ platformVariants: { pages: c3_default10, workers: c3_default11 }
117194
+ };
117195
+ var c3_default12 = config12;
117196
+
117197
+ // templates/fastapi/c3.ts
117198
+ var c3_default13 = {
117199
+ configVersion: 1,
117200
+ id: "fastapi",
117201
+ displayName: "FastAPI",
117202
+ description: "A FastAPI application running on Cloudflare Workers",
117203
+ platform: "workers",
117204
+ copyFiles: {
117205
+ variants: {
117206
+ python: {
117207
+ path: "./py"
117208
+ }
117209
+ }
117210
+ },
117211
+ workersTypes: "none",
117212
+ devScript: "dev",
117213
+ deployScript: "deploy"
117214
+ };
117215
+
117216
+ // templates/flask/c3.ts
117217
+ var c3_default14 = {
117218
+ configVersion: 1,
117219
+ id: "flask",
117220
+ displayName: "Flask",
117221
+ description: "A Flask application running on Cloudflare Workers",
117222
+ platform: "workers",
117223
+ copyFiles: {
117224
+ variants: {
117225
+ python: {
117226
+ path: "./py"
117227
+ }
117228
+ }
117229
+ },
117230
+ workersTypes: "none",
117231
+ devScript: "dev",
117232
+ deployScript: "deploy"
117175
117233
  };
117176
- var c3_default11 = config12;
117177
117234
 
117178
117235
  // templates/gatsby/pages/c3.ts
117179
117236
  var { npm: npm6 } = detectPackageManager();
@@ -117217,7 +117274,7 @@ var config13 = {
117217
117274
  previewScript: "preview",
117218
117275
  workersTypes: "none"
117219
117276
  };
117220
- var c3_default12 = config13;
117277
+ var c3_default15 = config13;
117221
117278
 
117222
117279
  // templates/gatsby/workers/c3.ts
117223
117280
  var { npm: npm7 } = detectPackageManager();
@@ -117263,14 +117320,14 @@ var config14 = {
117263
117320
  previewScript: "preview",
117264
117321
  workersTypes: "none"
117265
117322
  };
117266
- var c3_default13 = config14;
117323
+ var c3_default16 = config14;
117267
117324
 
117268
117325
  // templates/gatsby/c3.ts
117269
117326
  var config15 = {
117270
117327
  displayName: "Gatsby",
117271
- platformVariants: { pages: c3_default12, workers: c3_default13 }
117328
+ platformVariants: { pages: c3_default15, workers: c3_default16 }
117272
117329
  };
117273
- var c3_default14 = config15;
117330
+ var c3_default17 = config15;
117274
117331
 
117275
117332
  // templates/hello-world-assets-only/c3.ts
117276
117333
  var config16 = {
@@ -117285,7 +117342,7 @@ var config16 = {
117285
117342
  path: "./templates"
117286
117343
  }
117287
117344
  };
117288
- var c3_default15 = config16;
117345
+ var c3_default18 = config16;
117289
117346
 
117290
117347
  // templates/hello-world-durable-object-with-assets/c3.ts
117291
117348
  var config17 = {
@@ -117309,7 +117366,7 @@ var config17 = {
117309
117366
  }
117310
117367
  }
117311
117368
  };
117312
- var c3_default16 = config17;
117369
+ var c3_default19 = config17;
117313
117370
 
117314
117371
  // templates/hello-world-durable-object/c3.ts
117315
117372
  var config18 = {
@@ -117332,7 +117389,7 @@ var config18 = {
117332
117389
  }
117333
117390
  }
117334
117391
  };
117335
- var c3_default17 = config18;
117392
+ var c3_default20 = config18;
117336
117393
 
117337
117394
  // templates/hello-world-with-assets/c3.ts
117338
117395
  var config19 = {
@@ -117356,10 +117413,10 @@ var config19 = {
117356
117413
  }
117357
117414
  }
117358
117415
  };
117359
- var c3_default18 = config19;
117416
+ var c3_default21 = config19;
117360
117417
 
117361
117418
  // templates/hello-world-workflows/c3.ts
117362
- var c3_default19 = {
117419
+ var c3_default22 = {
117363
117420
  configVersion: 1,
117364
117421
  id: "hello-world-workflows",
117365
117422
  displayName: "Workflow",
@@ -117378,7 +117435,7 @@ var c3_default19 = {
117378
117435
  };
117379
117436
 
117380
117437
  // templates/hello-world/c3.ts
117381
- var c3_default20 = {
117438
+ var c3_default23 = {
117382
117439
  configVersion: 1,
117383
117440
  id: "hello-world",
117384
117441
  displayName: "Worker only",
@@ -117437,7 +117494,7 @@ var config20 = {
117437
117494
  previewScript: "preview",
117438
117495
  envInterfaceName
117439
117496
  };
117440
- var c3_default21 = config20;
117497
+ var c3_default24 = config20;
117441
117498
 
117442
117499
  // templates/hono/workers/c3.ts
117443
117500
  var generate11 = async (ctx) => {
@@ -117475,14 +117532,14 @@ var config21 = {
117475
117532
  previewScript: "dev",
117476
117533
  envInterfaceName: envInterfaceName2
117477
117534
  };
117478
- var c3_default22 = config21;
117535
+ var c3_default25 = config21;
117479
117536
 
117480
117537
  // templates/hono/c3.ts
117481
117538
  var config22 = {
117482
117539
  displayName: "Hono",
117483
- platformVariants: { pages: c3_default21, workers: c3_default22 }
117540
+ platformVariants: { pages: c3_default24, workers: c3_default25 }
117484
117541
  };
117485
- var c3_default23 = config22;
117542
+ var c3_default26 = config22;
117486
117543
 
117487
117544
  // templates/next/c3.ts
117488
117545
  var import_node_assert5 = __toESM(require("node:assert"));
@@ -117562,7 +117619,7 @@ var generate12 = async (ctx) => {
117562
117619
  await generateVinext(ctx);
117563
117620
  };
117564
117621
  var envInterfaceName3 = "CloudflareEnv";
117565
- var c3_default24 = {
117622
+ var c3_default27 = {
117566
117623
  configVersion: 1,
117567
117624
  id: "next",
117568
117625
  // Used by runFrameworkGenerator for the vinext path. OpenNext downloads a
@@ -117713,7 +117770,7 @@ var config23 = {
117713
117770
  deployScript: "deploy",
117714
117771
  previewScript: "preview"
117715
117772
  };
117716
- var c3_default25 = config23;
117773
+ var c3_default28 = config23;
117717
117774
 
117718
117775
  // templates/nuxt/workers/c3.ts
117719
117776
  var recast5 = __toESM(require_main2());
@@ -117809,14 +117866,14 @@ var config24 = {
117809
117866
  deployScript: "deploy",
117810
117867
  previewScript: "preview"
117811
117868
  };
117812
- var c3_default26 = config24;
117869
+ var c3_default29 = config24;
117813
117870
 
117814
117871
  // templates/nuxt/c3.ts
117815
117872
  var config25 = {
117816
117873
  displayName: "Nuxt",
117817
- platformVariants: { pages: c3_default25, workers: c3_default26 }
117874
+ platformVariants: { pages: c3_default28, workers: c3_default29 }
117818
117875
  };
117819
- var c3_default27 = config25;
117876
+ var c3_default30 = config25;
117820
117877
 
117821
117878
  // templates/openapi/c3.ts
117822
117879
  var config26 = {
@@ -117830,7 +117887,7 @@ var config26 = {
117830
117887
  },
117831
117888
  languages: ["ts"]
117832
117889
  };
117833
- var c3_default28 = config26;
117890
+ var c3_default31 = config26;
117834
117891
 
117835
117892
  // templates/pre-existing/c3.ts
117836
117893
  var import_node_fs17 = require("node:fs");
@@ -118026,7 +118083,7 @@ var config27 = {
118026
118083
  copyFiles: copyExistingWorkerFiles
118027
118084
  })
118028
118085
  };
118029
- var c3_default29 = config27;
118086
+ var c3_default32 = config27;
118030
118087
  function buildConfigure(params) {
118031
118088
  return async function configure18(ctx) {
118032
118089
  const loginSuccess = await params.login(ctx);
@@ -118067,7 +118124,7 @@ var config28 = {
118067
118124
  ]
118068
118125
  }
118069
118126
  };
118070
- var c3_default30 = config28;
118127
+ var c3_default33 = config28;
118071
118128
 
118072
118129
  // src/helpers/codemod.ts
118073
118130
  var import_node_fs18 = require("node:fs");
@@ -118178,7 +118235,7 @@ var config29 = {
118178
118235
  previewScript: "preview",
118179
118236
  workersTypes: "installed"
118180
118237
  };
118181
- var c3_default31 = config29;
118238
+ var c3_default34 = config29;
118182
118239
 
118183
118240
  // templates/qwik/workers/c3.ts
118184
118241
  var recast7 = __toESM(require_main2());
@@ -118266,14 +118323,14 @@ var config30 = {
118266
118323
  previewScript: "preview",
118267
118324
  workersTypes: "installed"
118268
118325
  };
118269
- var c3_default32 = config30;
118326
+ var c3_default35 = config30;
118270
118327
 
118271
118328
  // templates/qwik/c3.ts
118272
118329
  var config31 = {
118273
118330
  displayName: "Qwik",
118274
- platformVariants: { pages: c3_default31, workers: c3_default32 }
118331
+ platformVariants: { pages: c3_default34, workers: c3_default35 }
118275
118332
  };
118276
- var c3_default33 = config31;
118333
+ var c3_default36 = config31;
118277
118334
 
118278
118335
  // templates/react-router/c3.ts
118279
118336
  var import_node_path20 = require("node:path");
@@ -118330,7 +118387,7 @@ var config32 = {
118330
118387
  deployScript: "deploy",
118331
118388
  previewScript: "preview"
118332
118389
  };
118333
- var c3_default34 = config32;
118390
+ var c3_default37 = config32;
118334
118391
 
118335
118392
  // templates/react/pages/c3.ts
118336
118393
  var { npm: npm14 } = detectPackageManager();
@@ -118403,7 +118460,7 @@ var config33 = {
118403
118460
  deployScript: "deploy",
118404
118461
  previewScript: "preview"
118405
118462
  };
118406
- var c3_default35 = config33;
118463
+ var c3_default38 = config33;
118407
118464
 
118408
118465
  // templates/react/workers/c3.ts
118409
118466
  var import_node_assert6 = __toESM(require("node:assert"));
@@ -118553,14 +118610,14 @@ var config34 = {
118553
118610
  deployScript: "deploy",
118554
118611
  previewScript: "preview"
118555
118612
  };
118556
- var c3_default36 = config34;
118613
+ var c3_default39 = config34;
118557
118614
 
118558
118615
  // templates/react/c3.ts
118559
118616
  var config35 = {
118560
118617
  displayName: "React",
118561
- platformVariants: { pages: c3_default35, workers: c3_default36 }
118618
+ platformVariants: { pages: c3_default38, workers: c3_default39 }
118562
118619
  };
118563
- var c3_default37 = config35;
118620
+ var c3_default40 = config35;
118564
118621
 
118565
118622
  // templates/redwood/c3.ts
118566
118623
  var { npm: npm16 } = detectPackageManager();
@@ -118587,7 +118644,7 @@ var config36 = {
118587
118644
  deployScript: "release",
118588
118645
  previewScript: "preview"
118589
118646
  };
118590
- var c3_default38 = config36;
118647
+ var c3_default41 = config36;
118591
118648
 
118592
118649
  // templates/scheduled/c3.ts
118593
118650
  var config37 = {
@@ -118607,7 +118664,7 @@ var config37 = {
118607
118664
  }
118608
118665
  }
118609
118666
  };
118610
- var c3_default39 = config37;
118667
+ var c3_default42 = config37;
118611
118668
 
118612
118669
  // templates/solid/c3.ts
118613
118670
  var recast9 = __toESM(require_main2());
@@ -118667,7 +118724,7 @@ var config38 = {
118667
118724
  deployScript: "deploy",
118668
118725
  previewScript: "preview"
118669
118726
  };
118670
- var c3_default40 = config38;
118727
+ var c3_default43 = config38;
118671
118728
 
118672
118729
  // templates/svelte/pages/c3.ts
118673
118730
  var import_node_fs19 = require("node:fs");
@@ -118793,7 +118850,7 @@ var config39 = {
118793
118850
  previewScript: "preview",
118794
118851
  typesPath: typesPath2
118795
118852
  };
118796
- var c3_default41 = config39;
118853
+ var c3_default44 = config39;
118797
118854
 
118798
118855
  // templates/svelte/workers/c3.ts
118799
118856
  var recast11 = __toESM(require_main2());
@@ -118894,14 +118951,14 @@ var config40 = {
118894
118951
  previewScript: "preview",
118895
118952
  typesPath: typesPath3
118896
118953
  };
118897
- var c3_default42 = config40;
118954
+ var c3_default45 = config40;
118898
118955
 
118899
118956
  // templates/svelte/c3.ts
118900
118957
  var config41 = {
118901
118958
  displayName: "SvelteKit",
118902
- platformVariants: { pages: c3_default41, workers: c3_default42 }
118959
+ platformVariants: { pages: c3_default44, workers: c3_default45 }
118903
118960
  };
118904
- var c3_default43 = config41;
118961
+ var c3_default46 = config41;
118905
118962
 
118906
118963
  // templates/tanstack-start/c3.ts
118907
118964
  var { npm: npm20 } = detectPackageManager();
@@ -118940,7 +118997,7 @@ var config42 = {
118940
118997
  deployScript: "deploy",
118941
118998
  previewScript: "preview"
118942
118999
  };
118943
- var c3_default44 = config42;
119000
+ var c3_default47 = config42;
118944
119001
 
118945
119002
  // templates/vike/c3.ts
118946
119003
  var generate26 = async (ctx) => {
@@ -118969,7 +119026,7 @@ var config43 = {
118969
119026
  }
118970
119027
  })
118971
119028
  };
118972
- var c3_default45 = config43;
119029
+ var c3_default48 = config43;
118973
119030
 
118974
119031
  // templates/vike/experimental-c3.ts
118975
119032
  var generate27 = async (ctx) => {
@@ -119024,7 +119081,7 @@ var config45 = {
119024
119081
  deployScript: "deploy",
119025
119082
  previewScript: "preview"
119026
119083
  };
119027
- var c3_default46 = config45;
119084
+ var c3_default49 = config45;
119028
119085
 
119029
119086
  // templates/vue/workers/c3.ts
119030
119087
  var { npm: npm22 } = detectPackageManager();
@@ -119099,14 +119156,14 @@ var config46 = {
119099
119156
  deployScript: "deploy",
119100
119157
  previewScript: "preview"
119101
119158
  };
119102
- var c3_default47 = config46;
119159
+ var c3_default50 = config46;
119103
119160
 
119104
119161
  // templates/vue/c3.ts
119105
119162
  var config47 = {
119106
119163
  displayName: "Vue",
119107
- platformVariants: { pages: c3_default46, workers: c3_default47 }
119164
+ platformVariants: { pages: c3_default49, workers: c3_default50 }
119108
119165
  };
119109
- var c3_default48 = config47;
119166
+ var c3_default51 = config47;
119110
119167
 
119111
119168
  // templates/waku/c3.ts
119112
119169
  var import_node_path21 = require("node:path");
@@ -119161,7 +119218,7 @@ var config48 = {
119161
119218
  deployScript: "deploy",
119162
119219
  previewScript: "preview"
119163
119220
  };
119164
- var c3_default49 = config48;
119221
+ var c3_default52 = config48;
119165
119222
 
119166
119223
  // templates/waku/experimental-c3.ts
119167
119224
  var { npm: npm24 } = detectPackageManager();
@@ -119258,7 +119315,7 @@ If the application uses Durable Objects or Workflows, refer to the relevant best
119258
119315
  var import_node_assert7 = __toESM(require("node:assert"));
119259
119316
 
119260
119317
  // ../wrangler/package.json
119261
- var version3 = "4.141.0";
119318
+ var version3 = "4.143.0";
119262
119319
 
119263
119320
  // src/git.ts
119264
119321
  var offerGit = async (ctx) => {
@@ -119464,14 +119521,6 @@ var validateTemplateUrl = (value) => {
119464
119521
  };
119465
119522
  var validateProjectDirectory = (relativePath, args) => {
119466
119523
  const path9 = (0, import_node_path22.resolve)(relativePath);
119467
- const existsAlready = (0, import_node_fs20.existsSync)(path9);
119468
- if (existsAlready) {
119469
- for (const file3 of (0, import_node_fs20.readdirSync)(path9)) {
119470
- if (!isAllowedExistingFile(file3)) {
119471
- return `Directory \`${relativePath}\` already exists and contains files that might conflict. Please choose a new name.`;
119472
- }
119473
- }
119474
- }
119475
119524
  if (!args.existingScript) {
119476
119525
  const projectName = (0, import_node_path22.basename)(path9);
119477
119526
  const invalidChars = /[^a-z0-9-]/;
@@ -119486,6 +119535,14 @@ var validateProjectDirectory = (relativePath, args) => {
119486
119535
  return `Project names must be less than 58 characters.`;
119487
119536
  }
119488
119537
  }
119538
+ const existsAlready = (0, import_node_fs20.existsSync)(path9);
119539
+ if (existsAlready) {
119540
+ for (const file3 of (0, import_node_fs20.readdirSync)(path9)) {
119541
+ if (!isAllowedExistingFile(file3)) {
119542
+ return `Directory \`${relativePath}\` already exists and contains files that might conflict. Please choose a new name.`;
119543
+ }
119544
+ }
119545
+ }
119489
119546
  };
119490
119547
  var isAllowedExistingFile = (file3) => {
119491
119548
  const allowedExistingFiles = /* @__PURE__ */ new Set([
@@ -119544,6 +119601,16 @@ var getTemplateLanguages = (config50) => {
119544
119601
  var templateSupportsLanguage = (config50, lang) => {
119545
119602
  return getTemplateLanguages(config50).includes(lang);
119546
119603
  };
119604
+ var getTemplateSupportedLanguages = (config50, platform3) => {
119605
+ const configs = "platformVariants" in config50 ? platform3 ? [config50.platformVariants[platform3]] : Object.values(config50.platformVariants) : [config50];
119606
+ return [
119607
+ ...new Set(
119608
+ configs.flatMap(
119609
+ ({ copyFiles }) => copyFiles && !isVariantInfo(copyFiles) ? Object.keys(copyFiles.variants) : []
119610
+ )
119611
+ )
119612
+ ];
119613
+ };
119547
119614
  var filterTemplatesByLanguage = (templates, lang) => {
119548
119615
  if (!lang) {
119549
119616
  return templates;
@@ -119563,19 +119630,19 @@ function getFrameworkMap({ experimental: experimental2 = false }) {
119563
119630
  analog: c3_default,
119564
119631
  angular: c3_default4,
119565
119632
  astro: c3_default7,
119566
- docusaurus: c3_default11,
119567
- gatsby: c3_default14,
119633
+ docusaurus: c3_default12,
119634
+ gatsby: c3_default17,
119568
119635
  next: experimental_c3_default,
119569
- nuxt: c3_default27,
119570
- qwik: c3_default33,
119571
- react: c3_default37,
119572
- "react-router": c3_default34,
119573
- redwood: c3_default38,
119574
- solid: c3_default40,
119575
- svelte: c3_default43,
119576
- "tanstack-start": c3_default44,
119636
+ nuxt: c3_default30,
119637
+ qwik: c3_default36,
119638
+ react: c3_default40,
119639
+ "react-router": c3_default37,
119640
+ redwood: c3_default41,
119641
+ solid: c3_default43,
119642
+ svelte: c3_default46,
119643
+ "tanstack-start": c3_default47,
119577
119644
  vike: experimental_c3_default2,
119578
- vue: c3_default48,
119645
+ vue: c3_default51,
119579
119646
  waku: experimental_c3_default3
119580
119647
  };
119581
119648
  } else {
@@ -119583,21 +119650,24 @@ function getFrameworkMap({ experimental: experimental2 = false }) {
119583
119650
  analog: c3_default,
119584
119651
  angular: c3_default4,
119585
119652
  astro: c3_default7,
119586
- docusaurus: c3_default11,
119587
- gatsby: c3_default14,
119588
- hono: c3_default23,
119589
- next: c3_default24,
119590
- nuxt: c3_default27,
119591
- qwik: c3_default33,
119592
- react: c3_default37,
119593
- "react-router": c3_default34,
119594
- redwood: c3_default38,
119595
- solid: c3_default40,
119596
- svelte: c3_default43,
119597
- "tanstack-start": c3_default44,
119598
- vike: c3_default45,
119599
- vue: c3_default48,
119600
- waku: c3_default49
119653
+ django: c3_default9,
119654
+ docusaurus: c3_default12,
119655
+ fastapi: c3_default13,
119656
+ flask: c3_default14,
119657
+ gatsby: c3_default17,
119658
+ hono: c3_default26,
119659
+ next: c3_default27,
119660
+ nuxt: c3_default30,
119661
+ qwik: c3_default36,
119662
+ react: c3_default40,
119663
+ "react-router": c3_default37,
119664
+ redwood: c3_default41,
119665
+ solid: c3_default43,
119666
+ svelte: c3_default46,
119667
+ "tanstack-start": c3_default47,
119668
+ vike: c3_default48,
119669
+ vue: c3_default51,
119670
+ waku: c3_default52
119601
119671
  };
119602
119672
  }
119603
119673
  }
@@ -119609,10 +119679,10 @@ function getOtherTemplateMap({
119609
119679
  } else {
119610
119680
  return {
119611
119681
  common: c3_default8,
119612
- scheduled: c3_default39,
119613
- queues: c3_default30,
119614
- openapi: c3_default28,
119615
- "pre-existing": c3_default29
119682
+ scheduled: c3_default42,
119683
+ queues: c3_default33,
119684
+ openapi: c3_default31,
119685
+ "pre-existing": c3_default32
119616
119686
  };
119617
119687
  }
119618
119688
  }
@@ -119623,17 +119693,17 @@ function getHelloWorldTemplateMap({
119623
119693
  return {};
119624
119694
  } else {
119625
119695
  return {
119626
- "hello-world": c3_default20,
119627
- "hello-world-assets-only": c3_default15,
119628
- "hello-world-with-assets": c3_default18,
119629
- "hello-world-durable-object": c3_default17,
119630
- "hello-world-durable-object-with-assets": c3_default16,
119631
- "hello-world-workflows": c3_default19,
119696
+ "hello-world": c3_default23,
119697
+ "hello-world-assets-only": c3_default18,
119698
+ "hello-world-with-assets": c3_default21,
119699
+ "hello-world-durable-object": c3_default20,
119700
+ "hello-world-durable-object-with-assets": c3_default19,
119701
+ "hello-world-workflows": c3_default22,
119632
119702
  common: c3_default8,
119633
- scheduled: c3_default39,
119634
- queues: c3_default30,
119635
- openapi: c3_default28,
119636
- "pre-existing": c3_default29
119703
+ scheduled: c3_default42,
119704
+ queues: c3_default33,
119705
+ openapi: c3_default31,
119706
+ "pre-existing": c3_default32
119637
119707
  };
119638
119708
  }
119639
119709
  }
@@ -119691,6 +119761,19 @@ var deriveCorrelatedArgs = (args) => {
119691
119761
  }
119692
119762
  args.lang = language;
119693
119763
  }
119764
+ if (args.framework && args.lang === void 0 && (args.acceptDefaults || args.wranglerDefaults)) {
119765
+ const frameworkConfig = getFrameworkMap({
119766
+ experimental: args.experimental
119767
+ })[args.framework];
119768
+ const supportedLanguages = frameworkConfig ? getTemplateSupportedLanguages(frameworkConfig, args.platform) : [];
119769
+ if (supportedLanguages.length > 0) {
119770
+ if (supportedLanguages.length === 1) {
119771
+ args.lang = supportedLanguages[0];
119772
+ } else if (C3_DEFAULTS.lang && supportedLanguages.includes(C3_DEFAULTS.lang)) {
119773
+ args.lang = C3_DEFAULTS.lang;
119774
+ }
119775
+ }
119776
+ }
119694
119777
  };
119695
119778
  var createContext = async (args, prevArgs) => {
119696
119779
  deriveCorrelatedArgs(args);
@@ -120470,6 +120553,12 @@ var parseArgs = async (argv) => {
120470
120553
  args: {
120471
120554
  ...args.wranglerDefaults && WRANGLER_DEFAULTS,
120472
120555
  ...args.acceptDefaults && C3_DEFAULTS,
120556
+ ...args.framework && {
120557
+ category: void 0,
120558
+ type: void 0,
120559
+ lang: void 0,
120560
+ template: void 0
120561
+ },
120473
120562
  ...args,
120474
120563
  additionalArgs,
120475
120564
  projectName: positionalArgs[0]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-cloudflare",
3
- "version": "2.72.13",
3
+ "version": "2.73.0",
4
4
  "description": "A CLI for creating and deploying new applications to Cloudflare.",
5
5
  "keywords": [
6
6
  "cloudflare",
@@ -31,7 +31,7 @@
31
31
  "@babel/parser": "^7.21.3",
32
32
  "@babel/types": "^7.21.4",
33
33
  "@clack/prompts": "^1.2.0",
34
- "@cloudflare/workers-types": "^5.20260925.1",
34
+ "@cloudflare/workers-types": "^5.20260926.1",
35
35
  "@types/command-exists": "^1.2.0",
36
36
  "@types/cross-spawn": "^6.0.2",
37
37
  "@types/deepmerge": "^2.2.0",
@@ -72,11 +72,11 @@
72
72
  "yargs": "^17.7.2",
73
73
  "@cloudflare/cli-shared-helpers": "0.2.0",
74
74
  "@cloudflare/shared-ast-primitives": "1.1.0",
75
- "@cloudflare/vite-plugin": "1.60.2",
75
+ "@cloudflare/mock-npm-registry": "0.0.0",
76
+ "@cloudflare/vite-plugin": "1.62.0",
76
77
  "@cloudflare/workers-tsconfig": "0.0.0",
77
78
  "@cloudflare/workers-utils": "0.44.0",
78
- "wrangler": "4.141.0",
79
- "@cloudflare/mock-npm-registry": "0.0.0"
79
+ "wrangler": "4.143.0"
80
80
  },
81
81
  "engines": {
82
82
  "node": ">=22.0.0"
@@ -0,0 +1,19 @@
1
+ import type { TemplateConfig } from "../../src/templates";
2
+
3
+ export default {
4
+ configVersion: 1,
5
+ id: "django",
6
+ displayName: "Django",
7
+ description: "A Django application running on Cloudflare Workers",
8
+ platform: "workers",
9
+ copyFiles: {
10
+ variants: {
11
+ python: {
12
+ path: "./py",
13
+ },
14
+ },
15
+ },
16
+ workersTypes: "none",
17
+ devScript: "dev",
18
+ deployScript: "deploy",
19
+ } satisfies TemplateConfig;
@@ -0,0 +1 @@
1
+ 3.13
@@ -0,0 +1,14 @@
1
+ # Django on Cloudflare Workers
2
+
3
+ Install dependencies and start local development with uv:
4
+
5
+ ```sh
6
+ uv sync
7
+ uv run pywrangler dev
8
+ ```
9
+
10
+ Deploy the Worker with:
11
+
12
+ ```sh
13
+ uv run pywrangler deploy
14
+ ```
@@ -0,0 +1,7 @@
1
+ node_modules/
2
+ .wrangler/
3
+ .venv/
4
+ .venv-workers/
5
+ python_modules/
6
+ __pycache__/
7
+ *.py[cod]
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "<PACKAGE_NAME>",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "deploy": "uv run pywrangler deploy",
7
+ "dev": "uv run pywrangler dev",
8
+ "start": "uv run pywrangler dev"
9
+ },
10
+ "devDependencies": {
11
+ "wrangler": "^4.131.1"
12
+ }
13
+ }
@@ -0,0 +1,10 @@
1
+ [project]
2
+ name = "<PROJECT_NAME>"
3
+ version = "0.1.0"
4
+ description = "A Django application running on Cloudflare Workers"
5
+ readme = "README.md"
6
+ requires-python = ">=3.13"
7
+ dependencies = ["django"]
8
+
9
+ [dependency-groups]
10
+ dev = ["workers-py", "workers-runtime-sdk"]
File without changes
@@ -0,0 +1,11 @@
1
+ # Replace this before enabling signing, sessions, authentication, or CSRF features.
2
+ SECRET_KEY = "unused"
3
+ DEBUG = False
4
+ # Cloudflare routing validates the hostname before invoking this Worker.
5
+ ALLOWED_HOSTS = ["*"]
6
+
7
+ INSTALLED_APPS = []
8
+ MIDDLEWARE = []
9
+ ROOT_URLCONF = "django_app.urls"
10
+ TEMPLATES = []
11
+ WSGI_APPLICATION = "django_app.wsgi.application"
@@ -0,0 +1,9 @@
1
+ from django.http import HttpResponse
2
+ from django.urls import path
3
+
4
+
5
+ def root(request):
6
+ return HttpResponse("Hello from Django on Cloudflare Workers!")
7
+
8
+
9
+ urlpatterns = [path("", root)]
@@ -0,0 +1,7 @@
1
+ import os
2
+
3
+ from django.core.wsgi import get_wsgi_application
4
+
5
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_app.settings")
6
+
7
+ application = get_wsgi_application()
@@ -0,0 +1,12 @@
1
+ import os
2
+
3
+ from workers import WorkerEntrypoint, wsgi
4
+
5
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_app.settings")
6
+
7
+ from django_app.wsgi import application
8
+
9
+
10
+ class Default(WorkerEntrypoint):
11
+ async def fetch(self, request):
12
+ return await wsgi.fetch(application, request, self.env)
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "<WORKER_NAME>",
3
+ "main": "src/entry.py",
4
+ "compatibility_date": "<COMPATIBILITY_DATE>",
5
+ "compatibility_flags": ["python_workers"],
6
+ "observability": {
7
+ "enabled": true,
8
+ },
9
+ }
@@ -0,0 +1,19 @@
1
+ import type { TemplateConfig } from "../../src/templates";
2
+
3
+ export default {
4
+ configVersion: 1,
5
+ id: "fastapi",
6
+ displayName: "FastAPI",
7
+ description: "A FastAPI application running on Cloudflare Workers",
8
+ platform: "workers",
9
+ copyFiles: {
10
+ variants: {
11
+ python: {
12
+ path: "./py",
13
+ },
14
+ },
15
+ },
16
+ workersTypes: "none",
17
+ devScript: "dev",
18
+ deployScript: "deploy",
19
+ } satisfies TemplateConfig;
@@ -0,0 +1 @@
1
+ 3.13
@@ -0,0 +1,14 @@
1
+ # FastAPI on Cloudflare Workers
2
+
3
+ Install dependencies and start local development with uv:
4
+
5
+ ```sh
6
+ uv sync
7
+ uv run pywrangler dev
8
+ ```
9
+
10
+ Deploy the Worker with:
11
+
12
+ ```sh
13
+ uv run pywrangler deploy
14
+ ```
@@ -0,0 +1,7 @@
1
+ node_modules/
2
+ .wrangler/
3
+ .venv/
4
+ .venv-workers/
5
+ python_modules/
6
+ __pycache__/
7
+ *.py[cod]
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "<PACKAGE_NAME>",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "deploy": "uv run pywrangler deploy",
7
+ "dev": "uv run pywrangler dev",
8
+ "start": "uv run pywrangler dev"
9
+ },
10
+ "devDependencies": {
11
+ "wrangler": "^4.131.1"
12
+ }
13
+ }
@@ -0,0 +1,10 @@
1
+ [project]
2
+ name = "<PROJECT_NAME>"
3
+ version = "0.1.0"
4
+ description = "A FastAPI application running on Cloudflare Workers"
5
+ readme = "README.md"
6
+ requires-python = ">=3.13"
7
+ dependencies = ["fastapi"]
8
+
9
+ [dependency-groups]
10
+ dev = ["workers-py", "workers-runtime-sdk"]
@@ -0,0 +1,14 @@
1
+ from fastapi import FastAPI
2
+ from workers import WorkerEntrypoint, asgi
3
+
4
+ app = FastAPI()
5
+
6
+
7
+ @app.get("/")
8
+ async def root():
9
+ return {"message": "Hello from FastAPI on Cloudflare Workers!"}
10
+
11
+
12
+ class Default(WorkerEntrypoint):
13
+ async def fetch(self, request):
14
+ return await asgi.fetch(app, request, self.env)
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "<WORKER_NAME>",
3
+ "main": "src/entry.py",
4
+ "compatibility_date": "<COMPATIBILITY_DATE>",
5
+ "compatibility_flags": ["python_workers"],
6
+ "observability": {
7
+ "enabled": true,
8
+ },
9
+ }
@@ -0,0 +1,19 @@
1
+ import type { TemplateConfig } from "../../src/templates";
2
+
3
+ export default {
4
+ configVersion: 1,
5
+ id: "flask",
6
+ displayName: "Flask",
7
+ description: "A Flask application running on Cloudflare Workers",
8
+ platform: "workers",
9
+ copyFiles: {
10
+ variants: {
11
+ python: {
12
+ path: "./py",
13
+ },
14
+ },
15
+ },
16
+ workersTypes: "none",
17
+ devScript: "dev",
18
+ deployScript: "deploy",
19
+ } satisfies TemplateConfig;
@@ -0,0 +1 @@
1
+ 3.13
@@ -0,0 +1,14 @@
1
+ # Flask on Cloudflare Workers
2
+
3
+ Install dependencies and start local development with uv:
4
+
5
+ ```sh
6
+ uv sync
7
+ uv run pywrangler dev
8
+ ```
9
+
10
+ Deploy the Worker with:
11
+
12
+ ```sh
13
+ uv run pywrangler deploy
14
+ ```
@@ -0,0 +1,7 @@
1
+ node_modules/
2
+ .wrangler/
3
+ .venv/
4
+ .venv-workers/
5
+ python_modules/
6
+ __pycache__/
7
+ *.py[cod]
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "<PACKAGE_NAME>",
3
+ "version": "0.1.0",
4
+ "private": true,
5
+ "scripts": {
6
+ "deploy": "uv run pywrangler deploy",
7
+ "dev": "uv run pywrangler dev",
8
+ "start": "uv run pywrangler dev"
9
+ },
10
+ "devDependencies": {
11
+ "wrangler": "^4.131.1"
12
+ }
13
+ }
@@ -0,0 +1,10 @@
1
+ [project]
2
+ name = "<PROJECT_NAME>"
3
+ version = "0.1.0"
4
+ description = "A Flask application running on Cloudflare Workers"
5
+ readme = "README.md"
6
+ requires-python = ">=3.13"
7
+ dependencies = ["flask"]
8
+
9
+ [dependency-groups]
10
+ dev = ["workers-py", "workers-runtime-sdk"]
@@ -0,0 +1,14 @@
1
+ from flask import Flask
2
+ from workers import WorkerEntrypoint, wsgi
3
+
4
+ app = Flask(__name__)
5
+
6
+
7
+ @app.get("/")
8
+ def root():
9
+ return "Hello from Flask on Cloudflare Workers!"
10
+
11
+
12
+ class Default(WorkerEntrypoint):
13
+ async def fetch(self, request):
14
+ return await wsgi.fetch(app, request, self.env)
@@ -0,0 +1,9 @@
1
+ {
2
+ "name": "<WORKER_NAME>",
3
+ "main": "src/entry.py",
4
+ "compatibility_date": "<COMPATIBILITY_DATE>",
5
+ "compatibility_flags": ["python_workers"],
6
+ "observability": {
7
+ "enabled": true,
8
+ },
9
+ }