{"id":13801873,"url":"https://github.com/cablehead/stacks","last_synced_at":"2025-10-08T07:12:32.543Z","repository":{"id":167421937,"uuid":"643045565","full_name":"cablehead/stacks","owner":"cablehead","description":"an experimental \"tool for thought\"","archived":false,"fork":false,"pushed_at":"2025-08-16T20:19:45.000Z","size":10677,"stargazers_count":117,"open_issues_count":29,"forks_count":5,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-29T16:52:02.359Z","etag":null,"topics":["clipboard-manager","macos","tauri-app"],"latest_commit_sha":null,"homepage":"https://stacks.cross.stream","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cablehead.png","metadata":{"files":{"readme":"README.md","changelog":"changes/v0.10.0.md","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}},"created_at":"2023-05-20T00:30:58.000Z","updated_at":"2025-08-26T03:18:59.000Z","dependencies_parsed_at":"2023-12-24T03:22:54.516Z","dependency_job_id":"4224a038-70e1-414f-b75c-3fa347a39c65","html_url":"https://github.com/cablehead/stacks","commit_stats":null,"previous_names":["cablehead/stacks"],"tags_count":24,"template":false,"template_full_name":null,"purl":"pkg:github/cablehead/stacks","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cablehead%2Fstacks","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cablehead%2Fstacks/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cablehead%2Fstacks/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cablehead%2Fstacks/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cablehead","download_url":"https://codeload.github.com/cablehead/stacks/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cablehead%2Fstacks/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278903922,"owners_count":26065988,"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-08T02:00:06.501Z","response_time":56,"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":["clipboard-manager","macos","tauri-app"],"created_at":"2024-08-04T00:01:29.043Z","updated_at":"2025-10-08T07:12:32.536Z","avatar_url":"https://github.com/cablehead.png","language":"Rust","readme":"# Stacks [![CI](https://github.com/cablehead/stacks/actions/workflows/rust.yml/badge.svg)](https://github.com/cablehead/stacks/actions/workflows/rust.yml) [![Discord](https://img.shields.io/discord/1182364431435436042?logo=discord)](https://discord.com/invite/YNbScHBHrh)\n\nStacks is a clipboard manager.\n\n![screenshot](./docs/screenshots/screenshot.png)\n\n## About\n\nWith so many great clipboard managers already available, why create another one?\n\nI think of my clipboard as \"picking things up\" to move them around or redirect\nthem. In this sense, your system's clipboard acts as a strong proxy for your\n[\"locus of attention\"](https://www.oreilly.com/library/view/humane-interface-the/0201379376/0201379376_ch02lev1sec3.html)\nwhen you're using a computer.\n\nA clipboard manager, then, is a tool to capture and work with your \"locus of\nattention.\" It ambiently captures your current tasks and work _context_.\n\nStacks is an experimental tool for tracking and manipulating your current\ncontext using pipes and filters. But that’s a lot to explain, so I usually just\ndescribe it as a clipboard manager.\n\nA humble clipboard manager [aspiring](https://x.com/cablelounger/status/1854955656526127398) to elevate the depth of our conversations—\nno less.\n\n## UX disclaimer\n\nA quick note on the user experience (UX): it’s fair to say it’s still a bit\nrough around the edges. If Stacks reaches a UX level similar to (neo)vim, I'd\nconsider that a success. It’s pretty spartan and utilitarian, so being\ncomfortable with the command line, or feeling adventurous, definitely helps.\n\nStacks is my personal\n[\"tool for thought\"](https://maggieappleton.com/tools-for-thought) that I use as\nmy daily driver. Eventually, I’d like Stacks to reach the polish of tools like\n[Obsidian](https://obsidian.md), but for now, the focus is on its experimental\nnature and the underlying\n[event-sourcing store](https://github.com/cablehead/xs).\n\n## Give it a try!\n\nIf you're into experimental tools and are okay with a minimalist,\nutilitarian design, give Stacks a try-- I'd love to hear your thoughts!\n\n### Download\n\n`.DMG` installers that have been notarized by Apple.\n\n- **Current version**: v0.15.13\n- **Last release**: Jan 23, 2025\n\n[![MacOS (Universal)](./docs/assets/MacOS-Universal.svg)](https://stacks.cross.stream/static/releases/Stacks_0.15.13_universal.dmg)\n\n## Community\n\n- We have a [Discord channel](https://discord.gg/fDEcqjKHpv) where we chat about\n  clipboard managers, flashcards, neo-browsers, Tauri, Rust, wasm, tools of\n  thought, and generally fun geekery, and\n- We're using\n  [Github Discussions](https://github.com/cablehead/stacks/discussions) as a\n  forum.\n\n## Usage\n\n\u003ctable\u003e\n  \u003ctr\u003e\u003ctd\u003eTo launch Stacks\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#8963; + Space\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\" align=\"left\"\u003eAccessibility\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eIncrease font size\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#8984; + +\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eDecrease font size\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#8984; + -\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\" align=\"left\"\u003eNavigation\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eNavigate down\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#8595;\u003c/code\u003e or \u003ccode\u003e\u0026#8963; + n\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eNavigate up\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#8593;\u003c/code\u003e or \u003ccode\u003e\u0026#8963; + p\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eNavigate left\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#8592;\u003c/code\u003e or \u003ccode\u003e\u0026#8963; + h\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eNavigate right\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#8594;\u003c/code\u003e or \u003ccode\u003e\u0026#8963; + l\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eNavigate to the stack below\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#x2325; + \u0026#8595;\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eNavigate to the stack above\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#x2325; + \u0026#8593;\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eReset nav (clears filter and brings focus to the top)\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#8984; + 0\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\" align=\"left\"\u003eItem Manipulation\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eMove an item down\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#8984; + \u0026#8595;\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eMove an item up\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#8984; + \u0026#8593;\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eBring current item and stack to the top\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#8984; + t\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003cth colspan=\"2\" align=\"left\"\u003eGlobal shortcuts\u003c/th\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eNew note\u003c/td\u003e\u003ctd\u003e\u003ccode\u003e\u0026#8984; \u0026#x21E7; + n\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n**Note:** Items deleted through the UI are permanently removed on app restart.\n\n## CLI\n\nStacks includes a command-line interface for programmatic access. [First](https://stacks.cross.stream/releases/v0.15.6#xs-setup), symlink the app binary to your PATH:\n\n```bash\nln -s /Applications/Stacks.app/Contents/MacOS/Stacks ~/.local/bin/stacks\n```\n\n\u003ctable\u003e\n  \u003ctr\u003e\u003ctd\u003eGet top item from most recent stack\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eGet specific item by ID\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks {id}\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eDelete top item\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks --delete\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eDelete specific item\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks {id} --delete\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eList all stacks (JSONL)\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks list\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eRaw packet stream (JSONL)\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks stream\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eSearch content*\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks search {query} [--limit N]\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eRebuild search index\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks search --rebuild\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eView complete structure (JSON)\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks view\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eView current navigation state (JSON)\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks view nav\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eList CAS hashes\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks cas list\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003eGet content by hash\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks cas get {hash}\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n  \u003ctr\u003e\u003ctd\u003ePurge content by hash\u003c/td\u003e\u003ctd\u003e\u003ccode\u003estacks cas purge {hash}\u003c/code\u003e\u003c/td\u003e\u003c/tr\u003e\n\u003c/table\u003e\n\n\\*`stacks search` supports [Tantivy QueryParser](https://docs.rs/tantivy/latest/tantivy/query/struct.QueryParser.html) syntax: plain terms (`foo`), phrases (`\"exact phrase\"`), and boolean logic (`foo AND bar NOT baz`).*\n\n## Development\n\n```bash\ngit clone https://github.com/cablehead/stacks.git\ncd stacks\nnpm install\nnpm run tauri dev\n```\n\n## Built with:\n\n[Rust](https://www.rust-lang.org), [Tauri](https://tauri.app),\n[sled](https://github.com/spacejam/sled),\n[cacache](https://github.com/zkat/cacache-rs),\n[Tantivy](https://github.com/quickwit-oss/tantivy), [Tokio](https://tokio.rs),\n[hyper](https://hyper.rs), [Comrak](https://crates.io/crates/comrak),\n[syntect](https://github.com/trishume/syntect),\n[TypeScript](https://www.typescriptlang.org), [Preact](https://preactjs.com),\n[scru128](https://github.com/scru128/rust),\n[tracing](https://docs.rs/tracing/latest/tracing/),\n\n🙏💚\n","funding_links":[],"categories":["Applications"],"sub_categories":["Utilities"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcablehead%2Fstacks","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcablehead%2Fstacks","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcablehead%2Fstacks/lists"}