Skip to content

Releases: DghostNinja/barrel-releases

Barrel 0.1.7

Choose a tag to compare

@DghostNinja DghostNinja released this 05 Aug 15:56

Added

  • APK Pull — new Pull button beside Uninstall on each package row. Resolves the on-device APK via pm path <pkg>, pulls it with normal adb pull, and falls back to adb exec-out su -c cat writing 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's hide_window-hardened runner, so no cmd popups on Windows.
  • Tool path auto-resolve on detectdetect_tool now unwraps Barrel's ~/.local/bin wrappers 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-recursionapply_tool_wrappers and create_adb_wrapper could write a wrapper whose exec target 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 numberfrida --version timing 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_version now 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 emulatorsfrida_start_server now starts with the su -c '<server>' & form (outer &, survives adb exit, the command that works on Android Studio emulators), then Magisk-style nohup inside su, then plain shell-user as a last resort — checking pidof between attempts so it stops as soon as the server is up as root.

Barrel 0.1.6

Choose a tag to compare

@DghostNinja DghostNinja released this 04 Aug 18:09

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_file Rust backend command — reads any device file via adb exec-out su -c cat with plain cat fallback.
  • Screenshot preview modal — capture device screen via adb exec-out screencap -p | base64 and 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 switchingflushOutput() now checks offsetParent before 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 :focus state 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 proper addEventListener — module-scoped functions can't be called from attribute-based event handlers.
  • Proxy verify ran curl on deviceadb_verify_proxy was running adb shell curl which fails on most Android devices. Changed to run curl on the host machine (detected at launch) against the proxy. Works on all platforms.
  • Splash screen freeze on hanging binariescheck_launch_components version checks ran --version with no timeout. A hanging binary (e.g. pipx frida circular symlink) blocked splash forever. All checks now use run_with_timeout_bytes with 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 --version to hang. Permanent fix: standalone Python script at ~/.local/bin/frida imports 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, firing logcat-ended and stopping the tab a few seconds after Start. Now reads raw bytes via read_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_ERRORadb_uninstall_package now falls back to adb shell pm uninstall --user 0 <pkg> when the legacy adb uninstall fails. Newer Android rejects plain all-user uninstalls for device-admin packages, and older adb clients don't support adb uninstall --user — routing through the device's pm makes 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 shell commands. An earlier attempt fed every device command through adb 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, then sh: <stdin>[2]: 1: inaccessible or not found), and the same orphaning silently broke cmd package resolve-activity ... <pkg> and am start ... -p <pkg>, which is why Launch always bottomed out at monkey. The fix: every device command is now passed to adb shell as a single argument (adb shell "<cmd>") — the exact delivery the app's adb_shell command 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 -n prints Warning: 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 where resolve-activity returns nothing, and monkey -p <pkg> 1 runs 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 F to R to avoid conflict with Files tab. Both had "F" as their single-character icon.

Barrel 0.1.5

Choose a tag to compare

@DghostNinja DghostNinja released this 23 Jul 23:14

Added

  • Browse button per tool path row in Settings — opens native OS file picker via tauri-plugin-dialog, populates input with selected path
  • path_exists Rust command for client-side path validation on save

Changed

  • Custom commands (exec_command) now use cmd /C on Windows instead of bash -c — fixes "no devices/emulators found" for ADB commands on Windows
  • adb_logcat_create made async — 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-ok was 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() to adb_screenrecord_start, adb_screenrecord_stop (SIGINT), and adb_mirror_device
  • Windows cmd popup for logcat PID lookup: added hide_window() to adb_get_pid in logcat.rs
  • Windows cmd popups for tool detection: added hide_window() to both which/where calls in detect_tool (settings.rs)

Barrel 0.1.4

Choose a tag to compare

@DghostNinja DghostNinja released this 22 Jul 17:23

Added

  • WSL support: detects Windows ADB via cmd.exe /c where, scans Downloads/platform-tools* dirs, creates bash wrapper ~/.local/bin/adbadb.exe so 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 am intents. 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-bg CSS 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::symlink calls not gated behind #[cfg(unix)]
  • Launch screen update fetcher: replaced bare curl call with find_binary("curl") + wget fallback so it works on systems without curl
  • WSL ADB "Invalid argument" error: replaced symlink with bash wrapper script (exec 'adb.exe' "$@") — WSL interop for .exe symlinks is unreliable, bash wrapper works consistently
  • Font size preset buttons not responding: missing data-fsval attribute prevented slider from matching active preset
  • Theme state not persisted on Save: added dark_mode field 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 collapsed class so arrow points right when section is closed
  • Intent Sender now uses Command::arg() instead of bash -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_shell Rust command instead of exec_command — no bash dependency, 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) with backdrop-filter: blur(8px); inputs use background: transparent. <input> elements don't support backdrop-filter cross-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) to adb_logcat_create in logcat.rs — the spawned adb logcat process was missing CREATE_NO_WINDOW flag.
  • Tab drag-and-drop on Windows/macOS: added dragenter event listeners with preventDefault() to shell/logcat tabs and tab bars. WebView2 and WKWebView require preventDefault() on dragenterdragover alone was silently cancelling drops.
  • Tab bar dragenter: tab bar containers in both shell.js and logcat.js now have dragenter handlers 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

Choose a tag to compare

@DghostNinja DghostNinja released this 22 Jul 13:50

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: expandTreeToPath now 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

Choose a tag to compare

@DghostNinja DghostNinja released this 22 Jul 11:43

Automated build from commit 9dc0b28cbbd786067faadab95833d0b3d7c65ccf

Barrel 0.1.1

Choose a tag to compare

@DghostNinja DghostNinja released this 21 Jul 10:29
b696b32

Automated build from commit 39a0191ad7216c0cf53e8c0c8de886fd88ff69cb

Barrel 0.1.0

Choose a tag to compare

@DghostNinja DghostNinja released this 15 Jul 01:02
87fa794

Automated build from commit 6b5b7f9e2878842606061a38103ea4a00c45227e