All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog:
Addedfor new features.Changedfor changes in existing functionality.Deprecatedfor soon-to-be removed features.Fixedfor any bug fixes.Improvedfor performance improvements.
- Custom tab name (#3666)
- New
--inforsearchaction to set search directory (#3696) - Multi-file spotter (#3733)
- Vim-like
luaaction that runs an inline Lua snippet (#3813) - Certificate authentication for SFTP VFS provider (#3716)
- New
hoveredcondition specifying different icons for hovered files (#3728) - Allow using
ps.sub()ininit.luadirectly without a plugin (#3638) - New
ya.exec()API andya execsubcommand to execute an action and await its result (#3780) - New
sort_fallbackoption to control fallback sorting behavior (#3077) - New
fs.access()API to access the filesystem (#3668) - New
relay-notify-pushDDS event to customize the notification handler (#3642) - New
ind-app-titleDDS event to customize the app title (#3684) - New
ind-hiddenandkey-hiddenDDS events to change hidden status in Lua (#3748) - New
marker_symboloption to specify the symbol used for marking files (#3689) - New
--discardforya pkgthat discard local changes made to packages (#3781) - New
bulk_exitaction that customizes the prompt for bulk operations (#3792) - New
fs.unique()creates a unique file or directory (#3677) - New
downloadDDS event fires when remote files are downloaded (#3687) - New
ind-which-activateDDS event to change the which component behavior (#3608) - New
heyDDS event fires when static messages are restored from persistence (#3725) - New
cx.whichAPI to access the which component state (#3617) - New experimental
ya.co()API that creates a coroutine (#3757)
- Upgrade Lua to 5.5 (#3633)
- Change preset t for creating tabs to t ⇒ t to avoid conflict with new t ⇒ r for renaming tabs (#3666)
- Remove
title_formatin favor of newind-app-titleDDS event for flexible title customization (#3684) - Remove
micro_workersandmacro_workersin favor of finer control over concurrent workers (#3661)
- Deprecate
fs.unique_name()in favor offs.unique()to fix a TOCTOU race condition (#3677)
- Chafa v1.18.1 causes random ghost keypresses when previewing images (#3678)
- Be a little defensive while parsing the output of
7zz -ba(#3744) - Make
ya pkgignore default remote name in user Git config (#3648) - Archive extraction fails for target paths with non-ASCII characters on Windows (#3607)
- Escape backslashes in ImageMagick font path parameter (#3708)
- Reduce memory allocations by using Lua 5.5 external strings (#3634)
- Reuse previewed and spotted widgets when possible (#3765)
- Avoid unnecessary allocations in code highlighting (#3804)
- Tree view for the preset archive previewer (#3525)
- Support compressed tarballs (
.tar.gz,.tar.bz2, etc.) in the preset archive previewer (#3518) - Check and refresh the file list when the terminal gains focus (#3561)
- Experimental module-level async support (#3594)
- Disable ANSI escape sequences in
ya pkgwhen stdout is not a TTY (#3566) - New
Path.os()API creates an OS-nativePath(#3541)
- Smart-case in interactive
cdbroken due to a typo (#3540) - Fix shell formatting for non-spread opener rules (#3532)
sort extensionexcludes directories since only files have extensions (#3582)- Account for URL covariance in
Url:join()(#3514)
- Support VFS for preset previewers that rely on external commands (#3477)
- Support 8-bit images in RGB, CIELAB, and GRAY color spaces (#3358)
ya pkgfails to writepackage.tomlwhen the config directory does not exist (#3482)- A race condition generating unique filenames for concurrent file operations (#3494)
- Remote file management (#3396)
- Virtual file system (#3034, #3035, #3094, #3108, #3187, #3203)
- Shell formatting (#3232)
- Multi-entry support for plugin system (#3154)
- Zoom in or out of the preview image (#2864)
- Improve the UX of the pick and input components (#2906, #2935)
- Show progress of each task in task manager (#3121, #3131, #3134)
- New
fs.copy()andfs.rename()APIs (#3467) - New experimental
ya.async()API (#3422) - New
overalloption to set the overall background color (#3317) - Rounded corners for indicator bar (#3419)
- New
bulk_renameaction always renames files with the editor (#2984) key-*DDS events to allow changing or canceling user key events (#3005, #3037)- New
--bgspecifying image background color in the preset SVG and ImageMagick previewers (#3189) filterby full path (prefix + filename) in search view instead of just filename (#2915)- New
casefyaction for case conversion of the input content (#3235) - Allow dynamic adjustment of layout ratio via
rt.mgr.ratio(#2964) - Support
.debpackages (#2807, #3128, #3209) - Port several widespread GUI keys to the input component (#2849)
- Support invalid UTF-8 paths throughout the codebase (#2884, #2889, #2890, #2895, #3023, #3290, #3369)
- Allow upgrading only specific packages with
ya pkg(#2841) - Respect the user's
image_filtersetting in the preset ImageMagick previewer (#3286) - New
duplicateDDS event for copying files (#3456) - New
ind-sortandkey-sortDDS events to change sorting in Lua (#3391) - Allow custom mouse click behavior for individual files (#2925)
- Display newlines in input as spaces to improve readability (#2932)
- Fill in error messages if preview fails (#2917, #3383, #3387)
- Search view shares file selection and yank state (#2855)
- Offload mimetype fetching on opening files to the task scheduler (#3141)
- Increase terminal response timeout to better tolerate slow SSH network environments (#2843)
- Rename
nametourlfor open, fetchers, spotters, preloaders, previewers, filetype, andglobsicon rules to support virtual file system (#3034) - Rename
mimefetcher tomime.local, and introducemime.dirfetcher to support folder MIME types (#3222) - Reclassify
hoveredandpreview_hoveredunder[mgr]oftheme.tomlinto[indicator]ascurrentandpreview, respectively (#3419) - Remove
$0parameter in opener rules to make theopenaction work under empty directories (#3226) - Return
Pathinstead ofUrlfromUrl:strip_prefix()andFile.link_toto enforce type safety (#3361, #3385) - Use
bodyinstead of the termcontentin confirmations (#2921) - Use
u16instead ofu32as the type ofmax_widthandmax_heightoptions to avoid memory exhaustion (#3313) - Implement
__pairsmetamethod instead of__indexfor the callback argument of the@yankDDS event (#2997)
- Deprecate
$n,$@(*nix) and%n,%*(Windows) inshellaction and opener rules in favor of new shell formatting (#3232) - Deprecate
ya.hide,ya.render, andya.truncatein favor ofui.hide,ui.render, andui.truncate(#2939) - Deprecate
positionproperty ofya.input()in favor ofposto align withya.confirm()and its typeui.Pos(#2921) - Deprecate
cx.tasks.progressin favor ofcx.tasks.summary(#3131) - Deprecate
fragproperly ofUrlin favor ofdomain(#3034) - Deprecate
ui.Rect.defaultin favor ofui.Rect {}(#2927)
- User-prepended open rules do not override presets (#3360)
- Respect user's system media opener instead of hardcoding
mpv(#2959) - Incorrect
$0and$@parameters inshellaction under empty directories (#3225) - Avoid appending a newline when reading clipboard contents (#3059)
- Renew package
revonly when it's empty (#3200) - Suspend only when there is a parent process (#3008)
- Preserve open order for files with post-resolved MIME types (#2931)
- A race condition in concurrent directory loading on a slow device (#3271)
- Erase overlapping image portions when previewing errors (#3067)
- Force Git checkout for plugin cache repositories (#3169)
- Check compatibility when reusing previewer bytecode cache (#3190)
- Disable kitty keyboard protocol on Windows due to
crossterminability to handle it (#3250) - Prevent quotes in file(1) arguments from being stripped under MSYS2 (#3364)
- Expose
yaCLI in the Snap build (#2904) - Fallback to
PollWatcherfor file changes watching on NetBSD (#2941) - Generate unique image IDs for Kgp to tolerate tmux (#3038)
- Make copy, cut, delete, link, hardlink, download, and upload tasks immediately cancellable (#3429)
- Make preload tasks discardable (#2875)
- Reduce file change event frequency (#2820)
- Upload and download of a single file over SFTP in chunks concurrently (#3393)
- Do not listen for file changes in inactive tabs (#2958)
- Switch to a higher-performance hash algorithm (#3083)
- Sequence-based rendering merge strategy (#2861)
- Store only
Urninstead of fullUrlin find results (#2914) - Zero-copy
UrlBuftoUrlconversion (#3117) - String interning to reduce memory usage of mimetype and URL domain (#3084, #3091)
- Do not pre-allocate memory for Lua tables (#2879)
- Copy-on-write on command data, and avoid converting primitive types to strings thereby allocating memory (#2862)
- Use
AnyUserData::type_id()to reduce stack pushes (#2834) - App data instead of Lua registry to reduce stack pushes (#2880)
- Expose
ui.Wrap(#2810) forward --end-of-wordof the input should consider the mode's delta (#2811)- Make every effort to carry hidden states for dummy files (#2814)
- Redesign tabs (#2745)
- Support embedded cover for video preview (#2640)
- Calculate real-time directory size in spotter (#2695)
- Truncate long items in the file list (#2754, #2759, #2778)
- Obscure input component for inputting passwords (#2675)
- Improve path auto-completion results (#2765)
- New
ya pkgsubcommand (#2770) - New
ya.emit()API (#2653) - New
fs.calc_size()API (#2691) - Allow custom exit code with
quit --code(#2609) - New
--hoveredfor thecopyaction (#2709) sandSkeybinds in the input component (#2678)- Limit memory usage for previewing large images (#2602)
- Show error when image preview fails (#2706)
- New
ui.Align,ui.Wrap, andui.Edge(#2802) - Make
ui.Linerenderable (#2743) - Checks in
ya pubandya emitsubcommands to verify receiver exists and has necessary abilities (#2696) - Make the hover state for
reveal,sort, andhiddenactions stable (#2657) - New
--no-dummyoption forrevealaction (#2664) - Fall back to
CSI 16 twhen PowerShell OpenSSH returns a fake terminal size (#2636)
- Deprecate
[manager]in favor of[mgr]to make it consistent with other APIs (#2803) - Remove
tab_widthas it no longer needs to be set manually (#2745) - Move
tab_activeandtab_inactiveto a dedicated[tabs]section (#2745) - Remove
sixel_fractionas it's no longer needed (#2707)
- Deprecate
ya.mgr_emit(),ya.app_emit()andya.input_emit()(#2653) - Deprecate
ya.preview_widgets()(#2706) - Deprecate the
Command:args()method (#2752) - Deprecate the
ya packsubcommand in favor ofya pkg(#2770) - Deprecate
LEFT,CENTER, andRIGHTonui.Lineandui.Textin favor ofui.Align(#2802) - Deprecate
NONE,TOP,RIGHT,BOTTOM,LEFT, andALLonui.Barandui.Borderin favor ofui.Edge(#2802) - Deprecate
WRAP_NO,WRAPandWRAP_TRIMonui.Textin favor ofui.Wrap(#2802)
- Respect the user's
max_widthsetting in the preset video previewer (#2560) - Reverse the mixing order of theme and flavor configuration (#2594)
- No title is set when starts the first time (#2700)
ya pub-to 0checks if any peer is able to receive the message (#2697)- Detach background and orphan processes from the controlling terminal with
setsid()(#2723) - Always try to create state directory before draining DDS data (#2769)
- Avoid tmux interfering with kitty graphical sequences (#2734)
- Double directory size calculation speed (#2683)
- 9x faster Sixel image preview (#2707)
- Remove intermediate variables in natural sorting algorithm to avoid unnecessary allocation (#2764)
- Avoid unnecessary memory allocation in
ya.truncate()(#2753)
- Enhance
fzfintegration (#2553) - Platform-specific key binding (#2526)
- Custom search engine Lua API (#2452)
- New
followaction to follow files pointed to by symlinks (#2543) - Allow
tab_swapto cycle tabs (#2456) - Show error message when directory fails to load (#2527)
- New
symlink_targetto style the target of symbolic links (#2522) - Use Yazi in Helix directly without Zellij or tmux (#2461)
- New
<C-A>and<C-E>keybindings to select entire line for the input component (#2439) - New
fs.expand_url()API (#2476) - New
ui.Text:scroll()API for setting text to scroll horizontally or vertically (#2589) - Allow initializing input when opening it with actions like
rename,create,find,filter, etc. (#2578) - New
@sync peekannotation for sync previewers (#2487) - New
ya.id("app")to getYAZI_IDin plugins (#2503) - New
basefield for theUrl(#2492) - New
rt.termexports terminal emulator information (#2442) - Allow bulk renaming to include trailing content in addition to the required new names (#2494)
- Log
tmuxcall execution time to logs (#2444)
- Navigation wraparound with new
arrow prevandarrow nextactions (#2485, #2540) - Swap default key bindings for fzf and zoxide (#2546)
- Switch to
resvgas the SVG renderer (#2581) - Make
frag,name,stem,ext, andparentonUrl,nameontab::Tab, andis_hoveredonfs::Fileproperties (#2572) - Replace
tasks_showandclose_inputwithtasks:showandinput:close(#2530) - Replace
sync = truewith the@sync peekannotation (#2487)
- Deprecate
ui.Paddingandui.Rect:padding()(#2574)
- Always show the size in the status bar even in empty directories (#2449)
- Remove the temporary extraction directory forcefully (#2458)
- Align the behavior of the end-of-options marker (
--) with that of the shell (#2431) - Respect hidden status of directory junctions and symlinks themselves on Windows (#2471)
- Rewrite config parser to double the startup speed (#2508)
- Lazy compile and cache lua plugins as binary bytecode (#2490)
- Faster image preview with optimized
magickarguments (#2533) - Cache UserData fields (#2572)
- Expose all theme fields in Lua (#2405)
- Expose almost the entirety of the user's configuration in Lua (#2413)
STDIN_FILENOpoll always returns 0 under SSH (#2427)- Ignore stdin redirection to ensure always accessing the real tty (#2425)
- Incorrect deprecation warning when the plugin doesn't exist (#2418)
- Allow to specify layer for keymap actions (#2399)
- New
rtandthallow to access user configuration and theme scheme in sync/async plugins consistently (#2389, #2392, #2393, #2397) - New
tbl_colandtbl_cellin theme system for spotter table styling (#2391) - Allow different separators to be applied individually to the left and right sides of the status bar (#2313)
ripgrep-allsupport for thesearchaction (#2383)- Respect the user's
max_widthsetting in the preset PDF preloader (#2331) - Respect the user's
wrapsetting in the preset JSON previewer (#2337) - Respect the user's
image_allocsetting in the preset ImageMagick previewer (#2403) - New
externalandremovablefields in thefs.partitions()API (#2343) - CSI-based Vim and Neovim built-in terminal detection for better accuracy (#2327)
- Replace
separator_openandseparator_closewithsep_leftandsep_right(#2313) - Rename the
[completion]component to[cmp](#2399)
- Deprecate
MANAGER,PREVIEW,PLUGIN, andTHEMEin favor ofrtandth(#2389) - Deprecate
ya.manager_emit()in favor ofya.mgr_emit()(#2397)
- Didn't reset previous
Chawhen loading directories in chunks (#2366) - Load mount points with the best effort even if the
/dev/disk/by-labeldirectory does not exist (#2326) - Add maximum preview limit under
/procvirtual file system (#2355)
- New
overalloption under[status]to allow specifying the overall style of the status bar (#2321) - Reduce terminal response wait timeout (#2314)
- Unable to delete sealed files on Windows due to platform differences (#2319)
- Reverse the order of CSI-based and environment-based terminal detection (#2310)
- Mount manager (#2199)
- New
ya.confirm()API (#2095) - New
arrow topandarrow botactions to jump to the top and bottom (#2294) - Support end of options (
--) marker for all actions (#2298) - Replace mode and Vim motions (
W,E,B,^,_) for inputs (#2143) - New
ya pack -dsubcommand to delete packages (#2181) ya packsupports adding and deleting multiple packages at once (#2257)- Theme support for the spotter border and title (#2002)
- Use positional argument instead of
--argsfor thepluginaction (#2299) - Support and hide Windows system files by default (#2149)
- New
--no-cwd-fileoption for thecloseaction (#2185) - Prompt users missing fzf in the zoxide plugin (#2122)
- More decent package locking mechanism (#2168)
- Custom modal component API (#2205)
- Support local
tmuximage preview over SSH - New
@sinceplugin annotation to specify the minimum supported Yazi version (#2290) - Allow preloaders to return an optional
Errorto describe the failure (#2253) - ARM64 Snap package (#2188)
- Support
package.tomlas a symlink (#2245) - New
cx.layerAPI to determine the current UI layer (#2247) - Channel and multi-concurrent task join support for the plugin system (#2210)
- Support
application/mboxmimetype (#2173) cbrandcbzas valid archive extensions (#2077)
- Deprecate
--argsin thepluginaction in favor of a 2nd positional parameter (#2299) - Deprecate plugin entry file
init.luain favor ofmain.lua(#2168) - Deprecate
arrow -99999999andarrow 99999999in favor ofarrow topandarrow bot(#2294) - Deprecate the numeric return value of preloaders in favor of a boolean return value (#2253)
- Deprecate
ya.md5()in favor ofya.hash()(#2168)
before_extexcludes directories since only files have extensions (#2132)- Element style of
ui.Textwas not applied to the entire area (#2093) - Incorrect monorepo sub-plugin path resolution (#2186)
- Use
u32for parsing Linux partition blocks (#2234) - Unmangle the hexadecimal space strings (
"\x20") in Linux partition labels (#2233) - JSON value
nullshould be deserialized as Luanil, not lightweight userdatanull(#2242) - Don't check if has a hovered file in advance, only do so when
--hoveredis explicitly specified (#2105) - Handle broken pipe errors gracefully (#2110)
- Detach the watch registration from the main thread (#2224)
- More supported archive formats to the preset config (#1926)
- New
fs.create()Lua API (#2068) - New
--cwdparameter for theshellaction andfs.cwd()API (#2060) - Allow
noopfor single-key chords by removing the mixing length limit (#2064) - Support for Android platform in the
forqualifier of opener (#2041)
- Set the current working directory in a thread-safe way (#2043)
- Interactive
cdautocomplete doesn't follow the latestCWDchanges (#2025) - Offset cursor shift when deleting multiple files in bulk (#2030)
- Missing a render after resuming from an external blocking process (#2071)
- Missing a hover after reordering from an external plugin (#2072)
- Use a less intrusive
DSRinstead ofDA1workaround to forward terminal responses twice in tmux (#2058) allow-passthroughmust be set toonto preventtmuxfrom forwarding the real terminal's response to the inactive pane (#2052)
- Correctly handle CRLF on Windows in preset archive and JSON plugins (#2017)
- Failed to parse certain image dimensions for Überzug++ backend (#2020)
- Disable passthrough when the user launches Yazi in Neovim inside tmux (#2014)
- Spotter (#1802)
- Support transparent image preview (#1556)
- Auto switch between dark and light icons/flavors based on terminal backgrounds (#1946)
- Allow disabling certain preset keybinds with the new
noopvirtual action (#1882) - New
ya emitandya emit-tosubcommands to emit actions to a specified instance for execution (#1979) - Custom styles for the
confirmcomponent (#1789) - Make the builtin
extractplugin support compressed tarballs (*.tar.gz,*.tar.bz2, etc.) (#1583) - Launch from preset settings if the user's config cannot be parsed (#1832)
- Prioritize paths that need to be processed first during bulk renaming (#1801)
- New
copy --separatoroption to allow specifying the path separator (#1877) - Set a different input title for
create --dir(#1650) - Include package revision hash in
ya pack --list(#1884) - New
loadDDS event (#1980) - New log system (#1945)
- New
ui.Textandui.Tablelayout elements (#1776) - Support passing arguments to previewer/preloader/spotter/fetcher (#1966)
- Move notification from top-right to bottom-right corner to avoid covering content as much as possible (#1984)
- Append the suffix to the end instead of start when generating unique filenames for directories (#1784)
- Allow overriding and rewriting the sync methods of built-in plugins (#1695)
- Fallback to
CSI 16 tfor certain terminals that do not supportTIOCGWINSZ(#2004) - Support calling methods in built-in plugins with arbitrary types of arguments (
selfcan now be omitted) (#1666) - Support
assetsinstallation for theya packsubcommand (#1973) - Complete and consistent support for the
ui.Style()API - Image ICC profiles for better color accuracy (#1808)
- Support reading non-UTF8 data with
Child:read_line()API (#1816) - New
area()method for renderable elements (#1667) yazi --debugsupports detecting whethertmuxis built with--enable-sixel(#1762)
- Eliminate the
x-prefix in MIME types (#1927) - Remove the
vnd.prefix from mimetype to solve differences introduced in the newestfile(1)v5.46 (#1995) - Rename the term
selecttotoggleto reserveselectfor future use (#1773) - Correct the misuse of the term
ctimeand unify others (#1761) - Replace
ffmpegthumbnailerwithffmpegas the video preview backend to support spotter (#1928) - Use an
Erroruserdata instead of a plain error code for I/O errors (#1939) - Remove
ui.ListItemsince it's no longer necessary (#1772) - Decouple coordinates from
ui.List,ui.Bar,ui.Border, andui.Gauge(#1782) - Make
backspaceaction not close the input even when value is empty (#1680) - Remove the meaningless
--confirmoption to simplify theshellaction (#1982) - Use
darkandlightinstead ofuseunder[flavor]to support auto-switching between light and dark modes (#1946) - Unify the
fg_darkandfg_lightinto onefgsincefg_lightis redundant and never used (#1946) - Extend the available styles for
modeby separatingmodefrom theseparatorstyles (#1953)
- Deprecate
--syncoption for thepluginaction (#1891) - Deprecate
ui.Paragraphin favor ofui.Text(#1776) - Deprecate the task info of
peek(),seek(), andpreload()fromselfin favor of ajobparameter (#1966) - Deprecate parameter list of
entry()from its first argument in favor of ajobparameter (#1966) - Deprecate the number of units of
seek()from its first argument in favor of ajobparameter (#1966)
- Introduce a new
btimeterm to alignctimewith Unix (#1761) - Match icon by extension case-insensitively (#1614)
- Copy the CWD path with
c => dregardless even if the directory is empty (#1849) - Respect the
image_qualitysetting in preset PDF previewer (#2006) - Images were not cleared when closing a tab in front of the current tab (#1792)
- Replace control characters to printable characters in plain text preview (#1704)
- One file's MIME type changed multiple times without triggering a preview again (#1682)
- Reset image rendering and skip peeking if the TUI in the background (#1833)
- File upserting should handle deleting in edge cases where the source and target URNs are different (#1737)
- Revise
revisionif the new file list is empty but the previous one was not (#2003) - Update
rustixto fix theenable_raw_mode()error on WSL/Android
- Merge multiple file operations into one to greatly speed up updates in large directories (#1745)
- Eliminate all memory reallocations during sorting (#1846)
- Introduce URN to speed up large directory sorting, updating, locating (#1622, #1652, #1648)
- Improve jemalloc memory allocator efficiency (#1689)
- Lazy load
ui,ya,fs, andps(#1903) - Avoid unnecessary allocations in base64 encoding of inline image protocol (#1639)
- Introduce copy-on-write for event system to eliminate all memory reallocations (#1962)
- Apply rotate in place to images with orientation (#1807)
- Introduce reflow for the rendering engine (#1863)
sizelinemode supports showing the file count for directories (#1591)- Support image preview in Windows Terminal (#1588)
- Add
is_absolute,has_root,starts_with,ends_with,strip_prefixtoUrl(#1605)
- Keybindings disappear when mixing presets with a wrong filter condition (#1568)
- Squeeze
offsetof the file list after resizing window (#1500) - Check compositor support status before using ueberzug wayland output (#1566)
- Fallback to
PollWatcherfor file changes watching on WSL (#1574)
- Truncate long lists in confirm dialogs (#1590)
- New confirm component (#1167)
- Word wrapping in
codepreviewer (#1159) - New
--diroption forcreateaction (#1505) - New
ext()method forUrl(#1528) - Make the builtin
codepreviewer handle invalid carriage return chars and binary streams better (#1550)
- Wait till mimetype is resolved to avoid preview flickering (#1542)
- Use a different cache directory for each user to avoid permission issues (#1541)
- Filter out candidates that overlap with longer key chords from the which component (#1562)
- Overlong single-line text preview containing escape sequences was not being properly escaped (#1497)
- New
image_delayoption debounces image previews to avoid lag caused by terminal image decoding during fast scrolling (#1512) - Only scan the first 1024 bytes to detect if it's binary, apply
\rfixes only to content within the visible range, avoid unnecessary allocations during natural sorting (#1551)
- Start with multiple tabs with different paths (#1443)
- Key notion shorthands such as
<C-S-x>as<C-X>(#1448) - Support
F13-F19keys (#1446) - New
--cursorfor theshellaction (#1422) - New
search_doaction to make it easier to achieve a flat view (#1431) - Portrait orientation preview for EXIF image (#1412)
- Keybinding for the
hardlinkaction (#1461) - New
emptypreviewer for empty and/proc/*files (#1482) - Note about filtering in the help menu (#1361)
- New
tabDDS event on tab switch (#1474) - New
status()method forCommand(#1473)
- Directory loading status (#1439)
- Resolve relative path when expanding path (#1428)
- DDS static messages only work when at least two instances are running (#1467)
- Escape files containing special
\x1bcharacters and render it as plain text (#1395) - 7zip shows different error messages for wrong password (#1451)
- 7zip shows different error messages for RAR and ZIP files (#1468)
- Newly created directories with the same name causing a false positive in directory loading optimization due to having the same modification time (#1434)
- Close stdin before waiting for child process (#1464)
- Package manager (#985, #1110)
- Support mouse event (#1038, #1139, #1232)
- New
extractbuilt-in plugin for archive extracting (#1321) - Redesign icons (#1086)
- Font preview (#1048)
- SVG, HEIC, AVIF, and JPEG XL preview support (#1050, #1249)
- Simplify keybindings (#1241)
- New
hardlinkaction to create hard links (#1268) - Keep file creation time on macOS and Windows (#1169)
- Sort randomly (#1291)
- New linemode to show file ownership (#1238)
- New linemode to show file ctime (#1295)
- New
--hoveredoption for therenameandremoveactions (#1227) - Support Super/Command/Windows key with
D-notation (#1069) - Interactive
cdpath auto-completion supports~expansion (#1081) - Preview files containing non-UTF-8 characters (#958)
- Expand Windows paths like "D:" that only have a drive letter but no root (#948)
- Close confirmation dialogs and exit automatically when the ongoing task gone (#997)
- Case-insensitive special keys in keymappings (#1082)
- Transliteration for natural sorting (#1053)
- New
ya.clipboard()API (#980) - New
debounceoption for theya.input()API (#1025) - Support
yazi-clifor Nix flake (#944) - Support
stdinand pipe forChildAPI (#1033) - New
ya subsubcommand to subscribe to DDS events (#1004) - Allow specifying
$YAZI_IDwith a command-line argument (#1305) - DDS client-server version check (#1111)
- New
bulkDDS event (#937) - Support
cargo binstall yazi-fmandcargo binstall yazi-cli(#1003) - Show
yaCLI version in theyazi --debugoutput (#1005) - Detect terminal type in tmux with CSI sequence in passthrough mode (#977)
- Use Ctrl+c instead of Ctrl+q as the universal close key to follow the conventions
- Replace Alt+k/Alt+j with K/J as the
seekkeybindings to avoid Alt key not working in certain terminals - Replace Ctrl+Enter with Shift+Enter as the alternative key for Shift+o so that it corresponds to Enter being
o(without Shift) - keep original state of
sortaction in favor of specifyingyesornoto explicitly apply a new state to its--reverse,--dir-first, and--translit - Move
mimeplugin from[plugin.preloaders]to[plugin.fetchers]of yazi.toml - Turn
successandcodeinto properties ofStatusinstead of methods - Remove
fs.cha_follow(url)in favor offs.cha(url, true) - Rename
is_block_device,is_char_device, andis_socketofChatois_block,is_char, andis_sockfor simplicity
- Different filenames should be treated as the same file on case-insensitive file systems (#1151)
- Suppress warnings for different name representations of the same file in the case-insensitive file system when renaming (#1185)
- Avoid duplicate candidates in the
whichcomponent (#975) - Sixel support from certain
stforks cannot be detected (#1094) - Move the DDS socket file out of the cache directory to avoid being affected by
yazi --clear-cache - Build
jemallocwith 64KB pagesize on linux/arm64 (#1270) - Cursor gets out of sync occasionally at image previewing through IIP under tmux (#1070)
- Reimplement and significantly speed up archive previewing (#1220)
- Data distribution service (#826, #855, #861, #867, #868, #871, #880, #895, #913, #928, #933, #940)
- Re-implement fzf and zoxide as built-in plugins (#884, #881)
- Preserve files' modified at timestamp while copying (#926)
- New
--orphanoption forshellaction (#887) - Smart-case for completion of interactive
cdpaths (#910) - Allow creating a tab with the startup directory through
tab_createwithout specifying a path (#917) - Bunch of new debugging information to
yazi --debug(#824) - Time-based selection order preservation (#843)
- Placeholder message when there are no files in the list (#900)
- Enhance
ya.dbg()andya.err()by support arbitrary types (#835) - Trigger path completion with both
/and\on Windows (#909) - Allow opening interactively with the
--chosen-fileflag (#920) - Support
YAZI_FILE_ONEin the presetfilepreviewer (#846)
- Kill all spawned processes on exit (#812)
- Prevent pasting a directory into itself (#925)
- Use
BTreeSetfor selected files to maintain order (#799) - CJK text rendering issue where the input popup component overlaps with images (#879)
- Accelerate kitty graphics protocol encoding by avoiding string reallocation (#837)
- Wrap stderr with
BufWriterto avoid frequent system calls thereby increase rendering frame rate (#849) - Switch to
globsetto reduce CPU time spent on matching icons (#908) - Re-implement file watcher in an async way (#877)
- Cache each file's icon to avoid redundant calculations at rendering (#931)
- Port
require()andya.sync()to Rust to avoid plugin information initialization (#853)
- Vim-like notification with new
ya.notify()API (#659, #749, #780) - New
ya.input()API to request user input (#762) - Cross-directory selection (#693)
- Colorize the icons (#683)
- Flavors (#753)
- New counter component shows the number of yanked/selected items (#646)
- New
scrolloffoption to keep a margin when scrolling (#679) - New
<Home>,<End>, and<Delete>keybindings for inputs (#665) - New
<C-p>and<C-n>for the select component to move the cursor up/down (#779) - New
Ctrl+[as an alternative to the escape key (#763) - New option
--hoveredfor theopenaction allows only to open the currently hovered file (#687) - Support musl builds for Linux (#759)
- New
--debugflag to print debug information (#794) - Send a foreground notification to the user when the process fails to run (#775)
- Nested conflict detection for cross-directory selections (#689)
- New
prepend_rulesandappend_rulesfor[open]and[icon](#754, #670) - Call sync functions within an async plugin (#649)
- Allow access to complete app data from all tabs (#644)
- Ability to sort candidates in the which component (#662)
- Expose selected/yanked files as Lua API (#674)
- New
cx.yankedAPI to access yanked files (#788) - New
$0(Unix) /%0(Windows) to access the hovered file inshellaction (#738) - New
ya.hide()API to hide the UI temporarily (#792) - Allow both
/and\for folder creation on Windows (#751) - New
parse()method for the line elements to parse ANSI sequences - New
ui.Clearcomponent to clear areas (#786) - Support
YAZI_FILE_ONEenvironment variable forfile(1)path (#752) - Merge wildcard preloader and previewer rules via
append_preloadersandappend_previewers
- Deprecate the
execproperty in yazi.toml, keymap.toml, and theme.toml in favor ofrun
- Rendering fails when no file type style is matched (#721)
- Cache loaded plugins (#710)
- Cheaper sync context initialization (#643)
- Prefer
raw_get()andraw_set()
- Preview image over SSH (#585)
- New
unyankaction (#313) - Customize number of columns of the which component (#571)
- Support passing arguments to plugin (#587)
- New
image_qualityandsixel_fractionoptions to configure the image preview quality (#576) - New
ya.which()API for custom key events (#617) - New
ya.quote()API to quote strings safely pluginaction for each layer- Plugin-specific state persistence (#590)
- Allow to configure image filter (#586)
- Shorten unit names and add more units to
ya.readable_size() - Support char device in
[filetype](#628) - File hidden attributes on Windows (#632)
- Make
trashcrate optional on Android (#600)
- Parent folder not tracking CWD (#581)
- Input offset is not reset when renaming with
--cursor=startand the filename is too long (#575)
- Read directory in bulk in the background at startup (#599)
- Lazy sorting when loading large directories to reduce CPU consumption (#607)
prepend_keymapandappend_keymapfor configuration mixing (#546)file(1)as the file fallback previewer (#543)- Submit both completion and input with a single press of enter (#565)
- Allow the spawned child processes to suspend (#556)
- New
ya.host_name()API (#550) - Desktop entry and logo (#534)
- Snap package (#531)
- Support Windows ARM64 (#558)
- Image preview in Tabby terminal (#569)
- Can't display file name with invalid UTF-8 (#529)
- New event system allows multiple actions to reuse a single render (#561)
- Renaming may cause a crash when encountering Unicode characters (#519)
- New
filteraction to filter files on the fly (#454) - Sort by file extension (#405)
- Custom preloader and previewer (#401)
- New
pluginaction to run Lua plugins - Auto-completion for input component (#324, #353, #352)
- Start with the specified file hovers over (#358)
- Emacs readline keybindings for inputs (#345, #382)
- New
--emptyand--cursoroptions for therenameaction (#513) - New
--followoption forpasteaction (#436) - Make
copyaction work over SSH with OSC 52 (#447) - New
revealaction (#341) - Support colored icons (#503)
- Support highlighting specific file types (#510)
- Make the position of input and select components customizable (#361)
- New
prepend_preloaders,append_preloaders,prepend_previewers,append_previewersoptions for configuration mixing - Cursor and page key navigation parity with Vim bindings (#386)
- Use terminal ANSI colors for code highlighting by default
- New
image_allocandimage_boundoptions to control image preview memory usage (#376) - New
suppress_preloadoption to hide preload tasks (#430) - New kitty graphics protocol implementation for better compatibility with
tmuxthrough Unicode placeholders (#365) - New
ya.user_name()andya.group_name()API (#469) - New
ya.render()to trigger a UI render - Image orientation support (#488)
- Raise open file descriptors limit at startup (#342)
- Support image preview on WSL (#315)
- Fine-grained scheduling priority (#462)
- New
YAZI_LEVELenvironment variable to indicate the nested level (#514) - New
QuadrantInsideandQuadrantOutsideborder type
- Rename the option
layouttoratioto make it more self-explanatory - Rename the
peekaction toseekto better convey the action of "seeking for" content to preview - Rename the
--dir_firstoption ofsortaction to--dir-firstto make it consistent with the style of other actions - Replace
[plugins.preload]with theinit.luaentry file
jqpreviews empty when the user setstab_size=8(#320)- Precache n-1 and n+1 pages (#349)
- Popup components being covered by previewed images (#360)
- Rust panics instead of returning an error when file times are invalid (#357)
- Clear Sixel image with empty characters instead of
\x2B[Kto be compatible with GNOME VTE (#309) - Use
WAYLAND_DISPLAYandDISPLAYto detect Wayland/X11 whenXDG_SESSION_TYPEis not set (#312)
- Chunk loading for MIME types (#467)
- Fallback to plain highlighter for long text (#329)
- Reduce peak memory footprint during decoding large images (#375)
- Clear only necessary cells when hiding images (#369)
- New UI rendering architecture (#468)
- Partial rendering progress and composite into a complete UI to reduce CPU consumption caused by frequent progress updates (#509)
- New
findaction to find files (#104) - Linemode to show extra file info (#291)
- New
sort_sensitiveoption (#155) - Cross-platform opener rules (#289)
- Multiple openers for a single open rule (#154)
- Vim-like
gg,Gin the preset key mappings for boundary jumps - Theme system (#161)
- New
--forceoption forremove,create,renameactions (#179, #208) - Image preview within tmux (#147)
- New
linkaction creates symlinks to the yanked files (#167) - New
orphanoption for opener rules to detach processes from the task scheduler (#216) - New
backwardandforwardactions - New
--smartoption for thefindaction to support smart case (#240) - Sorting for each tab individually (#131)
- Suspend process with
Ctrl+z(#120) - Percentage values for the
arrowaction to scroll half/full page (with newly added Vi-like<C-u>,<C-d>,<C-b>, and<C-f>keybindings) (#213) - Show keywords when in search mode (#152)
- Tab switch wraparound (#160)
- Highlight matched keywords in find mode (#211)
- Customizable main UI border styles (#278)
<BackTab>key notion (#209)- Use of environment variables in
cdpaths (#241) - Nix Flakes package (#205)
- New
V,D,CVim-like keybindings for the input component - New
--no-cwd-fileoption for thequitaction to exit without writing the CWD file (#245) - Fallback to built-in code highlighting if
jqis not installed (#151) - New
realtimeoption for the input to support real-time input feedback (#127) - RGBA-16 image preview (#250)
- FreeBSD and NetBSD support (#169, #178)
- Trash files on NetBSD (#251)
- Image preview support on Mintty (Git Bash) terminal
- Make glob expressions case-insensitive by default (with new
\sfor sensitive) (#156) - Make help items filtering case-insensitive
show_hiddennot properly applied to hovered folder (#124)- Notification of file changes in linked directories (#121)
- Restore default cursor style when closing input from insert mode
- Task manager cursor position not reset after task cancellation
- Redirect clipboard process' stderr to /dev/null
- Delegate the
SIGINTsignal of processes withorphan=trueto their parent (#290) - Inconsistent
Shiftkey behavior on Unix and Windows (#174)
- Load large folders in chunks (#117)
- Reimplemented natural sorting algorithm for ~6x faster case-insensitive sorting
- Kill process immediately after getting enough JSON or archive preview content to avoid wasting CPU resources (#128)
- Help menu (#93)
- Scrollable preview (#86)
- Natural sorting (#82)
- Windows support
- New
copyaction to copy file paths to clipboard (#72) - File chooser mode (#69)
- Show symlink path (#67)
- Respect
$EDITORenvironment variable when opening text files (#91) - Customizable main UI layout ratio (#76)
- Allow accessing selected files when running shell commands (#73)
- Update MIME type when file changes are detected (#78)
- More clipboard backend:
xclipandxsel, and Windows (#74, #75) - New
cache_diroption (#96) - New
YAZI_CONFIG_HOMEto specify the configuration directory (#97) - Black Box terminal image preview support (#99)
- Deprecate
--cwdin favor of the positional argument (#100)
- Make file(1) follow symbolic links when fetching file MIME type (#77)
- Wrong height of the select component (#65)
- Regression causing UI tearing when previewing images
- Specify
doNotMoveCursorto make WezTerm render images sensibly
- Bulk rename (#50)
- PDF preview and precache (#18)
- New
sort_dir_firstoption (#49) - Code highlighting supports more languages (#22)
- Change the shell CWD on exit with the shell wrapper (#40)
- Allow customizing the display name of openers (#31)
- New
shellaction (#24) - Command template support for the
shellaction (#48) - Interactive
cd(#43) - Show the output of running tasks in real time (#17)
- Allow using the current directory name as tab name (#41)
- Custom status bar separator (#30)
- Fallback for opening files when no openers are available
- Preview files with
inode/emptyandapplication/jsonMIME types - Transparent image support for the Sixel backend (#14)
- Refresh image preview after terminal restoration
- New
micro_workers,macro_workers, andbizarre_retryoptions to control task concurrency (#53)
- PDF cache cannot be generated with a large
max_widthvalue (#28) show_hiddenoption not working (#47)- Wrong task name when
shellaction has no arguments
- Make code highlighting discardable (#20)
- Improved performance of highlighting large JSON files (#23)
- Wrap
stdoutwithBufWriterto improve image preview performance (#55) - Improved bulk rename performance (#54)
- New
sortaction to change sorting method on the fly (#7) - Which-key component to support multi-key chords (#4)
- Hover the cursor over newly created files automatically (#10)
- Make folders openable (#9)
- Several default goto key mappings
- Support Überzug++ as the image preview backend for X11/Wayland (#12)
- Cut input content to the system clipboard (#6)
- Input component supports
undofor cursor position - Support for bracketed paste (#5)
- Cache directory size to avoid redundant calculations (#11)
- Arrow keys are now bound for navigation by default (along with existing Vim-style bindings)
- Horizontal scrolling support for the
inputcomponent - Visual mode for the input component
- New
yankandpasteactions for the input component - New
undoandredoactions for theinputcomponent
- Cannot delete the last character of the input if at the end of the word
- Decode images in a dedicated blocking thread to avoid blocking the UI
- Preset configurations
- New
openaction - Select component for interactive
open - Plain text and archive preview
- Search files with
fdandrg - Jump around with
fzfandzoxide - Flat view for search results
- Precache images and videos
- Return to its parents if the CWD no longer exists
- Confirm when deleting files or exiting
- Custom status bar colors
- Build errors on Linux
- Number of remaining tasks cannot be updated