Repository navigation
New web UI: runs, presets, options and saved analyses - #1
Merged
Merged
Conversation
An image opened through the API (a script, the fvol MCP server) left the Quick Start over the workspace, so its runs could not be seen. The Quick Start now closes when the session changes under it. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Saved analyses: - A metadata file that cannot be read (damaged, too large, another format) is no longer written over, nor its result rows deleted: the dump opens without it, the session says why, and Previous lists it as unreadable. Deleting it there starts saving the open dump again. - Opening another image closes the runs of the one left (after saving them), so a restored run never shares its id with another image's run; rename, filter, cancel and remove acted on the wrong one. - open_image keeps the analysis lock until the new dump's analysis and runs are in place, and the analysis saves the runs of its own session: the background saver can no longer pair one dump with another's runs. - Result rows are written through a buffered file instead of a copy of the whole table in memory. - Saved options that no longer validate are reported instead of silently dropped; `fvol serve -o` wins over a saved output folder. UI: - Esc on a menu, the Options or Save Preset dialog or the Quick Start closes only that, not the results behind it. - Enter on a button inside a run, preset or saved-analysis row is that button's (Delete in Previous opened the analysis). - The process list, capture time and triage hints of the previous image are dropped when another image opens, and reloaded when the image reopens with new options. - Keyboard focus survives the per-second re-renders of the tab bar and the Runs panel. - Rule regexes ignore the g and y flags (test() kept lastIndex between processes); a late saved-rules answer no longer replaces rules loaded meanwhile. - Tree guides end at the last row of the table. - Removed core.js modal() and int0(), unused since the redesign. Unit tests get their own .fvol folder; new tests cover the batch, options, presets, rules and analyses routes and the two data-loss cases. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A redesign of
fvol serve: the web UI now works like a desktop forensics tool, with a startscreen, runs of several plugins, presets, every global
fvoloption, and analyses that aresaved and come back when a dump is reopened.
What changes
-fimage, browse for a new one (including thedesktop's own file dialog via kdialog/zenity on loopback), or reopen a previous analysis.
windows.infofacts,printed line by line), Plugins, Runs, and Triage Hints.
with six built-in sets (System Information, Windows Triage, Windows Malware and Persistence,
Linux Triage, Linux Rootkit Hunt, macOS Triage) plus the user's own (Save Preset).
replace the left two panels, a tab per plugin; one filter applies across a run's plugins and
is kept per run. Columns can be moved, resized and fitted; process trees draw proper guides.
fvoloption, each applied where the web UI has the same step(opening the image, each run, or the new fvol output export). See docs/web-ui.md.
~/.fvol/<dump_id>-metadata.json(dump path, size, mtime, options,rules, runs) plus each plugin's rows in
~/.fvol/<dump_id>/<run>/<n>.jsonl.dump_idis the~/.cache/fastvolimage key, so a reopened dump finds warm caches; results come back withoutre-running anything.
--clear-cachenever touches~/.fvol. Delete in Previous removes ananalysis (never the dump).
Behaviour changes to be aware of
fvol servenow writes to~/.fvolby default (0700 folder, 0600 files). Those fileshold case paths, options and result rows. If you would rather have this opt-in or add a
--no-saveflag, it is a small change: say which you prefer.--save-configonly into a run's outputfolder,
-lonly to a regular*.logfile (one line per run, control characters replaced).POST /api/sessionstill acceptssymbol_dirs; it now goes through the options (-son thecommand line still wins over an analysis's saved options).
/api/batches,/api/options,/api/rules,/api/analyses(withDELETE /api/analyses/<dump_id>),/api/presetsand/api/pick-file(all in docs/web-ui.md).UI.
/api/memand/api/disasmare still there.bench/web/serve.shgives test servers their ownHOME, so they never write thedeveloper's
~/.fvol(the caches stay shared).The project's rules
[dependencies]stays empty; the UI is hand-written HTML/CSS/JS with no build step.src/web,bench/web, docs and README.Tested
fastbuild warning-free on Rust 1.95;cargo test --profile fast --locked: 609passed, 109 ignored. One failure,
codecs::xz::tests::codecs_xz_real_isf, is unrelated andpre-existing: it only runs when
~/.cache/volatility3holds that ISF, and it hard-codes thechecksum of one particular conversion (the file embeds its conversion time).
from Previous; restored rows are identical to a fresh run and no plugin re-ran. Options
checked for their effect (
-e,--write-configoutput identical tofvol --save-config,-l,-r/--hide-columns,--parallelism off,--offlinereopening).bench/web/shots.py(rewritten for the new UI, with areadmestep and--scrubfor localpaths) and
bench/web/perf.sh(browser part ported) pass.bench/web/e2e.sh(needs the Linux testimage).