You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: snap coordinates to city centers for privacy (152k+ cities from GeoNames)
Replace deterministic coordinate rounding (~11km) with city center snapping using the GeoNames cities1000 database (152,914 cities across 246 countries).
All developers in the same city now share identical coordinates, preventing cross-session tracking.
- Add city-centers.json (GeoNames cities1000, pop > 1000) to all 3 extensions
- Snap IP geolocation coordinates to canonical city center via normalized name lookup
- Fallback for unmatched cities: random placement within 20km radius
- Anonymous mode now picks from all 152k+ cities instead of only 50 per country
- Remove anonymous-cities.json (replaced by city-centers.json)
@@ -61,8 +62,8 @@ On [devglobe.xyz](https://devglobe.xyz), you'll find:
61
62
62
63
1.**Sign in** on [devglobe.xyz](https://devglobe.xyz) with GitHub
63
64
2.**Copy your API key** from the site settings
64
-
3.**Install the extension** in VS Code or your JetBrains IDE
65
-
4.**Paste the key** in the extension sidebar
65
+
3.**Install the extension** in VS Code, your JetBrains IDE, or Claude Code
66
+
4.**Paste the key** in the extension sidebar (or config file for Claude Code)
66
67
5.**You're online** — your marker appears on the globe
67
68
68
69
The extension sends a **heartbeat every 30 seconds** as long as you're actively coding. If you stop typing for more than 1 minute, heartbeats pause automatically. **After 10 minutes of inactivity, you disappear from the globe** and are considered inactive.
@@ -83,7 +84,8 @@ The extension sends a **heartbeat every 30 seconds** as long as you're actively
83
84
|---------|-------------|
84
85
|**Live heartbeat**| Sends your activity every 30s. Auto-pauses after 1 min of inactivity. |
85
86
|**Language detection**| Detects 48+ languages from your active editor tab. |
86
-
|**Git integration**| Detects your repo from the git remote. Counts insertions/deletions over 24h on each new commit. |
87
+
|**Git integration**| Detects your repo from the git remote. Commit stats (insertions/deletions) are verified server-side via the GitHub API — never sent by the extension. |
88
+
|**Anonymous mode**| Hide your exact location — your marker is placed on a random city in your country (from a database of 152,000+ cities worldwide). |
87
89
|**Status message**| Write what you're working on — visible on your globe profile. |
88
90
|**Repo sharing**|**You decide.** Your repo name is never shown unless you explicitly enable this toggle (disabled by default). |
89
91
|**Offline recovery**| Detects connection loss and automatically resumes when the network is back. |
@@ -126,7 +128,8 @@ Same features as the VS Code extension, adapted for the JetBrains platform:
126
128
|---------|-------------|
127
129
|**Live heartbeat**| 30s interval, pauses after 1 min of inactivity. |
128
130
|**Language detection**| Uses JetBrains' native FileType system — supports all languages in your IDE without configuration. |
129
-
|**Git integration**| Same repo detection + commit stats. |
131
+
|**Git integration**| Same repo detection. Commit stats verified server-side via GitHub API. |
132
+
|**Anonymous mode**| Same privacy toggle as VS Code — a random city in your country (from a database of 152,000+ cities worldwide). |
130
133
|**Status message**| Editable from the side panel, persists in IDE settings. |
131
134
|**Repo sharing**| Same toggle as VS Code — your repo stays invisible unless explicitly enabled. |
132
135
|**Offline recovery**| Automatic detection + resume when the network is back. |
@@ -140,6 +143,99 @@ Same features as the VS Code extension, adapted for the JetBrains platform:
**Option A** — Environment variable (add to `~/.zshrc` or `~/.bashrc`):
166
+
```bash
167
+
export DEVGLOBE_API_KEY="your-api-key-here"
168
+
```
169
+
170
+
**Option B** — Config file:
171
+
```bash
172
+
mkdir -p ~/.devglobe
173
+
echo"your-api-key-here">~/.devglobe/api_key
174
+
```
175
+
176
+
### Features
177
+
178
+
| Feature | Description |
179
+
|---------|-------------|
180
+
|**Live heartbeat**| Hooks into Claude Code events. Sends a heartbeat at most once per minute. |
181
+
|**Language detection**| Detects the language from file extensions being edited. |
182
+
|**Git integration**| Detects your repo from the git remote. |
183
+
|**Anonymous mode**| Hide your exact location — placed on a random city in your country (from a database of 152,000+ cities worldwide). Set `"anonymousMode": true` in `~/.devglobe/config.json`. |
184
+
|**Repo sharing**| Set `"shareRepo": true` in `~/.devglobe/config.json` to display your repo on the globe. |
185
+
186
+
### Configuration
187
+
188
+
Create `~/.devglobe/config.json`:
189
+
190
+
```json
191
+
{
192
+
"shareRepo": true,
193
+
"anonymousMode": false
194
+
}
195
+
```
196
+
197
+
---
198
+
199
+
## GitHub App — Verified commit stats
200
+
201
+
DevGlobe uses a [GitHub App](https://github.com/apps/devglobeapp) to display **verified** commit statistics (insertions & deletions per week) on featured projects. This replaces the old client-side stats collection, which could be falsified.
202
+
203
+
### How it works
204
+
205
+
1. On your DevGlobe profile, click **"Connect repo"** in the Projects section
206
+
2. You're redirected to GitHub to install the [DevGlobe App](https://github.com/apps/devglobeapp) on the repos you choose
207
+
3. A server-side job syncs commit stats from the GitHub API **every 15 minutes**
208
+
4. Stats are displayed on your featured projects in the carousel and on your profile
209
+
210
+
### What the GitHub App can access
211
+
212
+
The app requests **Metadata: Read-only** — the most minimal GitHub permission available. It uses the `GET /repos/{owner/repo}/stats/contributors` endpoint to retrieve aggregated contribution statistics (weekly insertions and deletions per contributor).
213
+
214
+
| Data | Access |
215
+
|------|--------|
216
+
| Aggregated commit statistics (insertions/deletions per week) |**Read**|
| Your file contents or file names |**No access**|
220
+
| Your commit messages |**No access**|
221
+
| Your issues and pull requests |**No access**|
222
+
| Your repo settings |**No access**|
223
+
| Your actions/workflows |**No access**|
224
+
| Your collaborators list |**No access**|
225
+
226
+
### What happens if you don't install it
227
+
228
+
- You can still use DevGlobe normally (heartbeats, coding time, leaderboard)
229
+
- You can still add projects to your profile
230
+
- You just **can't feature a project** in the carousel without connecting its repo
231
+
- No commit stats will be displayed on your profile
232
+
233
+
### How to uninstall
234
+
235
+
Go to [github.com/settings/installations](https://github.com/settings/installations), find "DevGlobe", and click **Uninstall**. Your coding time and profile data on DevGlobe remain intact.
236
+
237
+
---
238
+
143
239
## Privacy & Security
144
240
145
241
We know that when you install an extension, you trust the developer. We take that seriously. Here's exactly what the extension does — no gray area.
@@ -149,9 +245,10 @@ We know that when you install an extension, you trust the developer. We take tha
149
245
| Data | Sent | Detail |
150
246
|------|------|--------|
151
247
| Programming language | Yes | The language name of your active tab (e.g. "TypeScript"). Nothing else. |
152
-
| Approximate location | Yes | City + coordinates **rounded to ~11 km**. You appear as an area on the globe, not an address. |
153
-
| Repo name |**You decide**|`owner/repo` format only. **Sharing is disabled by default.** Nobody sees your repo unless you explicitly enable the "Share repo" toggle. |
154
-
| Commit stats | Yes | Number of insertions and deletions over 24h. Sent only once per new detected commit. |
248
+
| Approximate location | Yes | City + coordinates **snapped to your city center** (from a database of 152,000+ cities). You appear as an area on the globe, not an address. |
249
+
| Repo name | Always sent |`owner/repo` is always sent to the server (used for featured project score calculation), but **displayed on the globe only if you enable the "Share repo" toggle** (disabled by default). |
250
+
| Commit stats |**Never by the extension**| Insertions/deletions are fetched **server-side** from the GitHub API via the GitHub App. The extension never reads or sends commit data. |
251
+
| Anonymous mode |**You decide**| When enabled, your real coordinates are replaced with a random city in your country (from a database of 152,000+ cities worldwide). Your actual location is never sent to DevGlobe. |
155
252
| Coding time | Yes | Accumulated per day, per language. |
156
253
| Status message | Yes | Only what you write yourself. |
157
254
@@ -191,6 +288,7 @@ Your DevGlobe API key is **never stored in plain text**.
191
288
|-----|----------------|
192
289
| VS Code |**SecretStorage** — your OS system keychain (macOS Keychain, Windows Credential Manager, Linux libsecret) |
193
290
| JetBrains |**PasswordSafe** — the IDE's native credential manager, backed by the OS keychain |
291
+
| Claude Code |**Environment variable** (`DEVGLOBE_API_KEY`) or **config file** (`~/.devglobe/api_key`) |
194
292
195
293
The VS Code extension automatically migrates old keys that were stored in plain text in `settings.json` to the secure keychain.
196
294
@@ -203,7 +301,7 @@ The VS Code extension automatically migrates old keys that were stored in plain
203
301
204
302
### Open source
205
303
206
-
Both extensions are open source. You can read every line of code that runs on your machine. That's the purpose of this repository.
304
+
All extensions are open source. You can read every line of code that runs on your machine. That's the purpose of this repository.
207
305
208
306
---
209
307
@@ -216,13 +314,13 @@ Every 30 seconds, if you've typed code in the last minute, the extension sends a
216
314
```
217
315
{
218
316
api_key, // your identifier (stored in the OS keychain)
219
-
hour, // 0-23
220
-
latitude, longitude, // rounded to 1 decimal (~11 km)
317
+
latitude, longitude, // snapped to city center (152k+ cities)
221
318
city, // "Paris, France"
222
319
language, // "TypeScript"
223
-
repo, // "owner/repo" (sent to the backend but display on the globe depends on your preferences, sending to the backend is used for featured project score calculation)
224
-
share_repo, // true/false
225
-
insertions, deletions // git stats 24h (on new commit only)
320
+
editor, // "vscode", "intellij", "claude-code", etc.
321
+
repo, // "owner/repo" (always sent for score calculation, but only visible on the globe if share_repo is true)
322
+
share_repo, // true/false — controls whether the repo name is displayed on your profile
323
+
anonymous, // true/false — when true, coordinates are a random city
226
324
}
227
325
```
228
326
@@ -232,12 +330,19 @@ The server responds with today's total coding time. The extension updates the di
232
330
233
331
-**VS Code**: reads the `languageId` of the active editor, then translates it via a table of 48+ languages (JavaScript, TypeScript, Python, Rust, Go, Kotlin, etc.)
234
332
-**JetBrains**: uses the IDE's native `FileType` system — no manual table, automatically supports all languages your IDE supports
333
+
-**Claude Code**: detects the language from the file extension of edited files
235
334
236
335
### Git integration
237
336
238
337
The extension runs `git remote get-url origin` in your active file's directory and extracts the `owner/repo` identifier from the URL (SSH or HTTPS). The result is cached for 5 minutes.
239
338
240
-
When a new commit is detected (via `git rev-parse HEAD`), the extension counts insertions and deletions over the last 24h via `git log --shortstat`. **No code content, commit message or file name is read.**
339
+
**The extension never reads commits, diffs, or file contents.** Commit statistics (insertions/deletions) are fetched entirely server-side via the GitHub API using the token granted by the [GitHub App](#-github-app--verified-commit-stats). This prevents falsification — the stats displayed on DevGlobe always match the real data on GitHub.
340
+
341
+
### Anonymous mode
342
+
343
+
When anonymous mode is enabled, the extension replaces your real coordinates with a **random city in your country**, chosen from a database of 152,000+ cities worldwide (GeoNames). Your actual location is never transmitted to DevGlobe. The random city is selected once per session and stays consistent until you restart your IDE or toggle the mode.
344
+
345
+
On the globe, your profile displays an "anonymous mode" badge instead of your city name.
241
346
242
347
### Offline detection
243
348
@@ -253,7 +358,7 @@ vscode-extension/
253
358
│ ├── heartbeat.ts # HTTP calls to the database
254
359
│ ├── sidebar.ts # Side panel (webview HTML/CSS/JS)
255
360
│ ├── geo.ts # IP geolocation (dual provider + fallback)
256
-
│ ├── git.ts # Repo detection + commit stats
361
+
│ ├── git.ts # Repo detection (owner/repo from remote)
257
362
│ ├── language.ts # languageId → display name translation
@@ -35,22 +41,46 @@ Add the marketplace and install the plugin:
35
41
36
42
3. Restart Claude Code — you're done! Your activity will appear on the globe.
37
43
38
-
### Optional: share your repository
44
+
### Configuration
39
45
40
-
To display your current repo on your DevGlobe profile, create `~/.devglobe/config.json`:
46
+
Create `~/.devglobe/config.json` to customize behavior:
41
47
42
48
```json
43
49
{
44
-
"shareRepo": true
50
+
"shareRepo": true,
51
+
"anonymousMode": false
45
52
}
46
53
```
47
54
55
+
| Option | Default | Description |
56
+
|--------|---------|-------------|
57
+
|`shareRepo`|`false`| Display your current repo on your DevGlobe profile |
58
+
|`anonymousMode`|`false`| Hide your exact location — your marker is placed on a random city in your country (from a database of 152,000+ cities worldwide) |
59
+
48
60
## How it works
49
61
50
62
The plugin hooks into Claude Code events (`PostToolUse`, `UserPromptSubmit`, `Stop`) and sends a heartbeat to DevGlobe at most once per minute. It automatically detects:
51
63
52
64
- The programming language from the files you interact with
53
-
- Your git repository
65
+
- Your git repository (from `git remote get-url origin`)
54
66
- Your approximate location (via IP geolocation, cached for 1 hour)
55
67
56
68
Your coding session then appears live on the [DevGlobe map](https://devglobe.xyz) with the editor shown as `claude-code`.
69
+
70
+
## GitHub App — Verified commit stats
71
+
72
+
Commit statistics displayed on DevGlobe (insertions/deletions per week) are **never collected by this plugin**. They are fetched server-side via a [GitHub App](https://github.com/apps/devglobeapp) that requests only **Metadata: Read-only** — the most minimal permission available. No access to source code, file contents, commit messages, issues, or pull requests.
73
+
74
+
See the [main extensions README](../README.md#-github-app--verified-commit-stats) for details.
75
+
76
+
## Privacy
77
+
78
+
| Data | Sent | Detail |
79
+
|------|------|--------|
80
+
| Programming language | Yes | Detected from file extensions. Nothing else. |
81
+
| Approximate location | Yes | Coordinates **snapped to your city center** (from a database of 152,000+ cities). |
82
+
| Repo name | Always sent |`owner/repo` is always sent to the server (used for featured project score), but **displayed on the globe only if `shareRepo` is enabled** (disabled by default). |
83
+
| Anonymous mode |**You decide**| When enabled, real coordinates are replaced with a random city in your country (from a database of 152,000+ cities worldwide). Your actual location is never transmitted. |
84
+
| Coding time | Yes | Accumulated per day, per language. |
85
+
86
+
The plugin **never** reads your source code, file contents, file names, keystrokes, commit messages, environment variables, or credentials.
0 commit comments