Visidata

Latest version: v3.1.1

Safety actively analyzes 706267 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 2 of 11

2.10.2

Not secure
- add .vdx, a simplified new cmdlog format
- add `-N`/`--nothing` command to disable loading .visidatarc and plugin addons
- add `addcol-aggr` to add an aggregator column to the **FreqTable** without needing to
regenerate it (requested by geekscrapy 1541)

Improvements

- [cli] load commandline file arguments from the start (requested by reagle 1471)
- [cli] `--config=''` now does not try to load any config
- [open] rename `zo` `open-cell` command to `open-cell-file`
- [loaders whl] load python .whl (reported by frosencrantz 1539)

Bugfixes

- [cli] fix for empty arg
- [DirSheet] fix bug where `Enter` no longer opened a file from the **DirSheet** (reported by frosencrantz 1527)
- [input paste] fix pasting via a Path via `Ctrl+Y` into input (reported by frosencrantz 1546)
- [menu] allow VisiData to run without menu
- [mouse] catch any curses.getmouse() errors (reported by geekscrapy 1553)
- [performance] allow vd to be truly idle (reported by WizzardUU 1532)
- [plugins_autoload] catch error for environment having invalid package metadata (reported by jsdealy 1529)
- [plugins_autoload] catch exception if plugin fails to load
- [plugins-autoload] fix check for if plugins_autoload is set in args
- [plugins-autoload] update for importlib-metadata 5.0 API (reported by jkerhin 1550)
- [pyobj] undo rename of `open-row`/`open-cell` (were renamed to `open-X-pyobj`) (revert of eff9833e6A)
- [sheets] ensure IndexSheets are precious, and that **SheetsSheet** is not (reported by frosencrantz 1547)
- [unzip-http] extracting a file now checks for overwrite (reported by frosencrantz 1452)
- [windows clipboard] fix piping to clip command through stdin (thanks daviewales for the fix; reported by pshangov 1431)

API

- expose `CommandLogBase` (was `_CommandLog`)
- [options] allow FooSheet.options instead of .class_options
- add separate non-async `select_row`, `toggle_row`, and `unselect_row` for selection of single rows
- the before/after decorators now do not fail if api functions they are decorating do not already exist

2.10.1

Not secure
Improvements

- [docs] document `-d` option (thanks abitrolly for PR 1515)
- [freq] disable histogram if `disp_histlen` or `disp_histogram` set to 0 or empty string
- [guard] add `guard-sheet-off` which unsets `options.quitguard` on current sheet (thanks hanfried for PR 1517)
- [menu] add `BUTTON1_CLICKED` (same as `BUTTON1_PRESSED`)
- [open] add `zo` to open file or url from path in current cell

Bugfixes

- fix Guix build problems (reported by ryanprior 1499)
- add support for sheet names with multiple `.` (periods) in the name (requested by geekscrapy 1494)
- [cmdlog] add more portable shebang in vdj
- [date] fix custom date greater than or equal to comparison
- [macros] fix `macro-record` (1513)
- [macros] refresh `macro-sheet` upon macro addition
- [macros] ensure macros are set upon startup
- [plugins] update usd plugin api (thanks hanfried for PR 1510)
- [repeat] fix `repeat-` (1513)
- [status] reduce priority of active colouring (reported by geekscrapy 804)

API

- add `ExpandedColumn` to globals
- add `Extensible.before` and `Extensible.after`
- `def foo` decorated with `VisiData.before` will run it before `vd.foo()`
- `def foo` decorated with `VisiData.after` will run it immediately after

2.10

Not secure
- [plugins] load all entry points in `visidata.plugins` group before config load
- add entry_points={'visidata.plugins': 'foo=foo'} to plugin load plugin automatically when launching VisiData

- [deps] require `importlib_metadata` >= 3.6
- following https://github.com/pypa/twine/pull/732

Improvements

- [draw] redraw only every 100 ms if any keys pending (requested by ansoncg 1459)
- [IndexSheet] shown name is only final name component
- [loaders html] add table of all links on page (requested by dufferzafar 1424)
- [loaders html] `open-row` on **LinksSheet** to open url (requested by dufferzafar 1424)
- [options] add `options.http_req_*` to send headers/etc to requests (requested by daviewales 1446)
- [options pyobj] add `options.fmt_expand_dict` and `options.fmt_expand_list` for formatting expanded
list and dict column names (requested by joe-opensrc 1457)
- [threads-sheet] add `z Ctrl+T` (`threads-sheet`) to open **ThreadsSheet** for current sheet
- [threads-sheet] add `g Ctrl+C` (`cancel-all`) to **ThreadsSheet**
- [zsh] add scripts for zsh completion (PR by Freed-Wu 1455)
- tutorial: https://visidata.org/docs/shell/

Bugfixes

- [addcol-] set cursor at added column for `addcol-new`/`addcol-bulk` (reported by jsvine 1445)
- [cmdlog] `Ctrl+S` from a **CommandLog** now defaults to `.vdj` (reported by jsvine 1443)
- [display] format entire string for undetermined width (reported by and fixed by jsvine 1442)
- [formatter] fix len format strings
- [LastInputsSheet] catch other exceptions during reload
- [loader npz] fix .npz loader (reported by Shahin-rmz 1440)
- [loader geojson] fix plotting and saving geojson files (fixed by mwayne 1477)
- [loader geojson] improve feature property manipulation (fixed by mwayne 1477)
- [menu] upon menu item keypress, move to item (reported by reagle 1470)
- [menu] fix `ALT+<keystroke>` navigation while within menu (reported by reagle 1470)
- now requires two `ESC` to exit
- [open] allow binary files from archives (reported by frosencrantz 1430)
- [save] do not save unknown filetype as `save_filetype`
- [save visidatarc] only save rows on **OptionsSheet** to visidatarc
- [sheets] fix name reconstruction for files with multiple and no suffixes (1450)
- [sheets] do not include empty name parts in sheet name
- [unzip-http] **FreqTableSheet** `open-row` now loads links (reported by frosencrantz 1458)
- [zip] use correct rowdef in extract (reported by frosencrantz 1430)
- [zip] do not create directory for extract

snippets

- add snippets/scrolloff.py which mimics vim's scrollof context lines (requested by gennaro-tedesco 1441)

vdplus

- `open-memusage` was moved to vdplus

API

- add InferColumnsSheet
- it infers the columns and their types from the rows it gets which are dicts
- used by json, npy loader
- add vd.printout and vd.printerr for builtins.print to stdout and stderr
- add `vd.view()`
- fix Extensible.init() to work with classes with no `__init__`
- add `Sheet.sidebar` and `Sheet.sidebar_title` properties

Deprecated

- remove VisiDataSheet
- remove vdmenu

2.9.1

Not secure
- [unzip-http] move urllib3 to optional dependencies

2.9

Not secure
- [ux] add confirming modal dialog
- only "y" required to confirm
- add XDG support (thanks jck for the PR 1420)
- `options.config` default is now `"$XDG_CONFIG_HOME"/visidata/config.py` if `$XDG_CONFIG_HOME` is set and `config.py` exists. If not, falls back to the standard `$HOME/.visidatarc`.
- vendor [appdirs.py](https://github.com/ActiveState/appdirs/blob/master/appdirs.py)
- [cmdlog] support variables in .vdj (requested by jungle-boogie 1364)
- in the .vdj, write variables like so: `${variableName}`
- then on the CLI: `vd -p foo.vdj variableName=bar`
- [loaders arrow] new Apache Arrow IPC loader/saver (requested by d-miketa 1369) (requires `pyarrow`)
- add `.arrow` (file) and .arrows (streaming) formats
- add more native `parquet` loader via `pyarrow`
- preliminary "windowing" for referencing x rows before and y rows after in an expression (requested by maxigit 1399, MMesch 1129, samuelludwig 1210)
- press `w` (longname: `addcol-window`) followed by two numbers: the number of rows to aggregate *before* and *after* the current row.
- there will be a new column, `foo_window`, where each row contains a list of aggregated rows. after that, e.g. `=` `sum(foo_window)` to get a running total for each row
- add `setcol-format-enum` which takes e.g. `A=apple B=banana` and uses that as a mapping when formatting a column.
- vendor `https://github.com/saulpw/unzip-http`; allows the downloading of individual files from a .zip file over http without downloading the entire archive (requires `urllib3` package)
- add `save-source` to save a root sheet directly to its source
- add `setcol-formatter` to specify formatting function used for Column (default: `generic` formats based on type and fmtstr). Can be `json` or `python` or a custom formatter


Improvements

- [cli] when `-v` or `-h` VisiData now does not read config or do anything else (requested by geekscrapy 1340)
- [cmdlog] set `.vdj` to be the default cmdlog format
- [replay] allow column names to be numbers (reported by frosencrantz 1309)
- if wishing to reference a column index, required to be an int in a .vdj cmdlog
- [cmdlog] when saving cmdlogs, type column indices as integers, and column names as strings
- If replaying, and *col* is an `int`, the CmdLog will index by position.
- If *col* is a `str` it will index by column name.
- [display] preview first n elements of a list/dict cell
- [regex] add unbound `addcol-<regex>` commands
- [rtl] improvements to right-to-left text display (requested by dotancohen 1392)
- [man] have `vd --help` open the .txt manpage by default (requested by halloleo 1332)
- [mouse] invert scroll wheel direction (requested by marcobra 1351)
- [performance] improvements to plotting of empty canvas, multiline display, and draw-ing functions
- [plugins] notify when plugin update available (thanks geekscrapy for PR 1355)

Bugfixes

- [aggregators] fail on setting an unknown aggregator in **Columns Sheet** (reported by geekscrapy 1299)
- [aggregators] handle `delete-cell` case for aggregators column in **Columns Sheet** (reported by geekscrapy 1299)
- [aggregators] fix quartile aggregators (reported by pnfnp 1312)
- [aggregators] fix copying of aggregators when duplicating a sheet (reported by frosencrantz 1373)
- [canvas] do not use "other" label when there are exactly 9 columns being plotted (reported by tdussa 1198)
- [cli] fix `+:subsheet:col:row:` when `load_lazy` is False
- [delete-row] clear deleted rows from `selectedRows` (reported by geekscrapy 1284)
- [exec-longname] output warning, if longname does not exist
- [expr] prefer visible columns over hidden columns (reported by frosencrantz 1360)
- [freeze-sheet] carry over column attributes for freeze-sheet (reported by frosencrantz 1373)
- [import-python] use command-specific history (reported by frosencrantz 1243)
- [IndexSheet] fix renaming of sheet names from an IndexSheet (reported by aborruso 1339)
- [input] handle history for non-string input values (reported by frosencrantz 1371)
- [loaders pandas] fix (`dup-selected`) `"`of selected rows for **Pandas Sheet** (reported and fixed by jasonwrith 1315 1316)
- [loaders usv] swap delimiters (reported by frosencrantz 1383)
- [loaders usv] save delimiter override options (reported by frosencrantz 1383)
- [loaders usv] fix saving header with usv row delimiter (reported by frosencrantz 1383)
- [loaders xlsx] fix clipboard on XlsxSheets (reported by jungle-boogie 1348)
- [macros] fix macro-record keystroke setting (reported by fatherofinvention 1280)
- [mouse] stay disabled after input (reported by holderbp 1401)
- [mouse] fix for pypy3 (thanks LaPingvino for PR
- [quitguard] refinement of quit-sheet protection (reported by geekscrapy 1037, 1381)
- [save-selected] get sheet names for saving from selected rows (reported by aborruso 1339)
- [shell] strip trailing whitespace in `z;` output (reported by justin2004 1370)
- [tty] fix bug where piping async output into stdin broke visidata keyboard input (reported by ovikk13 1347)
- [undo] fix issue where undoing a reload blanks the current sheet; do not set undos for reload sheet (1302)
- [unset-option] fix issue where Exception is raised on the next undo-able command run after `unset-option` (reported by ajkerrigan 1267)
- [windows] require `windows-curses` installation on Windows (thanks ajkerrigan for PR 1407; reported by schiltz3 1268, aagha 1406)

API

- add Column.formatter (generic, json, python)
- add SqliteQuerySheet to globals
- `vd.loadConfigFile()` no longer needs a filename argument, and will use `options.config` by default (211)
- use `newline="` for csv.writer (thanks daviewales for PR 1368)
- make `ItemColumn` a proper class for inheritance
- add `openJoin` and `openMelt` to allow overriding by plugin sheetsS
- addColumn takes `*cols` (reported by pyglot 1414)

Deprecated

- deprecate old vdmenu system
- remove `Shift+V` command

2.8

Not secure
Improvements

- [plugins] include pip stderr in warning
- [plugins] use returncode to determine if pip install failed, before adding to imports (thanks geekscrapy for PR 1215)
- [cmdlog] add sheet creation command to cmdlog (requested by aborruso 1209)
- [open] strip whitespace from the beginning and end of inputted filenames
- [options] `options.input_history` and `options.cmdlog_histfile` can now be an absolute paths (requested by geekscrapy 1200)
- relative paths are relative to `options.visidata_dir`
- [splitwin] automatically switch to pane where sheet is pushed to

Bugfixes

- [curses] suppress invalid color errors in Python 3.10 (thanks ajkerrigan for reporting 1227 and for PR 1231)
- Adapt to [Python 3.10 curses changes](https://docs.python.org/3/whatsnew/3.10.html#curses) which can raise a `ValueError` on invalid color numbers.
- [curses cosmetic] simplify error message, if curses fails to initialise
- [loaders json] skip blank lines in json files, instead of stopping at them (thanks geekscrapy for PR 1216)
- [loaders jsonl] fix duplicate columns when loading fixed columns sheets in jsonl format (report by 0ceanlight)
- example of formats with fixed columns is darkdraw's `DrawingSheet`
- [loaders fixed] fix saver (thanks geekscrapy for PR 1238)
- [loaders postgres] fix recognition of postgres loader (reported by ryanmjacobs 1229)
- [loaders sqlite] fix the loading of sqlite VIEWs for sqlite version 3.36.0+ (reported by frosencrantz 1222)
- [help-commands] now lists commands only for the current sheet (reported by geekscrapy 1217)
- [textcanvas] ENTER on canvas should push copied source sheet for points within cursor
- [pivot freq] use `options.histogram_bins` from source sheet
- [curses cosmetic] fix issue where if a curses initialisation Exception is called, a second Exception follows
- [quit-sheet-free] fix bug where quit-sheet-free, when multiple sheets opened in CLI, was not working (reported by geekscrapy 1236)
- [options] fix instance where local options sheet was called, instead of global options sheet (thanks geekscrapy for PR 1241)

API

- add standard Python `breakpoint()` to drop into the pdb debugger
- export `run()` to global api
- add CsvSheet, ZipSheet, TarSheet to global api (thanks geekscrapy for PR 1235)

Page 2 of 11

© 2025 Safety CLI Cybersecurity Inc. All Rights Reserved.