{"id":44477174,"url":"https://github.com/dapi/zellij-tab-status","last_synced_at":"2026-02-24T18:06:18.554Z","repository":{"id":338089245,"uuid":"1156528379","full_name":"dapi/zellij-tab-status","owner":"dapi","description":"Zellij tab status indicator","archived":false,"fork":false,"pushed_at":"2026-02-12T21:00:07.000Z","size":58,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-13T03:05:36.964Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dapi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-12T18:48:38.000Z","updated_at":"2026-02-12T21:00:38.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dapi/zellij-tab-status","commit_stats":null,"previous_names":["dapi/zellij-tab-status"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/dapi/zellij-tab-status","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapi%2Fzellij-tab-status","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapi%2Fzellij-tab-status/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapi%2Fzellij-tab-status/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapi%2Fzellij-tab-status/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dapi","download_url":"https://codeload.github.com/dapi/zellij-tab-status/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dapi%2Fzellij-tab-status/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29506592,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-16T09:05:14.864Z","status":"ssl_error","status_checked_at":"2026-02-16T08:55:59.364Z","response_time":115,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-02-12T23:00:16.535Z","updated_at":"2026-02-24T18:06:18.530Z","avatar_url":"https://github.com/dapi.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# zellij-tab-status\n\n[![CI](https://github.com/dapi/zellij-tab-status/actions/workflows/ci.yml/badge.svg)](https://github.com/dapi/zellij-tab-status/actions/workflows/ci.yml)\n\nZellij plugin for managing tab status with emoji prefixes.\n\n## Features\n\n- **Set/clear emoji status** on any tab by pane_id\n- **Rename tabs** without losing the emoji status prefix\n- **Query current status**, base name, or plugin version programmatically\n- **Atomic operations** — no race conditions when updating status\n- **Unicode-aware** — handles complex emoji (flags 🇺🇸, skin tones 👋🏻, ZWJ sequences 👨‍👩‍👧)\n\n## Installation\n\n### Option 1: Download Release (Recommended)\n\n```bash\n# Download latest release\ncurl -L https://github.com/dapi/zellij-tab-status/releases/latest/download/zellij-tab-status.wasm \\\n  -o ~/.config/zellij/plugins/zellij-tab-status.wasm\n```\n\n### Option 2: Build from Source\n\n```bash\n# Prerequisites\nrustup target add wasm32-wasip1\n\n# Build \u0026 Install\ngit clone https://github.com/dapi/zellij-tab-status\ncd zellij-tab-status\nmake install\n```\n\n### Configure Zellij\n\nNo `config.kdl` changes are required for the default setup.\nThe plugin is launched on-demand via `zellij pipe --plugin ...`.\n\nOptional preloaded mode (if you want `--name tab-status` commands):\n```kdl\nload_plugins {\n    \"file:~/.config/zellij/plugins/zellij-tab-status.wasm\"\n}\n```\n\n## Usage\n\n### Basic Status Management\n\n```bash\nPLUGIN_PATH=\"file:$HOME/.config/zellij/plugins/zellij-tab-status.wasm\"\n\n# Set status emoji: \"my-tab\" → \"🤖 my-tab\"\nzellij pipe --plugin \"$PLUGIN_PATH\" -- '{\"pane_id\": \"'$ZELLIJ_PANE_ID'\", \"action\": \"set_status\", \"emoji\": \"🤖\"}'\n\n# Change status: \"🤖 my-tab\" → \"✅ my-tab\"\nzellij pipe --plugin \"$PLUGIN_PATH\" -- '{\"pane_id\": \"'$ZELLIJ_PANE_ID'\", \"action\": \"set_status\", \"emoji\": \"✅\"}'\n\n# Clear status: \"✅ my-tab\" → \"my-tab\"\nzellij pipe --plugin \"$PLUGIN_PATH\" -- '{\"pane_id\": \"'$ZELLIJ_PANE_ID'\", \"action\": \"clear_status\"}'\n```\n\n### Rename Tab (Preserving Status)\n\n```bash\n# Rename tab without losing emoji: \"🤖 my-tab\" → \"🤖 new-name\"\nzellij pipe --plugin \"$PLUGIN_PATH\" -- '{\"pane_id\": \"'$ZELLIJ_PANE_ID'\", \"action\": \"set_name\", \"name\": \"new-name\"}'\n```\n\n### Query\n\n```bash\n# Get current emoji (outputs to stdout)\nzellij pipe --plugin \"$PLUGIN_PATH\" -- '{\"pane_id\": \"'$ZELLIJ_PANE_ID'\", \"action\": \"get_status\"}'\n# Output: 🤖\n\n# Get base name without emoji\nzellij pipe --plugin \"$PLUGIN_PATH\" -- '{\"pane_id\": \"'$ZELLIJ_PANE_ID'\", \"action\": \"get_name\"}'\n# Output: my-tab\n\n# Get installed plugin version\nzellij pipe --plugin \"$PLUGIN_PATH\" -- '{\"pane_id\": \"'$ZELLIJ_PANE_ID'\", \"action\": \"get_version\"}'\n# Output: 0.7.1\n```\n\n## Status Emoji Examples\n\n| Status | Emoji | Use Case |\n|--------|-------|----------|\n| Working | 🤖 | Processing task |\n| Waiting | ⏳ | Long operation |\n| Input needed | ✋ | Requires user input |\n| Success | ✅ | Task completed |\n| Error | ❌ | Task failed |\n| Warning | ⚠️ | Attention needed |\n| Building | 🔨 | Compilation |\n| Testing | 🧪 | Running tests |\n| Deploying | 🚀 | Deployment in progress |\n\n## CLI Scripts\n\nReady-to-use wrapper scripts are included in `scripts/`:\n\n### Install scripts\n\n```bash\n# Copy to ~/.local/bin (or anywhere in PATH)\ncp scripts/zellij-tab-status ~/.local/bin/\nchmod +x ~/.local/bin/zellij-tab-status\n```\n\n### Usage\n\n```bash\nzellij-tab-status 🤖           # Set status emoji\nzellij-tab-status ⏳           # Change status\nzellij-tab-status --clear      # Remove status\nzellij-tab-status              # Get current emoji\nzellij-tab-status --name       # Get base name\nzellij-tab-status -s \"Code\"   # Rename tab (preserving emoji)\nzellij-tab-status --version    # Get plugin version\n```\n\n### Shell aliases (optional)\n\nAdd to `~/.bashrc` or `~/.zshrc`:\n\n```bash\nalias ts='zellij-tab-status'\nalias tsc='zellij-tab-status --clear'\nalias tsn='zellij-tab-status --name'\nalias tsr='zellij-tab-status --set-name'\n```\n\n## Integration Examples\n\n### Show Status During Long Commands\n\n```bash\n# Wrapper for long-running commands\nwith-status() {\n    local emoji=\"${1:-🤖}\"\n    shift\n    zellij-tab-status \"$emoji\"\n    \"$@\"\n    local exit_code=$?\n    if [[ $exit_code -eq 0 ]]; then\n        zellij-tab-status ✅\n    else\n        zellij-tab-status ❌\n    fi\n    return $exit_code\n}\n\n# Usage\nwith-status 🔨 make build\nwith-status 🧪 npm test\nwith-status 🚀 ./deploy.sh\n```\n\n### Git Hook Integration\n\n```bash\n# .git/hooks/pre-commit\n#!/bin/bash\nzellij-tab-status 🔍\n# ... run checks ...\n```\n\n### CI/CD Status Display\n\n```bash\n#!/bin/bash\nzellij-tab-status 🚀\nif deploy_to_staging; then\n    zellij-tab-status ✅\n    echo \"Deploy successful\"\nelse\n    zellij-tab-status ❌\n    echo \"Deploy failed\"\n    exit 1\nfi\n```\n\n### Claude Code Integration\n\nThis plugin works with [zellij-tab-claude-status](https://github.com/dapi/claude-code-marketplace/tree/master/zellij-tab-claude-status) — a Claude Code plugin that shows AI session state in Zellij tabs:\n\n- 🟢 Ready — waiting for input\n- 🤖 Working — processing request\n- ✋ Needs input — permission prompt waiting\n\n## API Reference\n\n### `tab-status` Pipe\n\nJSON payload with `pane_id` and `action`:\n\n| Action | Required Fields | Description |\n|--------|-----------------|-------------|\n| `set_status` | `emoji` | Set emoji prefix on tab |\n| `clear_status` | — | Remove emoji prefix |\n| `get_status` | — | Output current emoji to stdout |\n| `get_name` | — | Output base name (without emoji) to stdout |\n| `set_name` | `name` | Set tab name, preserving emoji prefix |\n| `get_version` | — | Output plugin version to stdout |\n\n### Status Format\n\nStatus = first grapheme cluster + space.\n\n| Tab Name | Status | Base Name |\n|----------|--------|-----------|\n| `🤖 Working` | `🤖` | `Working` |\n| `🇺🇸 USA` | `🇺🇸` | `USA` |\n| `Working` | `` (empty) | `Working` |\n\n## Troubleshooting\n\n### Check Plugin Logs\n\n```bash\ntail -f /tmp/zellij-$(id -u)/zellij-log/zellij.log | grep tab-status\n```\n\n### Plugin Not Responding\n\n1. Verify plugin is loaded: run `zellij-tab-status --version` or check Zellij logs for `[tab-status] Plugin loaded`\n2. Check `$ZELLIJ_PANE_ID` is set (only works inside Zellij)\n3. Restart Zellij session after config changes\n\n### Wrong Tab Updated\n\nPlugin maps `pane_id` → tab. If you have multiple panes in a tab, any pane_id from that tab will update the same tab name.\n\n### Unicode Issues\n\nPlugin uses grapheme clustering. If emoji appears broken:\n- Ensure terminal supports Unicode\n- Check font has emoji glyphs\n- Try simpler emoji (🟢 instead of 👨‍👩‍👧)\n\n### Preloaded Mode (Optional)\n\nIf you want to target plugin by name (`--name tab-status`) instead of `--plugin`,\nadd the plugin to `~/.config/zellij/config.kdl`:\n```kdl\nload_plugins {\n    \"file:~/.config/zellij/plugins/zellij-tab-status.wasm\"\n}\n```\n\n## Development\n\n```bash\n# Build\nmake build\n\n# Install locally\nmake install\n\n# Clean\nmake clean\n\n# Run unit tests\nmake test\n\n# Test in live Zellij session (after make install)\nmake test-live\n\n# Integration tests (mode: preloaded|ondemand)\nmake test-integration\nTEST_PLUGIN_MODE=ondemand make test-integration\n\n# Verify on-demand --plugin does not duplicate plugin instance\nmake test-plugin-dedup\n\n# Regression check for issue #5 (floating panel input)\nmake test-issue5-regression\n```\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdapi%2Fzellij-tab-status","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdapi%2Fzellij-tab-status","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdapi%2Fzellij-tab-status/lists"}