{"id":27939483,"url":"https://github.com/jlw-7/github-nonfollowers-checker","last_synced_at":"2025-05-07T09:54:31.653Z","repository":{"id":291742188,"uuid":"978622755","full_name":"JLW-7/github-nonfollowers-checker","owner":"JLW-7","description":"A fun tool to check who's not following you back on github (and perhaps unfollow them 😏)","archived":false,"fork":false,"pushed_at":"2025-05-06T09:24:10.000Z","size":155,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-06T10:33:30.178Z","etag":null,"topics":["developer-console","github-api","javascript"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JLW-7.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}},"created_at":"2025-05-06T09:14:05.000Z","updated_at":"2025-05-06T09:27:15.000Z","dependencies_parsed_at":"2025-05-06T10:43:48.636Z","dependency_job_id":null,"html_url":"https://github.com/JLW-7/github-nonfollowers-checker","commit_stats":null,"previous_names":["jlw-7/github-nonfollowers-checker"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JLW-7%2Fgithub-nonfollowers-checker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JLW-7%2Fgithub-nonfollowers-checker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JLW-7%2Fgithub-nonfollowers-checker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JLW-7%2Fgithub-nonfollowers-checker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JLW-7","download_url":"https://codeload.github.com/JLW-7/github-nonfollowers-checker/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252856425,"owners_count":21814853,"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":["developer-console","github-api","javascript"],"created_at":"2025-05-07T09:54:30.917Z","updated_at":"2025-05-07T09:54:31.646Z","avatar_url":"https://github.com/JLW-7.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📟 GitHub Non-Followers Checker\n\nA simple, client-side tool that helps you identify which GitHub users you follow that don't follow you back. (I know, sometimes you would want to unfollow those who don't follow you back 😏)\n\n---\n\n### 🚀 How to Use\n\n1. Open your browser's **Developer Console**:\n\n   * Windows: `Ctrl + Shift + J`\n   * Mac: `Cmd + Option + I`\n\n2. Paste the full JavaScript code below and hit **Enter**. (Or you can click [here](checker.js) for the code):\n``` javascript\n\"use strict\";\n\nconst GITHUB_API_URL = \"https://api.github.com/users/\";\n\nlet nonFollowersList = [];\nlet isActiveProcess = false;\n\nfunction sleep(ms) {\n    return new Promise((resolve) =\u003e setTimeout(resolve, ms));\n}\n\nasync function getAllFollowers(username) {\n    let followers = [];\n    let page = 1;\n    while (true) {\n        const response = await fetch(`${GITHUB_API_URL}${username}/followers?per_page=100\u0026page=${page}`);\n        if (!response.ok) throw new Error('Error fetching followers: ' + response.statusText);\n        const data = await response.json();\n        if (data.length === 0) break;\n        followers = followers.concat(data);\n        page++;\n    }\n    return followers;\n}\n\nasync function getAllFollowing(username) {\n    let following = [];\n    let page = 1;\n    while (true) {\n        const response = await fetch(`${GITHUB_API_URL}${username}/following?per_page=100\u0026page=${page}`);\n        if (!response.ok) throw new Error('Error fetching following: ' + response.statusText);\n        const data = await response.json();\n        if (data.length === 0) break;\n        following = following.concat(data);\n        page++;\n    }\n    return following;\n}\n\nasync function findNonFollowers(username) {\n    if (isActiveProcess) return;\n    isActiveProcess = true;\n    showLoading(true);\n    showError(\"\");\n\n    try {\n        const followers = await getAllFollowers(username);\n        const following = await getAllFollowing(username);\n\n        const followerSet = new Set(followers.map(user =\u003e user.login));\n        nonFollowersList = following.filter(user =\u003e !followerSet.has(user.login));\n        renderResults(nonFollowersList);\n    } catch (error) {\n        console.error(error);\n        showError(error.message);\n    } finally {\n        isActiveProcess = false;\n        showLoading(false);\n    }\n}\n\nfunction renderResults(users) {\n    const container = document.querySelector(\".results-container\");\n    container.innerHTML = \"\";\n\n    if (users.length === 0) {\n        container.innerHTML = `\u003cdiv class=\"empty\"\u003e🎉 Everyone follows you back!\u003c/div\u003e`;\n    } else {\n        users.forEach(user =\u003e {\n            const el = document.createElement(\"div\");\n            el.className = \"user\";\n            el.innerHTML = `\u003ca href=\"https://github.com/${user.login}\" target=\"_blank\"\u003e@${user.login}\u003c/a\u003e`;\n            container.appendChild(el);\n        });\n    }\n\n    document.querySelector(\".nonfollower-count\").textContent = `Non-followers: ${users.length}`;\n}\n\nfunction showLoading(show) {\n    document.querySelector(\".loader\").style.display = show ? \"block\" : \"none\";\n}\n\nfunction showError(msg) {\n    document.querySelector(\".error-message\").textContent = msg;\n}\n\nfunction renderOverlay(username) {\n    document.body.innerHTML = `\n        \u003cmain style=\"font-family:sans-serif;max-width:600px;margin:2rem auto;padding:2rem;border:1px solid #ccc;border-radius:10px;\"\u003e\n            \u003ch1 style=\"text-align:center;\"\u003eGitHub Non-Followers Checker\u003c/h1\u003e\n            \u003cdiv style=\"text-align:center;margin-bottom:1rem;\"\u003e\n                \u003cbutton id=\"check-followers-btn\" style=\"padding:0.6rem 1.2rem;font-size:1rem;border:none;border-radius:5px;background:#007bff;color:white;cursor:pointer;\"\u003e🔍 Check Non-Followers\u003c/button\u003e\n            \u003c/div\u003e\n            \u003cdiv class=\"loader\" style=\"display:none;text-align:center;\"\u003eLoading...\u003c/div\u003e\n            \u003cdiv class=\"error-message\" style=\"color:red;text-align:center;\"\u003e\u003c/div\u003e\n            \u003cdiv class=\"results-container\" style=\"margin-top:1rem;\"\u003e\u003c/div\u003e\n            \u003cdiv style=\"text-align:center;margin-top:1rem;\"\u003e\n                \u003cspan class=\"nonfollower-count\"\u003eNon-followers: 0\u003c/span\u003e\n            \u003c/div\u003e\n        \u003c/main\u003e\n    `;\n\n    document.getElementById(\"check-followers-btn\").addEventListener(\"click\", () =\u003e {\n        findNonFollowers(username);\n    });\n}\n\nfunction init() {\n    const username = prompt(\"Enter your GitHub username:\");\n    if (username) {\n        renderOverlay(username);\n    } else {\n        alert(\"Username is required!\");\n    }\n}\n\ninit();\n```\n3. When prompted, enter your **GitHub username**.\n4. Click **Check Non-Followers** in the interface that appears.\n5. View the list of users who don’t follow you back.\n6. Clicking on a user's name brings you directly to their profile. Then, you can unfollow them! (I mean if you want to)\n\n___\n\n### 🔍 Features\n\n* ✅ Fetches **all followers** and **following** with GitHub API pagination.\n* 📃 Lists users you follow but who **don’t follow you back**.\n* 🔗 Clickable GitHub profile links for each non-follower.\n* ⚡ Minimalistic, fast UI with no dependencies.\n* 🔐 Runs **entirely in the browser** — no login, token, or backend needed.\n\n---\n\n### 📸 Preview\n\n\u003cimg src=\"preview.png\" alt=\"App UI Preview\" width=\"400\"/\u003e\n\n---\n\n### ⚠️ Disclaimer\n\n\u003e This project is not affiliated with, endorsed by, or connected to GitHub in any way. Use at your own discretion. It uses GitHub's public REST API without authentication, which is rate-limited (\\~60 requests/hour).\n\n---\n\n### 🤝 Contributions\n\nFeel free to open issues or pull requests to improve the tool.\n\n---\n\n### 📄 License\n\nGNU 3.0 License. See `LICENSE` file.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlw-7%2Fgithub-nonfollowers-checker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjlw-7%2Fgithub-nonfollowers-checker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlw-7%2Fgithub-nonfollowers-checker/lists"}