{"id":15145888,"url":"https://github.com/ryouze/yt-table","last_synced_at":"2025-10-28T04:30:38.213Z","repository":{"id":257684235,"uuid":"858164307","full_name":"ryouze/yt-table","owner":"ryouze","description":"Cross-platform CLI tool for managing YouTube subscriptions locally through a shell-like interface.","archived":false,"fork":false,"pushed_at":"2025-01-09T17:40:03.000Z","size":116,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-09T18:41:20.707Z","etag":null,"topics":["cmake","command-line-tool","cpp","cross-platform","html","regex","youtube"],"latest_commit_sha":null,"homepage":"https://ryouze.net/","language":"C++","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/ryouze.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":"2024-09-16T12:26:36.000Z","updated_at":"2025-01-09T17:40:07.000Z","dependencies_parsed_at":"2024-12-19T04:22:50.160Z","dependency_job_id":"d793c19e-aea3-46b0-bf14-ec0778dbb525","html_url":"https://github.com/ryouze/yt-table","commit_stats":{"total_commits":53,"total_committers":1,"mean_commits":53.0,"dds":0.0,"last_synced_commit":"25649ae6a771010d359a19086d1c6d459f454cd3"},"previous_names":["ryouze/yt-table"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryouze%2Fyt-table","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryouze%2Fyt-table/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryouze%2Fyt-table/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ryouze%2Fyt-table/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ryouze","download_url":"https://codeload.github.com/ryouze/yt-table/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238590611,"owners_count":19497354,"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":["cmake","command-line-tool","cpp","cross-platform","html","regex","youtube"],"created_at":"2024-09-26T12:00:21.118Z","updated_at":"2025-10-28T04:30:38.187Z","avatar_url":"https://github.com/ryouze.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# yt-table\n\n[![CI](https://github.com/ryouze/yt-table/actions/workflows/ci.yml/badge.svg)](https://github.com/ryouze/yt-table/actions/workflows/ci.yml)\n[![Release](https://github.com/ryouze/yt-table/actions/workflows/release.yml/badge.svg)](https://github.com/ryouze/yt-table/actions/workflows/release.yml)\n![Release version](https://img.shields.io/github/v/release/ryouze/yt-table)\n\nyt-table is a cross-platform CLI tool for managing YouTube subscriptions locally through a shell-like interface.\n\n\n## Motivation\n\nAs someone who prefers not to use a Google account, I maintain my YouTube \"subscriptions\" through a locally-stored HTML table. Not only does it look better than regular bookmarks, but it also allows me to add descriptions for each channel.\n\nHowever, manually editing HTML code is quite annoying and error-prone. To simplify this process, I developed yt-table, a command-line tool that generates a HTML table automatically. It offers a simple, shell-like interface for adding and removing channels.\n\nIt works like this:\n\n```sh\n[yt-table] $ add\nEnter name: noriyaro\nEnter description: Cars\nEnter link: https://www.youtube.com/@noriyaro/videos\nChannel 'noriyaro' added\n```\n\n```sh\n[yt-table] $ ls\n\nChannels (2):\n  Name: noriyaro\n  Link: https://www.youtube.com/@noriyaro/videos\n  Description: Cars\n\n  Name: Hugh Jeffreys\n  Link: https://www.youtube.com/@HughJeffreys/videos\n  Description: Phone Repairs\n```\n\n```sh\n[yt-table] $ remove\nEnter name: Hugh Jeffreys\nChannel 'Hugh Jeffreys' removed\n```\n\nUnder the hood, the tool uses regex to parse the HTML file and extract an array of channels. When a change is made, the tool rewrites the entire file, converting the modified array of channels to HTML code. The HTML table itself is stored in a platform-specific directory (e.g., `~/Library/Application Support/yt-table/Resources/subscriptions.html` on macOS), which can be opened (and bookmarked) in a web browser for easy access.\n\n\n## Features\n\n- Written in modern C++ (C++17).\n- Comprehensive documentation with doxygen-style comments.\n- Automatic backups.\n- Responsive, mobile-friendly CSS.\n- Automatic third-party dependency management using CMake's [FetchContent](https://www.foonathan.net/2022/06/cmake-fetchcontent/).\n- No missing STL headers thanks to [header-warden](https://github.com/ryouze/header-warden).\n\n\n## Tested Systems\n\nThis project has been tested on the following systems:\n\n- macOS 14.6 (Sonoma)\n- Manjaro 24.0 (Wynsdey)\n- Windows 11 23H2\n\nAutomated testing is also performed on the latest versions of macOS, GNU/Linux, and Windows using GitHub Actions.\n\n\n## Pre-built Binaries\n\nPre-built binaries are available for macOS (ARM64), GNU/Linux (x86_64), and Windows (x86_64). You can download the latest version from the [Releases](../../releases) page.\n\nTo remove macOS quarantine, use the following commands:\n\n```sh\nxattr -d com.apple.quarantine yt-table-macos-arm64\nchmod +x yt-table-macos-arm64\n```\n\nOn Windows, the OS might complain about the binary being unsigned. You can bypass this by clicking on \"More info\" and then \"Run anyway\".\n\n\n## Requirements\n\nTo build and run this project, you'll need:\n\n- C++17 or higher\n- CMake\n\n\n## Build\n\nFollow these steps to build the project:\n\n1. **Clone the repository**:\n\n    ```sh\n    git clone https://github.com/ryouze/yt-table.git\n    ```\n\n2. **Generate the build system**:\n\n    ```sh\n    cd yt-table\n    mkdir build \u0026\u0026 cd build\n    cmake ..\n    ```\n\n    Optionally, you can disable compile warnings by setting `ENABLE_COMPILE_FLAGS` to `OFF`:\n\n    ```sh\n    cmake .. -DENABLE_COMPILE_FLAGS=OFF\n    ```\n\n3. **Compile the project**:\n\n    To compile the project, use the following command:\n\n    ```sh\n    cmake --build . --parallel\n    ```\n\nAfter successful compilation, you can run the program using `./yt-table`. However, it is highly recommended to install the program, so that it can be run from any directory. Refer to the [Install](#install) section below.\n\n\u003e [!TIP]\n\u003e The mode is set to `Release` by default. To build in `Debug` mode, use `cmake .. -DCMAKE_BUILD_TYPE=Debug`.\n\n\n## Install\n\nIf not already built, follow the steps in the [Build](#build) section and ensure that you are in the `build` directory.\n\nTo install the program, use the following command:\n\n```sh\nsudo cmake --install .\n```\n\nOn macOS, this will install the program to `/usr/local/bin`. You can then run the program from any directory using `yt-table`.\n\n\n## Usage\n\nTo run the program, use the following command:\n\n```sh\nyt-table\n```\n\n\u003e [!TIP]\n\u003e On Windows, a modern terminal emulator like [Windows Terminal](https://github.com/microsoft/terminal) is recommended. The default Command Prompt will display UTF-8 characters correctly, but UTF-8 input is not supported.\n\nOn startup, the program will create an empty `subscriptions.html` file in a platform-specific directory. Then, a shell-like interface will appear, allowing you to interact with the file.\n\nThe following commands are available:\n\n- `help`: Print the help message.\n- `version`: Print the version.\n- `ls`: Print the list of channels.\n- `open`: Open the HTML table in a web browser.\n- `add`: Add a new channel (name, description, link).\n- `remove`: Remove a channel (name).\n- `exit`: Exit the program.\n\nThe changes are saved automatically and a backup file is created in the same directory as the `subscriptions.html` file. Any leading or trailing whitespace in the input is removed.\n\nThe program does not support history using the up/down arrow keys or other full terminal features. It is designed to be as simple as possible, because I primarily interact with the HTML table itself.\n\n\n## Flags\n\n```sh\n[~] $ yt-table --help\nUsage: yt-table [-h] [-v]\n\nManage YouTube subscriptions locally through a shell-like interface.\n\nOptional arguments:\n  -h, --help     prints help message and exits\n  -v, --version  prints version and exits\n```\n\n\n## Testing\n\nTests are included in the project but are not built by default.\n\nTo enable and build the tests manually, run the following commands from the `build` directory:\n\n```sh\ncmake .. -DBUILD_TESTS=ON\ncmake --build . --parallel\nctest --output-on-failure\n```\n\n\n## Credits\n\n- [fmt](https://github.com/fmtlib/fmt)\n\n\n## Contributing\n\nAll contributions are welcome.\n\n\n## License\n\nThis project is licensed under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryouze%2Fyt-table","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryouze%2Fyt-table","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryouze%2Fyt-table/lists"}