Skip to content

chore(deps): update all non-major dependencies - #58

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/all-non-major
Open

chore(deps): update all non-major dependencies#58
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/all-non-major

Conversation

@renovate

@renovate renovate Bot commented Apr 21, 2026

Copy link
Copy Markdown
Contributor

ℹ️ Note

This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Type Update Change
KSXGitHub/github-actions-deploy-aur action minor v4.1.3v4.2.0
anyhow dependencies patch 1.0.1021.0.104
async-trait dependencies patch 0.1.890.1.92
chrono dependencies patch 0.4.440.4.45
clap dependencies patch 4.6.14.6.6
env_logger dependencies patch 0.11.100.11.11
futures (source) dependencies patch 0.3.320.3.34
libc dependencies patch 0.2.1860.2.189
log dependencies patch 0.4.290.4.34
ratatui (source) dependencies minor 0.290.30
serde (source) dependencies patch 1.0.2281.0.229
strum dependencies minor 0.27.20.28.0
strum_macros dependencies minor 0.270.28
tokio (source) dependencies minor 1.52.11.53.1
toml dependencies patch 1.1.2+spec-1.1.01.1.5
tui-input dependencies minor 0.140.15
tui-qrcode dependencies minor 0.1.30.2.0
zbus dependencies minor 5.15.05.19.0

Release Notes

KSXGitHub/github-actions-deploy-aur (KSXGitHub/github-actions-deploy-aur)

v4.2.0

Compare Source

Add a feature to sync AUR repo (#​52).

dtolnay/anyhow (anyhow)

v1.0.104

Compare Source

  • Update syn dev-dependency to version 3

v1.0.103

Compare Source

  • Fix Stacked Borrows violation (UB) in Error::downcast_mut (#​451, #​452)
dtolnay/async-trait (async-trait)

v0.1.92

Compare Source

  • Resolve double_must_use clippy lint in generated code (#​303)

v0.1.91

Compare Source

v0.1.90

Compare Source

  • Update to syn 3
chronotope/chrono (chrono)

v0.4.45: 0.4.45

Compare Source

What's Changed

clap-rs/clap (clap)

v4.6.6

Compare Source

Features
  • Add Command::get_overridden_usage

v4.6.5

Compare Source

v4.6.4

Compare Source

Internal
  • Update to syn v3

v4.6.3

Compare Source

Fixes
  • (derive) Allow "literal".function() as attribute values

v4.6.2

Compare Source

Fixes
  • (help) Say alias when there is only one
rust-cli/env_logger (env_logger)

v0.11.11

Compare Source

Internal
  • Updated env_filter
rust-lang/futures-rs (futures)

v0.3.34

Compare Source

v0.3.33

Compare Source

  • Fix ReadLine's soundness issue regarding to exception safety. (#​3020)
  • Fix unsound Send impl for IterPinRef and Iter. (#​3003)
  • Fix stacked borrows violation in compat01as03 implementation. (#​3012)
  • Fix memory leak in FuturesUnordered::IntoIter. (#​3005)
  • Add portable-atomic-alloc feature and use it in FuturesUnordered. (#​3007)
  • Re-export alloc::task::Wake. (#​3010)
  • Update spin to 0.12. (#​3014)
rust-lang/libc (libc)

v0.2.189

Compare Source

Added
  • Emscripten: Add pthread_sigmask, sigwait, sigwaitinfo, sigtimedwait, faccessat, and pthread_kill (#​5270)
  • Linux SPARC: Enable the clone3 syscall (#​4980)
  • Solarish: Add CLOCK_PROCESS_CPUTIME_ID and CLOCK_THREAD_CPUTIME_ID (#​5274)
Deprecated
  • Deprecate CLONE_INTO_CGROUP and CLONE_CLEAR_SIGHAND. These overflow their types and will be changed to a larger size in the future. (8c6e6710458d)
Fixed
  • Musl riscv32: Rename padding fields to avoid a conflict and fix the build (2499ff0ad993)
  • NuttX: Fix wchar_t definition under Arm (#​5245)
  • Windows: Add back link names for time-related symbols (#​5300)

v0.2.188

Compare Source

Changed

These were removed in 0.2.187 because libc does not actually make Send and Sync
guarantees about DIR (or other extern types), but this caused some crates to break.
The traits are added back for now to allow time to migrate, but will be removed again
in the future; please make sure your crates are not relying on libc::DIR: Send or
libc::DIR: Sync.

v0.2.187

Compare Source

This release contains a number of improvements related to 64-bit time_t configuration.
Of note the existing RUST_LIBC_UNSTABLE_* environment variables have been replaced
with configuration options. The new way to use these is:

RUSTFLAGS='--cfg=libc_unstable_musl_v1_2_3' cargo ...
RUSTFLAGS='--cfg=libc_unstable_gnu_time_bits="64"' cargo ...

Being able to set this via RUSTFLAGS makes it easier to only apply configuration to
specific targets (and notably, not the host if build scripts are used).

There are two other notable changes:

  • The 32-bit windows-gnu targets now respect libc_unstable_gnu_time_bits

  • uClibc now supports a similar configuration option:

    RUSTFLAGS='--cfg=libc_unstable_uclibc_time64'

As a reminder, these options are under active development and may change in the future
(hence the "unstable" in the name). It likely that we will harmonize everything under a
single configuration option before considering them stable.

Support
  • Add support for aarch64-unknown-linux-pauthtest (#​5065)
  • Add support for new QNX targets (#​5241)
  • Better document breaking change policy and recommended usage (#​5179)
Added
  • Android: Add POSIX_SPAWN_* constants (#​5104)
  • Android: Add getpwent, setpwent, and endpwent (#​5160)
  • Android: Add preadv2 and pwritev2 (#​5157)
  • Android: Add seccomp_notif* structures (#​5224)
  • Android: Add timer_[create, delete, getoverrun, gettime, settime] (#​5108)
  • Apple: Add PROC_PIDT_SHORTBSDINFO and proc_bsdshortinfo (#​5110)
  • Apple: Add SIOC* constants from sockio.h (#​5263)
  • Apple: Add _IOR, _IOW, _IOWR (#​5264)
  • Apple: Add bpf_program and bpf_insn (#​5235)
  • Apple: Add additional kqueue constants (#​5077)
  • Apple: Update vm_statistics64 with recently added fields (#​5253)
  • Apple: add IN6_IFF_* and SIOCGIFAFLAG_IN6 (#​5239)
  • Dragonfly: Add O_*, POSIX_FADV_*, NI*, and a few other missing constants (#​5116)
  • Dragonfly: add fdatasync, dlvsym, reallocarray, qsort_r, pthread_*affinity_np, ftok, extattr_*, and dup3 (#​5116)
  • Emscripten: Add in6_pktinfo (#​5256)
  • FreeBSD: Add SOL_LOCAL (#​5185)
  • FreeBSD: Add DLT_* constants (#​5235)
  • FreeBSD: Add PROC_LOGSIGEXIT_* and PPROT_* (#​4657)
  • FreeBSD: Add SO_RERROR (#​5260)
  • FreeBSD: add IN6_IFF_*, in6_ifreq, and SIOCGIFAFLAG_IN6 (#​5239)
  • FreeBSD: add _IO* helpers from sys/ioccom.h (#​5239)
  • Glibc: Add PTHREAD_*_MUTEX_INITIALIZER_NP for riscv64 (#​5094)
  • Glibc: Add new fields to struct tcp_info (#​5215)
  • Linux: Add OPEN_TREE_NAMESPACE (#​5145)
  • Linux: Add SECCOMP_IOCTL_* constants (#​5224)
  • Linux: Add SO_DETACH_REUSEPORT_BPF (#​5081)
  • Linux: Add futex_waitv (#​5125)
  • Linux: Add constants for fsopen, fsconfig, fsmount, and fspick (#​5145)
  • Linux: Add fields to statx present since 6.16 (#​4621)
  • Linux: Add network entry API (#​5049)
  • Linux: add ifaddrmsg and rtattr (#​5234)
  • Linux: add sockaddr_iucv (#​5041)
  • MacOS: Add ENOTCAPABLE (#​4925)
  • Musl: Add renameat2 (#​5113)
  • NuttX: Add F_SETFD (#​5258)
  • NuttX: Add POLLRD* and POLLWR* constants (#​5258)
  • NuttX: Add SO_KEEPALIVE and TCP keepalive constants (#​5111)
  • NuttX: Add TCP_MAXSEG (#​5258)
  • NuttX: Add eventfd and EFD_* constants (#​5258)
  • NuttX: Add pipe2 (#​5258)
  • NuttX: Add strerror_r (#​5258)
  • NuttX: Add netinet structs and constants (#​5258)
  • NuttX: Add socket structs, functions and constants (#​5258)
  • QuRT: Add POSIX timer functions (#​5091)
  • QuRT: Add missing pthread functions from QuRT SDK headers (#​5091)
  • QuRT: Add missing unistd process and file functions (#​5091)
  • QuRT: Add mqueue subsystem (message queues, select/pselect) (#​5091)
  • Redox: Add *at and dirent functions (#​5117)
  • Solarish: Add IP TTL and IPv6 Hop Limit consts (#​5089)
  • Solarish: Add port_alert and PORT_ALERT* constants (#​5203)
  • Solarish: add AI_CANONNAME (#​5085)
  • aarch64: Add SYS_sendfile and SYS_fadvise64 constants (#​5133)
Deprecated
  • Dragonfly: Deprecate compatibility aliases CPUCTL_RSMSR and UTX_DB_LASTLOG (#​5116)
Fixed
  • breaking NetBSD: Correct ts from *const timespec to *mut timespec in _lwp_park` (#​5169)
  • breaking Linux GNU: Change overflowing PTRACE_*ET_SYSCALL_USER_DISPATCH_CONFIG constants from u8 to c_uint (#​4936)
  • Fix the soundness bug in the representation of extern types (#​5021)
  • Cygwin: fix cpuset_t typo in CPU_ZERO (#​5098)
  • Dragonfly: ABI fixes including regex offsets, ifaddrs, pthread barriers, process sizing fields, and mcontext alignment (#​5116)
  • Dragonfly: Correct values of CPUCTL_CPUID*, EV_HUP, and EV_SYSFLAGS (#​5116)
  • Emscripten: fix pthread type sizes for wasm64 (MEMORY64) (#​5156)
  • Horizon: Fix the value of POLLOUT (#​5090)
  • Linux: Correct the value of EPIOC[GS]PARAMS with nonstandard _IOC (#​5188)
  • Make VxWorks shims unsafe (#​3727)
  • NetBSD: Correct getmntinfo to link __getmntinfo13 (#​5251)
  • QNX: Fix the value of PTHREAD_MUTEX_INITIALIZER (#​5241)
  • QuRT: fix type and definition inaccuracies against SDK headers (#​5091)
  • Windows: Correctly link to 32-bit time routines on 32-bit platforms (#​5059)
  • uClibc: Fix constants accidentally removed (#​5141)
  • uclibc: Fix build issues (#​5046)
  • uclibc: Fix type of PRIO_PROCESS and friends (#​5046)
Changed
  • AIX, TeeOS: Drop unneeded -> c_void (#​5240)
  • Apple: Change AIO_LISTIO_MAX to account for changes in macOS 27 (#​5253)
  • Glibc: Update the value of MS_NOUSER (#​5215)
  • L4Re: Update definitions and test infra (#​5275)
  • Linux: Update the value of SW_MAX and SW_CNT (#​5215)
  • MacOS: Add swapped_count to vm_statistics64 (#​4926)
  • Windows: Windows-GNU now respects libc_unstable_gnu_time_bits for 64-bit time_t config (#​5062)
Removed
  • Dragonfly: Remove FreeBSD-only Elf32_Lword, ip_mreq_source, and IP_ constants (#​5116)
  • Dragonfly: Remove private VM type bindings (#​5116)
  • Linux: Remove KERN_REALROOTDEV and VM_LAPTOP_MODE (#​5177)
  • VxWorks: Remove non-user-facing (kernel) API (#​5129)
Other
  • Print config information if LIBC_BUILD_VERBOSE is set (#​5272)
  • Annotate *LAST constants as potentially changing (#​5120)
  • Annotate *MAX constants as potentially changing (#​5122)
  • BSD: Annotate ELAST constants as potentially changing (#​5118)
  • FreeBSD: Annotate RAND_MAX as potentially changing (#​5119)
  • Linux, L4re: Annotate *NUM constants as potentially changing (#​5123)
  • QNX: Restructure to support new platforms (#​4984)
  • Unix: Annotate *COUNT constants as potentially changing (#​5121)
  • uClibc: Add unstable support of 64-bit time_t (#​5046)
  • (internal) FreeBSD: Replace unstable env to set version with an unstable cfg (#​5201)
  • (internal) Glibc: Remove public configuration for file offset bits (#​5268)
  • (internal) Linux: Delete config via RUST_LIBC_UNSTABLE_LINUX_TIME_BITS64 (#​5197)
  • (internal) Replace RUST_LIBC_UNSTABLE env with libc_unstable* cfg (#​4977)
rust-lang/log (log)

v0.4.34

Compare Source

v0.4.33

Compare Source

v0.4.32

Compare Source

What's Changed
  • Support Value -> string conversions with kv + std features instead of kv_std by @​tisonkun in #​729

Full Changelog: rust-lang/log@0.4.31...0.4.32

v0.4.31

Compare Source

What's Changed
  • Support Value -> string conversions with kv + std features instead of kv_std by @​tisonkun in #​729

Full Changelog: rust-lang/log@0.4.31...0.4.32

v0.4.30

Compare Source

What's Changed
New Contributors

Full Changelog: rust-lang/log@0.4.30...0.4.31

ratatui/ratatui (ratatui)

v0.30.2

Compare Source

a gift

We are excited to announce the new version of ratatui - a Rust library that's all about cooking up TUIs 👨‍🍳🐀

Release highlights: https://ratatui.rs/highlights/v0302/

⚠️ List of breaking changes can be found here.

Features
  • 90639c1 (uncategorized) Add Termina backend by @joshka in #​2561

    Summary

    • add the ratatui-termina backend crate using the published termina
      crate
    • expose the backend through the termina feature and Ratatui
      prelude/backend re-exports
    • add a small Termina event-loop example and wire the backend into CI,
      xtask, README generation, and docs

    Refs #​1784

    Validation

    • cargo +nightly fmt
    • cargo check -p ratatui-termina --all-features --all-targets
    • cargo check -p ratatui --no-default-features --features termina
    • cargo check -p xtask
    • cargo check -p release-header
    • cargo xtask check-backend termina
    • cargo xtask test-backend termina
    • cargo xtask rdme --check
    • markdownlint-cli2 ARCHITECTURE.md ratatui-termina/README.md .github/ISSUE_TEMPLATE/bug_report.md

Bug Fixes
  • fce3c80 (widgets) Require thread-safe shadow effects by @joshka in #​2584

    Summary

    • require custom shadow effects to preserve the auto traits expected by
      Block-backed widgets
    • document the CellEffect auto-trait contract
    • add a public widget regression test for the affected ratatui::widgets
      re-exports

    Fixes #​2583


  • e306ce6 (buffer) Create updates for "uncovered" cells by @benjajaja in #​2587

    When a wide cell from the previous buffer is replaced by a short/normal
    cell, the trailing cell does not get an update if its content does not
    change. But if the wide cell has a background (or other) style, the
    terminal did render the trailing cell with that style.

    Force trailing cells to update if background, underline, or modifiers
    are different than the wide cell. We can ignore foreground.

    Fixes #​2585 (see that for the detailed visual reports)

  • 81e667f (scrollbar) Keep a large thumb within the track at the end by @satyakwok in #​2594

    Closes #​2582.

    Problem

    When the content is shorter than the viewport, the thumb is large
    relative to the track. With the position at the end, part_lengths
    clamped thumb_start to track_length - 1 while thumb_length was
    clamped independently to [1, track_length], so thumb_start + thumb_length could exceed track_length.

    bar_symbols lays out begin + track_start + thumb + track_end + end
    and zips it against the cells of the area. When the thumb overruns the
    track, track_end saturates to 0 but the thumb still emits more cells
    than the track can hold, so the trailing end symbol is pushed past the
    end of the area. The last visible cell ends up being a thumb () where
    the end arrow () should be.

    Concretely, for the issue's repro (VerticalRight, content_length = 9, position = 8, height 24): track is 22, thumb_length = 17,
    thumb_start = 6, and 6 + 17 = 23 > 22.

    This is a regression from v0.30.0, where thumb_length was derived as
    thumb_end - thumb_start and therefore always fit within the track.

    Fix

    Clamp thumb_start to track_length - thumb_length (instead of
    track_length - 1) so the thumb always fits within the track and the
    end symbol is preserved.

    Test

    Two regression tests, both fail on main and pass with the fix:

    • thumb_stays_within_track_for_large_thumb_at_end checks
      part_lengths directly with the issue's parameters — asserts
      thumb_start + thumb_length <= track_length and that the parts sum to
      the track length.
    • render_scrollbar_keeps_end_symbol_for_large_thumb renders the #​2582
      case (both arrows, large thumb at the end) and asserts the end symbol is
      drawn rather than overwritten by a thumb cell.

    All existing scrollbar tests still pass.

Miscellaneous Tasks
  • c75d778 (ci) Add cargo-udeps dependency check by @joshka in #​2599

    Adds cargo xtask udeps and runs it from CI as a required job.

    This complements cargo-machete rather than replacing it. cargo-machete
    is a fast static source scan, which is why it missed the package-level
    unused deps fixed in #​2598 when the same dependency names were still
    referenced by example crates. cargo-udeps compiles the workspace and
    checks rustc dep-info, so it can catch unused dependency declarations
    for the package being checked.

    To make the new job pass, this also removes the remaining true-positive
    unused dev-deps and records explicit cargo-udeps ignores for current
    false positives / intentional cases: ratatui-core critical-section,
    ratatui-crossterm's duplicate crossterm version feature shape, and
    ratatui-termwiz's doc-example-only ratatui dev-dependency.

    I searched existing issues and PRs for udeps / cargo-udeps / "cargo
    udeps". I did not find prior ratatui discussion about adopting
    cargo-udeps; the only hits were Dependabot PR bodies for
    taiki-e/install-action release notes mentioning cargo-udeps version
    updates, for example #​1971, #​2095, #​2194, and #​2522.

    Validation:- cargo xtask udeps

    • cargo xtask format --check

  • 4a63d41 (uncategorized) Remove unused dependencies by @KikiKian in #​2598

    Audit removes these dependencies that are not used:

    ratatui/Cargo.toml — Removed from [dev-dependencies]:

    • futures
    • rand_chacha
    • tokio
    • tracing
    • tracing-appender
    • tracing-subscriber

    ratatui-core/Cargo.toml — Moved from [dependencies] →
    [dev-dependencies]:

    • indoc

Continuous Integration
  • 36854ef (uncategorized) Add auto-merge required gate by @joshka in #​2596

    Summary

    This makes GitHub auto-merge usable for Ratatui PRs once maintainers are
    happy with the change but CI is still running.

    The workflow change adds a single aggregate required job to the main
    CI workflow. The repository now has auto-merge
    enabled

    and an ensure checks pass
    ruleset
    that requires that required status context on main.

    Why

    Without a required status context, GitHub's auto-merge button is not
    useful for the maintainer flow we want. The goal is to let a maintainer
    review a PR, decide it is ready, click auto-merge, and move on without
    coming back later just to check whether the remaining jobs finished.

    This does not relax the merge policy. GitHub's own auto-merge behavior
    is to merge only after all required reviews and required status checks
    are satisfied. This change gives GitHub a stable required status to wait
    on automatically.

    Precedent

    I have been using this same auto-merge pattern in
    ratatui/tui-widgets, where
    it has worked well for the intended maintainer flow: once a PR looks
    ready, I can enable auto-merge and let GitHub merge it after the
    remaining checks and review requirements are satisfied.

    How it works

    The new required job depends on the main CI jobs in
    .github/workflows/ci.yml and always runs after them. It fails if any
    required dependency fails, is cancelled, or is skipped.

    The repository ruleset requires only this aggregate required context
    instead of requiring every individual matrix job separately. That gives
    GitHub one stable status to wait on while preserving the existing CI
    coverage.

    Things to know

    • Auto-merge is opt-in per PR. Maintainers still choose when to click
      it.
    • It does not skip review requirements, status checks, labels, or any
      other protection rule.
    • A PR with auto-merge enabled can still show as blocked while checks or
      required reviews are pending. That is expected.
    • If something needs to merge normally, maintainers can still use the
      regular merge path or an allowed ruleset bypass. This is a convenience
      path, not a hard blocker.
    • Existing open PRs may need a rebase or synchronize event after this
      lands so they pick up the new required workflow job.
    • If a new required CI job is added later, it should be added to the
      required.needs list or it will not be represented by the aggregate
      gate.
    • Jobs that are intentionally allowed to fail should be handled
      carefully before adding them to required.needs, because skipped,
      cancelled, and failed dependencies make the aggregate fail.

    Current PR state

    Auto-merge is already enabled on this PR. If you approve it and the
    required checks pass, GitHub will squash-merge it automatically;
    approving it is enough to let the PR merge once the remaining
    requirements are satisfied.

    GitHub docs

    Validation

    • ruby -e 'require "yaml"; YAML.load_file(".github/workflows/ci.yml"); puts "ok"'
    • actionlint .github/workflows/ci.yml
    • Verified ratatui/ratatui has allow_auto_merge: true
    • Verified the active ensure checks pass ruleset requires status
      context required
    • Verified this PR has squash auto-merge enabled and is blocked pending
      checks/review
New Contributors
  • @satyakwok made their first contribution in #​2594
  • @KikiKian made their first contribution in #​2598

Full Changelog: ratatui/ratatui@ratatui-v0.30.1...ratatui-v0.30.2

v0.30.1

Compare Source

a gift

We are excited to announce the new version of ratatui - a Rust library that's all about cooking up TUIs 👨‍🍳🐀

Release highlights: https://ratatui.rs/highlights/v0302/

⚠️ List of breaking changes can be found here.

Features
  • 90639c1 (uncategorized) Add Termina backend by @joshka in #​2561

    Summary

    • add the ratatui-termina backend crate using the published termina
      crate
    • expose the backend through the termina feature and Ratatui
      prelude/backend re-exports
    • add a small Termina event-loop example and wire the backend into CI,
      xtask, README generation, and docs

    Refs #​1784

    Validation

    • cargo +nightly fmt
    • cargo check -p ratatui-termina --all-features --all-targets
    • cargo check -p ratatui --no-default-features --features termina
    • cargo check -p xtask
    • cargo check -p release-header
    • cargo xtask check-backend termina
    • cargo xtask test-backend termina
    • cargo xtask rdme --check
    • markdownlint-cli2 ARCHITECTURE.md ratatui-termina/README.md .github/ISSUE_TEMPLATE/bug_report.md

Bug Fixes
  • fce3c80 (widgets) Require thread-safe shadow effects by @joshka in #​2584

    Summary

    • require custom shadow effects to preserve the auto traits expected by
      Block-backed widgets
    • document the CellEffect auto-trait contract
    • add a public widget regression test for the affected ratatui::widgets
      re-exports

    Fixes #​2583


  • e306ce6 (buffer) Create updates for "uncovered" cells by @benjajaja in #​2587

    When a wide cell from the previous buffer is replaced by a short/normal
    cell, the trailing cell does not get an update if its content does not
    change. But if the wide cell has a background (or other) style, the
    terminal did render the trailing cell with that style.

    Force trailing cells to update if background, underline, or modifiers
    are different than the wide cell. We can ignore foreground.

    Fixes #​2585 (see that for the detailed visual reports)

  • 81e667f (scrollbar) Keep a large thumb within the track at the end by @satyakwok in #​2594

    Closes #​2582.

    Problem

    When the content is shorter than the viewport, the thumb is large
    relative to the track. With the position at the end, part_lengths
    clamped thumb_start to track_length - 1 while thumb_length was
    clamped independently to [1, track_length], so thumb_start + thumb_length could exceed track_length.

    bar_symbols lays out begin + track_start + thumb + track_end + end
    and zips it against the cells of the area. When the thumb overruns the
    track, track_end saturates to 0 but the thumb still emits more cells
    than the track can hold, so the trailing end symbol is pushed past the
    end of the area. The last visible cell ends up being a thumb () where
    the end arrow () should be.

    Concretely, for the issue's repro (VerticalRight, content_length = 9, position = 8, height 24): track is 22, thumb_length = 17,
    thumb_start = 6, and 6 + 17 = 23 > 22.

    This is a regression from v0.30.0, where thumb_length was derived as
    thumb_end - thumb_start and therefore always fit within the track.

    Fix

    Clamp thumb_start to track_length - thumb_length (instead of
    track_length - 1) so the thumb always fits within the track and the
    end symbol is preserved.

    Test

    Two regression tests, both fail on main and pass with the fix:

    • thumb_stays_within_track_for_large_thumb_at_end checks
      part_lengths directly with the issue's parameters — asserts
      thumb_start + thumb_length <= track_length and that the parts sum to
      the track length.
    • render_scrollbar_keeps_end_symbol_for_large_thumb renders the #​2582
      case (both arrows, large thumb at the end) and asserts the end symbol is
      drawn rather than overwritten by a thumb cell.

    All existing scrollbar tests still pass.

Miscellaneous Tasks
  • c75d778 (ci) Add cargo-udeps dependency check by @joshka in #​2599

    Adds cargo xtask udeps and runs it from CI as a required job.

    This complements cargo-machete rather than replacing it. cargo-machete
    is a fast static source scan, which is why it missed the package-level
    unused deps fixed in #​2598 when the same dependency names were still
    referenced by example crates. cargo-udeps compiles the workspace and
    checks rustc dep-info, so it can catch unused dependency declarations
    for the package being checked.

    To make the new job pass, this also removes the remaining true-positive
    unused dev-deps and records explicit cargo-udeps ignores for current
    false positives / intentional cases: ratatui-core critical-section,
    ratatui-crossterm's duplicate crossterm version feature shape, and
    ratatui-termwiz's doc-example-only ratatui dev-dependency.

    I searched existing issues and PRs for udeps / cargo-udeps / "cargo
    udeps". I did not find prior ratatui discussion about adopting
    cargo-udeps; the only hits were Dependabot PR bodies for
    taiki-e/install-action release notes mentioning cargo-udeps version
    updates, for example #​1971, #​2095, #​2194, and #​2522.

    Validation:- cargo xtask udeps

    • cargo xtask format --check

  • 4a63d41 (uncategorized) Remove unused dependencies by @KikiKian in #​2598

    Audit removes these dependencies that are not used:

    ratatui/Cargo.toml — Removed from [dev-dependencies]:

    • futures
    • rand_chacha
    • tokio
    • tracing
    • tracing-appender
    • tracing-subscriber

    ratatui-core/Cargo.toml — Moved from [dependencies] →
    [dev-dependencies]:

    • indoc

Continuous Integration
  • 36854ef (uncategorized) Add auto-merge required gate by @joshka in #​2596

    Summary

    This makes GitHub auto-merge usable for Ratatui PRs once maintainers are
    happy with the change but CI is still running.

    The workflow change adds a single aggregate required job to the main
    CI workflow. The repository now has auto-merge
    enabled

    and an ensure checks pass
    ruleset
    that requires that required status context on main.

    Why

    Without a required status context, GitHub's auto-merge button is not
    useful for the maintainer flow we want. The goal is to let a maintainer
    review a PR, decide it is ready, click auto-merge, and move on without
    coming back later just to check whether the remaining jobs finished.

    This does not relax the merge policy. GitHub's own auto-merge behavior
    is to merge only after all required reviews and required status checks
    are satisfied. This change gives GitHub a stable required status to wait
    on automatically.

    Precedent

    I have been using this same auto-merge pattern in
    ratatui/tui-widgets, where
    it has worked well for the intended maintainer flow: once a PR looks
    ready, I can enable auto-merge and let GitHub merge it after the
    remaining checks and review requirements are satisfied.

    How it works

    The new required job depends on the main CI jobs in
    .github/workflows/ci.yml and always runs after them. It fails if any
    required dependency fails, is cancelled, or is skipped.

    The repository ruleset requires only this aggregate required context
    instead of requiring every individual matrix job separately. That gives
    GitHub one stable status to wait on while preserving the existing CI
    coverage.

    Things to know

    • Auto-merge is opt-in per PR. Maintainers still choose when to click
      it.
    • It does not skip review requirements, status checks, labels, or any
      other protection rule.
    • A PR with auto-merge enabled can still show as blocked while checks or
      required reviews are pending. That is expected.
    • If something needs to merge normally, maintainers can still use the
      regular merge path or an allowed ruleset bypass. This is a convenience
      path, not a hard blocker.
    • Existing open PRs may need a rebase or synchronize event after this
      lands so they pick up the new required workflow job.
    • If a new required CI job is added later, it should be added to the
      required.needs list or it will not be represented by the aggregate
      gate.
    • Jobs that are intentionally allowed to fail should be handled
      carefully before adding them to required.needs, because skipped,
      cancelled, and failed dependencies make the aggregate fail.

    Current PR state

    Auto-merge is already enabled on this PR. If you approve it and the
    required checks pass, GitHub will squash-merge it automatically;
    approving it is enough to let the PR merge once the remaining
    requirements are satisfied.

    GitHub docs

    Validation

    • ruby -e 'require "yaml"; YAML.load_file(".github/workflows/ci.yml"); puts "ok"'
    • actionlint .github/workflows/ci.yml
    • Verified ratatui/ratatui has allow_auto_merge: true
    • Verified the active ensure checks pass ruleset requires status
      context required
    • Verified this PR has squash auto-merge enabled and is blocked pending
      checks/review
New Contributors
  • @satyakwok made their first contribution in #​2594
  • @KikiKian made their first contribution in #​2598

Full Changelog: ratatui/ratatui@ratatui-v0.30.1...ratatui-v0.30.2

v0.30.0

Compare Source

"Rats, we're rats; we're the rats." – Rat Movie

We are excited to announce the new version of ratatui - a Rust library that's all about cooking up TUIs 👨‍🍳🐀

Release highlights: https://ratatui.rs/highlights/v0301/

⚠️ List of breaking changes can be found here.

Features
  • 74d6a84 (block) Support shadows by @​orhun in #​2481

    Introduce Block::shadow(...) with a new Shadow type that supports:

    • presets: overlay, block, light_shade, medium_shade,
      dark_shade
    • custom symbols via Shadow::symbol(...)
    • custom effects via Shadow::custom(...)
    use ratatui::layout::Offset;
    use ratatui::style::Stylize;
    use ratatui::widgets::{Block, Shadow};
    
    let popup = Block::bordered().title("Popup").shadow(
        Shadow::dark_shade()
            .black()
            .on_white()
            .offset(Offset::new(2, 1)),
    );

    Results in:

    ┌Popup─────┐
    │content   │▒
    └──────────┘▒
      ▒▒▒▒▒▒▒▒▒▒▒
    

    shadow

    fixes #​1892


  • 4d30420 (buffer) Add CellDiffOption::AlwaysUpdate to force cell updates by @​sxyazi in #​2480

    When this option is used, the cells are updated even when content is identical.

    Follow-up for #​1605

    Trying to resolve #​1116

  • 39c32c6 (buffer) Add cell diff options by @​benjajaja in #​1605

    Problem:Escape sequences always cause a cell to count as "multiwidth",
    even when it doesn't render wider than one cell, or not as wide as the
    escape sequence would be computed as.

    Solution:Convert skip:bool to enum. Add enum option ForceWidth to
    force a cell width for diffing.

    When using the option, this also fixes some bug where diffing is not
    idempotent and causes a diff operation for (symbol.len() - 1) times.

    There are three new specific test cases:

    1. Rendering hyperlinks by squeezing the escape sequence into the first
      cell and forcing the width to the unicode width of the text part.
      This is much easier to implement for a Link widget, as it would only
      need to get the unicode-width once and not iterate over graphemes
      like Spans must do.
    2. Rendering hyperlinks by squeezing the opening sequence into the first
      cell with the first grapheme and forcing the width to that of the
      first grapheme. Then rendering each grapheme as usual. Then squeezing
      the closing sequence into the last cell with the last grapheme and
      forcing the width to that of the last grapheme.
      This is harder to implement for a Link widget, as it would have to
      iterate over graphemes with their width like Spans do.
    3. Kitty image sequence with utf-8 placeholders, similar to 2 but with
      known constant grapheme widths.

    Link widget that leverages this

    https://github.com/benjajaja/tui-link

    It would be cooler if we could just add something like .link(url) to
    Spans, because it would much simpler to insert some link and leverage
    all the Line/Text/Paragraph wrapping and whatnot. W

Note

PR body was truncated to here.


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • Between 12:00 AM and 03:59 AM, only on Monday (* 0-3 * * 1)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

👻 Immortal: This PR will be recreated if closed unmerged. Get config help if that's undesired.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot force-pushed the renovate/all-non-major branch 4 times, most recently from e4967d3 to dc5cfad Compare May 1, 2026 05:06
@renovate
renovate Bot force-pushed the renovate/all-non-major branch 2 times, most recently from 0c3ff0b to 7423c49 Compare May 8, 2026 14:06
@renovate
renovate Bot force-pushed the renovate/all-non-major branch 2 times, most recently from 8303002 to 53920f6 Compare May 29, 2026 19:31
@renovate
renovate Bot force-pushed the renovate/all-non-major branch 4 times, most recently from 9649982 to 55a718e Compare June 5, 2026 15:11
@renovate
renovate Bot force-pushed the renovate/all-non-major branch 2 times, most recently from 844d6a9 to f28efa8 Compare June 14, 2026 20:25
@renovate
renovate Bot force-pushed the renovate/all-non-major branch 4 times, most recently from c8f4249 to 0151675 Compare June 25, 2026 21:35
@renovate
renovate Bot force-pushed the renovate/all-non-major branch 3 times, most recently from 1c42c3c to b4710c3 Compare July 14, 2026 16:05
@renovate
renovate Bot force-pushed the renovate/all-non-major branch 9 times, most recently from cf1fa3f to 3bd2241 Compare July 21, 2026 12:10
@renovate
renovate Bot force-pushed the renovate/all-non-major branch 3 times, most recently from 09af890 to 2b22303 Compare July 28, 2026 21:10
@renovate
renovate Bot force-pushed the renovate/all-non-major branch 2 times, most recently from 370a0be to c1cc96e Compare August 6, 2026 16:56
@renovate
renovate Bot force-pushed the renovate/all-non-major branch 5 times, most recently from bba38e7 to e754543 Compare August 14, 2026 16:40
@renovate
renovate Bot force-pushed the renovate/all-non-major branch 2 times, most recently from 0a269d7 to c09a9e6 Compare August 26, 2026 12:40
@renovate
renovate Bot force-pushed the renovate/all-non-major branch 2 times, most recently from 4e8c901 to 53d07dc Compare September 3, 2026 17:47
@renovate
renovate Bot force-pushed the renovate/all-non-major branch from 53d07dc to d8aa8fd Compare September 7, 2026 23:47
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants