{"id":51138690,"url":"https://github.com/d7omdev/tupass","last_synced_at":"2026-06-25T20:30:35.073Z","repository":{"id":366455063,"uuid":"1276336593","full_name":"d7omdev/tupass","owner":"d7omdev","description":"A fast, keyboard-driven terminal UI for GNU pass, built with OpenTUI.","archived":false,"fork":false,"pushed_at":"2026-06-21T22:06:57.000Z","size":164,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-06-22T00:05:03.645Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/d7omdev.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-06-21T21:14:07.000Z","updated_at":"2026-06-21T22:07:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/d7omdev/tupass","commit_stats":null,"previous_names":["d7omdev/tupass"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/d7omdev/tupass","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d7omdev%2Ftupass","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d7omdev%2Ftupass/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d7omdev%2Ftupass/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d7omdev%2Ftupass/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/d7omdev","download_url":"https://codeload.github.com/d7omdev/tupass/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/d7omdev%2Ftupass/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34792208,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-25T02:00:05.521Z","response_time":101,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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-06-25T20:30:34.314Z","updated_at":"2026-06-25T20:30:35.066Z","avatar_url":"https://github.com/d7omdev.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# tupass\n\nA fast, keyboard-driven terminal UI for [GNU `pass`](https://www.passwordstore.org/) - the standard unix password manager - built with [OpenTUI](https://github.com/sst/opentui) and React.\n\nBrowse your store as a collapsible tree, decrypt on demand, copy to the clipboard (auto-clearing), generate passwords, manage OTP codes, and rename/move/duplicate entries - all without leaving the terminal. It themes itself from your terminal palette and ships a dozen bundled color schemes with a live picker.\n\n![tupass — wide layout](docs/screenshot.png)\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"docs/screenshot_small.png\" alt=\"tupass — narrow/compact layout\" width=\"320\"\u003e\n  \u003cbr\u003e\n  \u003csub\u003eNarrow terminals collapse to a single column with inline detail.\u003c/sub\u003e\n\u003c/p\u003e\n\n## Features\n\n- **Tree browser** - collapsible folders, windowed for large stores, fuzzy filter (`/`).\n- **Lazy decryption** - entries are only decrypted when you open them; the rest is instant.\n- **Clipboard** - copy the password or a specific field via `pass -c` (auto-clears after 45s).\n- **OTP** - generate TOTP codes for entries (requires the `pass-otp` extension).\n- **Full CRUD** - add, edit, generate, rename (in place), move (folder picker), duplicate, delete.\n- **Git** - one-key sync (`pull --rebase` + `push`) and recent-log view for git-backed stores.\n- **Theming** - auto-detects your terminal colors, plus bundled schemes (Catppuccin, Dracula, Tokyo Night, Nord, Gruvbox, Rosé Pine, Kanagawa, Everforest, Solarized, GitHub Light…) switchable live with `t`. Your choice persists.\n- **Responsive** - side preview pane on wide terminals; on narrow ones it collapses to a single-column list with each entry's details expanding inline.\n\n## Requirements\n\n- [Bun](https://bun.com) (runtime + package manager)\n- [`pass`](https://www.passwordstore.org/) with an initialized store (`pass init \u003cgpg-id\u003e`)\n- `gpg` + `gpg-agent` - a **graphical pinentry** (gtk/qt/gnome) is recommended; a TTY pinentry can conflict with the full-screen UI on first unlock\n- Optional: the [`pass-otp`](https://github.com/tadfisher/pass-otp) extension for OTP codes\n- A terminal with **truecolor** and a **[Nerd Font](https://www.nerdfonts.com/)** (icons + glyphs)\n\n## Install\n\ntupass runs on **Bun** - OpenTUI uses `bun:ffi` for its native renderer, so Node is not supported. The `tupass` command is a tiny launcher that runs on your installed Bun; no runtime is bundled.\n\nInstall globally from npm (Bun fetches the right native renderer for your platform):\n\n```bash\nbun add -g tupass\n```\n\nThen just run:\n\n```bash\ntupass\n```\n\n### From source\n\n```bash\ngit clone https://github.com/d7omdev/tupass\ncd tupass\nbun install\nbun link          # puts `tupass` on your PATH (runs via your Bun)\n# or run without linking:\nbun run dev\n```\n\nIf no store exists at `~/.password-store`, tupass exits with instructions to run `pass init`.\n\n### Desktop entry\n\nA launcher and lock icon live in [`docs/`](docs). Install them to get a `tupass`\napp entry (opens in a dedicated kitty window with `WM_CLASS=Tupass`):\n\n```bash\ninstall -Dm644 docs/tupass.svg ~/.local/share/icons/hicolor/scalable/apps/tupass.svg\ninstall -Dm644 docs/tupass.desktop ~/.local/share/applications/tupass.desktop\nupdate-desktop-database ~/.local/share/applications 2\u003e/dev/null || true\ngtk-update-icon-cache ~/.local/share/icons/hicolor 2\u003e/dev/null || true\n```\n\nOr just launch it directly:\n\n```bash\nkitty --class Tupass --title tupass tupass\n```\n\n## Keybindings\n\n| Key | Action |\n|-----|--------|\n| `↑ ↓` / `j k` | move selection |\n| `→` / `l` / `space` | expand folder · open entry |\n| `←` / `h` | collapse folder · jump to parent |\n| `enter` | open entry (decrypt) / toggle folder |\n| `s` | reveal / hide password |\n| `c` | copy password to clipboard (auto-clears) |\n| `C` | copy a specific field (login/url…) |\n| `o` | generate \u0026 copy OTP code |\n| `a` / `n` | add entry inside the current folder · `A` adds at the root |\n| `g` | generate a password |\n| `e` | edit entry |\n| `r` | rename file/folder in place (folder locked) |\n| `M` | move to another folder (pick or create) |\n| `p` | duplicate entry |\n| `d` | delete entry |\n| `/` | fuzzy filter |\n| `t` | switch color theme (live preview) |\n| `E` / `W` | expand all / collapse all |\n| `G` / `L` | git sync / git log |\n| `?` | toggle help |\n| `q` / `Ctrl+C` | quit |\n\n## Configuration\n\n| Variable | Purpose |\n|----------|---------|\n| `PASSWORD_STORE_DIR` | location of the store (default `~/.password-store`) |\n| `PASSWORD_STORE_CLIP_TIME` | clipboard auto-clear seconds (honored by `pass`, default 45) |\n| `TUPASS_NO_OSC` | set to disable terminal-palette detection (for terminals that leak the OSC reply) |\n\nThe selected theme is saved to `~/.config/tupass/config.json` (honors `XDG_CONFIG_HOME`).\n\n## Development\n\n```bash\nbun run validate   # typecheck + lint\nbun run typecheck\nbun run lint\n```\n\n## Security\n\ntupass never sees your passphrase - decryption is delegated to `gpg`/`gpg-agent`, and all entry names are passed as discrete argv (never interpolated into a shell), so a name like `$(rm -rf ~)` is inert.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd7omdev%2Ftupass","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fd7omdev%2Ftupass","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fd7omdev%2Ftupass/lists"}