{"id":16773676,"url":"https://github.com/callmekatootie/spool","last_synced_at":"2026-03-14T04:31:36.118Z","repository":{"id":189816184,"uuid":"675820187","full_name":"callmekatootie/spool","owner":"callmekatootie","description":"A deck for Threads. Think Tweetdeck, but for Threads.","archived":false,"fork":false,"pushed_at":"2023-09-03T19:18:56.000Z","size":618,"stargazers_count":18,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-24T17:51:52.884Z","etag":null,"topics":["meta","threads-app","tweetdeck"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/callmekatootie.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}},"created_at":"2023-08-07T19:59:07.000Z","updated_at":"2024-05-18T05:09:22.000Z","dependencies_parsed_at":"2025-02-17T23:32:49.587Z","dependency_job_id":"a7c236c7-3c3a-4a72-acda-e643989a86db","html_url":"https://github.com/callmekatootie/spool","commit_stats":null,"previous_names":["callmekatootie/spool"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/callmekatootie%2Fspool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/callmekatootie%2Fspool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/callmekatootie%2Fspool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/callmekatootie%2Fspool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/callmekatootie","download_url":"https://codeload.github.com/callmekatootie/spool/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248287904,"owners_count":21078804,"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","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":["meta","threads-app","tweetdeck"],"created_at":"2024-10-13T06:46:38.719Z","updated_at":"2026-03-14T04:31:35.853Z","avatar_url":"https://github.com/callmekatootie.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spool | A deck for Threads\n\nAn unofficial client to view multiple [Threads](https://www.threads.net/) together. Think Tweetdeck, but for Threads. Uses an [unofficial API](https://github.com/junhoyeo/threads-api) for Threads\n\nDemo Video:\n\nhttps://github.com/callmekatootie/spool/assets/2317133/30f506f2-f1df-43fd-9f78-194bf094252c\n\n## Installation\n\nYou need [Node.js](https://nodejs.org/en) to install the dependencies with `npm install`.\nThis is a [Nextjs](https://nextjs.org/) app, so you can use any of the [Nextjs CLI commands](https://nextjs.org/docs/app/api-reference/next-cli) to run it.\n\nYour app should be available at `localhost:3000` by default.\n\n### Environment Variables\n\nSet the following environment variables before running the app:\n\n```js\nTHREADS_USERNAME; // Your Threads account username\nTHREADS_PASSWORD; // Your Threads account password\nDEVICE_ID; // A unique id to identify your device. Example `android-ertquuil3x57000`. Needed to use the API\nSECRET_COOKIE_PASSWORD; // A secret for your auth cookie\n```\n\n## Features\n\n- View multiple account's Threads at the same time\n- Search for a user to add their timeline to your deck\n- Like, Reply and Quote a Thread post.\n- Create a new Thread\n\n## Limitations if you don't login\n\n1. You can view a maximum of 25 posts for a user. Older posts won't be visible.\n2. There is no username search available. You need to know the exact username for the Spool that you will add.\n3. You view the application in read-only mode. This means you cannot favorite, repost, or reply.\n\n## Why isn't there a hosted version of this project?\n\nRate Limits. The API used is an unofficial one. As such, Threads can enforce rate limits that are IP based and can restrict access. If we hosted this project, chances are that it could get immediately rate limited, or worse, blocked permanently by Threads. Hence, the best way to use the application would be for individual users to deploy and use v/s working with a hosted solution.\n\n## TODO\n\n- [ ] If the API throws an error, gracefully handle it in the UI. Right now, for some weird reason, Nextjs throws the error as HTML with 500 status code and swr spams the api until it gets a successful response, even though retryOnError is false\n- [ ] Test search users column by passing in invalid values. We need to display meaningful error messages\n- [ ] Use Virtual DOM for the spool columns. It can lead to performance issues if we have too many threads displayed\n- [ ] ... and any other features that the unofficial API supports\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcallmekatootie%2Fspool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcallmekatootie%2Fspool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcallmekatootie%2Fspool/lists"}