Releases: DghostNinja/barrel-releases
Releases · DghostNinja/barrel-releases
Release list
Barrel 0.1.7
Added
- APK Pull — new Pull button beside Uninstall on each package row. Resolves the on-device APK via
pm path <pkg>, pulls it with normaladb pull, and falls back toadb exec-out su -c catwriting bytes locally on permission errors (same as the file explorer). Saves via a native save dialog defaulting to<pkg>.apk. All invocations use the app'shide_window-hardened runner, so no cmd popups on Windows. - Tool path auto-resolve on detect —
detect_toolnow unwraps Barrel's~/.local/binwrappers and returns the real binary they point to. When a user clicks Detect and Save, the saved tool path is always the canonical tool (e.g./usr/lib/android-sdk/platform-tools/adb), never a Barrel wrapper. Handles wrapper chains safely.
Fixed
- Tool wrappers corrupted into infinite self-recursion —
apply_tool_wrappersandcreate_adb_wrappercould write a wrapper whoseexectarget was the wrapper file itself (when a configured tool path pointed at~/.local/bin/<tool>), which hung every adb/frida/scrcpy call — including Barrel's own device polling. Both writers now detect and skip any target that resolves to the wrapper being written. New regression tests cover the self-reference guard and wrapper unwrapping. - Frida download failing with
Unexpected end of input— a truncated.xz(interrupted download) surfaced as a cryptic xz error. The download now retries the full download+decompress cycle up to 3 times, curl uses--retry 5+-C -resume with a 600s budget, truncation is detected at the curl step (transfer closed), and the final error tells the user the byte count and manual download URL. - Frida version timeout string used as a version number —
frida --versiontiming out returned[frida version timed out after 10s]as a "successful" result, which the download flow then embedded into the GitHub URL (curl: (3) bad range in URL).frida_versionnow rejects timeout/garbage output, and the frontend validates version against/^\d+(\.\d+)*$/and arch against a known-set regex before downloading. - Frida-server not staying running on rooted emulators —
frida_start_servernow starts with thesu -c '<server>' &form (outer&, survives adb exit, the command that works on Android Studio emulators), then Magisk-stylenohupinside su, then plain shell-user as a last resort — checkingpidofbetween attempts so it stops as soon as the server is up as root.
Barrel 0.1.6
Added
- File viewer — hover "View" button or double-click any file in the File Explorer tree to open a glass modal with syntax-highlighted content (JSON, XML, HTML, CSS, JS, YAML, shell scripts). Ctrl+A / Cmd+A inside the viewer selects only the content for easy copying. Close via X button, click outside, or Escape key.
adb_read_fileRust backend command — reads any device file viaadb exec-out su -c catwith plaincatfallback.- Screenshot preview modal — capture device screen via
adb exec-out screencap -p | base64and render inline in a glass modal. Save/Save As buttons with native file dialog. New Rust commands:adb_screencap_base64,write_base64_file. - Logcat highlight rules — per-tab panel with text match / regex / color picker input. Rules persist to localStorage per tab (
logcat_hl_<tabId>). Matching lines get a semi-transparent background highlight while preserving the log level foreground color. Toggle panel via Highlight button in toolbar. - Package actions — Launch, Force Stop (am force-stop), Clear Data (pm clear), and Clear Cache (su rm -rf cache/*) buttons on each package row. Clear Data and Uninstall have glass confirmation dialogs.
Fixed
- Slow logcat tab switching —
flushOutput()now checksoffsetParentbefore reading scroll properties. Hidden tabs (display: none) skip forced layout on thousands of off-screen lines. - Highlight panel input white background — added
-webkit-appearance: none,background,border,color,outline, and:focusstate to highlight panel text inputs — matches toolbar input styling cross-platform. - File viewer close button not working — replaced inline
onclick="closeViewer()"(inaccessible from module scope) with properaddEventListener— module-scoped functions can't be called from attribute-based event handlers. - Proxy verify ran curl on device —
adb_verify_proxywas runningadb shell curlwhich fails on most Android devices. Changed to runcurlon the host machine (detected at launch) against the proxy. Works on all platforms. - Splash screen freeze on hanging binaries —
check_launch_componentsversion checks ran--versionwith no timeout. A hanging binary (e.g. pipx frida circular symlink) blocked splash forever. All checks now userun_with_timeout_byteswith a 5-second timeout — timeout returns no version instead of blocking. - Frida pipx circular symlink hang — pipx creates a bash wrapper that symlinks back to itself, causing
frida --versionto hang. Permanent fix: standalone Python script at~/.local/bin/fridaimports from the pipx venv directly. - Logcat stream dying on binary log lines — the reader used
BufReader::lines(), which aborts the whole stream on the first invalid UTF-8 byte, firinglogcat-endedand stopping the tab a few seconds after Start. Now reads raw bytes viaread_until(b'\n')with lossy UTF-8 decoding — invalid bytes become U+FFFD and streaming continues. Batching and line content are byte-identical for valid input. - Package uninstall failing on Windows with
DELETE_FAILED_INTERNAL_ERROR—adb_uninstall_packagenow falls back toadb shell pm uninstall --user 0 <pkg>when the legacyadb uninstallfails. Newer Android rejects plain all-user uninstalls for device-admin packages, and older adb clients don't supportadb uninstall --user— routing through the device'spmmakes the fallback work regardless of the host adb version. The legacy attempt stays first, so behavior is unchanged where uninstall already worked. - Package Launch not working on Windows — the Launch button relied on
adb shellcommands. An earlier attempt fed every device command throughadb shell's standard input (echo "<cmd>" | adb shell), but on Windows that transport orphans each command's final whitespace token onto a separate shell line — monkey's event count arrived as its own line (** Error: Count not specified, thensh: <stdin>[2]: 1: inaccessible or not found), and the same orphaning silently brokecmd package resolve-activity ... <pkg>andam start ... -p <pkg>, which is why Launch always bottomed out at monkey. The fix: every device command is now passed toadb shellas a single argument (adb shell "<cmd>") — the exact delivery the app'sadb_shellcommand already uses for Force Stop / Clear Data / Clear Cache, proven on Windows. adb forwards the one string to the device shell, which tokenizes it itself, so no trailing token is ever orphaned. Also: when an app is already running,am start -nprintsWarning: Activity not started— now treated as SUCCESS (the intent reached the app), keeping Launch off the monkey fallback. The LAUNCHER-intent fallback (am start -a MAIN -c LAUNCHER -p <pkg>) covers devices whereresolve-activityreturns nothing, andmonkey -p <pkg> 1runs only as a last resort for genuine failures. Works on Windows, macOS, and Linux regardless of adb client version.
Changed
- Frida sidebar icon — changed from
FtoRto avoid conflict with Files tab. Both had "F" as their single-character icon.
Barrel 0.1.5
Added
- Browse button per tool path row in Settings — opens native OS file picker via
tauri-plugin-dialog, populates input with selected path path_existsRust command for client-side path validation on save
Changed
- Custom commands (
exec_command) now usecmd /Con Windows instead ofbash -c— fixes "no devices/emulators found" for ADB commands on Windows adb_logcat_createmadeasync— prevents UI freeze on Windows when spawning logcat and immediately navigating tabs- Save Settings now validates tool paths exist on disk — warns if paths are missing instead of silently saving bad entries
- Responsive layout: sidebar scrollable on small screens, dashboard collapses to single column, content area scrolls properly when window is minimized
Fixed
- Proxy inputs now styled like all other inputs:
background: var(--input-bg)applied directly on<input>elements instead of wrapper div — matches logcat filter, wireless, command, and settings input styling - Unclosed brace in
style.css:.intent-output-okwas missing its closing}— invalidated every CSS rule from line 1388 onward (proxy card, package list, process table, network table, modals, dark mode overrides, scrollbars) - Windows cmd popups for screenrecord/scrcpy: added
hide_window()toadb_screenrecord_start,adb_screenrecord_stop(SIGINT), andadb_mirror_device - Windows cmd popup for logcat PID lookup: added
hide_window()toadb_get_pidin logcat.rs - Windows cmd popups for tool detection: added
hide_window()to bothwhich/wherecalls indetect_tool(settings.rs)
Barrel 0.1.4
Added
- WSL support: detects Windows ADB via
cmd.exe /c where, scans Downloads/platform-tools* dirs, creates bash wrapper~/.local/bin/adb→adb.exeso all commands resolve - Settings tab: users can manually set paths to ADB, Frida, scrcpy, curl, xz. Saves to
~/.config/barrel/settings.json, creates bash wrappers in~/.local/bin/so the whole app uses the configured binaries. Native Browse button uses file dialog. - Settings — Font Size: slider + preset buttons (Small–XX-Large), persists across restarts, scales entire app interface via CSS variable
--app-font-size. Collapsible category groups for future extensibility. - Settings — Dark Mode toggle: iOS-style toggle switch in Appearance section, synced with Save button. Persisted to both localStorage and settings.json for reliable state on restart.
- Comprehensive test suite:
version_gt,check_for_update_inner(JSON parsing + version comparison), mock curl integration, ADB wrapper execution + argument forwarding, no-overwrite safety - Collapsible settings categories: Appearance and Tool Paths both start collapsed, toggle on header click
- Intent Sender: new sidebar tab for crafting and firing
adb shell amintents. Action presets, data URI, MIME, package/class, flags, dynamic extras (String/Int/Boolean/Float/Long). Four modes: Start Activity, Start Service, Send Broadcast, Foreground Service. Shows raw command and output. - Docs site: added Intent Sender and Settings documentation sections with sidebar links
--input-solid-bgCSS variable: fully opaque theme-aware fallback for input backgrounds on Windows WebView2- Docs site: Windows build labeled "Experimental" with SmartScreen troubleshooting section
Fixed
- Windows build failure:
std::os::unix::fs::symlinkcalls not gated behind#[cfg(unix)] - Launch screen update fetcher: replaced bare
curlcall withfind_binary("curl")+wgetfallback so it works on systems without curl - WSL ADB "Invalid argument" error: replaced
symlinkwith bash wrapper script (exec 'adb.exe' "$@") — WSL interop for.exesymlinks is unreliable, bash wrapper works consistently - Font size preset buttons not responding: missing
data-fsvalattribute prevented slider from matching active preset - Theme state not persisted on Save: added
dark_modefield to settings backend, save collects and applies saved theme on startup - Sidebar theme toggle removed: moved to Settings > Appearance for a cleaner sidebar
- Tool Paths arrow direction mismatch: header starts with
collapsedclass so arrow points right when section is closed - Intent Sender now uses
Command::arg()instead ofbash -c— works on Windows and WSL without bash, eliminates shell injection surface - Tool path Browse button replaced with Detect — searches PATH and common install dirs instead of using native file dialog. Fixes freeze on WSL (no display server for GTK dialogs)
- Device info on Dashboard now uses
adb_shellRust command instead ofexec_command— nobashdependency, works on Windows natively - Shell terminal: PTY now initialised at actual terminal dimensions instead of 24×80 then immediately resizing — fixes "wwwwwwww" garbage output and ADB shell instability on resize
- Proxy input white background on all platforms: moved glass effect to wrapper
<div>(.proxy-input-wrap) withbackdrop-filter: blur(8px); inputs usebackground: transparent.<input>elements don't supportbackdrop-filtercross-platform — applying it to the wrapper avoids the native white input backdrop compositing issue on WebView2/WKWebView/WebKitGTK. - Logcat cmd popup on Windows: added
hide_window(&mut cmd)toadb_logcat_createin logcat.rs — the spawnedadb logcatprocess was missingCREATE_NO_WINDOWflag. - Tab drag-and-drop on Windows/macOS: added
dragenterevent listeners withpreventDefault()to shell/logcat tabs and tab bars. WebView2 and WKWebView requirepreventDefault()ondragenter—dragoveralone was silently cancelling drops. - Tab bar dragenter: tab bar containers in both shell.js and logcat.js now have
dragenterhandlers to allow drops. - Proxy section layout: host/port inputs on same row, green/red indicator dots for active/inactive status, pill-shaped badge with dot.
- Docs site download grid: refactored from inline styles to shared CSS classes (
.dl-sub,.dl-note,.dl-buttons,.dl-btn). Windows card shows Experimental badge + SmartScreen note. 3-column grid enforced from 769px+.
Changed
- Settings tool paths reduced to ADB, Frida, scrcpy only (curl/xz removed — globally available on most systems)
- Tool paths hint text updated to clarify they're optional overrides
Barrel 0.1.3
Added
- Direct download per-platform installer (deb/rpm/AppImage/dmg/msi) instead of opening releases page
- Windows tool discovery: finds ADB in platform-tools, pip-installed Frida CLI in Python Scripts
- Linux distro detection for package format (Debian→deb, Fedora→rpm, others→AppImage)
Fixed
- File explorer search freeze: batched BFS tree walk (200 nodes per frame), stale batch cancellation
- File explorer search click not navigating:
expandTreeToPathnow loads children before expanding - File click in search results now navigates to the file's tree location and selects it
- Windows cmd popups suppressed for all ADB/pip/curl/version-check commands
- Updater download URL used current app version instead of latest available version
Barrel 0.1.2
Automated build from commit 9dc0b28cbbd786067faadab95833d0b3d7c65ccf
Barrel 0.1.1
Automated build from commit 39a0191ad7216c0cf53e8c0c8de886fd88ff69cb
Barrel 0.1.0
Automated build from commit 6b5b7f9e2878842606061a38103ea4a00c45227e