pake-cli 3.2.18 → 3.3.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
@@ -22,7 +22,7 @@ import sharp from 'sharp';
22
22
  import * as psl from 'psl';
23
23
 
24
24
  var name = "pake-cli";
25
- var version = "3.2.18";
25
+ var version = "3.3.0";
26
26
  var description = "🤱🏻 Turn any webpage into a desktop app with Rust. 🤱🏻 利用 Rust 轻松构建轻量级多端桌面应用。";
27
27
  var engines = {
28
28
  node: ">=18.0.0"
@@ -350,9 +350,7 @@ async function mergeConfig(url, options, tauriConf) {
350
350
  }));
351
351
  const { width, height, fullscreen, hideTitleBar, alwaysOnTop, appVersion, darkMode, disabledWebShortcuts, activationShortcut, userAgent, showSystemTray, systemTrayIcon, useLocalFile, identifier, name, resizable = true, inject, proxyUrl, installerLanguage, hideOnClose, incognito, title, wasm, enableDragDrop, } = options;
352
352
  const { platform } = process;
353
- // Platform-specific hide_on_close behavior: macOS keeps true, others default to false
354
353
  const platformHideOnClose = hideOnClose ?? platform === 'darwin';
355
- // Set Windows parameters.
356
354
  const tauriConfWindowOptions = {
357
355
  width,
358
356
  height,
@@ -373,10 +371,12 @@ async function mergeConfig(url, options, tauriConf) {
373
371
  tauriConf.productName = name;
374
372
  tauriConf.identifier = identifier;
375
373
  tauriConf.version = appVersion;
374
+ if (platform === 'linux') {
375
+ tauriConf.mainBinaryName = `pake-${name.toLowerCase()}`;
376
+ }
376
377
  if (platform == 'win32') {
377
378
  tauriConf.bundle.windows.wix.language[0] = installerLanguage;
378
379
  }
379
- //Judge the type of URL, whether it is a file or a website.
380
380
  const pathExists = await fsExtra.pathExists(url);
381
381
  if (pathExists) {
382
382
  logger.warn('✼ Your input might be a local file.');
@@ -427,8 +427,8 @@ Version=1.0
427
427
  Type=Application
428
428
  Name=${name}
429
429
  Comment=${name}
430
- Exec=${appNameLower}
431
- Icon=${appNameLower}
430
+ Exec=pake-${appNameLower}
431
+ Icon=${appNameLower}_512
432
432
  Categories=Network;WebBrowser;
433
433
  MimeType=text/html;text/xml;application/xhtml_xml;
434
434
  StartupNotify=true
@@ -510,7 +510,7 @@ StartupNotify=true
510
510
  }
511
511
  }
512
512
  if (updateIconPath) {
513
- tauriConf.bundle.icon = [options.icon];
513
+ tauriConf.bundle.icon = [iconInfo.path];
514
514
  }
515
515
  else {
516
516
  logger.warn(`✼ Icon will remain as default.`);
@@ -606,15 +606,13 @@ class BaseBuilder {
606
606
  return process.platform === 'win32' ? 600000 : 300000;
607
607
  }
608
608
  getBuildTimeout() {
609
- return 900000; // 15 minutes for all builds
609
+ return 900000;
610
610
  }
611
611
  async detectPackageManager() {
612
- // 使用缓存避免重复检测
613
612
  if (BaseBuilder.packageManagerCache) {
614
613
  return BaseBuilder.packageManagerCache;
615
614
  }
616
615
  const { execa } = await import('execa');
617
- // 优先使用pnpm(如果可用)
618
616
  try {
619
617
  await execa('pnpm', ['--version'], { stdio: 'ignore' });
620
618
  logger.info('✺ Using pnpm for package management.');
@@ -622,7 +620,6 @@ class BaseBuilder {
622
620
  return 'pnpm';
623
621
  }
624
622
  catch {
625
- // pnpm不可用,回退到npm
626
623
  try {
627
624
  await execa('npm', ['--version'], { stdio: 'ignore' });
628
625
  logger.info('✺ pnpm not available, using npm for package management.');
@@ -710,9 +707,18 @@ class BaseBuilder {
710
707
  const appPath = this.getBuildAppPath(npmDirectory, fileName, fileType);
711
708
  const distPath = path.resolve(`${name}.${fileType}`);
712
709
  await fsExtra.copy(appPath, distPath);
710
+ // Copy raw binary if requested
711
+ if (this.options.keepBinary) {
712
+ await this.copyRawBinary(npmDirectory, name);
713
+ }
713
714
  await fsExtra.remove(appPath);
714
715
  logger.success('✔ Build success!');
715
716
  logger.success('✔ App installer located in', distPath);
717
+ // Log binary location if preserved
718
+ if (this.options.keepBinary) {
719
+ const binaryPath = this.getRawBinaryPath(name);
720
+ logger.success('✔ Raw binary located in', path.resolve(binaryPath));
721
+ }
716
722
  }
717
723
  getFileType(target) {
718
724
  return target;
@@ -804,6 +810,67 @@ class BaseBuilder {
804
810
  const bundleDir = fileType.toLowerCase() === 'app' ? 'macos' : fileType.toLowerCase();
805
811
  return path.join(npmDirectory, this.getBasePath(), bundleDir, `${fileName}.${fileType}`);
806
812
  }
813
+ /**
814
+ * Copy raw binary file to output directory
815
+ */
816
+ async copyRawBinary(npmDirectory, appName) {
817
+ const binaryPath = this.getRawBinarySourcePath(npmDirectory, appName);
818
+ const outputPath = this.getRawBinaryPath(appName);
819
+ if (await fsExtra.pathExists(binaryPath)) {
820
+ await fsExtra.copy(binaryPath, outputPath);
821
+ // Make binary executable on Unix-like systems
822
+ if (process.platform !== 'win32') {
823
+ await fsExtra.chmod(outputPath, 0o755);
824
+ }
825
+ }
826
+ else {
827
+ logger.warn(`✼ Raw binary not found at ${binaryPath}, skipping...`);
828
+ }
829
+ }
830
+ /**
831
+ * Get the source path of the raw binary file in the build directory
832
+ */
833
+ getRawBinarySourcePath(npmDirectory, appName) {
834
+ const basePath = this.options.debug ? 'debug' : 'release';
835
+ const binaryName = this.getBinaryName(appName);
836
+ // Handle cross-platform builds
837
+ if (this.options.multiArch || this.hasArchSpecificTarget()) {
838
+ return path.join(npmDirectory, this.getArchSpecificPath(), basePath, binaryName);
839
+ }
840
+ return path.join(npmDirectory, 'src-tauri/target', basePath, binaryName);
841
+ }
842
+ /**
843
+ * Get the output path for the raw binary file
844
+ */
845
+ getRawBinaryPath(appName) {
846
+ const extension = process.platform === 'win32' ? '.exe' : '';
847
+ const suffix = process.platform === 'win32' ? '' : '-binary';
848
+ return `${appName}${suffix}${extension}`;
849
+ }
850
+ /**
851
+ * Get the binary name based on app name and platform
852
+ */
853
+ getBinaryName(appName) {
854
+ const extension = process.platform === 'win32' ? '.exe' : '';
855
+ // Linux uses the unique binary name we set in merge.ts
856
+ if (process.platform === 'linux') {
857
+ return `pake-${appName.toLowerCase()}${extension}`;
858
+ }
859
+ // Windows and macOS use 'pake' as binary name
860
+ return `pake${extension}`;
861
+ }
862
+ /**
863
+ * Check if this build has architecture-specific target
864
+ */
865
+ hasArchSpecificTarget() {
866
+ return false; // Override in subclasses if needed
867
+ }
868
+ /**
869
+ * Get architecture-specific path for binary
870
+ */
871
+ getArchSpecificPath() {
872
+ return 'src-tauri/target'; // Override in subclasses if needed
873
+ }
807
874
  }
808
875
  BaseBuilder.packageManagerCache = null;
809
876
  // 架构映射配置
@@ -832,31 +899,23 @@ BaseBuilder.ARCH_DISPLAY_NAMES = {
832
899
  class MacBuilder extends BaseBuilder {
833
900
  constructor(options) {
834
901
  super(options);
835
- // Store the original targets value for architecture selection
836
- // For macOS, targets can be architecture names or format names
837
- // Filter out non-architecture values
838
902
  const validArchs = ['intel', 'apple', 'universal', 'auto', 'x64', 'arm64'];
839
903
  this.buildArch = validArchs.includes(options.targets || '')
840
904
  ? options.targets
841
905
  : 'auto';
842
- // Use DMG by default for distribution
843
- // Only create app bundles for testing to avoid user interaction
844
906
  if (process.env.PAKE_CREATE_APP === '1') {
845
907
  this.buildFormat = 'app';
846
908
  }
847
909
  else {
848
910
  this.buildFormat = 'dmg';
849
911
  }
850
- // Set targets to format for Tauri
851
912
  this.options.targets = this.buildFormat;
852
913
  }
853
914
  getFileName() {
854
915
  const { name } = this.options;
855
- // For app bundles, use simple name without version/arch
856
916
  if (this.buildFormat === 'app') {
857
917
  return name;
858
918
  }
859
- // For DMG files, use versioned filename
860
919
  let arch;
861
920
  if (this.buildArch === 'universal' || this.options.multiArch) {
862
921
  arch = 'universal';
@@ -868,7 +927,6 @@ class MacBuilder extends BaseBuilder {
868
927
  arch = 'x64';
869
928
  }
870
929
  else {
871
- // Auto-detect based on current architecture
872
930
  arch = this.getArchDisplayName(this.resolveTargetArch(this.buildArch));
873
931
  }
874
932
  return `${name}_${tauriConfig.version}_${arch}`;
@@ -893,7 +951,6 @@ class MacBuilder extends BaseBuilder {
893
951
  throw new Error(`Unsupported architecture: ${actualArch} for macOS`);
894
952
  }
895
953
  let fullCommand = this.buildBaseCommand(packageManager, configPath, buildTarget);
896
- // Add features
897
954
  const features = this.getBuildFeatures();
898
955
  if (features.length > 0) {
899
956
  fullCommand += ` --features ${features.join(',')}`;
@@ -906,14 +963,20 @@ class MacBuilder extends BaseBuilder {
906
963
  const target = this.getTauriTarget(actualArch, 'darwin');
907
964
  return `src-tauri/target/${target}/${basePath}/bundle`;
908
965
  }
966
+ hasArchSpecificTarget() {
967
+ return true;
968
+ }
969
+ getArchSpecificPath() {
970
+ const actualArch = this.getActualArch();
971
+ const target = this.getTauriTarget(actualArch, 'darwin');
972
+ return `src-tauri/target/${target}`;
973
+ }
909
974
  }
910
975
 
911
976
  class WinBuilder extends BaseBuilder {
912
977
  constructor(options) {
913
978
  super(options);
914
979
  this.buildFormat = 'msi';
915
- // For Windows, targets can be architecture names or format names
916
- // Filter out non-architecture values
917
980
  const validArchs = ['x64', 'arm64', 'auto'];
918
981
  this.buildArch = validArchs.includes(options.targets || '')
919
982
  ? this.resolveTargetArch(options.targets)
@@ -933,7 +996,6 @@ class WinBuilder extends BaseBuilder {
933
996
  throw new Error(`Unsupported architecture: ${this.buildArch} for Windows`);
934
997
  }
935
998
  let fullCommand = this.buildBaseCommand(packageManager, configPath, buildTarget);
936
- // Add features
937
999
  const features = this.getBuildFeatures();
938
1000
  if (features.length > 0) {
939
1001
  fullCommand += ` --features ${features.join(',')}`;
@@ -945,12 +1007,18 @@ class WinBuilder extends BaseBuilder {
945
1007
  const target = this.getTauriTarget(this.buildArch, 'win32');
946
1008
  return `src-tauri/target/${target}/${basePath}/bundle/`;
947
1009
  }
1010
+ hasArchSpecificTarget() {
1011
+ return true;
1012
+ }
1013
+ getArchSpecificPath() {
1014
+ const target = this.getTauriTarget(this.buildArch, 'win32');
1015
+ return `src-tauri/target/${target}`;
1016
+ }
948
1017
  }
949
1018
 
950
1019
  class LinuxBuilder extends BaseBuilder {
951
1020
  constructor(options) {
952
1021
  super(options);
953
- // Parse target format and architecture
954
1022
  const target = options.targets || 'deb';
955
1023
  if (target.includes('-arm64')) {
956
1024
  this.buildFormat = target.replace('-arm64', '');
@@ -960,33 +1028,32 @@ class LinuxBuilder extends BaseBuilder {
960
1028
  this.buildFormat = target;
961
1029
  this.buildArch = this.resolveTargetArch('auto');
962
1030
  }
963
- // Set targets to format for Tauri
964
1031
  this.options.targets = this.buildFormat;
965
1032
  }
966
1033
  getFileName() {
967
1034
  const { name, targets } = this.options;
968
1035
  const version = tauriConfig.version;
969
- // Determine architecture display name
970
1036
  let arch;
971
1037
  if (this.buildArch === 'arm64') {
972
1038
  arch = targets === 'rpm' || targets === 'appimage' ? 'aarch64' : 'arm64';
973
1039
  }
974
1040
  else {
975
- // Auto-detect or default to current architecture
976
- const resolvedArch = this.buildArch === 'x64' ? 'amd64' : this.buildArch;
977
- arch = resolvedArch;
978
- if (resolvedArch === 'arm64' &&
979
- (targets === 'rpm' || targets === 'appimage')) {
980
- arch = 'aarch64';
1041
+ if (this.buildArch === 'x64') {
1042
+ arch = targets === 'rpm' ? 'x86_64' : 'amd64';
1043
+ }
1044
+ else {
1045
+ arch = this.buildArch;
1046
+ if (this.buildArch === 'arm64' &&
1047
+ (targets === 'rpm' || targets === 'appimage')) {
1048
+ arch = 'aarch64';
1049
+ }
981
1050
  }
982
1051
  }
983
- // The RPM format uses different separators and version number formats
984
1052
  if (targets === 'rpm') {
985
1053
  return `${name}-${version}-1.${arch}`;
986
1054
  }
987
1055
  return `${name}_${version}_${arch}`;
988
1056
  }
989
- // Customize it, considering that there are all targets.
990
1057
  async build(url) {
991
1058
  const targetTypes = ['deb', 'appimage', 'rpm'];
992
1059
  for (const target of targetTypes) {
@@ -997,12 +1064,10 @@ class LinuxBuilder extends BaseBuilder {
997
1064
  }
998
1065
  getBuildCommand(packageManager = 'pnpm') {
999
1066
  const configPath = path.join('src-tauri', '.pake', 'tauri.conf.json');
1000
- // Only add target if it's ARM64
1001
1067
  const buildTarget = this.buildArch === 'arm64'
1002
1068
  ? this.getTauriTarget(this.buildArch, 'linux')
1003
1069
  : undefined;
1004
1070
  let fullCommand = this.buildBaseCommand(packageManager, configPath, buildTarget);
1005
- // Add features
1006
1071
  const features = this.getBuildFeatures();
1007
1072
  if (features.length > 0) {
1008
1073
  fullCommand += ` --features ${features.join(',')}`;
@@ -1023,6 +1088,16 @@ class LinuxBuilder extends BaseBuilder {
1023
1088
  }
1024
1089
  return super.getFileType(target);
1025
1090
  }
1091
+ hasArchSpecificTarget() {
1092
+ return this.buildArch === 'arm64';
1093
+ }
1094
+ getArchSpecificPath() {
1095
+ if (this.buildArch === 'arm64') {
1096
+ const target = this.getTauriTarget(this.buildArch, 'linux');
1097
+ return `src-tauri/target/${target}`;
1098
+ }
1099
+ return super.getArchSpecificPath();
1100
+ }
1026
1101
  }
1027
1102
 
1028
1103
  const { platform } = process;
@@ -1066,6 +1141,7 @@ const DEFAULT_PAKE_OPTIONS = {
1066
1141
  incognito: false,
1067
1142
  wasm: false,
1068
1143
  enableDragDrop: false,
1144
+ keepBinary: false,
1069
1145
  };
1070
1146
 
1071
1147
  async function checkUpdateTips() {
@@ -1523,6 +1599,9 @@ program
1523
1599
  .addOption(new Option('--enable-drag-drop', 'Enable drag and drop functionality')
1524
1600
  .default(DEFAULT_PAKE_OPTIONS.enableDragDrop)
1525
1601
  .hideHelp())
1602
+ .addOption(new Option('--keep-binary', 'Keep raw binary file alongside installer')
1603
+ .default(DEFAULT_PAKE_OPTIONS.keepBinary)
1604
+ .hideHelp())
1526
1605
  .addOption(new Option('--installer-language <string>', 'Installer language')
1527
1606
  .default(DEFAULT_PAKE_OPTIONS.installerLanguage)
1528
1607
  .hideHelp())
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pake-cli",
3
- "version": "3.2.18",
3
+ "version": "3.3.0",
4
4
  "description": "🤱🏻 Turn any webpage into a desktop app with Rust. 🤱🏻 利用 Rust 轻松构建轻量级多端桌面应用。",
5
5
  "engines": {
6
6
  "node": ">=18.0.0"
@@ -1,3 +1,14 @@
1
+ [source.crates-io]
2
+ replace-with = 'rsproxy-sparse'
3
+ [source.rsproxy]
4
+ registry = "https://rsproxy.cn/crates.io-index"
5
+ [source.rsproxy-sparse]
6
+ registry = "sparse+https://rsproxy.cn/index/"
7
+ [registries.rsproxy]
8
+ index = "https://rsproxy.cn/crates.io-index"
9
+ [net]
10
+ git-fetch-with-cli = true
11
+
1
12
  [env]
2
13
  # Fix for macOS 26 Beta compatibility issues
3
14
  # Forces use of compatible SDK when building on macOS 26 Beta
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "windows": [
3
3
  {
4
- "url": "https://example.com",
4
+ "url": "https://web-serial-example.netlify.app/",
5
5
  "url_type": "web",
6
6
  "hide_title_bar": false,
7
7
  "fullscreen": false,
@@ -16,13 +16,14 @@
16
16
  "incognito": false,
17
17
  "enable_wasm": false,
18
18
  "enable_drag_drop": false,
19
+ "enable_serial": true,
19
20
  "title": null
20
21
  }
21
22
  ],
22
23
  "user_agent": {
23
- "macos": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15",
24
- "linux": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
25
- "windows": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
24
+ "macos": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Safari/605.1.15",
25
+ "linux": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
26
+ "windows": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
26
27
  },
27
28
  "system_tray": {
28
29
  "macos": false,
@@ -30,8 +31,6 @@
30
31
  "windows": true
31
32
  },
32
33
  "system_tray_path": "png/icon_512.png",
33
- "inject": [
34
- "/tmp/test.css"
35
- ],
34
+ "inject": [],
36
35
  "proxy_url": ""
37
36
  }
@@ -1,6 +1,6 @@
1
1
  {
2
- "productName": "TestInjectFix",
3
- "identifier": "com.pake.c984d0",
2
+ "productName": "SerialTerminal",
3
+ "identifier": "com.pake.76e98c",
4
4
  "version": "1.0.0",
5
5
  "app": {
6
6
  "withGlobalTauri": true,
@@ -13,14 +13,14 @@
13
13
  },
14
14
  "bundle": {
15
15
  "icon": [
16
- "/private/var/folders/v3/4mpcxc0564j9qhpf8jpf6r_r0000gp/T/tmp-93786-OSC4Bs2UNKIN/converted-icons/testinjectfix.icns"
16
+ "icons/serialterminal.icns"
17
17
  ],
18
18
  "active": true,
19
19
  "targets": [
20
20
  "dmg"
21
21
  ],
22
22
  "resources": [
23
- "icons/testinjectfix.icns"
23
+ "icons/serialterminal.icns"
24
24
  ]
25
25
  }
26
26
  }
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "bundle": {
3
3
  "icon": [
4
- "/private/var/folders/v3/4mpcxc0564j9qhpf8jpf6r_r0000gp/T/tmp-93786-OSC4Bs2UNKIN/converted-icons/testinjectfix.icns"
4
+ "icons/serialterminal.icns"
5
5
  ],
6
6
  "active": true,
7
7
  "targets": [
8
8
  "dmg"
9
9
  ],
10
10
  "resources": [
11
- "icons/testinjectfix.icns"
11
+ "icons/serialterminal.icns"
12
12
  ]
13
13
  }
14
14
  }
@@ -19,9 +19,9 @@
19
19
  }
20
20
  ],
21
21
  "user_agent": {
22
- "macos": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.1 Safari/605.1.15",
23
- "linux": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
24
- "windows": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36"
22
+ "macos": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/18.2 Safari/605.1.15",
23
+ "linux": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36",
24
+ "windows": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/133.0.0.0 Safari/537.36"
25
25
  },
26
26
  "system_tray": {
27
27
  "macos": false,
@@ -40,7 +40,6 @@ pub fn set_window(app: &mut App, config: &PakeConfig, tauri_config: &Config) ->
40
40
  .always_on_top(window_config.always_on_top)
41
41
  .incognito(window_config.incognito);
42
42
 
43
- // Conditionally disable drag-drop handler
44
43
  if !window_config.enable_drag_drop {
45
44
  window_builder = window_builder.disable_drag_drop_handler();
46
45
  }
@@ -52,14 +51,12 @@ pub fn set_window(app: &mut App, config: &PakeConfig, tauri_config: &Config) ->
52
51
  .initialization_script(include_str!("../inject/style.js"))
53
52
  .initialization_script(include_str!("../inject/custom.js"));
54
53
 
55
- // Configure WASM support with required headers for SharedArrayBuffer
56
54
  if window_config.enable_wasm {
57
55
  window_builder = window_builder
58
56
  .additional_browser_args("--enable-features=SharedArrayBuffer")
59
57
  .additional_browser_args("--enable-unsafe-webgpu");
60
58
  }
61
59
 
62
- // Configure proxy if specified
63
60
  if !config.proxy_url.is_empty() {
64
61
  if let Ok(proxy_url) = Url::from_str(&config.proxy_url) {
65
62
  window_builder = window_builder.proxy_url(proxy_url);
@@ -86,10 +83,9 @@ pub fn set_window(app: &mut App, config: &PakeConfig, tauri_config: &Config) ->
86
83
  {
87
84
  window_builder = window_builder
88
85
  .data_directory(_data_dir)
89
- .title(app.package_info().name.clone());
86
+ .title(app.package_info().name.clone())
87
+ .additional_browser_args("--disable-blink-features=AutomationControlled");
90
88
 
91
- // Set theme to None for automatic system theme detection on Windows
92
- // This allows the window to respond to system theme changes automatically
93
89
  window_builder = window_builder.theme(None);
94
90
  }
95
91
 
@@ -97,10 +93,9 @@ pub fn set_window(app: &mut App, config: &PakeConfig, tauri_config: &Config) ->
97
93
  {
98
94
  window_builder = window_builder
99
95
  .data_directory(_data_dir)
100
- .title(app.package_info().name.clone());
96
+ .title(app.package_info().name.clone())
97
+ .additional_browser_args("--disable-blink-features=AutomationControlled");
101
98
 
102
- // Set theme to None for automatic system theme detection on Linux
103
- // This allows the window to respond to system theme changes automatically
104
99
  window_builder = window_builder.theme(None);
105
100
  }
106
101