All notable changes to this project will be documented in this file. The format is based on Keep a Changelog.
Versioning for this project is based on Semantic Versioning. More specifically:
Pre 1.0.0 (current):
- Patch versions should aim to only contain bug fixes or non-breaking features/changes.
- Minor versions may break things.
Post 1.0.0:
- Patch versions should only contain bug fixes.
- Minor versions should only contain forward-compatible features/changes.
- Major versions may break things.
That said, these are more guidelines rather than hardset rules, though the project will generally try to follow them.
- #1551: Fix missing parent section names in default config.
- #1552: Fix typo in default config.
- #1578: Fix missing selected text background colour in
default-light
theme. - #1593: Fix using
"none"
for chart legend position in configs. - #1594: Fix incorrect default config definitions for chart legends.
- #1596: Fix support for nilfs2 file system.
- #1559: Rename
--enable_gpu
to--disable_gpu
, and make GPU features enabled by default. - #1570: Consider
$XDG_CONFIG_HOME
on macOS when looking for a default config path in a backwards-compatible fashion.
- #1487: Add option to move the AVG CPU bar to another row in basic mode.
- #1541: Fix some process details not updating for macOS and Windows.
- #1542: Fix confusing process run times being reported on macOS.
- #1543: Fix the
--default_cpu_entry
argument not being checked.
- #1526: Fix
--help
description being incorrectly set for a flag, breaking the output.
- #1276: Add GPU process info.
- #1353: Support selecting the average CPU graph as a default.
- #1373: Add support for bcachefs in disk widget.
- #1430: Support controlling the graph legend position for memory and network graph widgets.
- #1512: Support bold text styling options.
- #1514: Support italic text styling options.
- #1276: NVIDIA GPU functionality is now tied behind the
--enable_gpu
flag. This will likely be changed in the future. - #1344: Change the
group
command line-argument togroup_processes
for consistency with the config file option. - #1376: Group together related command-line arguments in
-h
and--help
. - #1411: Add
time
as a default column. - #1436: Use actual "swap" value for Windows.
- #1441: The following arguments have changed names:
--left_legend/-l
is now--cpu_left_legend
.
- #1441: The following config fields have changed names:
expanded_on_startup
is nowexpanded
.left_legend
is nowcpu_left_legend
.
- #1458: Fix a bug with
--hide_table_gap
with the battery widget. - #1472: The following arguments have changed names:
--mem_as_value
is nowprocess_memory_as_value
.
- #1472: The following config fields have changed names:
mem_as_value
is nowprocess_memory_as_value
.
- #1481: The following config fields have changed names:
disk_filter
is nowdisk.name_filter
.mount_filter
is nowdisk.mount_filter
.temp_filter
is nowtemperature.sensor_filter
net_filter
is nownetwork.interface_filter
- #1499: Redesign how styling is configured.
- #1499: The following arguments have changed names:
--colors
is now--theme
- #1513: Table headers are now bold by default.
- #1515: Show the config path in the error message if unable to read/create a config.
- #1314: Fix fat32 mounts not showing up in macOS.
- #1355: Reduce chances of non-D0 devices waking up due to temperature checks on Linux.
- #1410: Fix uptime calculation for Linux.
- #1394: Add JSON Schema support.
- #1500: Fix builds for Rust 1.80.
- #1286: Pin serde to 1.0.188 to help with potential
cargo install
issues. Note this version should be fine and not pull in binaries.
- #1278: Pin serde to 1.0.171.
- #1248: Add I/O counters from ZFS for Linux and FreeBSD.
- #1236: Hide the battery tab selector if there is only one battery detected.
- #1251: Make the charge meter take the entire width of the battery widget.
- #1230: Fix core dump if the terminal is closed while bottom is open.
- #1245: Fix killing processes in Windows leaving a handle open.
- #1264: Fix ARC usage showing max system memory instead of max ARC size.
- #1221: Support human times for
rate
.
- #1216: Fix arguments not being sorted alphabetically.
- #1219: Fix overflow/underflow in graph timespan zoom.
- #1206: Add
.rpm
package generation. - #1220: Update documentation for features supporting human times.
- #1172: Support human times for
time_delta
anddefault_time_value
. - #1187: Use better names for duplicate temp sensors found by
/sys/class/thermal
. - #1188: Also check
/sys/devices/platform/coretemp.*
for temp sensors.
- #1186: Fix for temperature sensor data gathering on Linux immediately halting if any method failed.
- #1191: Fix ntfs3 mounts not being counted as a physical drive type.
- #1195: Fix battery health being incorrectly reported on M1 macOS.
- #1188: Don't fail fast with temperature sensor name generation on Linux.
- #1199: bottom should build on
aarch64-linux-android
with features disabled.
- #1148: Fix Gruvbox colour string being invalid when cache usage is enabled.
- #1016: Add support for displaying process usernames on Windows.
- #1022: Support three-character hex colour strings for styling.
- #1024: Support FreeBSD temperature sensors based on
hw.temperature
. - #1063: Add buffer and cache memory tracking.
- #1106: Add current battery charging state.
- #1115: Add customizable process columns to config file.
- #801: Add optional process time column and querying.
- #1025: Officially support M1 macOS.
- #1035: Migrate away from heim for CPU information.
- #1036: Migrate away from heim for memory information; bottom will now try to use
MemAvailable
on Linux to determine used memory. - #1041: Migrate away from heim for network information.
- #1064: Migrate away from heim for storage information.
- #812: Fully remove heim from bottom.
- #1075: Update how drives are named in Windows.
- #1106: Rename battery consumption field to rate.
- #1021: Fix selected text background colour being wrong if only the foreground colour was set.
- #1037: Fix
is_list_ignored
accepting all results if set tofalse
. - #1064: Disk name/mount filter now doesn't always show all entries if one filter wasn't set.
- #1064: macOS disk I/O is potentially working now.
- #597: Resolve RUSTSEC-2021-0119 by removing heim.
- #1100: Speed up first draw and first data collection.
- #1107: Update to clap v4.
- #1111: Update to regex 1.8.0, supporting more escapable characters and named captures.
- #950: Split usage into both usage percentage and usage value.
- #974: Hide battery duration section if the value is unknown. Also update shortened text.
- #975: Automatically hide the battery widget if no batteries are found but
--battery
is enabled.
- #950: Update help menu for disk and temperature widgets with sorting support.
- #994: Fix time graph labels not being styled.
- #969: Follow Debian conventions for naming generated
.deb
binaries.
- #950: Fix invalid sorting order for disk usage percentage.
- #952, #960: Partially fix battery text getting cut off in small windows.
- #953: Fix CPU widget's 'all' label being missing on small sizes.
- #951: Nightly builds now have their version number (
btm -V
) tagged with the commit hash.
- #676: Add support for NVIDIA GPU temperature sensors.
- #760: Add a check for whether bottom is being run in a terminal.
- #766: Add FreeBSD support.
- #774: Add half page scrolling with
ctrl-u
andctrl-d
. - #784: Add ZFS ARC support.
- #794: Add GPU memory support for NVIDIA GPUs.
- #806: Update sysinfo to support M1 macOS temperature sensors.
- #836: Add CLI options for GPU memory.
- #841: Add page up/page down support for the help screen.
- #868: Make temperature widget sortable.
- #870: Make disk widget sortable.
- #881: Add pasting to the search bar.
- #892: Add custom retention periods for data.
- #899, #910, #912: Add non-normalized CPU usage to processes.
- #919: Add an option to expand the default widget on startup.
- #690: Add some colour to
-h
/--help
as part of updating to clap 3.0. - #726: Add ARM musl binary build tasks.
- #807: Add more human friendly temperature sensor names for Linux.
- #845, #922: Add macOS M1, FreeBSD 12, and FreeBSD 13 binary build tasks.
- #916, #937: Improve CPU usage by optimizing draw logic of charts and tables.
- #711: Fix building in Rust beta 1.61 due to
as_ref()
calls causing type inference issues. - #717: Fix clicking on empty space in tables selecting the very last entry of a list in some cases.
- #720: Fix panic if battery feature was disabled during compilation.
- #805: Fix bottom keeping devices awake in certain scenarios.
- #825: Use alternative method of getting parent PID in some cases on macOS devices to avoid needing root access.
- #916: Fix possible gaps with widget layout spacing.
- #938: Fix search scrolling with wider Unicode characters.
- #655: Fix a bug where the number of CPUs is never refreshed.
- #646: Add
PgUp
/PgDown
keybind support to scroll up and down a page in a table.
- #655: Fix bug where the program would stall in an infinite loop if the width of the terminal was too small.
- #658: Update sysinfo.
- #637: Remove duplicate guest time in process CPU calculation
- #637: Fix process CPU calculation if /proc/stat CPU line has fewer values than expected
- #608: Add codecov integration to pipeline.
- #557: Add '/s' to network usage legend to better indicate that it's a per-second change.
- #575: Updates the procfs library to not crash on kernel version >255.
- #551: Disable AUR package generation in release pipeline since it's now in community.
- #570: Make battery features optional in compilation.
- #547: Switch Linux memory usage calculation to match htop.
-
#536: Prevent tests from creating a config file.
-
#542: Fix missing config options in the default generated config file.
-
#545: Fix inaccurate memory usage/totals in macOS and Linux, switch unit to binary prefix.
- #518: Add
F9
key as an alternative process kill key.
-
#504: Fix two bugs causing the battery widget colours and mouse events to be broken.
-
#525: Fix Windows process CPU usage not being divided by the number of cores.
- #506: Migrate a large portion of documentation over to mkdocs.
- #473: Fix missing string creation for memory usage in collapsed entries.
-
#263: Add the option for fine-grained kill signals on Unix-like systems.
-
#333: Add an "out of" indicator that can be enabled using
--show_table_scroll_position
(and its corresponding config option) to help keep track of scrolled position. -
#379: Add
--process_command
flag and corresponding config option to default to showing a process' command. -
#381: Add a filter in the config file for network interfaces.
-
#392: Add CPU load averages (1, 5, 15) for Unix-based systems.
-
#406: Add the Nord colour scheme, as well as a light variant.
-
#409: Add
Ctrl-w
andCtrl-h
shortcuts in search, to delete a word and delete a character respectively. -
#413: Add mouse support for sorting process columns.
-
#425: Add user into the process widget for Unix-based systems.
-
#437: Redo dynamic network y-axis, add linear scaling, unit type, and prefix options.
-
#445: Add collapsing in tree mode sums usage to parent.
-
#372: Hide the SWAP graph and legend in normal mode if SWAP is 0.
-
#390: macOS shouldn't need elevated privileges to see CPU usage on all processes now.
-
#391: Show degree symbol on Celsius and Fahrenheit.
-
#418: Removed automatically jumping to the top of the list for process sort shortcuts. The standard behaviour is to now stay in place.
-
#420: Updated tui-rs, allowing for prettier looking tables!
-
#437: Add linear interpolation step in drawing step to pr event missing entries on the right side of charts.
-
#443: Make process widget consistent with disk widget in using decimal prefixes (kilo, mega, etc.) for writes/reads.
-
#449: Add decimal place to actual memory usage in process widget for values greater or equal to 1GiB.
-
#450: Tweak
default-light
colour scheme to look less terrible on white terminals. -
#451: Add decimal place to disk values larger than 1GB for total read/write in process widgets, and read/write per second in process widgets and disk widgets.
-
#455: Add a mount point filter for the disk widget. Also tweaked how the filter system works - see the PR for details.
-
#416: Fix grouped vs ungrouped modes in the processes widget having inconsistent spacing.
-
#417: Fix the sort menu and sort shortcuts not syncing up.
-
#423: Fix disk encryption causing the disk widget to fail or not properly map I/O statistics.
-
#425: Fixed a bug allowing grouped mode in tree mode if already in grouped mode.
-
#467: Switched CPU usage data source to fix a bug on Windows where occasionally CPU usage would be stuck at 0%.
-
#373: Fix incorrect colours being used the CPU widget in basic mode.
-
#386: Fix
hide_table_gap
not working in the battery widget. -
#389: Fix the sorting arrow disappearing in proc widget under some cases.
-
#398: Fix basic mode failing to report CPUs if there are less than 4 entries to report.
- #361: Fix temperature sensors not working on non-Linux platforms.
- #349: Fix CPU graph colours not matching the legend in the "all" state.
- #344: Removed the
--debug
option for now.
-
#344: Fix a performance regression causing high memory and CPU usage over time.
-
#345: Fix process states not showing.
- #331: Fix custom battery colour levels being inverted.
- #327: Fix
hide_avg_cpu
being inverted in config files.
-
6ef1d66: Remove nord as a valid colour for now.
-
e04ce4f: Fix
--use_old_network_legend
. -
99d0402: Fix config detection for built-in colours.
-
#206: Adaptive network graphs --- prior to this update, graphs were stuck at a range from 0B to 1GiB. Now, they adjust to your current usage and time span, so if you're using, say, less than a MiB, it will cap at a MiB. If you're using 10GiB, then the graph will reflect that and span to a bit greater than 10GiB.
-
#208: Mouse support for tables and moving to widgets.
-
#217: (Kinda) ARM support.
-
#220: Add ability to hide specific temperature and disk entries via config.
-
#223: Add tree mode for processes.
- #312: Add a
tree
flag to default to the tree mode.
- #312: Add a
-
#269: Add simple indicator for when data updating is frozen.
-
#296: Built-in colour themes.
-
#309: Add a
mem_as_value
flag to default displaying process memory as value rather than percentage.
-
#213, #214: Updated help descriptions, added auto-complete generation.
-
#296: Changed how we do battery theming. We now only set high, medium, and low colours, and we deal with the ratios.
-
#211: Fix a bug where you could move down in the process widget even if the process widget search was closed.
-
#215: Add labels to Linux temperature values.
-
#224: Implements sorting by count. It previously did absolutely nothing.
-
#238: Fix being able to cause an index out-of-bounds by resizing to a smaller terminal just after the program got the terminal size, but right before the terminal started drawing.
-
#238: Fixed not clearing screen before drawing, which caused issues for some environments.
-
#253: Fix highlighted entries being stuck in another colour when the widget is not selected.
-
#253, #266: Expanding a widget no longer overrides the widget/dialog title colour.
-
#261: Fixed process names occasionally showing up as truncated, due to only using
/proc/<PID>/stat
as our data source. -
#262: Fixed missing thread termination steps as well as improper polling causing blocking in input thread.
-
#289: Fixed the CPU basic widget showing incorrect data due to an incorrect offset when displaying the data.
-
#290: Fixed an incorrect offset affecting the CPU colour when scrolling.
-
#291: Fixed spacing problems in basic CPU mode.
-
#296: Fixed an incorrect offset affecting the graph CPU colour mismatching the legend.
-
#296: Removes an accidental extra comma in one of the headers in the disk widget.
-
#308: Removes the automatically generated CPU colours method.
- #204: Fix searching by command name being broken.
-
#179: Show full command/process path as an option.
-
#183: Added sorting capabilities to any column.
-
#188: Add (estimated) memory usage values, toggle this from percent to values for processes with
%
. -
#196: Support searching processes by process state.
-
Added
WASD
as an alternative widget movement system. -
#198: Allow
e
to also escape expanded mode.
-
#181: Changed to just support stable (and newer) Rust, due to library incompatibilities.
-
#182: For macOS, support
$HOME/Library/Application Support
instead of$HOME/.config
for config files. For backwards compatibility's sake, for macOS, this will still check.config
if it exists first, but otherwise, it will default to the new location.
-
#183: Fixed bug in basic mode where the battery widget was placed incorrectly.
-
#186: Fixed a bug caused by hitting
Enter
when a process kill fails, breaking future process kills. -
#187: Fix bug caused by incorrectly reading the
/proc/{pid}/stats
file.
- No changes in this update, just an uptick for Crates.io using the wrong Cargo.lock.
- #114: Show process state per process (originally in 0.4.0, moved to later). This only shows if the processes are not merged together; I couldn't think of a nice way to show it when grouped together, unfortunately.
-
#156 - Removal of the
/
CPU core showing in the chart. It felt clunky to use, was not really useful, and hard to work with large core counts.Furthermore:
-
show_disabled_data
option and flag is removed. -
Average CPU is now on by default. You can disable it via
-a, --hide_avg_cpu
orhide_avg_cpu = true
. -
Make highlighted CPU persist even if widget is not selected - this should help make it easier to know what CPU you are looking at even if you aren't currently on the CPU widget.
-
-
#164 - Fixed a bug where bottom would incorrectly read the wrong values to calculate the read/write columns for processes in Linux.
-
#165 - Fixed a bug where OR operations in the process query wouldn't properly for some cases.
-
The process query should hopefully be a bit more usable now. There were issues with how spaces (which are treated as an AND if it was between keywords, so something like
btm cpu > 0 mem > 0
would look for a process namedbtm
with cpu usage > 0 and mem usage > 0). This has been hopefully improved.
- Update sysinfo version that fixes an overflow issue.
-
Automatically hide time axis labels if the widget gets too small.
-
Automatically hide table gap if the widget gets too small.
- The
<Space>
character can be used as an "AND" again (properly) in queries. For example:
(btm cpu > 0) (discord mem > 0)
is equivalent to:
(btm AND cpu > 0) AND (discord AND mem > 0)
-
#151 - Fixed an issue where if the drive I/O label didn't match any disk, the entire disk widget would display nothing.
-
Display SWAP and MEM legends even if the total amount is 0 to avoid a weird blank spot in the legend.
- #146: Fixed a typo in the help menu (credit to HarHarLinks).
-
#58: I/O stats per process.
-
#55: Battery monitoring widget.
-
#59:
Alt-h
andAlt-l
to move left/right in query (and rest of the app actually). -
#59: Added a more advanced querying system.
-
Changed default colours for highlighted borders and table headers to light blue - this is mostly to deal with Powershell colour conflicts.
-
Updated the widget type keyword list to accept the following keywords as existing types:
"memory"
"network"
"process"
"processes"
"temperature"
-
#117: Update tui to 0.9:
-
Removed an (undocumented) feature in allowing modifying total RX/TX colours. This is mainly due to the legend change.
-
Use custom legend-hiding to stop hiding legends for memory and network widgets.
-
In addition, changed to using only legends within the graph for network, as well as redesigned the legend. The old legend style can still be used via the
--use_old_network_legend
flag oruse_old_network_legend = true
config option. -
Allow for option to hide the header gap on tables via
--hide_table_gap
orhide_table_gap = true
.
-
-
#126: Updated error messages to be a bit more consistent/helpful.
-
#70: Redesigned help menu to allow for scrolling.
-
#59: Moved maximization key to
e
, renamed feature to expanding the widget. Done to allow for the<Enter>
key to be used later for a more intuitive usage.
-
Fixed
dd
not working on non-first entries. -
Fixed bug where a single empty row as a layout would crash without a proper warning. The behaviour now errors out with a more helpful message.
-
Fixed bug where empty widgets in layout would cause widget movement to not work properly when moving vertically.
-
#38: Updated arg tests and added config testing.
-
Add MSRV, starting with 1.40.0.
-
#20: Time scaling was added to allow users to zoom in/out based on their desired time intervals. Time markers on the charts can be hidden or automatically hidden.
-
#37: Automatically populate a config file if one does not exist.
-
#21: Basic mode added.
-
#51: Modularity with widget placement or inclusion added.
-
Removed redundant dependencies.
-
#17: Add colouring options to the total RX/TX labels.
-
#29: Added
F1-F3
keys as alternatives for selecting search options -
#42, #45, #35: Change the arrow used for sorting processes to work with other terminals.
-
#61: Search box changed to not block if the window is small.
-
#40: Rewrote README to be more clear and explicit.
-
#109: Sorting processes by name is case-insensitive.
-
#33: Fix bug with search and graphemes bigger than a byte crashing due to the cursor.
-
#41: Fix bug that caused the cursor to go off-screen while searching.
-
#61: Dialog boxes set to be a constant width/height.
-
#80: Fix bug with resizing and scrolling causing issues with tables.
-
#77: Fixed hidden CPU entries from being scrolled to.
-
#79: Fixed CPU entries being a different colour if the one above it was hidden.
-
#85: A div-by-zero error when the memory values were zero was fixed.
-
Various Travis changes.
-
Scoop install option added.
-
Added support for colouring the average CPU core separately in config files.
-
#15 - Added support for (some) named colours and RGB values in config files.
-
#28: Fixed broken Cargo.toml for Cargo installs.
-
Fixed Windows issue with shift key.
-
#14: Ignore certain characters in search
- #14: Fixed default config paths not being read properly.
-
Searching in processes was added.
-
The option of a config file was added. Config files follow the TOML spec. These support boot flags by default, and colour schemes.
-
The capability of maximizing a widget to take up all draw space was added.
-
Filtering out CPU cores on the graph/legend was added.
-
Default colours were changed for better support on macOS Terminal and PowerShell.
-
Rewrote and refactored how I get data to be less spaghetti. This might also have the added benefit of running better, with less duplicated logic.
-
Changed how the dd dialog and help dialog look. Hopefully they'll be nicer to look at and more intuitive to use!
-
#2: Fixed issues where the program would crash if the window was too small.
-
Added a panic handler so terminals won't get all broken if a panic does still occur.
-
Fixed some sizing issues, hopefully this means that it's still readable at smaller sizes (within reason).
-
#10: Fixed scroll issue caused by resizing.
- Added a bit more complexity to how we determine column widths for tables. This should fix an issue where columns would glitch out at smaller widths, and hopefully look nicer.
-
Rewrote scroll logic in tables to avoid some strange scroll behaviour I encountered where it would jump around.
-
Attempt to patch a panic caused by the change in how we determine time in the data collection stage.
-
Tab
in the processes widget will now group similarly-named processes together (as well as their total CPU and MEM usage).dd
-ing this will try to kill all entries with that process name. -
A flag to enable this by default is also now available.
- Accidentally left in a bug in which the disk widget was using megabytes instead of bytes as their unit during data collection... but during data conversion for the display I treated them as bytes.
Initial release.