Compare commits

...
Author SHA1 Message Date
zhom fee920fab2 chore: version bump 2026-04-22 00:40:11 +04:00
zhom 5c4e3e7318 fix: properly handle headless mode 2026-04-22 00:40:11 +04:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
3fd0642185 chore: update flake.nix for v0.21.1 [skip ci] (#295)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-19 20:19:17 +00:00
github-actions[bot]GitHubgithub-actions[bot] <github-actions[bot]@users.noreply.github.com>
e063ab995d docs: update CHANGELOG.md and README.md for v0.21.1 [skip ci] (#294)
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
2026-04-19 20:18:50 +00:00
10 changed files with 45 additions and 18 deletions
+19
View File
@@ -1,6 +1,25 @@
# Changelog
## v0.21.1 (2026-04-19)
### Features
- shadowsocks
### Refactoring
- better cleanup
- proxy cleanup
### Maintenance
- chore: version bump
- chore: linting
- ci(deps): bump the github-actions group with 3 updates
- chore: update flake.nix for v0.21.0 [skip ci] (#289)
## v0.21.0 (2026-04-16)
### Features
+5 -5
View File
@@ -51,7 +51,7 @@
| | Apple Silicon | Intel |
|---|---|---|
| **DMG** | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.0/Donut_0.21.0_aarch64.dmg) | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.0/Donut_0.21.0_x64.dmg) |
| **DMG** | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.1/Donut_0.21.1_aarch64.dmg) | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.1/Donut_0.21.1_x64.dmg) |
Or install via Homebrew:
@@ -61,15 +61,15 @@ brew install --cask donut
### Windows
[Download Windows Installer (x64)](https://github.com/zhom/donutbrowser/releases/download/v0.21.0/Donut_0.21.0_x64-setup.exe) · [Portable (x64)](https://github.com/zhom/donutbrowser/releases/download/v0.21.0/Donut_0.21.0_x64-portable.zip)
[Download Windows Installer (x64)](https://github.com/zhom/donutbrowser/releases/download/v0.21.1/Donut_0.21.1_x64-setup.exe) · [Portable (x64)](https://github.com/zhom/donutbrowser/releases/download/v0.21.1/Donut_0.21.1_x64-portable.zip)
### Linux
| Format | x86_64 | ARM64 |
|---|---|---|
| **deb** | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.0/Donut_0.21.0_amd64.deb) | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.0/Donut_0.21.0_arm64.deb) |
| **rpm** | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.0/Donut-0.21.0-1.x86_64.rpm) | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.0/Donut-0.21.0-1.aarch64.rpm) |
| **AppImage** | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.0/Donut_0.21.0_amd64.AppImage) | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.0/Donut_0.21.0_aarch64.AppImage) |
| **deb** | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.1/Donut_0.21.1_amd64.deb) | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.1/Donut_0.21.1_arm64.deb) |
| **rpm** | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.1/Donut-0.21.1-1.x86_64.rpm) | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.1/Donut-0.21.1-1.aarch64.rpm) |
| **AppImage** | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.1/Donut_0.21.1_amd64.AppImage) | [Download](https://github.com/zhom/donutbrowser/releases/download/v0.21.1/Donut_0.21.1_aarch64.AppImage) |
<!-- install-links-end -->
Or install via package manager:
+5 -5
View File
@@ -94,17 +94,17 @@
pkgConfigPath = lib.makeSearchPath "lib/pkgconfig" (
pkgConfigLibs ++ map lib.getDev pkgConfigLibs
);
releaseVersion = "0.21.0";
releaseVersion = "0.21.1";
releaseAppImage =
if system == "x86_64-linux" then
pkgs.fetchurl {
url = "https://github.com/zhom/donutbrowser/releases/download/v0.21.0/Donut_0.21.0_amd64.AppImage";
hash = "sha256-Qrg+8uh9RTDMHUNqWChWBHIIsy2Dgzu5wOH+FuPN35k=";
url = "https://github.com/zhom/donutbrowser/releases/download/v0.21.1/Donut_0.21.1_amd64.AppImage";
hash = "sha256-vf8pffgMnJzqq/3+v8WJsvywMmxbmbW1NtsPhaZgPnM=";
}
else if system == "aarch64-linux" then
pkgs.fetchurl {
url = "https://github.com/zhom/donutbrowser/releases/download/v0.21.0/Donut_0.21.0_aarch64.AppImage";
hash = "sha256-UBGer3/8xleadHaZ/5OY2KaC03OE40SOewCAdcxw2CM=";
url = "https://github.com/zhom/donutbrowser/releases/download/v0.21.1/Donut_0.21.1_aarch64.AppImage";
hash = "sha256-EG1SwF7egzcX/hCslSdZ1a9Gy3gWQUc5r4xLiHJMRBo=";
}
else
null;
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "donutbrowser",
"private": true,
"license": "AGPL-3.0",
"version": "0.21.1",
"version": "0.21.2",
"type": "module",
"scripts": {
"dev": "next dev --turbopack -p 12341",
+1 -1
View File
@@ -1789,7 +1789,7 @@ dependencies = [
[[package]]
name = "donutbrowser"
version = "0.21.1"
version = "0.21.2"
dependencies = [
"aes 0.9.0",
"aes-gcm",
+1 -1
View File
@@ -1,6 +1,6 @@
[package]
name = "donutbrowser"
version = "0.21.1"
version = "0.21.2"
description = "Simple Yet Powerful Anti-Detect Browser"
authors = ["zhom@github"]
edition = "2021"
+3 -1
View File
@@ -156,7 +156,7 @@ impl BrowserRunner {
url: Option<String>,
_local_proxy_settings: Option<&ProxySettings>,
remote_debugging_port: Option<u16>,
_headless: bool,
headless: bool,
) -> Result<BrowserProfile, Box<dyn std::error::Error + Send + Sync>> {
// Handle Camoufox profiles using CamoufoxManager
if profile.browser == "camoufox" {
@@ -335,6 +335,7 @@ impl BrowserRunner {
camoufox_config,
url,
override_profile_path,
headless,
)
.await
.map_err(|e| -> Box<dyn std::error::Error + Send + Sync> {
@@ -592,6 +593,7 @@ impl BrowserRunner {
profile.ephemeral,
&extension_paths,
remote_debugging_port,
headless,
)
.await
.map_err(|e| -> Box<dyn std::error::Error + Send + Sync> {
+6 -2
View File
@@ -207,6 +207,7 @@ impl CamoufoxManager {
profile_path: &str,
config: &CamoufoxConfig,
url: Option<&str>,
headless: bool,
) -> Result<CamoufoxLaunchResult, Box<dyn std::error::Error + Send + Sync>> {
let custom_config = if let Some(existing_fingerprint) = &config.fingerprint {
log::info!("Using existing fingerprint from profile metadata");
@@ -251,8 +252,9 @@ impl CamoufoxManager {
args.push(url.to_string());
}
// Add headless flag for tests
if std::env::var("CAMOUFOX_HEADLESS").is_ok() {
// Add headless flag when requested via the API or via the CAMOUFOX_HEADLESS
// env var (used by integration tests)
if headless || std::env::var("CAMOUFOX_HEADLESS").is_ok() {
args.push("--headless".to_string());
}
@@ -617,6 +619,7 @@ impl CamoufoxManager {
config: CamoufoxConfig,
url: Option<String>,
override_profile_path: Option<std::path::PathBuf>,
headless: bool,
) -> Result<CamoufoxLaunchResult, String> {
// Get profile path
let profile_path = if let Some(ref override_path) = override_profile_path {
@@ -716,6 +719,7 @@ impl CamoufoxManager {
&profile_path_str,
&config,
url.as_deref(),
headless,
)
.await
.map_err(|e| format!("Failed to launch Camoufox: {e}"))
+3 -1
View File
@@ -504,6 +504,7 @@ impl WayfernManager {
ephemeral: bool,
extension_paths: &[String],
remote_debugging_port: Option<u16>,
headless: bool,
) -> Result<WayfernLaunchResult, Box<dyn std::error::Error + Send + Sync>> {
let executable_path = BrowserRunner::instance()
.get_browser_executable_path(profile)
@@ -672,7 +673,7 @@ impl WayfernManager {
let profile_path_ref = std::path::Path::new(profile_path);
let mut launcher = chromium.persistent_context_launcher(profile_path_ref);
launcher = launcher.executable(executable_path.as_ref());
launcher = launcher.headless(false);
launcher = launcher.headless(headless);
launcher = launcher.chromium_sandbox(true);
launcher = launcher.args(&args);
launcher = launcher.timeout(0.0);
@@ -1151,6 +1152,7 @@ impl WayfernManager {
profile.ephemeral,
&[],
None,
false,
)
.await
}
+1 -1
View File
@@ -1,7 +1,7 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "Donut",
"version": "0.21.1",
"version": "0.21.2",
"identifier": "com.donutbrowser",
"build": {
"beforeDevCommand": "pnpm copy-proxy-binary && pnpm dev",