Skip to content

Support opt-in SemVer tag upgrades with commit fallback #4178

Description

@TyceHerrman

ya env output

Yazi
    Version: 26.5.6 (e58022b 2026-07-28)
    Debug  : false
    Triple : aarch64-apple-darwin (macos-aarch64)
    Rustc  : 1.97.1 (8bab26f4 2026-07-14)
    Backtrace: None

Ya
    Version: 26.5.6 (e58022b 2026-07-28)
    Debug  : false
    Triple : aarch64-apple-darwin (macos-aarch64)
    Rustc  : 1.97.1 (8bab26f4 2026-07-14)

Config
    Init             : $HOME/.config/yazi/init.lua (1232 chars)
    Yazi             : $HOME/.config/yazi/yazi.toml (2440 chars)
    Keymap           : $HOME/.config/yazi/keymap.toml (1902 chars)
    Theme            : $HOME/.config/yazi/theme.toml (26 chars)
    VFS              : $HOME/.config/yazi/vfs.toml (No such file or directory (os error 2))
    Package          : $HOME/.config/yazi/package.toml (1147 chars)
    Dark/light flavor: ArcSwapAny("dracula") / ArcSwapAny("")

Emulator
    TERM                : Some("xterm-256color")
    TERM_PROGRAM        : Some("Apple_Terminal")
    TERM_PROGRAM_VERSION: Some("487")
    Brand.from_env      : Some(Apple)
    Emulator.detect     : Emulator { kind: Left(Apple), version: "", light: false, csi_16t: (0, 0), force_16t: false }

Adapter
    Adapter.matches    : Chafa
    Dimension.available: Dimension { cols: 202, rows: 48, width: 1420, height: 821 }

Desktop
    XDG_SESSION_TYPE           : None
    WAYLAND_DISPLAY            : None
    DISPLAY                    : None
    NIRI_SOCKET                : None
    SWAYSOCK                   : None
    HYPRLAND_INSTANCE_SIGNATURE: None
    WAYFIRE_SOCKET             : None

SSH
    shared.in_ssh_connection: false

WSL
    WSL: false

Variables
    SHELL              : Some("/bin/zsh")
    EDITOR             : Some("nano")
    VISUAL             : None
    YAZI_FILE_ONE      : None
    YAZI_CONFIG_HOME   : None
    YAZI_ZOXIDE_OPTS   : None
    SSH_AUTH_SOCK      : Some("<redacted>")
    FZF_DEFAULT_OPTS   : Some("--ansi     --color=fg:#f8f8f2,bg:#282a36,hl:#bd93f9     --color=fg+:#f8f8f2,bg+:#44475a,hl+:#bd93f9     --color=info:#ffb86c,prompt:#50fa7b,pointer:#ff79c6     --color=marker:#ff79c6,spinner:#ffb86c,header:#6272a4")
    FZF_DEFAULT_COMMAND: Some("fd --type file --follow --hidden --exclude .git --color=always")

Text Opener
    default     : Some(OpenerRuleArc(OpenerRule { id: Id(3), run: NonEmptyString("${EDITOR:-vi} %s"), block: true, orphan: false, desc: "$EDITOR", for: Unix, spread: true }))
    block-create: Some(OpenerRuleArc(OpenerRule { id: Id(3), run: NonEmptyString("${EDITOR:-vi} %s"), block: true, orphan: false, desc: "$EDITOR", for: Unix, spread: true }))
    block-rename: Some(OpenerRuleArc(OpenerRule { id: Id(3), run: NonEmptyString("${EDITOR:-vi} %s"), block: true, orphan: false, desc: "$EDITOR", for: Unix, spread: true }))

Multiplexers
    TMUX               : false
    tmux version       : tmux 3.7b
    tmux build flags   : enable-sixel=Unsupported
    ZELLIJ_SESSION_NAME: None
    Zellij version     : 0.44.3

Dependencies
    file          : 5.41
    ueberzugpp    : No such file or directory (os error 2)
    ffmpeg/ffprobe: 8.1.2 / 8.1.2
    pdftoppm      : No such file or directory (os error 2)
    magick        : 7.1.2-27
    fzf           : 0.74.1
    fd/fdfind     : 10.4.2 / No such file or directory (os error 2)
    rg            : 15.2.0
    chafa         : No such file or directory (os error 2)
    zoxide        : 0.10.0
    7zz/7z        : No such file or directory (os error 2) / No such file or directory (os error 2)
    resvg         : 0.47.0
    jq            : 1.7.1

Clipboard
    wl-copy/paste: No such file or directory (os error 2) / No such file or directory (os error 2)
    xclip        : No such file or directory (os error 2)
    xsel         : No such file or directory (os error 2)

Routine
    `file -bL --mime-type`: text/plain

Please describe the problem you're trying to solve

ya pkg upgrade updates unpinned packages to the latest repository commit. Some plugins publish stable SemVer tags, but users cannot automatically follow only those releases. Pinning with =rev disables automatic upgrades entirely.

Would you be willing to contribute this feature?

  • Yes, I'll give it a shot

Would you be willing to contribute this feature?

  • Yes, I'll give it a shot

Describe the solution you'd like

Add an optional version policy, for example:

[[plugin.deps]]
use     = "owner/plugin"
version = "*"
rev     = "0573024"
hash    = "d81b64a39432fcd6224cd75d296e7510"

Proposed behavior:

  • No version: retain the current latest-commit behavior.
  • version = "*": use the latest stable SemVer tag.
  • No matching tags: fall back to the latest commit instead of failing.
  • ya pkg install: restore the locked rev and hash.
  • ya pkg upgrade: re-resolve the policy and update the lock.
  • Existing =rev pins remain unchanged.

Additional context

This follows lazy.nvim's versioning model, whose implementation falls back to the branch commit when no suitable tag exists.

Unlike #2579, this requires no compatibility matrix or Yazi-version-based selection. Unlike #3758, rev and hash remain locked in package.toml, preserving reproducible installs.

Checklist

  • I have searched the existing issues/discussions
  • The latest nightly build doesn't already have this feature

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    featureNew feature request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions