Skip to content

Add globalping extension#27466

Open
valent1d wants to merge 3 commits intoraycast:mainfrom
valent1d:ext/globalping
Open

Add globalping extension#27466
valent1d wants to merge 3 commits intoraycast:mainfrom
valent1d:ext/globalping

Conversation

@valent1d
Copy link
Copy Markdown
Contributor

@valent1d valent1d commented Apr 27, 2026

Description

This is the official Globalping by JSDelivr extension for Raycast.

Globalping is an open-source platform with 3,700+ globally distributed probes that lets anyone run network diagnostic tests from anywhere in the world. This extension brings the full power of the Globalping API directly into Raycast.

Commands

Ping — Compare latency, packet loss, and per-probe timing data from multiple locations
DNS — Resolve all supported DNS record types (A, AAAA, MX, TXT, CNAME, etc.) from distributed probes
HTTP — Run HEAD and GET requests from worldwide locations
Traceroute — Inspect the route to a target hop by hop
MTR — Combine latency and route data in a compact multi-hop view

Key features

  • OAuth authentication — Users sign in with their free Globalping account through Raycast's native OAuth flow (PKCE). No API keys to manage.

  • Smart location picker — Target probes by continent, country, city, US state, cloud provider (AWS, GCP, Azure, Oracle), ASN, network type, or just world

  • Live streaming results — Probe results stream into the list as they arrive

  • Raycast Quicklinks — Save any measurement as a reusable Quicklink with pre-filled target, location, DNS type, and HTTP method

  • Recent & popular locations — The extension remembers your most-used probe locations for quick re-runs

  • Cross-platform — Works on both macOS and Windows

Authentication

A free Globalping account is required. Sign-in happens automatically through Raycast's native OAuth flow when opening any command for the first time. No manual configuration needed.

Screencast

globalping-0

All Globalping commands with optional arguments

globalping-1

First view when you launch a command without any argument

globalping-2

Location picker — Target by country, city, cloud provider, ASN…

globalping-3

Ping — Latency results from multiple global probes

globalping-4

DNS — Resolve records from distributed locations

globalping-5

HTTP — HEAD/GET requests from worldwide probes

globalping-6

MTR — Combined latency and route data

globalping-7

Traceroute — Hop-by-hop route inspection

Checklist

- Fix Prettier formatting
- V1.0 - Add initial implementation of the Globalping Raycast extension (raycast#1)
- Initial commit
@raycastbot
Copy link
Copy Markdown
Collaborator

Congratulations on your new Raycast extension! 🚀

We're currently experiencing a high volume of incoming requests. As a result, the initial review may take up to 10-15 business days.

Once the PR is approved and merged, the extension will be available on our Store.

@valent1d valent1d marked this pull request as ready for review April 27, 2026 12:53
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Apr 27, 2026

Greptile Summary

This PR adds the official Globalping extension, providing five network diagnostic commands (Ping, DNS, HTTP, Traceroute, MTR) with PKCE OAuth authentication, live-streaming probe results, a location picker backed by the Globalping probe catalogue, and Raycast Quicklink support. The implementation is well-structured overall, with proper AbortController handling, run-token guards to prevent stale state, and a serialized write queue for local storage.

The only issue found is that ExtensionPreferences in preferences.ts and the local Arguments interfaces in all five command files are manually defined instead of using the auto-generated types from raycast-env.d.ts.

Confidence Score: 4/5

Safe to merge after addressing the manual type definitions; no runtime or security issues found.

Only P2 style findings present — manual Preferences/Arguments interface definitions that should use auto-generated types. All core logic, auth, polling, and error handling look correct.

src/utils/preferences.ts and all five command files (ping.tsx, dns.tsx, http.tsx, mtr.tsx, traceroute.tsx) for the manual type definitions.

Important Files Changed

Filename Overview
extensions/globalping/src/api/globalping.ts Wraps the globalping SDK with typed error handling, AbortSignal racing, key-generation helpers, and clean public exports. No issues found.
extensions/globalping/src/hooks/useMeasurement.ts Polling hook with run-token guard, incremental result merging, stable probe-key assignment, and proper AbortController cleanup. Logic is sound.
extensions/globalping/src/utils/preferences.ts Manually defines ExtensionPreferences instead of using the auto-generated Preferences type from raycast-env.d.ts; otherwise correct fallback logic.
extensions/globalping/src/ping.tsx Manually defines local interface Arguments instead of the auto-generated Arguments.Ping; otherwise implementation is clean with proper auto-run, streaming, and action panels.
extensions/globalping/src/dns.tsx Manually defines local interface Arguments (same pattern as other commands); DNS query-type normalization and probe detail rendering are correct.
extensions/globalping/src/components/LocationPicker.tsx Location picker with deferred search, probe catalogue, and correct platform-capitalized shortcuts (macOS/Windows). No issues found.
extensions/globalping/src/utils/storage.ts Serialized write queue for location stats prevents lost updates. De-duplication and validation logic are correct.
extensions/globalping/package.json Correct $schema, title case, Developer Tools category, valid platforms, all dependencies used, and proper preference definition. No issues.
Prompt To Fix All With AI
This is a comment left during a code review.
Path: extensions/globalping/src/utils/preferences.ts
Line: 4-6

Comment:
**Manual `Preferences` and `Arguments` interfaces should use auto-generated types**

`ExtensionPreferences` is manually defined here rather than using the auto-generated `Preferences` type from `raycast-env.d.ts`. The same pattern repeats across all five command files — `ping.tsx`, `dns.tsx`, `http.tsx`, `mtr.tsx`, and `traceroute.tsx` each define their own local `interface Arguments`. When the extension runs, Raycast generates `Preferences` and per-command `Arguments.Ping`, `Arguments.Dns`, etc. in `raycast-env.d.ts`; manual definitions can silently diverge from the actual config.

Update the call site to:
```ts
const { probeCount } = getPreferenceValues<Preferences>();
```
For command files, replace e.g. `LaunchProps<{ arguments: Arguments }>` with `LaunchProps<{ arguments: Arguments.Ping }>`.

**Rule Used:** What: Don't manually define `Preferences` for `get... ([source](https://app.greptile.com/review/custom-context?memory=d93fc9fb-a45d-4479-a6a4-b1b4af98ebc8))

How can I resolve this? If you propose a fix, please make it concise.

Reviews (1): Last reviewed commit: "Add globalping extension" | Re-trigger Greptile

Comment thread extensions/globalping/src/utils/preferences.ts Outdated
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants