Repository navigation
Releases: OliverD25/cabinetos
Release list
CabinetOS 0.1.3
Added
-
Two more settings that could be changed only by editing
cabinetos.jsonnow have a command and a control in the window. The program F4 edits a file with (files.editor): "Preferences: Choose Editor" in the palette, a pick list of Windows' default, the programs of yourprogramslist and "Choose…" (a file dialog for an .exe), whose row names the editor in effect, and an "Editor" menu in the top row's menu with the same rows and the current one checked. The least important level the core logs (logging.level): "Diagnostics: Log Level" in the palette, a pick list of the five levels, and a "Log Level" menu in the top row's menu. Whichever way you change them, the file and the window follow at once. None has a key; every command can be bound. -
Three update settings that could be changed only by editing
cabinetos.jsonnow have a command and a control in the window. Looking for updates by itself (update.check): "Update: Toggle Automatic Check" in the palette, a "Check Automatically" row in the update pill's flyout (right-click the pill) and in the new "Update Settings" menu of the top row's menu. Installing a download at once (update.autoInstall): "Update: Toggle Automatic Install" and an "Install Automatically" row in the same two places. The channel (update.channel): "Update: Channel", a pick list of stable and preview, and a "Stable Channel" and a "Preview Channel" row in the same two places. The palette's rows say on or off and the channel in effect. "Update: Check for Updates" still checks now. None has a key; every command can be bound. -
Three terminal settings that could be changed only by editing
cabinetos.jsonnow have a command and a control in the window. The shell a new terminal starts with (terminal.defaultProfile): "Terminal: Default Profile" in the palette, a pick list of your profiles whose row names the one in effect, and a "Default Profile…" row in the menu of the dock's button after "+". Restoring the terminal tabs after a restart (terminal.restore): "Terminal: Toggle Restore Tabs on Start" in the palette and a "Restore Tabs on Start" check row in the same menu. The mode new terminals start in (terminal.defaultMode): "Terminal: New Terminals Start Locked or Linked" in the palette, one toggle whose row says "locked" or "linked", and a "New Terminals Start Linked" check row in the same menu. The menu is now always there, also with one profile. None has a key; every command can be bound. -
Quick View: press Space on a file to see it in a panel over the panes, and Space or Esc to close it. The panel shows the file's icon at once, then Windows' own thumbnail, then the full view of a viewer you installed from the marketplace; Up and Down walk through the folder while it stays open, and Enter opens the file in its program as before. Reach it three ways: the Space key, "View: Toggle Quick View" in the command palette, and the settings: when two viewers can show a kind of file, the panel's viewer button, "View: Choose Quick View Viewer…" in the palette or
quickView.viewersincabinetos.jsonpicks one (or none, for the thumbnail only). A file no viewer shows gets a quiet bar with a one-click install of the marketplace's viewer for it, and Space on a folder shows its size. CabinetOS ships no viewer itself; a viewer is a Tool Extension with the newquickViewkey in itstool.json. A viewer that hangs or crashes never holds up a key, and a file that is only in the cloud is never downloaded for its thumbnail. The core's protocol version is 21. -
Two Quick View viewers, the first ones: the Image Viewer shows JPEG, PNG, GIF (animated), WebP, AVIF, BMP, ICO and SVG fitted to the panel at full resolution, and HEIC, TIFF, JPEG XR and camera RAW through the codecs Windows has;
+,-,0and1, the mouse wheel and a drag zoom up to 800 % and move the picture. The Media Viewer plays MP4, M4V, MOV, WebM and MKV video and MP3, M4A, AAC, FLAC, WAV, OGG, Opus and WebA sound as soon as Space shows them, with the browser's own controls and the keysK(play or pause),JandL(10 seconds),,and.(1 second),M(mute),+and-(volume) and0to9(jump to a tenth of the length); Space still closes the panel. Both follow the window's theme, and a file whose codec this PC lacks gets a line that says so under its thumbnail. They are insdk/tools, and the marketplace index builds them as two tool items (build-index.ps1 -Viewers, for CabinetOS 0.1.3 and later), so the panel's one-click install finds them for a photo or a video. -
Two light themes ship with the core, Catppuccin Latte and GitHub Light, so a fresh install's theme picker has a light choice by name (the picker now lists seven themes). They moved from the theme collection: the collection no longer lists them, and a copy installed from the marketplace before stays as it is.
-
18 more themes in the theme collection for the marketplace (the theme gallery), all MIT licensed ports with every colour read from the theme's own repository: Everforest Dark and Light, Kanagawa, Rosé Pine, Rosé Pine Dawn, Nightfox, Dayfox, Vitesse Dark and Light, Flexoki Dark and Light, Oceanic Next, Spacegray, Moonlight, Poimandres, Andromeda, Quiet Light and Min Light. Modus Vivendi, Modus Operandi, Zenburn and Bluloco Light are left out because their licenses are GPL or LGPL. The collection has 52 themes, and the public
themes.jsonlists them.
Changed
- Space in a file pane now opens Quick View ("View: Toggle Quick View"), and marking the cursor row without moving the cursor ("Edit: Toggle Selection in Place", Total Commander's Space) moved to Shift+Space. Insert still marks and moves down. To have Total Commander's Space back, bind Space to "Edit: Toggle Selection in Place" and give "View: Toggle Quick View" another key.
Fixed
- The command palette no longer fails in the background when its list changes while it scrolls to the highlighted command, as happened on its first showing when a second answer or a key came before the palette was drawn; the highlighted command still comes into view.
- A copy, move or delete no longer sends progress records with a stopped clock. When a job's work ends, the core writes the undo journal before it reports the job done. On a busy PC that took several hundred milliseconds, and every progress record sent in that time carried the same
elapsed_mswhile the time went on. Now the final record is the only one after the work ends. The limit of 30 progress records per second was kept all along; only the time stamps were wrong.
CabinetOS 0.1.2
Added
- The theme gallery: the themes as colour tiles, each painted in the theme's own colours, with filters for dark, light, system themes, density presets and the installed ones (Windows' mode first), and a search. Selecting a tile previews the theme on the whole window with nothing installed or written, and Esc paints the theme in effect again. Enter or a double-click installs a theme and applies it. Open it with "Themes: Browse" in the command palette (
themes.browse; bind it to keys if you like) or the new last row of the theme picker, "Browse more themes…". If the themes catalogue cannot be read, the gallery shows your installed themes and says so. - Four settings that could be changed only by editing
cabinetos.jsonnow have a command and a control in the window. The layout (ui.layout): "View: Classic Layout", "View: Terminal on the Right" and "View: Activity Rail" in the palette, "View: Next Layout" on Ctrl+K Ctrl+L, and a "Layout" menu in the top row's menu that checks the current one. Hidden files (panes.showHidden): "View: Toggle Hidden Files" on Ctrl+K Ctrl+H, a "Show Hidden Files" row in the top row's menu, and the word "hidden" in the status bar while they are shown. The Explorer following the active pane (ui.sidebarAutoReveal): "Sidebar: Follow the Active Pane" in the palette, a pin in the Explorer view's header, and a "Follow the Active Pane" row in the top row's menu. Windows' own menu on Shift+right-click (contextMenu.shellMenu): "Menu: Toggle Windows' Shell Menu" in the palette and a check box at the end of "Edit Menu…". Each is the same change whichever way you make it: the file, the palette and the window follow each other at once. The palette's rows for them say "current", "on" or "off". - A click on the Name, Modified, Type or Size heading of a file pane sorts that pane by the column, and a second click reverses it. The sorted heading shows a small arrow. It is the same sort as Ctrl+F3 to Ctrl+F6 and the palette's "View: Sort by ..." commands, so the three ways agree; the order is the pane's own, and Type sorts by extension. A double-click on a heading still fits the column, and leaves the order as it was.
- A divider between the two file panes: drag it to give the left pane more or less of the width. The share is kept in the new setting
ui.paneSplit(0.2 to 0.8,nullfor equal), so it survives a resize of the window. A double-click on the divider and the new palette command "View: Equal Panes" (view.equalPanes, no key) make the panes equal again; editingui.paneSplitincabinetos.jsonmoves the divider. A pane never gets narrower than its columns need. - The sidebar's divider works in the classic layout and in the right layout too, not only in the rail layout. A drag still saves
ui.sidebarWidth, and a double-click on the divider gives the design's width back.
Fixed
- The plugin sandbox runs on wasmtime 49.0.2, which closes seven security advisories of 49.0.1 (RUSTSEC-2026-0321 to 0327: GC heap corruption through mis-typed tag imports or
try_call, a stack overflow through an unvalidated callback result count, a fuel bypass and three WASI faults). None was reachable without a plugin written to exploit it.
Changed
- The marketplace page is now the Extensions page (Discover, Plugins, Tools and Installed, "Search extensions") and lists no themes. Themes come from a catalogue of their own,
themes.json, atmarketplace.themes(the public address by default);index.jsonlists plugins and tools only. A server that has not publishedthemes.jsonyet still works: until it does, the gallery shows the themes itsindex.jsoncarries. The command keeps its ID and is now called "Marketplace: Browse Extensions"; the core's protocol version is 20, andcabinetos-cli markethas--themesto ask for the themes catalogue. cabinetos-core.exe,cabinetos-cli.exe(and its copycab.exe) andcabinetos-indexer.execarry a Windows version resource: version, description, copyright and the CabinetOS icon. Explorer's Properties > Details page shows it, and the code signing service requires it before it signs a program. The release script stops when a program lacks it.- The release zip and the setup file no longer hold the
.pdbsymbol files: they are a download of their own,CabinetOS-<version>-win-x64-symbols.zip. The release zip is 32 MB instead of 76 MB and the setup file 20 MB instead of 43 MB. A crash trace from an install names function, file and line once you unpack the symbols of the same version next to the programs; without them the Rust programs' trace shows<unknown>frames, though itslocationstill names the line of the panic. cabinetos-indexer --installregisters the service with an automatic, delayed start and starts it once, so the index is there after every restart of Windows with nobody starting the service (it was a manual start, off after each restart).install.ps1 -AllUsers -Indexerdoes the same. If you registered the service by hand before, runcabinetos-indexer --uninstalland then--installagain.
CabinetOS 0.1.1
Changed
- The setup file installs a missing prerequisite itself: it downloads Microsoft's installer for the Windows App Runtime, the WebView2 Runtime or the .NET 10 runtime, runs it, and checks again. Before, it named the winget command and stopped. The .NET runtime installs for the whole PC, so Windows asks for administrator rights for it; a silent setup without them still stops and names the winget command. The winget package is now this setup file instead of the zip.
CabinetOS 0.1.0
Code signing policy: see the README.
The first version. How it is built, signed and published:
docs/release.md.
Added
-
Two file panes side by side, or one at a keystroke, with breadcrumbs, back, forward and up, pinned folders, and the drives with their free space.
-
Folder listings read with the NT API and handed to the window through shared memory: 100,000 entries in about 50 ms.
-
Open folders refresh when their contents change on disk, and drives appear and disappear as they are plugged in.
-
Type names and icons as Windows Explorer shows them.
-
Copy (F5), move (F6), new folder (F7), rename (F2), delete to the Recycle Bin, and delete for good (Shift+Delete) after a confirmation.
-
One copy queue per physical disk: one job at a time on a hard disk, several on an SSD, with pause, resume, cancel and a live speed graph.
-
A file conflict pauses only that file: skip it, replace it, or copy it under a new name, once or for every conflict of its kind.
-
Open a file with its default program, a folder in the other pane, and Properties for any row.
-
The command palette (Ctrl+Shift+P) finds every command by name, shows its keys, and changes them in place.
-
Chord keys such as Ctrl+K then Ctrl+T, and a protected set of system keys that cannot be rebound away.
-
Every setting lives in
cabinetos.json; a saved change applies while CabinetOS runs. -
Search as you type, in the current folder or across a whole volume.
-
An optional indexer service that reads the NTFS master file table and change journal, for instant search of whole volumes (
install.ps1 -AllUsers -Indexer). -
Core Plugins: WebAssembly components in a sandbox, with only the capabilities granted in a review dialog; a plugin that crashes is stopped while CabinetOS keeps running.
-
Tool Extensions: web pages in WebView2, each in a browser process of its own and without network access. Markdown Preview is the first, opt-in, in the release's
extrasfolder. -
An integrated terminal (Ctrl+`) with PowerShell, Command Prompt and WSL profiles, which follows the active pane's folder. A fourth profile,
claude, runs Claude Code on the user's own login; it is not a shell, sofollowsPane: falsekeeps the folder sync from typing into it.cabinetos-cli(andcabin a release) is on thePATHof every terminal. -
Colour themes in JSON (accent, Mica tint, palette, terminal colours), applied live, with a theme picker (Ctrl+K Ctrl+T). Default, Nord, Catppuccin Mocha and Rose Pine Moon are built in; Default follows Windows' light or dark mode.
-
A marketplace view that installs plugins, themes and tools from a static index and checks each download's SHA-256. No public index exists yet.
-
cabinetos-cli, which reaches the core's functions from a terminal. -
One JSON Lines log per program and day, in which a request ID follows each action from the window through the core. A crash writes a trace that names where it happened: the window, the core or a plugin.
-
A release zip with an install script (per user without administrator rights, or for all users; the Start Menu entry, the PATH entry and the indexer service only when asked), an uninstall script, and the license text of every third-party component.
-
One top row that is also the window's drag area: a menu of common commands, the workspace pill with the git branch of the active folder, a command center, and the view and Settings buttons.
-
Each pane has its own tab strip and breadcrumb row with Back, Forward and Up; long paths collapse to
Drive › … › parent › current, and Ctrl+L types a path. -
Find in Pane (Ctrl+F): filters the active pane's list by name as you type, and Esc shows every row again.
-
Quick Open (Ctrl+P): the files and folders of the workspace on the command palette's surface;
>switches to the commands. Enter opens a row in the active pane, Ctrl+Enter in the other one. -
Ctrl+1 to Ctrl+9 bring a pane's tabs to the front, and Ctrl+, opens
cabinetos.jsonfor editing. -
Updates from inside the app for the per-user install: a check once a day (
update.check, andupdate.channelfor the stable or the preview channel), the download in the background with a pill in the status bar, the release notes in a dialog with Restart now and Later, and a rollback to the version before. A download whose SHA-256 does not match is deleted, and a swap that fails half way puts the old version back.cabinetos-cli updatedoes the same from a terminal. -
CabinetOS appears in Settings > Apps, with its version and size, and uninstalls from there.
-
"Toggle Compact Overlay" (Ctrl+Alt+Up) makes the window a small always-on-top drawer with one pane, no sidebar and no dock, 480 by 640 or the size you last gave it (
ui.compactOverlay), and brings the window back as it was. -
The right-click menu comes from
contextMenuincabinetos.json: for the empty space, a file, a folder and a selection of several rows, each with its row of icons and its list, and rows shown only for some file extensions. -
"Edit Menu…" at the end of the right-click menu edits the menu inside the menu: drag a row or move it with Alt+Up and Alt+Down, remove it with its X or Delete, add a command (Insert, from a list like the palette's) or a separator, and Done (Ctrl+S) saves it to
cabinetos.jsonthrough the core. Esc cancels, and a click outside does not close it. The row of icons, the extension filters and the programs are still edited in the file, which Ctrl+, opens. -
Programs of your own (
programsincabinetos.json) become commands (program.<name>) for the menu, a key or the palette.{path},{selection}and{cwd}in their arguments stand for the cursor row, the selection and the folder. -
Windows' own context menu (Open with, Send to, what other programs add) with Shift+right-click or Ctrl+Shift+F10, when
contextMenu.shellMenuis on. -
The theme picker (Ctrl+K Ctrl+T) previews the highlighted theme live, whether the keys or the pointer moved the highlight; Enter or a click keeps it, and Esc keeps the current theme.
-
The file panes' column widths are yours, in any theme: drag the grip at a divider of the column headers, or double-click a heading (or a grip) to fit its column to the texts on screen; the Name heading fits the other three. Both panes share the widths, and they are saved in
cabinetos.jsonasui.columns. "Reset Column Widths" in the palette gives the theme's widths back. -
Folder sizes for every folder of a listing: turn on
panes.folderSizesincabinetos.json, or run "Toggle Folder Sizes" from the palette, and each folder's Size is counted when a listing opens, with no key. It is off by default, because counting costs disk time. A pane that leaves a folder stops its count. -
The column view: Ctrl+Alt+C ("Toggle Column View") shows a pane's tab as columns of names, as Finder does. Enter, Right or a click on a folder opens it in a column to the right, Left goes back up, the whole path stays on screen, and the tab keeps the mode across a restart.
-
Each terminal belongs to a file pane. Its tab shows
[Left]or[Right]and a Locked/Linked switch ("Lock or Link Terminal to Its Pane" in the palette). Command Prompt and Claude Code stay locked, and the tooltip says why. -
A linked PowerShell or WSL terminal follows its pane: each time the shell shows its prompt, it changes to the folder the pane shows, if the pane moved. Nothing is typed into the shell, so a half-typed line or a running program is never touched; the line runs where you typed it, and the next prompt is in the pane's folder. A
cdof your own stays until the pane moves again. It costs about 20 ms per prompt."hook": falseon a profile incabinetos.jsonturns it off, and a string there runs your own code at each prompt instead. -
The terminal's caption follows the shell: it says "in docs" for the folder the shell is in, after a
cdof your own too, and its tooltip names the whole folder. -
cab term cwdprints the folder a linked terminal follows; in a CabinetOS terminal,cabreaches the window's own core without--pipe. -
Keys for the terminal's tabs while it has the keyboard: Ctrl+Shift+T opens a terminal for the active pane, Ctrl+Shift+W closes the one in front, and Alt+[ and Alt+] show the tab before or after it. They also work on the Ukrainian keyboard layout. Ctrl+Shift+C copies the selected text and Ctrl+Shift+V pastes.
-
Ctrl+\ in the terminal splits the dock under the two panes ("Split Terminal Under the Panes"): the left pane's terminals sit under the left pane and the right pane's under the right, each half with its own tab row, header and caption, and the halves follow when the panes' width changes. A pane with no terminal shows "Ctrl+
starts a shell for this pane". Alt+[ and Alt+] go round the tabs of the half that has the keyboard, Ctrl+Shift+W closes that half's tab, Ctrl+Shift+T opens a tab in the half of the active pane, and Ctrl+in a pane gives that pane's half the keyboard. In a file pane Ctrl+\ is still "Up to Root". The split is saved asterminal.splitincabinetos.json, off by default, and holds while the dock is under the panes. -
cabin a CabinetOS terminal gives the live GUI context:cab paneprints the folder of the active pane (--left,--right, or--jsonfor the whole context),cab selectionprints the active pane's selected paths, one per line (the marked rows, or the cursor row when none is marked), andcab copy --selection --dest opposite_pane(or--dest <path>) andcab move --selection --dest opposite_panerun the core's job on that selection and follow it. A job started this way skips what exists at the destination unless you give--on-conflict. The exit code is 0 when it worked, 1 for a failure (also a selection the window cut at 1,000 rows), and 2 when there is no window or nothing is selected. There are noCABINET_*environment variables: the commands ask the window's core each t...