DsGit is built by developers, for developers. We believe you should know exactly what data the extension touches โ nothing more, nothing less.
Last updated: April 24, 2025 ย ยทย Version 1.0.2
Table of Contents
DsGit ("we", "our", "the Extension") is a Chrome browser extension that automatically pushes your DSA (Data Structures & Algorithms) solutions to GitHub, tracks your solving streak, and enables competitive battles with peers.
We are committed to transparency. This Privacy Policy explains exactly what data we collect, why we collect it, where it is stored, and how you can delete it. We follow the principle of minimum data collectionโ we only touch data that is strictly necessary to provide the extension's features.
Effective date: April 24, 2025 ย ยทย Extension version: 1.0.2
The following table lists every piece of data the extension interacts with, where it lives, and why it is needed.
| Data | Storage Location | Purpose |
|---|---|---|
| GitHub OAuth Access Token | chrome.storage.local (device only) | Authenticate API calls to create/push to your GitHub repo |
| GitHub Username, Avatar URL, GitHub User ID | chrome.storage.local + DsGit backend | Display your profile in the popup; identify you in battles |
| Target GitHub Repository Name | chrome.storage.local (device only) | Know which repo to push solutions into |
| Streak Data (current streak, longest streak, daily history, break dates) | chrome.storage.local (device only) | Power the streak tracker and daily reminder notifications |
| Push History (question name, platform, difficulty, language, date, day number, commit SHA) | chrome.storage.local (device only, max 500 entries) | Show recent submissions; build the GitHub README stats |
| Code Snapshots (your draft code + problem URL, timestamp) | chrome.storage.local (device only, max 10 snapshots) | Time-machine feature โ lets you restore earlier drafts |
| Battle Records (battle ID, opponent username, type, status, duration) | chrome.storage.local + DsGit backend | Track active/completed competitive battles |
| Badges | chrome.storage.local (device only) | Display achievement badges in the popup |
| Signup Date | chrome.storage.local (device only) | Track how long you have been using the extension |
| Stats Cache (aggregated solve counts per platform/difficulty) | chrome.storage.local (device only) | Fast popup load without repeated API calls |
DsGit requests the following Chrome permissions. Each permission is justified below.
storageSave your GitHub token, streak data, push history, and settings locally on your device using chrome.storage.local.
identityLaunch the GitHub OAuth 2.0 sign-in flow securely using chrome.identity.launchWebAuthFlow.
notificationsSend daily streak reminders (e.g., 'You haven't pushed today!') and battle event alerts.
alarmsSchedule the daily reminder alarm and periodic battle-sync polling without requiring the popup to be open.
tabsOpen LeetCode when you click 'Open LeetCode' in a reminder notification.
scriptingInject the content script that extracts your accepted solution code from the coding platform page when you click Push.
host_permissions โ leetcode.com, geeksforgeeks.org, naukri.com (CodingNinjas), nados.ioRead the problem page DOM to detect the question name, difficulty, language, and extract code from the Monaco/CodeMirror editor on these platforms only.
host_permissions โ api.github.comCreate repositories, push files (solutions + README + stats.json), and read your public profile via the GitHub REST API.
When you click Push Solution, the extension calls the GitHub REST API directly from your browser using your own OAuth token. The request goes browser โ github.com โ your code never passes through our servers.
The OAuth token is exchanged through a minimal Cloudflare Worker proxy solely because GitHub requires a server-side secret to complete the OAuth code exchange. The proxy receives the one-time OAuth code, exchanges it for an access token with GitHub, and returns the token to your extension. The proxy stores nothing.
We request the following GitHub OAuth scopes: repo (create & push to repos), user:email (read your email for profile), read:user (read your public GitHub profile). We do not request write access to other repos, organizations, or any scope beyond what is listed.
To power the real-time Battle Arena feature, the extension connects to our backend at api-dsgit.onrender.com via HTTPS and WebSocket (WSS).
The data sent to our backend is limited to:
Battle data is stored in our database only while a battle is active. We retain it for leaderboard and historical purposes unless you request deletion.
GitHub (github.com / api.github.com)
Used for OAuth authentication and storing your solution files. Subject to GitHub's Privacy Policy.
View their Privacy Policy โCloudflare Workers
A minimal server-side proxy to exchange the GitHub OAuth code for an access token. No data is logged or persisted by this worker.
View their Privacy Policy โDsGit Backend (Render.com)
Hosts our Node.js backend for the Battle Arena feature. Render may log standard infrastructure metrics (CPU, memory). No personally identifiable data beyond username is stored.
View their Privacy Policy โThe vast majority of your data is stored locally on your device using chrome.storage.local. This data never leaves your machine except when it is explicitly needed to call the GitHub API or our battle backend.
You have full control over your data:
chrome.storage.local instantly.Your GitHub access token is stored using chrome.storage.local, which is sandboxed to the extension and not accessible by web pages or other extensions. It is never transmitted to our servers.
All communication with our backend and GitHub uses HTTPS / WSS (TLS encrypted) connections. Our backend does not log or cache your GitHub token.
The OAuth flow uses a cryptographically random state parameter (via crypto.randomUUID()) to prevent CSRF attacks.
DsGit is not directed at children under the age of 13. We do not knowingly collect personal information from children. If you believe a child has provided us with personal information, please contact us and we will delete it promptly.
We may update this Privacy Policy from time to time. When we do, we will update the effective date at the top of this page. Significant changes will also be noted in the Chrome Web Store listing update notes. Continued use of the extension after changes constitutes acceptance of the updated policy.
If you have questions, concerns, or data deletion requests, reach out at:
DsGit โ Privacy Inquiries
GitHub: github.com/deenu-cse
We aim to respond to all privacy requests within 7 business days.
DsGit is open-source. You can inspect every line of code that runs in your browser. We believe in earning trust through transparency.