diff --git a/devel/electron29/Makefile.version b/devel/electron29/Makefile.version
index 83db7c5b0bc34d8c1c5f0f3a1e38c84db2de6828..0b85eb521f04b99e8b7b674f4cc0be409e0067aa 100644
--- a/devel/electron29/Makefile.version
+++ b/devel/electron29/Makefile.version
@@ -1,2 +1,2 @@
-ELECTRON_VER=	29.3.0
+ELECTRON_VER=	29.3.1
 ELECTRON_VER_MAJOR=	${ELECTRON_VER:C/\..*//}
diff --git a/devel/electron29/distinfo b/devel/electron29/distinfo
index 448410f09d1a1e494d228ad048bbf5341271101d..92dd45925af4c649a711a6817cf077569738b367 100644
--- a/devel/electron29/distinfo
+++ b/devel/electron29/distinfo
@@ -1,14 +1,14 @@
-TIMESTAMP = 1712920299
+TIMESTAMP = 1713515785
 SHA256 (electron/chromium-122.0.6261.156.tar.xz) = c29e0d546920a788d664f241739c1b9ee6f5235cfab91f8d4cf3026f42bceead
 SIZE (electron/chromium-122.0.6261.156.tar.xz) = 1660787092
 SHA256 (electron/e0b8a95aed06c02287872a2d15c28509b9808446) = 6c964b838cc8b73e6014d6f57ae132455e3b0787449a10d4cf12b1415f2abda2
 SIZE (electron/e0b8a95aed06c02287872a2d15c28509b9808446) = 9601507
 SHA256 (electron/336e775eec536b2d785cc80eff6ac39051931286) = a2ca2962daf482a8f943163541e1c73ba4b2694fabcd2510981f2db4eda493c8
 SIZE (electron/336e775eec536b2d785cc80eff6ac39051931286) = 32624734
-SHA256 (electron/electron-yarn-cache-29.3.0.tar.xz) = bfe45219c248d463ef8fcbdce755ad4d5deb9b757984da4760f47c20630aee84
-SIZE (electron/electron-yarn-cache-29.3.0.tar.xz) = 29229056
-SHA256 (electron/electron-electron-v29.3.0_GH0.tar.gz) = b7825b310c4c6233be536325d01632bf3c6ee0e605be128800c29f3ef4a87189
-SIZE (electron/electron-electron-v29.3.0_GH0.tar.gz) = 13358758
+SHA256 (electron/electron-yarn-cache-29.3.1.tar.xz) = bfe45219c248d463ef8fcbdce755ad4d5deb9b757984da4760f47c20630aee84
+SIZE (electron/electron-yarn-cache-29.3.1.tar.xz) = 29229056
+SHA256 (electron/electron-electron-v29.3.1_GH0.tar.gz) = 9c00c6c083387647331321685b5d61b96e52d7f031add140ef68018cf2fa68a3
+SIZE (electron/electron-electron-v29.3.1_GH0.tar.gz) = 13363862
 SHA256 (electron/nodejs-node-v20.9.0_GH0.tar.gz) = 97fa9283e5472d4252794c930ad59270e4851cc523fe5469f37f65a344f5f2e2
 SIZE (electron/nodejs-node-v20.9.0_GH0.tar.gz) = 114905754
 SHA256 (electron/nodejs-nan-e14bdcd1f72d62bca1d541b66da43130384ec213_GH0.tar.gz) = 02edf8d5b3fef9af94d8a1355da60564a57e7f2c99cb422bce042400607ed2eb
diff --git a/devel/electron29/files/patch-electron_BUILD.gn b/devel/electron29/files/patch-electron_BUILD.gn
index 9d7a83aa386ad46b9c886448b8cd2e37d2ff9397..16b0627bab93ee9af86ff579842f4ad9ba42341d 100644
--- a/devel/electron29/files/patch-electron_BUILD.gn
+++ b/devel/electron29/files/patch-electron_BUILD.gn
@@ -1,4 +1,4 @@
---- electron/BUILD.gn.orig	2024-04-03 19:53:09 UTC
+--- electron/BUILD.gn.orig	2024-04-15 22:35:46 UTC
 +++ electron/BUILD.gn
 @@ -527,7 +527,7 @@ source_set("electron_lib") {
      defines += [ "GDK_DISABLE_DEPRECATION_WARNINGS" ]
@@ -22,7 +22,7 @@
    if (is_linux) {
      libs = [ "xshmfence" ]
      deps += [
-@@ -1204,7 +1210,7 @@ if (is_mac) {
+@@ -1206,7 +1212,7 @@ if (is_mac) {
        ":electron_lib",
        ":electron_win32_resources",
        ":packed_resources",
@@ -31,7 +31,7 @@
        "//content:sandbox_helper_win",
        "//electron/buildflags",
        "//ui/strings",
-@@ -1230,7 +1236,7 @@ if (is_mac) {
+@@ -1232,7 +1238,7 @@ if (is_mac) {
        public_deps = [ "//tools/v8_context_snapshot:v8_context_snapshot" ]
      }
  
@@ -40,7 +40,7 @@
        data_deps += [ "//components/crash/core/app:chrome_crashpad_handler" ]
      }
  
-@@ -1297,7 +1303,7 @@ if (is_mac) {
+@@ -1299,7 +1305,7 @@ if (is_mac) {
          configs += [ "//build/config/gcc:rpath_for_built_shared_libraries" ]
        }
  
@@ -49,7 +49,7 @@
          deps += [ "//sandbox/linux:chrome_sandbox" ]
        }
      }
-@@ -1405,7 +1411,7 @@ dist_zip("electron_dist_zip") {
+@@ -1407,7 +1413,7 @@ dist_zip("electron_dist_zip") {
      ":electron_version_file",
      ":licenses",
    ]
diff --git a/devel/electron29/files/patch-electron_shell_browser_api_electron__api__web__contents.cc b/devel/electron29/files/patch-electron_shell_browser_api_electron__api__web__contents.cc
index f5ef201cfc9a61a1e3abc39c50bafdd441f22073..79cd265620dabfeb7e2c6d4c468dcf0358876fb8 100644
--- a/devel/electron29/files/patch-electron_shell_browser_api_electron__api__web__contents.cc
+++ b/devel/electron29/files/patch-electron_shell_browser_api_electron__api__web__contents.cc
@@ -1,6 +1,6 @@
---- electron/shell/browser/api/electron_api_web_contents.cc.orig	2024-04-09 23:20:32 UTC
+--- electron/shell/browser/api/electron_api_web_contents.cc.orig	2024-04-15 22:35:46 UTC
 +++ electron/shell/browser/api/electron_api_web_contents.cc
-@@ -153,11 +153,11 @@
+@@ -152,11 +152,11 @@
  #include "ui/base/cocoa/defaults_utils.h"
  #endif
  
@@ -14,7 +14,7 @@
  #include "ui/gfx/font_render_params.h"
  #endif
  
-@@ -517,7 +517,7 @@ std::optional<base::TimeDelta> GetCursorBlinkInterval(
+@@ -516,7 +516,7 @@ std::optional<base::TimeDelta> GetCursorBlinkInterval(
        ui::TextInsertionCaretBlinkPeriodFromDefaults());
    if (system_value)
      return *system_value;
@@ -23,7 +23,7 @@
    if (auto* linux_ui = ui::LinuxUi::instance())
      return linux_ui->GetCursorBlinkInterval();
  #elif BUILDFLAG(IS_WIN)
-@@ -965,7 +965,7 @@ void WebContents::InitWithSessionAndOptions(
+@@ -874,7 +874,7 @@ void WebContents::InitWithSessionAndOptions(
    accept_languages.pop_back();
    prefs->accept_languages = accept_languages;
  
@@ -32,7 +32,7 @@
    // Update font settings.
    static const gfx::FontRenderParams params(
        gfx::GetFontRenderParams(gfx::FontRenderParamsQuery(), nullptr));
-@@ -2667,7 +2667,7 @@ void WebContents::ForcefullyCrashRenderer() {
+@@ -2576,7 +2576,7 @@ void WebContents::ForcefullyCrashRenderer() {
  
    content::RenderProcessHost* rph = rwh->GetProcess();
    if (rph) {
@@ -41,7 +41,7 @@
      // A generic |CrashDumpHungChildProcess()| is not implemented for Linux.
      // Instead we send an explicit IPC to crash on the renderer's IO thread.
      rph->ForceCrash();
-@@ -3347,7 +3347,7 @@ void WebContents::Focus() {
+@@ -3258,7 +3258,7 @@ void WebContents::Focus() {
  void WebContents::Focus() {
    // Focusing on WebContents does not automatically focus the window on macOS
    // and Linux, do it manually to match the behavior on Windows.
@@ -50,7 +50,7 @@
    if (owner_window())
      owner_window()->Focus(true);
  #endif
-@@ -4172,7 +4172,7 @@ ui::ImageModel WebContents::GetDevToolsWindowIcon() {
+@@ -4083,7 +4083,7 @@ ui::ImageModel WebContents::GetDevToolsWindowIcon() {
  }
  #endif
  
diff --git a/devel/electron29/files/patch-electron_shell_browser_printing_printing__utils.cc b/devel/electron29/files/patch-electron_shell_browser_printing_printing__utils.cc
new file mode 100644
index 0000000000000000000000000000000000000000..887b92fbeaeff7d2c56eba5582cd2d35a5e34c92
--- /dev/null
+++ b/devel/electron29/files/patch-electron_shell_browser_printing_printing__utils.cc
@@ -0,0 +1,11 @@
+--- electron/shell/browser/printing/printing_utils.cc.orig	2024-04-19 08:41:45 UTC
++++ electron/shell/browser/printing/printing_utils.cc
+@@ -20,7 +20,7 @@
+ #include <ApplicationServices/ApplicationServices.h>
+ #endif
+ 
+-#if BUILDFLAG(IS_LINUX)
++#if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_BSD)
+ #include <gtk/gtk.h>
+ #endif
+ 
diff --git a/devel/electron29/files/patch-electron_spec_chromium-spec.ts b/devel/electron29/files/patch-electron_spec_chromium-spec.ts
index e287a408e2a0413aa15f04d67b511aed36d1f49c..6c4fdb6381ed61ae7bde9f777e1b205ae0cba0f9 100644
--- a/devel/electron29/files/patch-electron_spec_chromium-spec.ts
+++ b/devel/electron29/files/patch-electron_spec_chromium-spec.ts
@@ -1,4 +1,4 @@
---- electron/spec/chromium-spec.ts.orig	2024-03-13 18:15:29 UTC
+--- electron/spec/chromium-spec.ts.orig	2024-04-15 22:35:46 UTC
 +++ electron/spec/chromium-spec.ts
 @@ -469,13 +469,13 @@ describe('command line switches', () => {
      it('should not set an invalid locale', async () => testLocale('asdfkl', `${currentLocale}|${currentSystemLocale}|${currentPreferredLanguages}`));
@@ -18,7 +18,7 @@
    });
  
    describe('--remote-debugging-pipe switch', () => {
-@@ -2667,12 +2667,12 @@ describe('font fallback', () => {
+@@ -2799,12 +2799,12 @@ describe('font fallback', () => {
        expect(fonts[0].familyName).to.equal('Arial');
      } else if (process.platform === 'darwin') {
        expect(fonts[0].familyName).to.equal('Helvetica');
@@ -33,7 +33,7 @@
      const html = `
      <html lang="ja-JP">
        <head>
-@@ -3066,7 +3066,7 @@ describe('navigator.clipboard.write', () => {
+@@ -3198,7 +3198,7 @@ describe('navigator.clipboard.write', () => {
    });
  });