diff --git a/backend/windmill-api-scripts/src/scripts.rs b/backend/windmill-api-scripts/src/scripts.rs
index 85ec0edae4..65df3e0628 100644
--- a/backend/windmill-api-scripts/src/scripts.rs
+++ b/backend/windmill-api-scripts/src/scripts.rs
@@ -1083,6 +1083,10 @@ async fn create_script_internal<'c>(
))
} else if ns.tag.as_ref().is_some_and(|x| x.contains("$args[")) {
None
+ } else if lang == ScriptLang::Bunnative {
+ // if a custom tag is set for a bunnative script, this prevents the custom tag to be used for the dependency job
+ // forcing the bundling to run on a worker with the bun tag
+ None
} else {
ns.tag
};
diff --git a/backend/windmill-worker/src/worker.rs b/backend/windmill-worker/src/worker.rs
index 4481e46a60..547075933a 100644
--- a/backend/windmill-worker/src/worker.rs
+++ b/backend/windmill-worker/src/worker.rs
@@ -3011,6 +3011,17 @@ pub async fn handle_queued_job(
}
if NATIVE_MODE_RESOLVED.load(std::sync::atomic::Ordering::Relaxed) {
+ // Block all dependency jobs: native scripts don't have dependency jobs, and bunnative
+ // dep jobs are routed to bun workers (lang=bun, tag=bun) even when they have a custom tag .
+ if matches!(
+ job.kind,
+ JobKind::FlowDependencies | JobKind::AppDependencies | JobKind::Dependencies
+ ) || job.tag == "dependency"
+ {
+ return Err(Error::ExecutionErr(
+ "Worker is in native mode and cannot execute dependency jobs".to_string(),
+ ));
+ }
if let Some(lang) = &job.script_lang {
if !lang.is_native() {
return Err(Error::ExecutionErr(format!(
diff --git a/frontend/src/lib/components/WorkerGroup.svelte b/frontend/src/lib/components/WorkerGroup.svelte
index 07f2cd8b1f..22d35906cb 100644
--- a/frontend/src/lib/components/WorkerGroup.svelte
+++ b/frontend/src/lib/components/WorkerGroup.svelte
@@ -290,8 +290,11 @@
(workers.length > 0 &&
workers.some(([_, pings]) => pings.some((p) => p.native_mode === true)))
)
- let nonNativeTags = $derived((nconfig?.worker_tags ?? []).filter((t) => !nativeTags.includes(t)))
+ let nonNativeTags = $derived(
+ (nconfig?.worker_tags ?? []).filter((t) => !nativeTags.includes(t) && t !== 'flow')
+ )
let isAutoNativeMode = $derived(name === 'native')
+ let isNativeModeEnabled = $derived(nconfig?.native_mode === true || isAutoNativeMode)
$effect(() => {
;($superadmin || $devopsRole) && listWorkspaces()
})
@@ -399,33 +402,53 @@
{/if}
+ {#if nconfig !== undefined}
+