KillerShell v1.0.0
KillerShell 1.0.0 is KillerFind 2.0.0 under the name it should have had. The 1.x line was a search box that happened to list files. This release is a shell for power users: a file browser, a terminal and a text editor sharing one window, one keyboard and one tab strip, still a single portable exe with nothing to install. Search became one of the things it does rather than the whole of it, so the name went with it. Nothing is removed and no setting moves - it is the same codebase, renamed, versioned from 1.0.0 because the product it describes starts here.
Added
- Windows knows what KillerShell is now. A File associations card under the theme flyout registers the app with the shell: a ProgID, an entry in the Open With list for the 19 text types the editor handles, "Open in KillerShell" and "Open KillerShell terminal here" on any folder, drive and folder background, and the Capabilities block that puts KillerShell in Settings under Default apps. Per-user by default, all-users when the window is elevated, and taken back out by both uninstall paths so a ProgID never outlives the exe it points at. Registering is all it does: since Windows 8 the
UserChoicekey has been protected by a signed hash, so an app that sets itself as the default is either forging that hash or lying about it. The card says so and hands you to Settings, which is the only place the switch can honestly be thrown..bat,.cmdand.regget an "Edit with KillerShell" row rather than the open verb, because their double-click runs or merges them and quietly changing what that means is how someone loses an afternoon. - A path on the command line opens.
KillerShell.exe "C:\some\folder"browses it andKillerShell.exe "C:\some\file.log"opens it in an editor tab, which is what makes the shell verbs and the associations above actually do something. Without it every one of them would have launched the app on Home and ignored what it was asked for.--shelland--cwdtake a value, so their value is skipped rather than opened a second time as a tab. - A text editor, in a tab. Open any file with F7, the results menu's Edit row, or a double-click on the prompt script. It is AvalonEdit, vendored as source into
third_party/AvalonEditand compiled into the exe, so KillerShell is still one portable file with no runtime to install - it costs about 640 KB. Syntax highlighting, line numbers, undo, Ctrl+F find, Ctrl+G go to line, Ctrl+S save, and a right-click menu (AvalonEdit ships with none at all). Word wrap is on by default. The whole vendored tree was audited to zero compiler warnings on the way in, without suppressing any. - A blank document from the rail. The pencil above the terminal button opens an untitled document in a new tab in the focused pane, for the note or the throwaway script that has nowhere to live yet. Nothing is written to disk until you save it - the first Ctrl+S is the one that asks where, and naming it is also what gives it highlighting, so a scratch buffer saved as
.ps1comes back colored. It follows the same BOM rule as any other new file, so a script Windows PowerShell has to read gets one and a.txtdoes not. - Encoding is preserved, never invented. A file is read by inspecting its bytes rather than through AvalonEdit's own loader, which hands back a UTF-8 encoding that writes a BOM - so a plain
.txtor.batwould have silently grown three bytes at the front the first time it was saved. A BOM present is kept, a BOM absent stays absent, and bytes that are not valid UTF-8 fall back to the system ANSI codepage instead of being replaced with U+FFFD. The document bar shows the encoding and the line ending, because a script PowerShell 5.1 will read depends on both and neither is visible in the text. - Edit your PowerShell
$PROFILEfrom the rail menu, a shell's right-click menu, or Ctrl+comma. The submenu lists the hosts actually installed, because PowerShell 7 and Windows PowerShell do not share a profile and editing the wrong one is most of the "why is my profile not loading" in the world. The path is obtained by asking the shell binary for$PROFILE.CurrentUserCurrentHostrather than assumingDocuments\PowerShell\- on a machine where OneDrive has redirected Documents, which on a managed fleet is most of them, the assumed path is a file the shell will never load. A missing profile is created. - Syntax highlighting for the formats a field tech actually opens:
.bat/.cmd,.reg,.ini/.conf/.cfg/.inf,.yml/.yaml,.logand.csv/.tsv. AvalonEdit ships none of these, so they are hand-written and embedded. The registry one colors a key deletion and a value deletion in the danger color, since both are one character away from the line that merely sets something. The log one lights severity words, timestamps, GUIDs, error codes and paths, and leaves everything else as body text on purpose. - Three toolbars, one per kind of tab. A folder tab keeps the location row; a shell tab gets its own bar with the live working directory (tracked from OSC 7, click it to open that folder as a tab) plus new shell, elevate, open folder here, clear and fonts; a document tab gets save, undo, redo, find, go to line, wrap, a settings flyout, the full path and the encoding readouts. The location row is hidden on the latter two, where back, forward, up, the star and the sort and view buttons all act on a listing that is not on screen.
- Editor settings behind the gear: line numbers, highlight current line, show spaces and tabs, spaces vs tabs, and indent width. All app-wide and applied to every open document at once, because they describe how you read code rather than what one file is.
- An editor font slot in the Fonts dialog beside the app and terminal ones, filtered to fixed-width faces, with its own size slider. Ctrl+wheel over a document moves the same value.
- The prompt renders on a machine with no Nerd Font. No monospaced font Windows ships has the powerline separators or the git branch mark, and Consolas does not even have the prompt's chevron, so on a fresh machine the shipped prompt was a row of boxes. The exe now carries
Fonts/KillerGlyphs.ttf- 26 glyphs, 2,928 bytes - and the terminal draws a cell from it only when the font the user actually chose has no glyph for that codepoint. Their font choice is untouched; it just stops being able to fail on those glyphs. The fallback glyph is stretched to the chosen face's cell width, because a powerline separator is a solid triangle that has to butt against the next cell and the two faces have different advances. It also covers↑and↓, which the prompt draws for git ahead/behind and which ProFont IIx is missing. Bundling a whole Nerd Font would have cost 2.6 MB, 99% of it icons no prompt draws. KillerGlyphs is a subset of Terminess Nerd Font (SIL OFL 1.1, renamed as the licence requires of a modified version) - seeFonts/KillerGlyphs-NOTICE.txt. - File operations. Cut, copy, paste, rename, delete and new folder, from the keyboard, the context menu or a drag. Copy and move run off the UI thread with a themed progress card showing the current file and a real byte count, and a collision stops to ask - showing both files' size and date - with Replace, Skip or Keep both, and a "do the same for the rest" checkbox. The worker genuinely waits on that answer, so nothing is copied while the question is on screen. A move within one volume is a rename, so it is instant at any size; across volumes it copies then deletes, and only once the copy has landed. Delete sends to the Recycle Bin and Shift+Delete destroys, which is the one that asks first. Recycling is the single call that goes to the shell, because there is no other way into the Recycle Bin - and it is also what puts the operation on Explorer's undo stack, so Ctrl+Z there brings the files back.
- Drag and drop both ways. Dragging out of KillerShell now offers move as well as copy, so a Shift-drag into Explorer moves instead of silently copying. Dropping onto a browsed folder does real file work with Explorer's modifier rules: Shift moves, Ctrl copies, and neither means move within a drive and copy across drives. Files already in the target folder are ignored rather than prompting about a collision with themselves, and a folder cannot be dropped into its own child. On a search tab a drop still sets the scope or pipes the files, since there is no folder to drop into.
- A visual keyboard on the shortcuts card. F1 now opens on a LIST / KEYBOARD toggle, remembered between sessions. The keyboard draws a full board with every bound key lit in its category color, the action printed on the cap, and a caption that scrolls when it does not fit; hovering prints "CATEGORY :: action" underneath. Layer buttons switch between the base, Ctrl, Ctrl+Shift, Shift and Alt maps, and holding a real modifier previews that layer, so a chord can be found by pressing Ctrl rather than by reading. The list view is grouped under colored headings in two columns instead of one twenty-row wall. Both views are generated from one table, so a new binding shows up in both rather than being hand-copied into the card.
- Explorer's keyboard conventions. Alt+Left and Alt+Right go back and forward, Alt+Up goes up a folder, and Backspace goes back - none of which had a binding before, so Back and Forward were reachable only by clicking. F4 joins Ctrl+L for the address bar, Ctrl+A selects every result, F2 renames, Delete recycles, Shift+Delete destroys, Ctrl+Shift+N makes a folder, and Ctrl+X / C / V move files around.
- F12 opens the About card, matching KillerPDF. It was previously reachable only by clicking the version in the footer, which nobody finds by accident.
- A "?" on the rail above the globe, where KillerNotes and KillerScan put theirs.
- Browse mode. A tab opens at Home and lists what is there; double-click enters a folder or opens a file. Browsed entries land in the same collection as search results, so every view, sort, filter and command works on them unchanged. Listing runs off the UI thread.
- Folder tree down the left, rooted at This PC, open by default. Children load on expand, the tree follows wherever you navigate, and its width is draggable and remembered.
- Address bar with Back, Forward and Up, tracked per tab. Click it, Ctrl+L or Alt+D to type a path; Ctrl+O still opens the folder picker.
- Favorites drawer under the tree. Rail star or Ctrl+B to open, Alt+1 to Alt+0 to jump to the first ten, drop a folder on it to save it.
- Three view modes: list (expandable cards), icons (32px to 256px tiles) and details (sortable, resizable columns). Icons run on a virtualizing wrap panel, so a 100,000-hit search in tiles stays usable. Details columns resize by dragging any divider, on the rule Explorer uses: the divider sizes the column to its left and nothing else, and the columns to its right keep their widths and slide over. Double-click a divider to put its column back to the width it shipped with. Every column carries its own width with a filler after the last one taking the slack, so a drag can never move a column you were not pointing at. Widths are remembered between sessions, clamped so the last column can never be pushed off the edge, and the header and the rows read one shared set of them - so both panes stay in step and no row can drift out of line with its own heading.
- The real Windows context menu, under "More Windows options...", plus Properties. Shell extensions, Send To and the full Open With list all included, drawn as the native Win32 menu.
- New context-menu commands: copy the full path, file name, folder path, matched lines, the file itself or a SHA-256; open as administrator; search inside this folder; exclude this folder. All act on the whole selection.
- Marquee selection and drag out. Drag from an item to drop those files into Explorer or a mail client; drag from empty space to rubber-band a selection.
- Show hidden items and keep folders above files toolbar toggles, both remembered.
- Czech and Japanese, taking the UI to ten languages.
- Install for all users checkbox on the install prompt, putting KillerShell in Program Files with a Start Menu and Add/Remove Programs entry for every account. It routes through the same machine-wide
/silentinstall winget, choco and RMMs already use, so UAC appears only when the box is ticked. Installing this way removes an existing per-user copy, so there is only ever one install and one uninstall entry, and your theme, accent, language and tabs are kept. Pre-ticked and locked if KillerShell is already installed machine-wide. - WinGet submission workflow (
.github/workflows/winget-release.yml): publishing a GitHub release submits the new version to winget-pkgs via komac, the same way KillerScan does it. The first submission still has to be made by hand withkomac new. - Release date in the About card, muted and italic beside the version, so a build's age is visible. It comes from a new
<ReleaseDate>field in the csproj, baked into the assembly as metadata so it survives being copied around, andrelease.ps1fails the release if it does not match this version's CHANGELOG date. Older builds without the field just show the version. - The signer's alias under the publisher in the About card:
AKA "Steve the Killer", shown only when the exe is signed by Stephen Riley. Unsigned builds and forks signed by anyone else do not get the line. --demoalso renders the About card in its signed state (publisher, thumbprint, alias), so marketing captures taken from an unsigned local build match the released one. The values are the real certificate's, not invented.- App-wide accessibility zoom: roll the wheel over the title-bar wordmark to resize the whole app, about 2% per notch between 70% and 250%, remembered across restarts. It is a
LayoutTransform, so text reflows and re-rasterizes crisply rather than being bitmap-stretched, and the title bar and footer stay put so the wordmark never moves under the pointer. The wordmark also drags the window and double-clicks to maximize; its old link to killershell.net moved to the About card. - F1 opens a shortcuts card listing every gesture in one place, translated into all ten languages. The pattern cheat-sheet is still one click away on its own button. Ctrl+Right and Ctrl+Left expand and collapse every result (skipped inside a text box so Ctrl+arrow keeps its word-jump meaning), Ctrl+Shift+F pipes the results into a new tab, Ctrl+Shift+L clears them, and Ctrl+Shift+C toggles case-sensitive matching.
Changed
- The results pane is its own control now (
FilePane). It was six hundred lines inside MainWindow.xaml, which was fine while there was one of it; the dual-pane split needs two, and two copies of a six-hundred-line pane drift apart the way the two panel-slide animations did before they were shared. The markup moved out untouched and every named control is reached through onePaneproperty, so a second pane is a layout change rather than another sweep through every file. - F5 is Refresh rather than Run search, which is what it means everywhere else in Windows. It refreshes whatever the tab is showing: a browsed folder re-lists off disk, a search tab re-runs. Enter still runs a search, so nothing was taken away.
- Ctrl+E puts the caret in the search box, as it does in Explorer. Export moved to F9 for HTML and Shift+F9 for CSV, because F8 went to the shell - a primary feature deserved the key you can reach without looking, and export is not something you press twenty times an hour. Adding a filter moved from Ctrl+Shift+N to Shift+F7, because New Folder wanted its Explorer chord back and bare F7 belongs to the editor.
- The status bar's indicator is a real traffic light. It was green for "fine" only in the comment describing it; the code used the accent brush, so "fine" rendered as whatever accent you had picked and the dot carried no information unless something had gone wrong. There is a proper
OkBrushin all six themes now. - The funnel is hidden while browsing. Over a folder listing it reads as "filter these rows" and then surprises you with a new tab; over search results, which is what it was built for, it reads correctly.
- "as found" disappears from the sort list while browsing. It is the engine's discovery order, which only exists because a search streams hits in as it walks - a folder is enumerated in one pass, so there is nothing to show and name takes over.
- The search panel moved to the right edge and starts closed; the left is the folder tree's now. The rail chevron or Ctrl+Shift+S opens it, and the choice is remembered.
- Browsed folders track the disk. The active tab is watched, so a file deleted in another window disappears here too. Events are debounced, and a burst past 200 paths relists instead of patching entry by entry.
- Details view hides the location column while browsing, where it repeats the same folder on every row. Search results keep it.
- A new tab always opens in the pane you are looking at. A shell used to open in the other pane, and open the second pane if there was not one, so F8 did a different thing depending on where the focus happened to be and could rearrange the window on you. Shells, documents and folder tabs all land in the focused pane now. If you want a shell beside a folder, F11 and put it there - predictable beats tidy.
- The tab strip stops shredding titles. Tabs shared the bar equally however many were open, so eight in a half-width pane came out around forty pixels each -
~\D_ x, which is not a label, it is a shape. The count is capped instead of the width now: as many tabs as fit at a readable floor stay in the strip, and a chevron at the right end lists every tab, hidden ones included, to jump straight to one. The visible run always includes the tab you are on, and each pane windows its own strip, since the two are different widths. - Ctrl+wheel resizes the icons in list and details view too, not only the tile grid. Rows step a shorter ladder than tiles - 16px to 64px against 32px to 256px - because a row is a line of text with a marker beside it, and past 64 the icon is setting the row height rather than telling you anything. Both row views share one size, remembered separately from the tile size, and the icon is refetched at each step rather than being a stretched 32px one.
- The About card now matches KillerScan, KillerNotes and KillerPDF: the family's matte pane brush, field spacing and type sizes, EXE SHA-256 as the hash label in every language, a wrapping thumbprint and no duplicate copyright footer. The tagline reads "Fast file search for Windows. Names, contents, wildcards and filters, with no index. A GPLv3 Killer Tools utility.", with Killer Tools linking to killertools.net and GPLv3 and the product name composed in the layout rather than baked into each translation. The card's width now comes from the SHA-256 line instead of a fixed 468px, so a long tagline wraps rather than widening it.
release.ps1brought up to the family standard. It was build / sign / hash / print; it now runs a preflight (default branch, clean tree, in sync with origin, tag free locally and remotely, CHANGELOG section dated), scans for vulnerable packages, checks the built FileVersion against the csproj, tries three timestamp authorities and gates onsigntool verify /pa, rewrites thefind-landinghero block, the verEgg footers and the README source-zip link, then tags and publishes the release with the exe, source zip and SHA256SUMS.txt.-DryRunskips the pushes and leaves the working tree untouched.
Fixed
- F7 never opened the editor. Two branches of the same keyboard chain both claimed the key, and the one that came first - add a filter - had no modifier guard, so it swallowed every F7 and the editor's branch below it was unreachable code. Pressing F7 added a filter row while the shortcuts card, the results menu's gesture hint, the README and the how-to page all said it opened the file. The editor has the bare key now and adding a filter moved to Shift+F7, which is the pattern the shell and export keys already use.
- The focus ring came out uneven around the active tab. The ring is four elements - the pane's border, the line across the tab band, the tab's own outline and the band's two verticals - and on a first or last tab the outer side was drawn twice, by the band and by the tab. Two 1px borders at the same x is a 2px edge on a ring that is 1px everywhere else, and only sometimes: whether the tab's own outer border cleared the strip's clip depended on how the bar divided a fractional width, so it changed as you moved the split. The tab drops the side the band already owns, and the ring is 1px all the way round.
- The details column headings hung around over shell and document tabs. Whether that band showed was decided by the view mode alone, which knows nothing about what kind of tab is on screen, so switching to a terminal or an open file while in details view left a row of name / location / size / modified sort buttons floating on top of it, sorting a listing that was not there.
- "Keep folders above files" did nothing. Listings enumerated folders and then files, so the default "as found" order was already grouped and turning the toggle off changed nothing visible. One interleaved pass now, with the grouping left to the view.
- File-type icons were slightly soft, and visibly blurry once the app-wide zoom was turned up.
IconCacheasked the shell for the SMALL icon (16px) while the row draws it at 18px, so it was stretched even at 100%. It fetches the 32px icon now. - The separator in the title-bar system menu drew as Windows' stock bright gray 3D line instead of the themed hairline. Inside a menu WPF resolves
MenuItem.SeparatorStyleKeyrather than the app's implicitSeparatorstyle, and that key was never registered, so every themed menu separator fell back to Aero. Registered now, as it already is in KillerScan and KillerNotes. - The README had no GPL3 corresponding-source link.
release.ps1rewrites that link on every release, but there was nothing for its pattern to match, so the step reported success while doing nothing and the published binary shipped with no link to its source. The Download section carries it now. - Spanish, French and Turkish were missing every accented character, having been authored as pure ASCII ("busqueda", "Demarrer", "kullanici"). All three have been rewritten with proper text.
+ add groupwas never translated: the key existed inen-US.xamland in no other locale file, so every non-English user saw the English label. All locales sit at full key parity now.- The in-app updater silently did nothing on a machine-wide install. Program Files is not writable by a normal user, and the update helper ran unelevated with no errorlevel check, so the copy failed and it relaunched the old exe with no error shown. It now checks the copy, elevates when the target needs it (one UAC prompt), opens the releases page on a genuine failure, and relaunches via Explorer so the app returns at normal integrity rather than continuing as administrator.
- A search that matched a lot of files made the window unresponsive. The engine drained its whole result queue into one dispatcher callback every 150ms, and a callback cannot be interrupted once it has started, so a broad term became one uninterruptible block of work with no slot for input. Batches are capped at 250 now, with a backlog drained by posting slices back to back, so throughput is the same and only the length of any one callback is bounded.
- The app-size readout parked itself on the status bar at any scale other than 100%, and repainted on every launch. It is transient now: each wheel notch shows the percentage and restarts a five second timer. A scale restored at startup applies silently, and rolling back to exactly 100% clears it at once.
- Sorting could stall the window on a search that returned a lot of hits. The sort lived on the collection view, so every arriving result was a binary search plus an insert into the middle of the list, and tens of thousands of them worked out to roughly a billion element moves on the UI thread. The sort is suspended for the length of a run and applied once at the end; results stream in discovery order while the search is live, and changing the sort mid-run reorders on completion.
Previously released as KillerFind
KillerShell 1.0.0 is the release that would have been KillerFind 2.0.0; its changes are listed above. Everything below shipped under the old name and is kept for provenance - the GPLv3 corresponding source for each of these is still on the KillerFind releases page.
KillerFind 1.0.0 - 2026-07-04
Added
- Tabs: each tab is a full independent search (folder, terms, filters, results); drag to reorder, optionally remembered across restarts.
- Filters: extension / date modified / size rows, AND-ed with the search terms.
- Search within results: pipe one search's results into a new tab and drill deeper (funnel button or tab right-click).
- Ctrl+F quick filter over results, plus in-app sorting by name / location / size / modified.
- CSV export alongside the HTML report; the report gained the six-theme + accent switcher and sortable columns.
- Explorer-style folder picker: quick places, list / icons / details views, sortable columns, remembers size and placement.
- Per-user installer with PORTABLE badge, plus
/silent(machine-wide) and/uninstall. - Smart Esc: closes popups, stops a running search, then offers to quit (choice can be remembered).
- Pattern cheat-sheet card; plain-text patterns now just work (
logmatches*log*). - UI in 8 languages (en, es, de, fr, tr, zh-CN, zh-TW, bn).
--demomode with fabricated results for screenshots. You think I'm gonna let you see my real files?
Changed
- Reskin to the shared KillerUI "Grunge" theme: custom chrome, multi-theme switcher with Dark/Blue default, film grain, typewriter wordmark, and a UI refresh throughout (real file icons, collapsed-by-default results, themed dialogs and menus).
- Multicore search engine: the scan parallelizes across cores with precompiled patterns; the window stays responsive mid-search.
- Searching with no folder selected opens the folder picker instead of an error.
Fixed
- Name terms without wildcards now match as contains instead of silently matching nothing.
KillerFind 0.1.1 - 2026-05-04
Added
- Code signing on the release binary (Certum).
find-landingmarketing site.
KillerFind 0.1.0 - 2026-04-26
Added
- Initial release. Fast file search for Windows with no indexing:
- Filename search with wildcard patterns (
*.log,report_*.xlsx). - Content search that streams files line by line without loading them into RAM, skipping likely-binary files (null byte in the first 4 KB).
- Multiple search terms in a single pass, each independently tracked.
- Include / exclude filters with semicolon-separated patterns (
*.txt;*.log,bin;obj;*.min.js). - Case-sensitive toggle.
- Real-time streaming results (batched every ~150ms) with matched line numbers; click a result to open the file or reveal it in Explorer.
- HTML export of results.
- Dark terminal-style UI, single portable exe, no installer.
- Filename search with wildcard patterns (
- Targets .NET Framework 4.8 (x64). GPL-3.0 licensed.