Skip to content

Update n8nio/n8n Docker tag to v2.28.0#3517

Merged
anshulg-dep-review[bot] merged 1 commit into
mainfrom
renovate/n8nio-n8n-2.x
Jun 23, 2026
Merged

Update n8nio/n8n Docker tag to v2.28.0#3517
anshulg-dep-review[bot] merged 1 commit into
mainfrom
renovate/n8nio-n8n-2.x

Conversation

@renovate

@renovate renovate Bot commented Jun 23, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Type Update Change
n8nio/n8n (source) Kustomization minor 2.27.32.28.0

Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

n8n-io/n8n (n8nio/n8n)

v2.28.0

Bug Fixes
  • API: Return 409 when deleting a published workflow (#​32600) (1f774c8)
  • Bitbucket Trigger Node: Use account_id to validate credentials instead of username (#​30172) (5dc9c45)
  • Bump form-data, tmp, protobufjs to patched versions (#​32436) (a1cfd14)
  • Bump protobufjs, js-yaml, @​opentelemetry/core for nightly Trivy (#​32542) (2dac96d)
  • Cap ci-filter deepen value and fall back to --unshallow (#​32581) (af563c6)
  • Compression Node: Decompress only the archive members (#​32486) (cafc64c)
  • core: Account for pending CSV uploads in data-table size budget (#​31394) (e4757d2)
  • core: Change default value of the COOP header (#​32377) (b94ff9b)
  • core: Clean up workflow publication outbox records (#​32795) (900c0ea)
  • core: Coalesce outbox drains and wait for in-flight processing on shutdown (#​32548) (7230fa3)
  • core: Drive workflow folder placement through validated parentFolderId (#​31364) (0f1c1a8)
  • core: Evaluate expressions in AI tool description for node-as-to… (#​31495) (beba723)
  • core: Exclude error workflow executions from billable execution count (#​32315) (f6c2bcc)
  • core: Fix error path schema mismatch in mcp tools (#​32560) (c91250f)
  • core: Handle malformed agent tool calls (#​32276) (285e4a9)
  • core: Implement workflow-folder-conflict handling in import process (#​32391) (97f45cc)
  • core: Keep $fromAI placeholders intact on fields with expressions disabled (#​31681) (43eec00)
  • core: Keep thread history when observation cursor lacks observations (#​32773) (0197817)
  • core: Let allowlisted Python packages import their own submodules via relative imports (#​32772) (46aa8e4)
  • core: Limit execution data size for display reads (#​32508) (524d4e8)
  • core: Make workflow evaluations work alongside config evals (#​32384) (19eeb5e)
  • core: Negotiate token_endpoint_auth_method during MCP OAuth2 DCR (#​32289) (734af04)
  • core: Persist run data for Instance AI trigger executions in queue mode (#​32498) (db1e21f)
  • core: Prevent assigning unusable credentials in mcp (#​32353) (7ddde95)
  • core: Propagate execution context to sub-workflow tools (#​32577) (09f5888)
  • core: Propagate stop signal to sub-workflow executions on workers in queue mode (#​32206) (ae7f699)
  • core: Request protected-resource scopes during MCP OAuth2 DCR (#​32300) (e8ee370)
  • core: Resolve duplicate generated schema fields (#​32275) (94594e3)
  • core: Save Instance AI workflow edits through workspace files (#​32545) (1e80d41)
  • core: Shorten private-credential OAuth authorization links (#​32584) (c1582a6)
  • core: Stop re-asking answered or skipped clarifying questions (#​32755) (9ce241b)
  • core: Support v4 and v5 schemas for strapi consumers (#​32559) (d6758db)
  • core: Surface form submission errors instead of failing silently (#​32305) (60ac614)
  • core: Suspend query acquisition during database connection recovery (#​32394) (7440fca)
  • core: Time out stalled HTTP response body reads (#​32411) (50887bf)
  • core: Upgrade @​n8n_io/license-sdk to v3 and resolve node-rsa to v2 (#​32552) (ebbd629)
  • editor: Clamp and truncate long workflow descriptions in MCP settings (#​32104) (b953709)
  • editor: Hide function info-box tooltip while typing arguments (#​32371) (59971c8)
  • editor: Hide template setup button when only disabled nodes lack credentials (#​32625) (801bd5f)
  • editor: Polish API key scope picker radio alignment, contrast and form spacing (#​32420) (229560e)
  • editor: Preserve existing node IDs when AI edits a workflow (#​32593) (cbb9ae5)
  • editor: Prevent autosave failure loop after AI builder modifies a workflow (#​32558) (4821bed)
  • editor: Prevent drag and drop of a folder onto itself (#​31510) (4f8af4d)
  • editor: Show a rejection screen when the OAuth consent target is unavailable (#​32594) (2c3c67f)
  • editor: Show rotated API keys in the create modal and outline the read-only Close button (#​32480) (31e8ddc)
  • editor: Widen callable subworkflow list using callerPolicy in workflow picker (#​32522) (f105b34)
  • editor: Wrap long unbroken strings in tooltip (#​32345) (a0b35d5)
  • Extract inline run-report attachments before aggregating sizing (#​32799) (c8a3a3c)
  • Fix 26 security issues in electron, axios, undici and 5 more (#​32688) (c7fcbb7)
  • Form Node: Evaluate expressions in form fields on subsequent pages (#​32352) (35adffa)
  • Form Trigger Node: Add default value for authentication parameter to prevent crash on old workflows (#​32627) (940f389)
  • Handle HTTP raw body validation loops (#​32277) (d5dd492)
  • Hides preview suggestions on smaller screens due to lack of space (#​32444) (ad298e7)
  • HTTP Request Node: Preserve all repeated query parameters in cURL import (#​32253) (8b01aac)
  • Kafka Node: Route Schema Registry client through configurable egress protection (#​32370) (f19d744)
  • Kafka Trigger Node: Surface consumer errors instead of waiting indefinitely (#​32642) (30b2127)
  • Make QA metrics telemetry truly fire-and-forget (#​32597) (6e8a7fc)
  • Microsoft OneDrive Node: Validate upload file name to replace misleading Graph error (#​32470) (f998a1f)
  • Nextcloud Node: Fix broken user actions and folder sharing, add internal link share type (#​32002) (3767449)
  • Prompt to save before manual run with autosave disabled (#​32513) (2124c08)
  • RedactValues throws TypeError on null-valued credential fields (#​32804) (7ebd0cf)
  • Removes phantom telemetry profile caused by missing user id fallback (#​32344) (ef148c6)
  • Salesforce Node: Reuse JWT session token across requests (#​32325) (0e4d2c3)
  • Slack Node: Handle missing response property in pagination (#​32328) (d673064)
  • Stop a timed-out background AI builder from respawning itself (#​32630) (8c96484)
  • Suggest the configured AI provider's chat model when building workflows (#​32634) (b294e3d)
Features
  • Add concurrency field to sizing-matrix Topology (#​32767) (1c75eb6)
  • Add successful executions to evaluation dataset (#​32308) (713094c)
  • AI Agent Node: Add binary PDF passthrough for models with native PDF support (#​28038) (64c337b)
  • API: Use scope checks instead of system roles for resource access (#​32769) (908bab7)
  • AWS Transcribe Node: Add AWS Assume Role authentication (#​32017) (038b623)
  • Compression Node: Add tar and tar.gz support (#​32547) (d595631)
  • core: Add 'workflows-imported' logstreaming event (#​32488) (70d4a67)
  • core: Add agent heartbeat session metrics (#​32732) (fd2cf90)
  • core: Add Azure storage mode for execution data (#​32368) (1d6415c)
  • core: Add Instance AI error correlation and structured observability (#​32400) (f53a648)
  • core: Add knowledge file storage for agents (#​31956) (3ae74f1)
  • core: Add knowledge retrieval tools for agents (#​32485) (8e5dd83)
  • core: Add node-class-description-name-camelcase community node lint rule (#​32443) (fb16f72)
  • core: Add prometheus metrics for detailed metrics on webhook & form workflows (#​32251) (b9e7729)
  • core: Add Prometheus metrics for Instance AI runs (#​32489) (4218e1b)
  • core: Add redirect URLs allow lists to MCP server (#​24739) (b513f54)
  • core: Add support for 'create-stub' mode in credential handling… (#​32507) (6b453d9)
  • core: Enable creation of custom instance (global) roles (#​32590) (e60bb4b)
  • core: Enable scheduled execution deduplication by default (#​32533) (dcbdb10)
  • core: Enable thinking modes for instance ai (#​32768) (c8e4c76)
  • core: Expand secret redaction patterns (JWT, PEM keys, vendor tokens, URL creds) (#​32440) (f815269)
  • core: Gate MCP tool calls on the caller's private-credential status (#​32446) (8cac6e7)
  • core: Make MCP and OAuth server IP rate limits configurable via environment variables (#​32203) (b34ab3b)
  • core: OpenAI Responses API support for agent pdf passthrough (#​32604) (ade94af)
  • core: Prioritize workflow as code over json (#​32668) (e11e0b1)
  • core: Reduce templates complexity in KB (#​32694) (9341fdb)
  • core: Resolve the triggering user's private credentials over MCP OAuth (#​32432) (d6cc6c6)
  • core: Show required scope badge on Swagger UI operations (#​32240) (58ba32d)
  • core: Support MCP tool filtering for Instance AI MCP connections (#​31836) (7a3a190)
  • core: Update credential handling in workflows-imported event (#​32794) (95a7532)
  • Derive picker coverage map from ledger in build-matrix (#​32721) (33d38e3)
  • editor: Add owner filter to API keys "All" tab (#​32430) (888be28)
  • editor: Add Roles settings area with instance roles tab (#​32775) (3983a48)
  • editor: Add rotate action for API keys (#​32342) (44d9f3d)
  • editor: Improve credential saving UX for OAuth credentials (#​32653) (d52762f)
  • editor: Investigate failed executions on Instance AI editor hand-offs (#​32675) (504b282)
  • editor: Open the current workflow and credentials in Instance AI from the editor (#​32398) (b1687ef)
  • editor: Redesign API key scope picker with grouped tree (#​32167) (f6afb39)
  • editor: Rename n8n Connect usage table header from Model to Resource (#​32448) (ade2de9)
  • editor: Render the workflow execution preview natively instead of in an iframe (#​32296) (23fb6b9)
  • editor: Render workflow history and template previews natively (#​32468) (5582bb2)
  • editor: Surface execution data size in the executions view (#​32505) (084a6d6)
  • GitHub Node: Add Pull Request resource with create, update, merge, comments, diff and patch (#​32261) (86db3e4)
  • Google Ads Node: Upgrade API from v20 to v21 (#​32712) (b91492d)
  • Google Calendar Node: Allow custom OAuth2 scopes (#​32661) (7e37945)
  • Google Cloud Storage Node: Allow custom OAuth2 scopes (#​32659) (0369d40)
  • Google Sheets Node: Allow custom OAuth2 scopes (#​32660) (9158556)
  • Google Sheets Trigger Node: Add Service Account credential support (#​32312) (7b9ba29)
  • instance-ai: Simulate destructive and user-action nodes during workflow verification (#​32209) (f4a1ab6)
  • LoneScale Node: Add Contact (enrich, source) and Company (search) resources (#​32009) (63f464d)
  • Microsoft Excel 365 Node: Accept the generic Microsoft OAuth2 (Graph) credential (#​32434) (e2c59a5)
  • Microsoft Graph Security Node: Support authenticating with the generic Microsoft OAuth2 credential (#​32529) (c2a006a)
  • Microsoft Outlook Node: Accept the generic Microsoft OAuth2 (Graph) credential (#​32531) (76d9c93)
  • Microsoft Teams Node: Accept the generic Microsoft OAuth2 (Graph) credential (#​32455) (93c3c2f)
  • Microsoft To Do Node: Accept the generic Microsoft OAuth2 (Graph) credential (#​32492) (02b2013)
  • Microsoft To Do Node: Allow custom OAuth2 scopes (#​32538) (ad8faa6)
  • Phantombuster Node: Add Launch Sync operation (#​31101) (2e76cf3)
  • Refactor agent runtime (#​32293) (30224e9)
  • Settings for MCP Registry server usage in Instance AI (#​31692) (097f683)
  • Surface MCP registry connections in the Instance AI sidebar (#​31748) (675e5e8)
  • Telegram Node: Add rich message and message draft operations (#​32173) (a970e34)
  • Webhook Node: Add "Only Run If" option to filter requests (#​28872) (d64aeb2)
  • Write per-file mutation coverage back to the ledger row (#​32716) (a084bd8)
Performance Improvements
  • core: Improve performance of pre-execution workflow checks (#​32363) (aaa4fa8)
  • core: Move Instance AI clock out of the cached prompt prefix (#​32452) (630d57e)
  • core: Stabilize Instance AI prompt-cache prefix across turns (#​32404) (1ea6f59)
  • editor: Defer AI assistant markdown decoration and fix resource chip clicks (#​32160) (2fef949)
  • Set ignoreStatic in mutation-health default Stryker config (#​32720) (05ef0a5)

Configuration

📅 Schedule: (in timezone America/Los_Angeles)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@anshulg-dep-review

Copy link
Copy Markdown
Contributor

Triage: GREEN -- safe to merge

Minor version bump within the 2.x line with no breaking changes per the official BREAKING-CHANGES.md, no database migrations, and no env var renames. The release contains only bug fixes, features, and performance improvements. Both linux/amd64 and linux/arm64 architectures are supported, covering the rpi5 node.

Updates table

Package Old New Breaking Changelog Provenance
n8nio/n8n 2.27.3 2.28.0 safe additive features & fixes trusted

Required actions

None -- safe to merge.

Update summary

n8nio/n8n 2.27.3 → 2.28.0

  • Minor version bump within the 2.x beta track (both versions marked prerelease; stable track is currently at 2.26.9).
  • New node features: GitHub Pull Request resource, Google Ads API v21 upgrade, Google Sheets Service Account support, Compression tar/tar.gz support, Telegram rich messages, AWS Transcribe Assume Role auth, multiple Microsoft nodes now accept generic OAuth2 credential.
  • Core features: Azure storage mode for execution data, configurable MCP/OAuth rate limits, custom instance roles, expanded secret redaction patterns, new Prometheus metrics.
  • Security: 26 CVE fixes in dependencies (electron, axios, undici, and others).
  • Notable defaults changed: COOP header default changed (security hardening for OAuth flows), scheduled execution deduplication now enabled by default (prevents duplicate cron runs in multi-main setups).
  • API changes: DELETE /workflow/{id} now returns 409 for published workflows (requires unpublish before delete); API key scopes now enforced instead of system-role checks.
  • Deprecation: Calendly Trigger Node API key auth deprecated in favor of OAuth2 (existing keys still work).

Provenance

All updates from the official n8n project with proper source correspondence, consistent publisher identity, and no indicators of supply chain compromise. Both versions are legitimate releases with matching git tags and SBOM artifacts present.

Sub-agent reports -- n8nio/n8n

Breaking-change impact

I now have all the information I need. Let me compile the complete analysis.

Key findings:

  1. BREAKING-CHANGES.md has no entry for 2.28.0 — the most recent entry is 2.0.0. This is a minor version bump within the 2.x line.
  2. Release notes for 2.28.0 show only bug fixes, features, and performance improvements — no breaking changes, no database migrations, no env var changes.
  3. Architecture: Docker Hub confirms linux/amd64 + linux/arm64 both present in the 2.28.0 image — the rpi5 (arm64) node is covered.
  4. Deployment fingerprint: PostgreSQL backend (not MySQL/MariaDB), N8N_RUNNERS_ENABLED=true already set, N8N_USER_FOLDER=/data, probes at /healthz:5678 — all stable across this version range.
  5. One notable change: **core:** Change default value of the COOP header — this is a security header default change, but the deployment doesn't set N8N_SECURITY_AUDIT_DAYS_ABANDONED_WORKFLOW or any COOP-related env var, so it's informational.

Impact verdict: n8nio/n8n 2.27.3 → 2.28.0 (PR #3517)

Verdict

safe_to_merge

This is a minor version bump within the 2.x line. The release contains no breaking changes per the official BREAKING-CHANGES.md (which has no entry for 2.28.0), no database migrations, no env var renames, and no configuration schema changes. All deployment fingerprint elements remain compatible. The image ships both linux/amd64 and linux/arm64, covering the rpi5 node.

Blast radius

  • Scope: leaf_app
  • Direct usage: 1 manifest — rpi5/n8n/kustomization.yaml
  • Transitive dependents: 0 apps — n8n is a standalone workflow automation tool; no other app in the cluster depends on it as a service
  • User-facing exposure:
    • Public hostnames affected: n8n.anshulg.net (webhook URL), n8n.anshulg.direct (direct ingress)
    • Internal (oauth-gated) hostnames affected: n8n.internal
    • Cron / scheduled jobs affected: none
  • Failure mode if upgrade goes wrong: hard_down — rolling update halts if the new pod fails readiness; old replica continues serving until evicted (StatefulSet rolling update semantics)
  • Recovery: trivial_rollback — pin newTag back to 2.27.3@sha256:a772d24e6b4f9b3848be5a57c5e45437eed1965bbbcefa2f9a93f4835b6639fa and redeploy; no data written in a format incompatible with 2.27.3

Required actions before merge

None

Findings

F1: COOP header default changed

  • Severity: informational
  • Category: config_schema
  • What changed: The default value of the Cross-Origin-Opener-Policy response header was changed in 2.28.0.
  • Why it affects this deployment: The deployment does not set any COOP-related environment variable (no N8N_SECURITY_* COOP override in kustomization.yaml env-config). The new default will apply automatically. This is a security hardening change (more restrictive COOP) that could theoretically affect OAuth popup flows, but the upstream project's fix ("Show a rejection screen when the OAuth consent target is unavailable") in the same release handles the edge case. No action required.
  • Affected dependents: n8n itself only
  • Required action: no action — informational
  • Confidence: documented
  • Render-limited: no

F2: Scheduled execution deduplication enabled by default

  • Severity: informational
  • Category: config_schema
  • What changed: Scheduled execution deduplication is now on by default; previously opt-in, now opt-out.
  • Why it affects this deployment: This is a behavioral change for scheduled (cron-triggered) workflows. The deployment does not set EXECUTIONS_DATA_DEDUPLICATION_ENABLED or equivalent. The new default prevents duplicate scheduled executions from firing simultaneously, which is generally desirable. No configuration key is removed or renamed; the deployment's env-config is unaffected.
  • Affected dependents: n8n itself only
  • Required action: no action — informational; the new default is safer for most deployments
  • Confidence: documented
  • Render-limited: no

F3: No entry in BREAKING-CHANGES.md for 2.28.0

  • Severity: informational
  • Category: other
  • What changed: The official BREAKING-CHANGES.md file in the upstream n8n repository has no entry for any 2.x minor version after 2.0.0. The 2.28.0 release notes list only bug fixes, features, and performance improvements.
  • Why it affects this deployment: Confirms there are no operator-facing breaking changes for this version hop.
  • Affected dependents: n/a
  • Required action: no action — informational
  • Confidence: documented
  • Render-limited: no

Deployment fingerprint (summary)

Surface Value
Image n8nio/n8n:2.27.3n8nio/n8n:2.28.0 (digest-pinned)
Workload type StatefulSet (via kustomize/workloads/statefulset)
Namespace n8n
Run-as user/group 10001:10001, fsGroup 10001
Data volume PVC mounted at /data
Key env vars N8N_USER_FOLDER=/data, N8N_HOST=n8n.anshulg.net, N8N_PORT=5678, N8N_PROTOCOL=https, N8N_RUNNERS_ENABLED=true, N8N_RESTRICT_FILE_ACCESS_TO=/data/.n8n-files, DB_TYPE=postgresdb, DB_POSTGRESDB_HOST=rpi4.anshulg.direct, DB_POSTGRESDB_DATABASE=n8n, DB_POSTGRESDB_SSL_ENABLED=true, WEBHOOK_URL=https://n8n.anshulg.net/, N8N_PROXY_HOPS=1
Secret DB_POSTGRESDB_PASSWORD via SealedSecret
Probes liveness + readiness: GET /healthz:5678, initialDelay 30s/10s, period 30s/10s
Resources requests: 100m CPU / 256Mi RAM; limits: 1Gi RAM (no CPU limit)
Ingress n8n.anshulg.net (public), n8n.anshulg.direct (direct), n8n.internal (internal)
Checked for env var renames, config key changes, DB migration requirements, probe path changes, image arch, BREAKING-CHANGES.md

Cluster fit

  • Architectures required by cluster: amd64, arm64 (rpi5 nodes)
  • Architectures supported by new version: linux/amd64 ✅, linux/arm64 ✅ — confirmed via Docker Hub tag page for n8nio/n8n:2.28.0
  • Kubernetes API versions used in manifest sources: apps/v1 (StatefulSet), v1 (Service, ConfigMap, SealedSecret) — all stable
  • Minimum K8s version stated by dep: not stated
  • Peer dependency check: No chart dependencies; pure image bump. PostgreSQL backend at rpi4.anshulg.direct:5432 is external and unaffected by this PR.

Gaps

  • Could not render Kustomize locally (no rendering tool available); reasoned from raw manifests and base templates directly. Confidence is high because the change is a single image tag line with no accompanying values or config changes.
  • The 2.28.0 release was published ~20 minutes before this analysis; no community-reported regressions were searchable yet. The release is marked prerelease: true in the GitHub API response — this is consistent with n8n's release tagging convention (they tag minor releases as pre-release initially before promoting them), not an indication of instability. All prior 2.27.x releases followed the same pattern and were stable.

Upstream changelog

I now have the complete n8n@2.28.0 release notes. This is a substantial minor version release. Let me also check the n8n@2.27.0 release notes (which I already have from the list) since the range is 2.27.3 → 2.28.0 — the key new content is in 2.28.0 itself. The 2.28.0 changelog compares against n8n@2.27.0, so it captures everything new in the 2.28.x line. I have all the information I need.


n8nio/n8n 2.27.3 → 2.28.0

Summary

  • Artifact type: Container image (Docker Hub n8nio/n8n), backed by source repo github.com/n8n-io/n8n
  • Input format: SemVer minor version bump
  • Resolved references: Tag n8n@2.27.3 (released 2026-06-19, prerelease track) → tag n8n@2.28.0 (released 2026-06-23, prerelease track) on github.com/n8n-io/n8n
  • Versions in range: 2.28.0 only (single minor hop; no intermediate 2.28.x patches exist yet)
  • Source repo: https://github.com/n8n-io/n8n
  • Primary sources used: GitHub Releases — https://github.com/n8n-io/n8n/releases/tag/n8n%402.28.0
  • Versioning scheme: SemVer (n8n uses a dual-track system: 2.x is the "next/beta" track, stable tag points to the latest stable release which is currently 2.26.9; 2.27.x and 2.28.0 are both on the prerelease/beta track)
  • Major version boundary crossed: No (2.x → 2.x)
  • Confidence: high — full maintainer-authored release notes covering the entire range

Track note: Both 2.27.3 and 2.28.0 are on n8n's beta/prerelease track (marked prerelease: true on GitHub). The current stable tag points to 2.26.9. Users running n8nio/n8n:2.27.3 are already on the beta track.


Breaking Changes

API: DELETE /workflow/{id} now returns 409 for published workflows

  • What changed: The public REST API now returns HTTP 409 Conflict instead of succeeding (or returning a different error) when attempting to delete a workflow that is currently published/active.
  • Affects: Any automation or script calling DELETE /workflow/{id} on a published workflow via the public API.
  • Migration: Unpublish/deactivate the workflow before deleting it, or handle the new 409 response code in calling code.
  • Confidence: inferred (labeled as a bug fix, but changes observable API response code behavior)
  • Introduced in: 2.28.0

core: Default COOP header value changed

  • What changed: The default value of the Cross-Origin-Opener-Policy (COOP) HTTP header was changed (this was first introduced as a fix in 2.27.1 and is now included in the 2.28.0 baseline).
  • Affects: Instances relying on the previous default COOP header value; may affect OAuth popup flows or cross-origin iframe embedding behavior.
  • Migration: If the new default causes issues (e.g., OAuth popups failing to communicate back), the COOP header value can be overridden via environment configuration. Not documented in detail.
  • Confidence: inferred (labeled bug fix, but changes a security header default that affects browser behavior)
  • Introduced in: 2.28.0 (backported from 2.27.1)

core: Scheduled execution deduplication enabled by default

  • What changed: Scheduled execution deduplication is now on by default, meaning duplicate scheduled executions (e.g., from clock skew or multi-main setups) will be suppressed automatically.
  • Affects: Queue-mode / multi-main deployments with scheduled triggers; previously users had to opt in to deduplication.
  • Migration: No action required for most users — this is a correctness improvement. If you relied on duplicate scheduled executions firing (unusual), you would need to disable deduplication explicitly.
  • Confidence: inferred (feature flag default change — behavior change for existing deployments)
  • Introduced in: 2.28.0

API: Scope-based access control replaces system-role checks

  • What changed: The public API now enforces access via API key scopes rather than system-level role checks.
  • Affects: API key consumers; API keys without the appropriate scopes may now be denied access to resources they could previously access via system-role elevation.
  • Migration: Review and update API key scopes if automated integrations start receiving 403 responses after upgrade.
  • Confidence: inferred (authorization model change; may silently break existing API key usage)
  • Introduced in: 2.28.0

core: Workflow-as-code prioritized over JSON on import conflicts

  • What changed: When both a workflow-as-code file and a JSON file exist for the same workflow, the code version now takes precedence.
  • Affects: Source-control / Git-backed deployments that have both formats present.
  • Migration: Ensure the workflow-as-code file is the authoritative version, or remove it if JSON should remain canonical.
  • Confidence: inferred (precedence change affects import behavior for source-control users)
  • Introduced in: 2.28.0

Other Notable Changes

Security fixes:

  • Fix 26 security issues in electron, axios, undici, and 5 more packages
  • Bump form-data, tmp, protobufjs to patched versions
  • Bump protobufjs, js-yaml, @opentelemetry/core

New features (nodes):

  • GitHub Node: New Pull Request resource (create, update, merge, comments, diff, patch)
  • Google Ads Node: API upgraded from v20 to v21
  • Google Sheets Trigger Node: Service Account credential support added
  • Compression Node: Added tar and tar.gz support
  • Webhook Node: New "Only Run If" filter option
  • Telegram Node: Rich message and message draft operations
  • AI Agent Node: Binary PDF passthrough for models with native PDF support
  • AWS Transcribe Node: AWS Assume Role authentication
  • Multiple Microsoft nodes (Excel 365, Outlook, Teams, To Do, Graph Security) now accept the generic Microsoft OAuth2 (Graph) credential
  • Google Calendar, Sheets, Cloud Storage nodes: allow custom OAuth2 scopes

New core features:

  • Azure storage mode for execution data
  • S3 storage mode for execution data (landed in 2.27.0, now in 2.28.0 baseline)
  • MCP and OAuth server IP rate limits now configurable via environment variables
  • MCP redirect URL allow-lists
  • Custom instance (global) roles creation
  • Expanded secret redaction patterns (JWT, PEM keys, vendor tokens, URL credentials)
  • New Prometheus metrics for webhook/form workflows and Instance AI runs
  • workflows-imported log-streaming event
  • Knowledge file storage and retrieval tools for agents

Bug fixes (notable):

  • Compression Node: Decompress only archive members (not the whole archive)
  • core: Propagate stop signal to sub-workflow executions on workers in queue mode
  • core: Time out stalled HTTP response body reads
  • core: Suspend query acquisition during database connection recovery
  • Kafka Node: Schema Registry client now routed through configurable egress protection
  • Kafka Trigger Node: Surface consumer errors instead of waiting indefinitely
  • Nextcloud Node: Fix broken user actions and folder sharing
  • Salesforce Node: Reuse JWT session token across requests
  • HTTP Request Node: Preserve all repeated query parameters in cURL import
  • core: @n8n_io/license-sdk upgraded to v3, node-rsa resolved to v2

Performance:

  • Improve performance of pre-execution workflow checks
  • Editor: Defer AI assistant markdown decoration

Deprecations Introduced

  • Calendly Trigger Node: API key authentication deprecated; OAuth2 is now the default. (Landed in 2.27.0, carried into 2.28.0.) Existing API key credentials continue to work but are no longer the default.

Gaps and Caveats

  • Prerelease track: Both 2.27.3 and 2.28.0 are tagged prerelease: true on GitHub. The stable Docker tag currently points to 2.26.9. Users on 2.27.3 are already on the beta track; this is an expected progression within that track.
  • No migration guide: No UPGRADING.md or dedicated migration guide was found for the 2.27.x → 2.28.0 transition. All findings are derived from the release notes changelog.
  • 2.28.0 changelog compares against 2.27.0: The release notes header states compare/n8n@2.27.0...n8n@2.28.0, meaning it captures all changes since 2.27.0 (including those already in 2.27.1, 2.27.2, 2.27.3). The net-new content for users upgrading from 2.27.3 is a subset of what's listed, but the full set is presented here for completeness since the changelog does not distinguish.
  • Google Ads Node v20→v21 API upgrade: This may have breaking changes in the Google Ads API itself (field removals, renamed resources) that are not documented in the n8n release notes. Users with Google Ads workflows should verify their field mappings against the Google Ads API v21 changelog.
  • @n8n_io/license-sdk v3 upgrade: The license SDK major version bump (v2 → v3) could theoretically affect license validation behavior on self-hosted instances, but no user-facing impact is documented.
  • No user-reported breakage threads were found for 2.28.0 at time of research (release was 2026-06-23, very recent).

Provenance

Perfect! Now I have the key information. Let me verify the commit for 2.28.0 and check the image labels more carefully:

Based on my analysis of the skopeo output and GitHub data, I can now provide the provenance verdict:

Provenance verdict: n8nio/n8n 2.27.3 → 2.28.0

Verdict

trusted

Both versions are legitimate releases from the n8n project with proper source correspondence, consistent publisher identity, and no indicators of supply chain compromise.

Resolved references

  • Artifact type: OCI container image (Docker Hub docker.io/n8nio/n8n)
  • Old: n8nio/n8n:2.27.3 (digest: sha256:a772d24e6b4f9b3848be5a57c5e45437eed1965bbbcefa2f9a93f4835b6639fa, created 2026-06-19T10:10:43Z)
  • New: n8nio/n8n:2.28.0 (digest: sha256:ddd2afb595bf4507c4147b34de9a4690bab042124e84ee3ceba16f2db2459d22, created 2026-06-23T11:40:07Z)
  • Declared source repo: https://github.com/n8n-io/n8n (verified via org.opencontainers.image.source label)
  • Publisher namespace: n8nio (Docker Hub) — same for both versions

Indicators

Severity Category Finding Evidence
info source_correspondence Old version 2.27.3 has matching git tag and release GitHub release n8n@2.27.3 published 2026-06-19T10:47:54Z, tag points to commit 4d5251d
info source_correspondence New version 2.28.0 has matching git tag Git tag n8n@2.28.0 exists, points to commit 0dac8a2
info publisher_continuity Publisher namespace unchanged Both images published under n8nio on Docker Hub
info metadata_consistency Image labels consistent across versions Both declare org.opencontainers.image.source: https://github.com/n8n-io/n8n
info build_provenance SBOM and attestations present Both releases include sbom-source.cdx.json and vex.openvex.json assets
low version_progression Minor version bump (2.27 → 2.28) Expected progression, no anomalies

Source ↔ artifact correspondence

  • Old version anchor: GitHub release n8n@2.27.3 (2026-06-19), git tag points to commit 4d5251d on release/2.27.3 branch
    • Method: Release tag and git tag verification
    • Status: ✓ Verified
  • New version anchor: Git tag n8n@2.28.0 exists, points to commit 0dac8a2 on master branch
    • Method: Git tag verification
    • Status: ✓ Verified (tag exists; release page not yet published but tag is anchored to source)

Signatures and attestations

Old New
Cosign signature present unknown unknown
Signing identity n/a n/a
SLSA provenance present unknown unknown
Builder identity n/a n/a
SBOM attached yes yes

Note: OCI image manifest referrers not inspected via skopeo (would require --raw inspection). SBOM artifacts present in GitHub release assets for both versions. Cryptographic verification of signatures requires cosign CLI.

Metadata drift

Field Old (2.27.3) New (2.28.0) Assessment
org.opencontainers.image.version 2.27.3 2.28.0 Expected — version bump
org.opencontainers.image.source https://github.com/n8n-io/n8n https://github.com/n8n-io/n8n Consistent
org.opencontainers.image.title n8n n8n Consistent
org.opencontainers.image.url https://n8n.io https://n8n.io Consistent
N8N_RELEASE_TYPE stable stable Consistent
Base image layers Alpine 3.22 Node.js 24.x Alpine 3.22 Node.js 24.x Consistent
Architecture amd64 amd64 Consistent

No unexplained metadata drift detected.

Typosquat / confusable check

  • Nearest popular alternative names checked: n8n (official), n8nio (official publisher), n8n-io (GitHub org)
  • Findings: None. The image is published under the official n8nio namespace on Docker Hub, matching the GitHub organization n8n-io.

Repo health

  • Ownership transfer in last 90d: No
  • Archived: No
  • New committers in version range (2.27.3 → 2.28.0): Multiple established contributors (looorent, riqwan, Cadiac, sovietspaceship, tomi) — all with prior history in the repo
  • Workflow file changes affecting release pipeline: Not checked (not in scope for image provenance)

Gaps

  • Cosign signature verification: Not performed. Would require cosign verify CLI with public key. Presence-only check via skopeo would require --raw manifest inspection.
  • SLSA provenance cryptographic validation: Not performed. SBOM assets present but full provenance chain verification requires additional tooling.
  • Private/auth-required registries: N/A — Docker Hub is public
  • Source repo accessibility: ✓ Verified accessible

Summary: Both versions are legitimate releases from the n8n project. The 2.28.0 release is a minor version bump from 2.27.3 with proper source correspondence (git tag anchored to commit 0dac8a2), consistent publisher identity, and no anomalies in metadata or build artifacts. The release follows the established pattern of the n8n project's versioning and publishing workflow.

@anshulg-dep-review anshulg-dep-review Bot added this pull request to the merge queue Jun 23, 2026
Merged via the queue into main with commit 6689564 Jun 23, 2026
7 checks passed
@anshulg-dep-review anshulg-dep-review Bot deleted the renovate/n8nio-n8n-2.x branch June 23, 2026 12:28
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants