# 0.15

## Highlights
This section is meant as a quick recap of what you should know when upgrading to 0.15.x.
It is by no means exhaustive. If you're really interested in the complete changelogs, check out the individual [release pages](https://github.com/alexpasmantier/television/releases).
### Channel Actions Picker

Channels can now define **actions** — commands that operate on the currently selected entry. Hit <kbd>Ctrl</kbd>+<kbd>X</kbd> to open the action picker and choose from a searchable list, or bind actions directly to keys.
Here's what the `git-branch` channel looks like:
```toml
[keybindings]
enter = "actions:checkout"
ctrl-d = "actions:delete"
ctrl-m = "actions:merge"
ctrl-r = "actions:rebase"
[actions.checkout]
description = "Checkout the selected branch"
command = "git checkout '{0}'"
mode = "execute"
[actions.delete]
description = "Delete the selected branch"
command = "git branch -d '{0}'"
mode = "execute"
```
Actions support two modes:
- `execute`: replaces the tv process (tv exits, action takes over)
- `fork`: spawns the command as a child process (tv stays open)
This enables having "management-style" channels. For instance, the `docker-containers` channel lets you start, stop, restart, view logs, exec into, or remove containers — all from the same picker:
```toml
[actions.logs]
description = "Follow logs of the selected container"
command = "docker logs -f '{split:\t:0}'"
mode = "execute"
[actions.exec]
description = "Execute shell in the selected container"
command = "docker exec -it '{split:\t:0}' /bin/sh"
mode = "execute"
```
### Frecency Sorting
Results can now be ranked by **frecency** (frequency + recency). Entries you select often and recently float to the top. This is enabled by default for some channels and recorded automatically.
Frecency is stored in `~/.local/share/television/frecency.json` and uses a Mozilla-style time-decay algorithm with recency buckets (last 4 hours, last day, last week, etc.) combined with access count.
You can tune it per channel:
```toml
[source]
command = "fd -t f"
frecency = false # disable for this channel
```
Or adjust the global cap in `~/.config/television/config.toml`:
```toml
frecency_max_entries = 1000 # max entries tracked per channel (default)
```
Channels where ordering is inherently meaningful (shell history, git log, etc.) ship with frecency disabled by default.
### Custom Sorting Controls
You can now **preserve the original source order** instead of having results re-sorted by match quality. This is useful for chronologically sorted sources like shell history or log entries:
```sh
tv zsh-history --no-sort
```
Or in a channel TOML:
```toml
[source]
command = "sed '1!G;h;$!d' ${HISTFILE:-${HOME}/.zsh_history}"
no_sort = true
frecency = false
```
When `no_sort` is enabled, both match-quality sorting and frecency are disabled — the source's original ordering is preserved.
### Custom Shell for Commands
Channels can now specify which shell to use for source, preview, and action commands. This is useful when a command depends on shell-specific syntax:
```toml
[source]
command = "some-command-that-needs-fish-syntax"
shell = "fish"
```
You can also set a **global shell override** in your config file so all channels use it by default (channel-specific settings still take precedence):
```toml
# ~/.config/television/config.toml
shell = "zsh" # options: bash, zsh, fish, powershell, cmd, nu
```
If neither is set, tv auto-detects from `$SHELL`.
### 41 New Channels + Improvements
0.15.0 and 0.15.1 together added **41 new channels** with more default actions for existing ones. The `update-channels` command now **skips channels with unmet requirements** by default — so running `tv update-channels` won't clutter your system with channels you can't use.
### Cycle Sources and Previews Tab Indicators
Channels with multiple source commands (like `dirs` which cycles between `fd -t d` and `fd -t d --hidden`) now show **tab indicators** in the UI so you can see which variant is active. The keybinding to cycle is shown next to the indicator.
```toml
# dirs.toml — two source commands to cycle through with ctrl-s
[source]
command = ["fd -t d", "fd -t d --hidden"]
```
The same applies to channels with multiple preview commands (<kbd>Ctrl</kbd>+<kbd>F</kbd> to cycle).
### Remote Control: Missing Requirements Popup
When browsing channels in the remote control (<kbd>Ctrl</kbd>+<kbd>T</kbd>) and selecting one whose requirements aren't met, tv now shows a popup explaining what's missing instead of failing silently.

### Fish Shell Channel Completion
Fish users now get channel name completion out of the box:
```fish
tv <Tab>
# Shows available channels labeled "(Channel)" alongside subcommands
```
### Performance
Various performance improvements (see changelog)
### Other Changes
- `tv list-channels` output is now sorted alphabetically
- The stateful loading spinner was replaced by a static symbol
- Documentation overhaul across the project
- Dependabot configured for cargo and rust-toolchain ecosystems
**Full Changelog**: https://github.com/alexpasmantier/television/compare/0.14.5...0.15.3