A log analyzer for files that don't fit in memory, with filters that nest.
A from-scratch reimagining of TextAnalysisTool.NET for Windows.
Download · Filters · Reading the log · Fields · Files · Settings · Keyboard
- Matches a substring, a .NET regular expression, or marked by marker 1–8.
- A line is shown when an enabled include matches it and no enabled exclude does.
- Colour, background, bold, italic and underline are each on, off, or inherited.
- A child narrows its parent:
[ERROR]→payment-svcmeans errors, in payments only. - A child matches a line only if every one of its ancestors matches it too — whether or not those ancestors are switched on.
- So switching a parent off does not stop it narrowing its children: you can scope a branch without showing everything the parent matches.
- A line takes its colour from the first filter in the list that matched it, refined by whichever of that filter's own descendants matched too — never by a filter in a branch further down, however deeply nested.
- Whatever the winning filter leaves unset it inherits from the filters above it, so a filter with no colour of its own draws the line in the view's default colours.
- Nest with
Alt+→, or by dragging.
- Count is how many lines in the whole file match, not how many are on screen.
Shift+Spaceswitches a filter's whole subtree on or off.- The list docks to any edge of the window, or hides altogether (
Ctrl+Shift+L).
Ctrl+Nturns the text you have selected inside a line — or the whole line under the caret — into a filter.
- I'm feeling lucky picks a legible colour pair that no other filter is using; Paint chips… shows the rest of the palette.
- A filter with no colour of its own leaves no mark on the match map.
- Select several filters and enable, disable, delete, duplicate, reorder, nest or recolour them in one go.
- Dragging carries the whole selection, nesting and all.
Ctrl+Zundoes filter edits, drags included.
Ctrl+Esearches the list without hiding or reordering it — non-matching filters dim rather than disappear.F4/Shift+F4walk the log through the selected filter's matches, without changing which filters are on.
- A preset names a combination of filters — the payment incident, the slow queries.
- The tick applies a preset; the highlight only says which one the commands act on.
- Ticking two gives you both, and ticking one moves only its own filters — anything you switched on by hand stays as you left it.
Ctrl+Hswitches between dimming the lines that didn't match and hiding them altogether.- Line numbers are always the file's own, either way.
Ctrl+Fsearches the text, literal or regex, marking every occurrence on screen as you type.- Find works on every line, not just the shown ones: hits on hidden lines are counted separately, and it says so when a match lands on one.
- The scrollbar is replaced by the whole file at a pixel a line, in the colours the filters gave it.
- Unmatched stretches are compressed, so one error among ten thousand ordinary lines still gets a pixel of its own.
- Eight colours for marking lines by hand:
Ctrl+1…Ctrl+8on the selection. - The bare number keys
1…8then walk between the lines you marked,Shiftto go backwards. - Marked by marker N is a filter type, so lines you picked out by hand can be treated as a category.
- Hovering a line names every filter that matched it — including the ones that are switched off.
- File ▸ Save Current Lines… writes out exactly what the filters are showing.
- Edit ▸ Copy with Line Numbers copies the file's own line numbers along with the text.
Long lines are either wrapped (Alt+Z) or split into fields you can hide and reorder.
Ctrl+Shift+Csplits every line into fields for display, guessing a template from the line under the caret.- Filtering and searching always run on the whole raw line, so this can shorten a line but never hide one.
- A line the template does not match is left whole and untouched.
A template is a picture of your line: write one out, replace what changes with *, and wrap each field in { }.
your line: [2026-08-05T05:00:02][BthPort][INFO] WDF PnP state: started
template: {[*]}{[*]}{[*]} {*}
* |
the text that changes — matches as little as it can, up to whatever you wrote next |
{ } |
one field: the unit that gets hidden or moved, punctuation and all |
| anything else | has to be there, except a run of spaces, which matches any run of spaces |
\ |
makes { } * \ ordinary |
- Punctuation goes with the field, so hiding the middle of
[a][b][c]leaves[a][c]rather than[a][][c].
- Columns lays the fields out as a table: drag a header to reorder, double-click it to rename, right-click for the list of which fields are shown.
- Inline keeps every row a line and leaves out what you hid — better when one field dwarfs the rest.
- A strip of chips stands in for the header: click one to put a field away or bring it back, drag it to move the field along the row.
Ctrl+Shift+Dtries the template against real lines from the file: how many of them match, and where a line that doesn't stopped matching.- Detect writes the template for you when the line begins with bracketed groups:
[ ],( )or< >.
- Drop a log on the window, hand it to
Cascade.exeon the command line, or use Open from Clipboard for one you have pasted from somewhere else. F5re-reads the file, for when you have just re-run whatever produced it.- Dropping a
.cascadeor.tatfile loads its filters instead of opening it as a log. - The file is memory-mapped and indexed as it streams, four bytes a line: a 1 GB, 10-million-line log is on screen in milliseconds and fully indexed in under half a second.
- A byte-order mark is honoured; without one, UTF-8 is assumed.
- View ▸ Encoding reads the file again as UTF-16 or UTF-32 (either endianness), Windows-1252 or the system code page.
.cascadeis JSON — the filter tree with its styles, the presets, and the field template — so a filter set diffs well in source control.Ctrl+Ssaves the set you have; File ▸ Append Filters… merges another set into it.- TextAnalysisTool.NET
.tatfiles are imported, flattened to top-level filters. Saving is always.cascade.
- File ▸ Settings ▸ Export / Import moves your preferences to another machine.
- Preferences in
%APPDATA%\Cascade\settings.json, machine-local state instate.json, and nothing at all in the registry.CASCADE_SETTINGS_DIRmoves the folder.
Cascade.exe [file] [/Filters:<path>]
/Filters:also stops the last-used filter file being loaded automatically.CASCADE_UPDATE=offturns off the update check.
Download Cascade.exe and run it — a single file, no installer.
curl.exe -fL --remove-on-error -o Cascade.exe https://github.com/rahul-ramadas/Cascade/releases/latest/download/Cascade.exe- Needs Windows and the .NET 10 Desktop Runtime. It updates itself.
- Draws with GDI rather than a GPU, so it stays quick over a remote desktop.
Log view
| Key | Action |
|---|---|
↑ ↓ PgUp PgDn |
Move the caret (Shift extends the selection) |
Ctrl+Home / Ctrl+End |
First / last line |
Ctrl+↑ / Ctrl+↓ |
Scroll a line without moving the caret |
← → / Home End |
Scroll sideways / to the far left and right |
| Drag, double-click, triple-click | Select part of a line, a word, the whole line |
Ctrl+A / Ctrl+C |
Select all / copy |
1…8 / Shift+1…8 |
Next / previous line with that marker |
Ctrl+1…Ctrl+8 |
Toggle that marker on the selection |
Ctrl+wheel |
Zoom |
Filter list
| Key | Action |
|---|---|
Space / Shift+Space |
Enable or disable the selection / their subtrees |
Enter / Delete / Ctrl+D |
Edit / remove / duplicate the selection |
Shift+↑ ↓ / Ctrl+↑ ↓ / Ctrl+Space / Ctrl+A |
Extend, move through, add to, or take the whole selection |
Alt+↑ ↓ ← → |
Move, nest and un-nest |
F4 / Shift+F4 |
Next / previous line matching the current filter |
Ctrl+E, then Enter / Shift+Enter / F3 |
Search the list and walk the matches |
| Double-click a filter / the empty space below | Edit it / add a new one |
Global
| Key | Action |
|---|---|
Ctrl+O / F5 / Ctrl+S |
Open / reload / save filters |
Ctrl+Z / Ctrl+Y |
Undo / redo a filter edit |
Ctrl+F / F3 / Shift+F3 |
Find / next / previous |
Ctrl+G / Ctrl+H |
Go to line / show only filtered lines |
Ctrl+N |
New filter from the selection or the current line |
Ctrl+E |
Search the filter list |
Ctrl+M / Alt+Z / Ctrl+Shift+C |
Match map or plain scrollbar / word wrap / split lines into fields |
Ctrl+Shift+X / Ctrl+Shift+D |
Switch field layout / field settings |
Ctrl+Shift+P / Ctrl+Shift+L |
Show or hide the presets pane / the filter list |
Ctrl+Shift+T / Ctrl+Shift+F |
Focus the log view / the filter list |
Ctrl+Shift+↑ ↓ ← → |
Dock the filter list |
Ctrl++ / Ctrl+- / Ctrl+0 |
Zoom in / out / reset |
Tab |
Move between the log and the filter list |
Esc |
Stop a search, then close the bar and clear its marks |
dotnet build Cascade.slnx -c Release
dotnet test tests/Cascade.Core.Tests/Cascade.Core.Tests.csproj # engine tests
./scripts/Run-UiTests.ps1 -Publish # UI automation, off-screen
./scripts/Build-DocImages.ps1 # every picture above, from the app- .NET 10 SDK.
src/Cascade.Coreis the UI-agnostic engine — indexing, filtering, find, markers, columns, persistence — andsrc/Cascade.Appis the WinForms GUI.
MIT © 2026 Rahul Ramadas.




















