{"id":13928901,"url":"https://github.com/Webklex/tbm","last_synced_at":"2025-07-19T10:32:25.592Z","repository":{"id":63485155,"uuid":"523405510","full_name":"Webklex/tbm","owner":"Webklex","description":"Fetch all your bookmarked tweets and make them accessible through a webinterface.","archived":true,"fork":false,"pushed_at":"2023-07-05T21:16:16.000Z","size":1622,"stargazers_count":27,"open_issues_count":20,"forks_count":3,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-08-08T18:20:49.118Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"CSS","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/Webklex.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"ko_fi":"webklex","custom":["https://www.buymeacoffee.com/webklex"]}},"created_at":"2022-08-10T15:51:52.000Z","updated_at":"2024-03-05T11:03:05.000Z","dependencies_parsed_at":"2024-01-14T18:06:24.183Z","dependency_job_id":null,"html_url":"https://github.com/Webklex/tbm","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Webklex%2Ftbm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Webklex%2Ftbm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Webklex%2Ftbm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Webklex%2Ftbm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Webklex","download_url":"https://codeload.github.com/Webklex/tbm/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226588875,"owners_count":17655799,"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":[],"created_at":"2024-08-07T18:01:58.977Z","updated_at":"2024-11-26T17:31:09.916Z","avatar_url":"https://github.com/Webklex.png","language":"CSS","funding_links":["https://ko-fi.com/webklex","https://www.buymeacoffee.com/webklex"],"categories":["others","CSS"],"sub_categories":[],"readme":"# TBM - Twitter Bookmark Manager\n\nFetch all your bookmarked tweets and make them accessible through a webinterface.\n\n[![Releases][ico-release]](https://github.com/Webklex/tbm/releases)\n[![Downloads][ico-downloads]](https://github.com/Webklex/tbm/releases)\n[![License][ico-license]](LICENSE.md)\n[![Hits][ico-hits]][link-hits]\n\n![Search Tweets](.github/images/search_tweets.png)\n(Search for bookmarked tweets)\n\n\n## Table of Contents\n- [Features](#features)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Configuration](#configuration)\n  - [Modes](#modes)\n- [Api](#websocket-commands)\n- [Build](#build)\n- [Development](#development)\n  - [Custom Styles](#custom-styles)\n  - [Structure](#structure)\n- [Support](#support)\n- [Change log](#change-log)\n- [Security](#security)\n- [Credits](#credits)\n- [License](#license)\n\n\n## Features\n- Fetch all bookmarked tweets\n- Search for all bookmarked tweets containing a given phrase (this includes: username, real name, hashtag, tweet content and real urls)\n\n\n## Installation\nYou can either download a matching prebuild binary and config from the [releases](https://github.com/Webklex/tbm/releases)\nor clone this repository and [build](#build) it yourself.\n\n\n## Usage\nIn order to fetch your bookmarks, you'll have to supply an active cookie. \nYou can find it by following these steps:\n1. Login to twitter.com and press `f12`, switch to the `Network` tab\n2. Go to https://twitter.com/i/bookmarks and look for a request named `Bookmarks?variables=%7B%22count%22%3A20..` inside your open network tab\n3. Click on the request and switch to the `Headers` tab if it isn't selected and scroll down to `Request Headers`\n4. Copy the line starting with `cookie: `. Make sure to enclose the entire cookie string in quotes (`\"`). Escape possible quotes on key:values pairs inside the cookie as `\\\"`.\n\n```bash\n  -config string\n        Application config file (default \"./config.json\")\n  -offline\n        Don't fetch new bookmarks; link to local files only\n  -cookie string\n        Twitter cookie string\n  -data-dir string\n        Folder containing all fetched data (default \"./data\")\n  -delay duration\n        Delay your request by a given time (default 30s)\n  -host string\n        Host address the api should bind to (default \"localhost\")\n  -port uint\n        Port the api should bind to (default 4788)\n  -timeout duration\n        Request timeout (default 10s)\n  -timezone string\n        Application time zone (default \"UTC\")\n  -danger-remove-bookmarks\n        Remove the bookmark on Twitter if the tweet has been downloaded\n  -log int\n        Set the log mode (0 = all, 1 = success, 2 = warning, 3 = statistic, 4 = error)\n  -no-color\n        Disable color output\n  -version\n        Show version and exit\n  -help\n        Show help and exit\n```\n\n\n## Configuration\nBesides the command arguments, you can also provide a config file:\n```json\n{\n  \"timezone\": \"UTC\",\n  \"data_dir\": \"./data\",\n  \"mode\": \"online\",\n  \"danger\": {\n    \"remove_bookmarks\": false\n  },\n  \"server\": {\n    \"host\": \"localhost\",\n    \"port\": 4788\n  },\n  \"scraper\": {\n    \"delay\": \"30s\",\n    \"cookie\": \"guest_id=...\"\n  }\n}\n```\n\n\n### Modes\nThere are currently two different modes available. `online` and `offline`. If you enable \n`offline` mode, the program won't fetch any new bookmarks and only reference previously downloaded\nresources such as tweets and media files.\n\nIf you want to restart your sync, stop the application and delete the file called `.cursor.tmp` located in your \nworking directory.\n\n\n## Websocket\nThe websocket can be accessed under `ws://{host}:{port}/ws`.\n\n\n## Build\nBuild a new regular binary:\n```bash\ngo build -ldflags \"-w -s -X main.buildNumber=1 -X main.buildVersion=custom\" -o tbm\n```\n\n\n## Development\nRequirements:\n- `Node` v12.13\n- `Golang` ^1.17.2\n\n```bash\nnpm run watch\nnpm run build\ngo run main.go\n```\n\n\n## Custom Styles\nBy default all assets (.js, .css, .tmpl, etc) get included while building a new version.\n\n\n### Structure:\n- static\n  - assets\n    - css\n      - tailwind.css\n  - template\n  - css\n    - tailwind.css (compiled tailwind css)\n    - style.css (custom styling)\n  - js\n    - app.js\n\n\n## Features \u0026 pull requests\nEveryone can contribute to this project. Every pull request will be considered, but it can also happen to be declined.\nTo prevent unnecessary work, please consider to create a [feature issue](https://github.com/webklex/tbm/issues/new?template=feature_request.md)\nfirst, if you're planning to do bigger changes. Of course, you can also create a new [feature issue](https://github.com/webklex/tbm/issues/new?template=feature_request.md)\nif you're just wishing a feature ;)\n\n\u003eOff-topic, rude or abusive issues will be deleted without any notice.\n\n\n## Support\nIf you encounter any problems or if you find a bug, please don't hesitate to create a new [issue](https://github.com/webklex/tbm/issues).\nHowever, please be aware that it might take some time to get an answer.\n\nIf you need **immediate** or **commercial** support, feel free to send me a mail at github@webklex.com.\n\n\n## Change log\nPlease see [CHANGELOG](CHANGELOG.md) for more information what has changed recently.\n\n\n## Security\nIf you discover any security related issues, please email github@webklex.com instead of using the issue tracker.\n\n\n## Credits\n- [Webklex][link-author]\n- [All Contributors][link-contributors]\n\n\n## License\nThe MIT License (MIT). Please see [License File](LICENSE.md) for more information.\n\n\n[ico-license]: https://img.shields.io/badge/license-MIT-brightgreen.svg?style=flat-square\n[ico-release]: https://img.shields.io/github/v/release/webklex/tbm?style=flat-square\n[ico-downloads]: https://img.shields.io/github/downloads/webklex/tbm/total?style=flat-square\n[ico-hits]: https://hits.webklex.com/svg/webklex/tbm?1\n\n[link-hits]: https://hits.webklex.com\n[link-author]: https://github.com/webklex\n[link-contributors]: https://github.com/webklex/tbm/graphs/contributors\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FWebklex%2Ftbm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FWebklex%2Ftbm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FWebklex%2Ftbm/lists"}