Electron 44: Clipboard Is Async Now — Fix Before You Ship Electron 44, released August 25, makes every clipboard method asynchronous, removes the clipboard module from renderer processes, and eliminates eight convenience methods in favor of a MIME-type-based ClipboardItem API mirroring the W3C web standard. The Electron team says removing renderer clipboard access closes a class of XSS vulnerabilities that let malicious web content exfiltrate clipboard data, but apps calling clipboard.readText(), writeHTML(), or readImage() without migration will break silently or loudly. The change affects the entire Electron ecosystem, including VS Code, Slack, Discord, and Claude Desktop. Electron 44 dropped on August 25 and it rewrote the clipboard. Every synchronous call is now async, the renderer process can no longer touch the clipboard module at all, and eight convenience methods are gone — replaced by a MIME-type-based ClipboardItem API that mirrors the W3C web standard. If your app uses clipboard.readText , writeHTML , readImage , or calls any clipboard method from a renderer process, it breaks silently or loudly on Electron 44. VS Code, Slack, Discord, Claude Desktop — the entire Electron ecosystem is sitting on this migration. The Core Change: Everything Is Async Now The biggest shift is the easiest to describe: every clipboard method now returns a Promise. There are no exceptions. readText , writeText , read , write , and has are all async. The dangerous part is that calling clipboard.readText without await does not throw — it returns a Promise object. Assign that to a variable and use it as a string, and you get silent corruption. The migration for this specific change is mechanical: js // Before — Electron 43 const text = clipboard.readText ; clipboard.writeText 'hello world' ; // After — Electron 44 const text = await clipboard.readText ; await clipboard.writeText 'hello world' ; Run a search across your codebase for every call to a clipboard method and add await . Any function that makes a clipboard call must become async as well. This ripples, but it is mechanical work. Renderer Process Clipboard Access Is Gone This is the real headache. The clipboard module is no longer available in renderer processes. Calling require 'electron' .clipboard in a renderer returns undefined in Electron 44. The Electron team’s reasoning is sound — removing direct clipboard access from renderers closes a class of XSS vulnerabilities where malicious web content could exfiltrate clipboard data. The security argument wins. But it means a non-trivial refactor for any app that uses clipboard from the renderer. For basic text operations in a renderer, use the web platform directly: python // In renderer — no Electron import needed const text = await navigator.clipboard.readText ; await navigator.clipboard.writeText 'hello world' ; For anything beyond plain text — custom MIME types, images, RTF — you need the contextBridge https://www.electronjs.org/docs/latest/api/context-bridge pattern: js // preload.js const { contextBridge, ipcRenderer } = require 'electron' ; contextBridge.exposeInMainWorld 'electronClipboard', { readText: = ipcRenderer.invoke 'clipboard:readText' , writeText: text = ipcRenderer.invoke 'clipboard:writeText', text , read: = ipcRenderer.invoke 'clipboard:read' , } ; // main.js const { ipcMain, clipboard } = require 'electron' ; ipcMain.handle 'clipboard:readText', = clipboard.readText ; ipcMain.handle 'clipboard:writeText', , text = clipboard.writeText text ; ipcMain.handle 'clipboard:read', = clipboard.read ; // In renderer after migration const text = await window.electronClipboard.readText ; One note on security: do not expose the full clipboard API through contextBridge if your renderer loads untrusted web content. Expose only the minimum your app actually needs. Eight Convenience Methods Are Gone Along with the async shift, Electron 44 removes the narrow helper methods in favor of the generic MIME-type-based read and write . Here is what disappeared and how to replace each: - readImage / writeImage — use read and look for image/png or image/jpeg in item types - readHTML / writeHTML — use text/html as the MIME type with ClipboardItem - readRTF / writeRTF — use text/rtf - availableFormats — call clipboard.read and iterate the .types array on returned items Writing HTML now looks like this: js const { clipboard, ClipboardItem } = require 'electron' ; // Before clipboard.writeHTML '