{"id":31748255,"url":"https://github.com/notashelf/stash","last_synced_at":"2026-02-02T00:05:52.014Z","repository":{"id":309601934,"uuid":"1036660739","full_name":"NotAShelf/stash","owner":"NotAShelf","description":"Wayland clipboard \"manager\" with fast persistent history and multi-media support","archived":false,"fork":false,"pushed_at":"2025-10-09T12:18:38.000Z","size":279,"stargazers_count":34,"open_issues_count":1,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-09T13:02:47.524Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NotAShelf.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2025-08-12T11:59:45.000Z","updated_at":"2025-10-09T12:04:31.000Z","dependencies_parsed_at":"2025-09-30T11:25:29.420Z","dependency_job_id":null,"html_url":"https://github.com/NotAShelf/stash","commit_stats":null,"previous_names":["notashelf/stash"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/NotAShelf/stash","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NotAShelf%2Fstash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NotAShelf%2Fstash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NotAShelf%2Fstash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NotAShelf%2Fstash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NotAShelf","download_url":"https://codeload.github.com/NotAShelf/stash/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NotAShelf%2Fstash/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001439,"owners_count":26083102,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"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":"2025-10-09T13:55:13.457Z","updated_at":"2026-02-02T00:05:52.007Z","avatar_url":"https://github.com/NotAShelf.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!-- markdownlint-disable MD033 --\u003e\n\n\u003ch1 id=\"header\" align=\"center\"\u003e\n    \u003cpre\u003eStash\u003c/pre\u003e\n\u003c/h1\u003e\n\n\u003cdiv align=\"center\"\u003e\n    \u003ca alt=\"CI Status\" href=\"https://github.com/NotAShelf/stash/actions\"\u003e\n        \u003cimg\n          src=\"https://github.com/NotAShelf/stash/actions/workflows/rust.yml/badge.svg\"\n          alt=\"Build Status\"\n        /\u003e\n    \u003c/a\u003e\n    \u003ca alt=\"Dependencies\" href=\"https://deps.rs/repo/github/notashelf/stash\"\u003e\n        \u003cimg\n          src=\"https://deps.rs/repo/github/notashelf/stash/status.svg\"\n          alt=\"Dependency Status\"\n        /\u003e\n    \u003c/a\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  Lightweight Wayland clipboard \"manager\" with fast persistent history and\n  robust multi-media support. Stores and previews clipboard entries (text, images)\n  on the clipboard with a neat TUI and advanced scripting capabilities.\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cbr/\u003e\n  \u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e\u003cbr/\u003e\n  \u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e | \u003ca href=\"#usage\"\u003eUsage\u003c/a\u003e\u003cbr/\u003e\n  \u003ca href=\"#tips--tricks\"\u003eTips and Tricks\u003c/a\u003e\n  \u003cbr/\u003e\n\u003c/div\u003e\n\n## Features\n\nStash is a feature-rich, yet simple and lightweight clipboard management utility\nwith many features such as but not necessarily limited to:\n\n- Automatic MIME detection for stored entries\n- Fast persistent storage using SQLite\n- List, search, decode, delete, and wipe clipboard history with ease\n- Backwards compatible with Cliphist TSV format\n  - Import clipboard history from TSV (e.g., from `cliphist list`)\n- Image preview (shows dimensions and format)\n- Text previews with customizable width\n- De-duplication, whitespace prevention and entry limit control\n- Automatic clipboard monitoring with `stash watch`\n  - Configurable auto-expiry of old entries in watch mode as a safety buffer\n- Drop-in replacement for `wl-clipboard` tools (`wl-copy` and `wl-paste`)\n- Sensitive clipboard filtering via regex (see below)\n- Sensitive clipboard filtering by application (see below)\n\nSee [usage section](#usage) for more details.\n\n## Installation\n\n### With Nix\n\nNix is the recommended way of downloading Stash. You can install it using Nix\nflakes using `nix profile add` if on non-nixos or add Stash as a flake input if\nyou are on NixOS.\n\n```nix\n{\n  # Add Stash to your inputs like so\n  inputs.stash.url = \"github:NotAShelf/stash\";\n\n  outputs = { /* ... */ };\n}\n```\n\nThen you can get the package from your flake input, and add it to your packages\nto make `stash` available in your system.\n\n```nix\n{inputs, pkgs, ...}: let\n  stashPkg = inputs.stash.packages.${pkgs.stdenv.hostPlatform}.stash;\nin {\n  environment.systemPackages = [stashPkg];\n\n  # Additionally feel free to add the Stash package in `systemd.packages` to\n  # automatically run the Stash watch daemon, which will watch your primary\n  # clipboard for changes and persist them.\n  systemd.packages = [stashPkg];\n}\n```\n\nIf you want to give Stash a try before you switch to it, you may also run it one\ntime with `nix run`.\n\n```sh\nnix run github:NotAShelf/stash -- watch # start the watch daemon\n```\n\n### Without Nix\n\n[GitHub Releases]: https://github.com/notashelf/stash/releases\n\nYou can also install Stash on any of your systems _without_ using Nix. New\nreleases are made when a version gets tagged, and are available under\n[GitHub Releases]. To install Stash on your system without Nix, either:\n\n- Download a tagged release from [GitHub Releases] for your platform and place\n  the binary in your `$PATH`. Instructions may differ based on your\n  distribution, but generally you want to download the built binary from\n  releases and put it somewhere like `/usr/bin` or `~/.local/bin` depending on\n  your distribution.\n- Build and install from source with Cargo:\n\n  ```bash\n  cargo install --git https://github.com/notashelf/stash\n  ```\n\n## Usage\n\n\u003e [!NOTE]\n\u003e It is not a priority to provide 1:1 backwards compatibility with Cliphist.\n\u003e While the interface is _almost_ identical, Stash chooses to build upon\n\u003e Cliphist's design and extend existing design choices. See\n\u003e [Migrating from Cliphist](#migrating-from-cliphist) for more details.\n\nThe command interface of Stash is _only slightly_ different from Cliphist. In\nmost cases, you may simply replace `cliphist` with `stash` and your commands,\naliases or scripts will continue to work as intended.\n\nSome of the commands allow further fine-graining with flags such as `--type` or\n`--format` to allow specific input and output specifiers. See `--help` for\nindividual subcommands if in doubt.\n\n\u003c!-- markdownlint-disable MD013 --\u003e\n\n```console\n$ stash help\nWayland clipboard manager\n\nUsage: stash [OPTIONS] [COMMAND]\n\nCommands:\n  store   Store clipboard contents\n  list    List clipboard history\n  decode  Decode and output clipboard entry by id\n  delete  Delete clipboard entry by id (if numeric), or entries matching a query (if not). Numeric arguments are treated as ids. Use --type to specify explicitly\n  db      Database management operations\n  import  Import clipboard data from stdin (default: TSV format)\n  watch   Start a process to watch clipboard for changes and store automatically\n  help    Print this message or the help of the given subcommand(s)\n\nOptions:\n      --max-items \u003cMAX_ITEMS\u003e\n          Maximum number of clipboard entries to keep [default: 18446744073709551615]\n      --max-dedupe-search \u003cMAX_DEDUPE_SEARCH\u003e\n          Number of recent entries to check for duplicates when storing new clipboard data [default: 20]\n      --preview-width \u003cPREVIEW_WIDTH\u003e\n          Maximum width (in characters) for clipboard entry previews in list output [default: 100]\n      --db-path \u003cDB_PATH\u003e\n          Path to the `SQLite` clipboard database file [env: STASH_DB_PATH=]\n      --excluded-apps \u003cEXCLUDED_APPS\u003e\n          Application names to exclude from clipboard history [env: STASH_EXCLUDED_APPS=]\n      --ask\n          Ask for confirmation before destructive operations\n  -v, --verbose...\n          Increase logging verbosity\n  -q, --quiet...\n          Decrease logging verbosity\n  -h, --help\n          Print help\n  -V, --version\n          Print version\n```\n\n\u003c!-- markdownlint-enable MD013 --\u003e\n\n### Store an entry\n\n```bash\necho \"some clipboard text\" | stash store\n```\n\n### List entries\n\n```bash\nstash list\n```\n\nStash list will list all entries in an interactive TUI that allows navigation\nand copying/deleting entries. This behaviour is EXCLUSIVE TO TTYs and Stash will\ndisplay entries in Cliphist-compatible TSV format in Bash scripts. You may also\nenforce the output format with `stash list --format \u003ctsv | json\u003e`.\n\nYou may also view your clipboard _with the addition of expired entries_, i.e.,\nentries that have reached their TTL and are marked as expired, using the\n`--expired` flag as `stash list --expired`. Expired entries are not cleaned up\nwhen using this flag, allowing you to inspect them before running cleanup.\n\n### Decode an entry by ID\n\n```bash\nstash decode \u003cinput ID\u003e\n```\n\n\u003e [!TIP]\n\u003e Decoding from dmenu-compatible tools:\n\u003e\n\u003e ```bash\n\u003e stash list | tofi | stash decode\n\u003e ```\n\n### Delete entries matching a query\n\n```bash\nstash delete --type [id | query] \u003ctext or ID\u003e\n```\n\nBy default stash will try to guess the type of an entry, but this may not be\ndesirable for all users. If you wish to be explicit, pass `--type` to\n`stash delete`.\n\n### Delete multiple entries by ID (from a file or stdin)\n\n```bash\nstash delete --type id \u003c ids.txt\n```\n\n### Wipe all entries\n\n\u003e [!WARNING]\n\u003e This command is deprecated, and will be removed in v0.4.0. Use `stash db wipe`\n\u003e instead.\n\n```bash\nstash wipe\n```\n\n### Database management\n\nStash provides a `db` subcommand for database maintenance operations:\n\n```bash\nstash db wipe [--expired] [--ask]\nstash db vacuum\nstash db stats\n```\n\n- `stash db wipe`: Remove all entries from the database. Use `--expired` to only\n  wipe expired entries instead of all entries. Requires `--ask` confirmation by\n  default.\n- `stash db vacuum`: Optimize the database using SQLite's VACUUM command,\n  reclaiming space and improving performance.\n- `stash db stats`: Display database statistics including total/active/expired\n  entry counts, storage size, and page information. This is provided purely for\n  convenience and the rule of the cool.\n\n### Watch clipboard for changes and store automatically\n\n```bash\nstash watch\n```\n\nThis runs a daemon that monitors the clipboard and stores new entries\nautomatically. This is designed as an alternative to shelling out to\n`wl-paste --watch` inside a Systemd service or XDG autostart. You may find a\npremade Systemd service in `contrib/`. Packagers are encouraged to vendor the\nservice unless adding their own.\n\n#### Automatic Clipboard Clearing on Expiration\n\nWhen `stash watch` is running and a clipboard entry expires, Stash will detect\nif the current clipboard still contains that expired content and automatically\nclear it. This prevents stale data from remaining in your clipboard after an\nentry has expired from history.\n\n\u003e [!NOTE]\n\u003e This behavior only applies when the watch daemon is actively running. Manual\n\u003e expiration or deletion of entries will not clear the clipboard.\n\n### MIME Type Preference for Watch\n\n`stash watch` supports a `--mime-type` (short `-t`) option that lets you\nprioritise which MIME type the daemon should request from the clipboard when\nmultiple representations are available.\n\n- `any` (default): Request any available representation (current behaviour).\n- `text`: Prefer text representations (e.g. `text/plain`, `text/html`).\n- `image`: Prefer image representations (e.g. `image/png`, `image/jpeg`) so that\n  image copies from browsers or file managers are stored as images rather than\n  HTML fragments.\n\nExample: prefer images when running the watch daemon\n\n```bash\nstash watch --mime-type image\n```\n\nThis is useful when copying images from browsers or file managers where the\nclipboard may offer both HTML and image representations; selecting `image` will\nask the compositor for image data first. Most users will be fine using the\ndefault value (`any`) but in the case your browser (or other applications!)\nregularly misrepresent data, you might wish to prioritize a different type.\n\n### Options\n\nSome commands take additional flags to modify Stash's behavior. See each\ncommands `--help` text for more details. The following are generally standard:\n\n- `--db-path \u003cpath\u003e`: Custom database path\n- `--max-items \u003cN\u003e`: Maximum number of entries to keep (oldest trimmed)\n- `--max-dedupe-search \u003cN\u003e`: Deduplication window size\n- `--preview-width \u003cN\u003e`: Text preview max width for `list`\n- `--version`: Print the current version and exit\n\n### Sensitive Clipboard Filtering\n\nStash can be configured to avoid storing clipboard entries that match a\nsensitive pattern, using a regular expression. This is useful for preventing\naccidental storage of secrets, passwords, or other sensitive data. You don't\nwant sensitive data ending up in your persistent clipboard, right?\n\nThe filter can be configured in one of three ways, as part of two separate\nfeatures.\n\n#### Clipboard Filtering by Entry Regex\n\nThis can be configured in one of two ways. You can use the **environment\nvariable** `STASTH_SENSITIVE_REGEX` to a valid regex pattern, and if the\nclipboard text matches the regex it will not be stored. This can be used for\ntrivial secrets such as but not limited to GitHub tokens or secrets that follow\na rule, e.g. a prefix. You would typically set this in your `~/.bashrc` or\nsimilar but in some cases this might be a security flaw.\n\nThe safer alternative to this is using **Systemd LoadCrediental**. If Stash is\nrunning as a Systemd service, you can provide a regex pattern using a crediental\nfile. For example, add to your `stash.service`:\n\n```dosini\nLoadCredential=clipboard_filter:/etc/stash/clipboard_filter\n```\n\nThe file `/etc/stash/clipboard_filter` should contain your regex pattern (no\nquotes). This is done automatically in the\n[vendored Systemd service](./contrib/stash.service). Remember to set the\nappropriate file permissions if using this option.\n\nThe service will check the credential file first, then the environment variable.\nIf a clipboard entry matches the regex, it will be skipped and a warning will be\nlogged.\n\n\u003e [!TIP]\n\u003e **Example regex to block common password patterns**:\n\u003e\n\u003e `(password|secret|api[_-]?key|token)[=: ]+[^\\s]+`\n\u003e\n\u003e For security reasons, you are recommended to use the regex only for generic\n\u003e tokens that follow a specific rule, for example a generic prefix or suffix.\n\n#### Clipboard Filtering by Application Class\n\nStash allows blocking an entry from the persistent history if it has been copied\nfrom certain applications. This depends on the `use-toplevel` feature flag and\nuses the the `wlr-foreign-toplevel-management-v1` protocol for precise focus\ndetection. While this feature flag is enabled (the default) you may use\n`--excluded-apps` in, e.g., `stash watch` or set the `STASH_EXCLUDED_APPS`\nenvironment variable to block entries from persisting in the database if they\nare coming from your password manager for example. The entry is still copied to\nthe clipboard, but it will never be put inside the database.\n\nThis is a more robust alternative to using the regex method above, since you\nlikely do not want to catch your passwords with a regex. Simply pass your\npassword manager's **window class** to `--excluded-apps` and your passwords will\nbe only copied to the clipboard.\n\n\u003e [!TIP]\n\u003e **Example startup command for Stash daemon**:\n\u003e\n\u003e `stash --excluded-apps Bitwarden watch`\n\n## Tips \u0026 Tricks\n\n### Migrating from Cliphist\n\nStash was designed to be a drop-in replacement for Cliphist, with only minor\nimprovements. If you are migrating from Cliphist, here are a few things you\nshould know.\n\n- Most Cliphist commands have direct equivalents in Stash. For example,\n  `cliphist store` -\u003e `stash store`, `cliphist list` -\u003e `stash list`, etc.\n- Cliphist uses `delete-query`; in Stash, you must use\n  `stash delete --type query --arg \"your query\"`.\n- Both Cliphist and Stash support deleting by ID, including from stdin or a\n  file.\n- Stash respects the `STASH_CLIPBOARD_STATE` environment variable for\n  sensitive/clear entries, just like Cliphist. The `STASH_` prefix is added for\n  granularity, you must update your scripts.\n- You can export your Cliphist history to TSV and import it into Stash (see\n  below).\n- Stash supports text and image previews, including dimensions and format.\n- Stash adds a `watch` command to automatically store clipboard changes. This is\n  an alternative to `wl-paste --watch cliphist list`. You can avoid shelling out\n  and depending on `wl-paste` as Stash implements it through `wl-clipboard-rs`\n  crate and provides its own `wl-copy` and `wl-paste` binaries.\n\n### TSV Export and Import\n\nBoth Stash and Cliphist support TSV format for clipboard history. You can export\nfrom Cliphist and import into Stash, or use Stash to export TSV for\ninteroperability.\n\n**Export TSV from Cliphist:**\n\n```bash\ncliphist list --db ~/.cache/cliphist/db \u003e cliphist.tsv\n```\n\n**Import TSV into Stash:**\n\n```bash\nstash import \u003c cliphist.tsv\n```\n\n**Export TSV from Stash:**\n\n```bash\nstash list \u003e stash.tsv\n```\n\n**Import TSV into Cliphist:**\n\n```bash\ncliphist --import \u003c stash.tsv\n```\n\n### More Tricks\n\nHere are some other tips for Stash that are worth documenting. If you have\nfigured out something new, e.g. a neat shell trick, feel free to add it here!\n\n1. You may use `stash list` to view your clipboard history in an interactive\n   TUI. This is obvious if you have ever ran the command, but here are some\n   things that you might not have known.\n   - `stash list` displays the TUI _only_ if the user is in an interactive TTY.\n     E.g. if it's a Bash script, `stash list` **will output TSV**.\n   - You can change the format with `--format` to e.g. JSON but you can also\n     force a TSV format inside an interactive session with `--format tsv`.\n   - `stash list` displays the mime type for newly recorded entries, but it will\n     not be able to display them for entries imported by Cliphist since Cliphist\n     never made a record of this data.\n2. You can pipe `cliphist list --db ~/.cache/cliphist/db` to\n   `stash import --type tsv` to mimic importing from STDIN.\n\n   ```bash\n   cliphist list --db ~/.cache/cliphist/db | stash import\n   ```\n\n3. Stash provides its own implementation of `wl-copy` and `wl-paste` commands\n   backed by `wl-clipboard-rs`. Those implementations are backwards compatible\n   with `wl-clipboard`, and may be used as **drop-in** replacements. The default\n   build wrapper in `build.rs` links `stash` to `stash-copy` and `stash-paste`,\n   which are also available as `wl-copy` and `wl-paste` respectively. The Nix\n   package automatically links those to `$out/bin` for you, which means they are\n   installed by default but other package managers may need additional steps by\n   the packagers. While building from source, you may link\n   `target/release/stash` manually.\n\n### Entry Expiration\n\nStash supports time-to-live (TTL) for clipboard entries. When an entry's\nexpiration time is reached, it is marked as expired rather than immediately\ndeleted. This allows for inspection of expired entries and automatic clipboard\ncleanup.\n\n#### How Expiration Works\n\nWhen `stash watch` is running with `--expire-after`, it monitors the clipboard\nand processes expired entries periodically. Upon expiration:\n\n1. The entry's `is_expired` flag is set to `1` in the database\n2. If the current clipboard content matches the expired entry, Stash clears the\n   clipboard to prevent pasting stale data\n3. Expired entries are excluded from normal list operations unless `--expired`\n   is specified\n\n\u003e [!NOTE]\n\u003e By default, entries do not expire. Use `stash watch --expire-after DURATION`\n\u003e to enable expiration (e.g., `--expire-after 24h` for 24-hour TTL).\n\n#### Viewing Expired Entries\n\nUse `stash list --expired` to include expired entries in the output. This is\nuseful for:\n\n- Inspecting what has expired from your clipboard history\n- Verifying that sensitive data has been properly expired\n- Debugging expiration behavior\n\n```bash\n# View all entries including expired ones\nstash list --expired\n\n# View expired entries in JSON format\nstash list --expired --format json\n```\n\n#### Cleaning Up Expired Entries\n\nThe watch daemon automatically cleans up expired entries when it processes them.\nFor manual cleanup, use:\n\n```bash\n# Remove all expired entries from the database\nstash db wipe --expired\n```\n\n\u003e [!NOTE]\n\u003e If you have a large number of expired entries, consider running\n\u003e `stash db vacuum` afterward to reclaim disk space.\n\n#### Automatic Clipboard Clearing\n\nWhen `stash watch` is running and an entry expires, Stash checks if the current\nclipboard still contains that expired content. If it matches, Stash clears the\nclipboard automatically. This prevents accidentally pasting outdated content.\n\n\u003e [!TIP]\n\u003e This behavior only applies when the watch daemon is actively running. Manual\n\u003e expiration or deletion of entries will not clear the clipboard.\n\n#### Database Maintenance\n\nStash uses SQLite for persistent storage. Over time, deleted entries and\nfragmentation can affect performance. Use the `stash db` command to maintain\nyour database:\n\n- **Check statistics**: `stash db stats` shows entry counts and storage usage.\n  Use this to monitor growth and decide when to clean up.\n- **Remove expired entries**: `stash db wipe --expired` removes entries that\n  have reached their TTL. The daemon normally handles this, but this is useful\n  for manual cleanup.\n- **Optimize storage**: `stash db vacuum` runs SQLite's VACUUM command to\n  reclaim space and defragment the database. This is safe to run periodically.\n\nIt is recommended to run `stash db vacuum` occasionally (e.g., monthly) to keep\nthe database compact, especially after deleting many entries.\n\n## Attributions\n\nMy thanks go first to [@YaLTeR](https://github.com/YaLTeR/) for the\n[wl-clipboard-rs](https://github.com/YaLTeR/wl-clipboard-rs) crate. Stash is\npowered by [several crates](./Cargo.toml), but none of them were as detrimental\nin Stash's design process.\n\nAdditional thanks to my testers, who have tested earlier versions of Stash and\nprovided feedback. Thank you :)\n\n## License\n\nThis project is made available under Mozilla Public License (MPL) version 2.0.\nSee [LICENSE](LICENSE) for more details on the exact conditions. An online copy\nis provided [here](https://www.mozilla.org/en-US/MPL/2.0/).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnotashelf%2Fstash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnotashelf%2Fstash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnotashelf%2Fstash/lists"}