Skip to content

Add open-browser-search extension#26052

Draft
MrBunbao wants to merge 3 commits intoraycast:mainfrom
MrBunbao:ext/open-browser-search
Draft

Add open-browser-search extension#26052
MrBunbao wants to merge 3 commits intoraycast:mainfrom
MrBunbao:ext/open-browser-search

Conversation

@MrBunbao
Copy link
Copy Markdown

@MrBunbao MrBunbao commented Mar 5, 2026

Description

Browser Search lets you search any website and choose which browser opens the results. It extends the concept of Universal Website Search by adding browser selection — per-site preferred browser, global default, or system default.

Features:

  • Search any configured website with Google or DuckDuckGo autocomplete
  • Choose which browser opens results via "Open in..." submenu (Cmd+B)
  • Per-site browser preference, global default, or system default cascade
  • Direct URL detection — type a URL to open it directly
  • Manage saved sites: add, edit, delete, set defaults
  • 10 pre-configured search sites out of the box
  • Clipboard prefill and DuckDuckGo bang stripping

Screencast

Screenshots are included in the metadata/ folder showing:

  1. Search with autocomplete suggestions
  2. Browser selection submenu
  3. Saved sites management
  4. Site edit form with browser picker

Checklist

- prep for raycast store submission
- new icon, polish search UX and harden suggestion parsing
- remove manage-saved-sites as standalone command
- init open-browser-search raycast extension
@raycastbot raycastbot added the new extension Label for PRs with new extensions label Mar 5, 2026
@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.

@MrBunbao MrBunbao marked this pull request as ready for review March 5, 2026 09:20
@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps Bot commented Mar 5, 2026

Greptile Summary

This PR introduces a new open-browser-search extension that extends the concept of Universal Website Search by adding per-site and global browser selection. The extension is well-structured, uses appropriate Raycast APIs (useCachedPromise, useForm, getFavicon, confirmAlert), and ships with sensible defaults and metadata.

Two minor style issues were found:

  • eslint.config.js uses the non-standard raycastConfig.flat(Infinity) pattern rather than the required defineConfig from "eslint/config" that ESLint v9+ expects.
  • src/search-any-site.tsx manually declares a Preferences interface for getPreferenceValues<Preferences>(), which should be removed in favour of the auto-generated type from raycast-env.d.ts to avoid future drift from the package.json schema.

Confidence Score: 4/5

  • This PR is safe to merge after addressing two minor style issues in the ESLint config and preferences type definition.
  • The extension logic is solid — browser detection, suggestion fetching, persistence, and the reducer pattern are all implemented correctly. The two flagged issues are style/convention violations (ESLint config pattern and manual Preferences interface) rather than runtime bugs, which keeps the confidence score high.
  • eslint.config.js and src/search-any-site.tsx need the small convention fixes described in the inline comments.

Important Files Changed

Filename Overview
extensions/open-browser-search/src/search-any-site.tsx Main search command view; manually defines a Preferences interface that should be removed in favour of the auto-generated raycast-env.d.ts type.
extensions/open-browser-search/eslint.config.js Uses the non-standard raycastConfig.flat(Infinity) pattern instead of the required defineConfig from eslint/config for ESLint v9+.
extensions/open-browser-search/src/browsers.ts Cleanly wraps Raycast's getApplications and getDefaultApplication APIs to detect installed browsers; uses useCachedPromise for caching.
extensions/open-browser-search/src/saved-sites.ts Handles persistence of saved sites to environment.supportPath with a reducer pattern; straightforward and correct.
extensions/open-browser-search/src/manage-saved-sites.tsx Manage view for saved sites using getFavicon from @raycast/utils; correctly uses the Raycast utility for favicon rendering.
extensions/open-browser-search/src/edit-search-engine.tsx Add/edit form for sites using useForm from @raycast/utils; validation logic and browser picker are well-structured.
extensions/open-browser-search/src/search-suggestions.ts Fetches and parses autocomplete suggestions from Google and DuckDuckGo; logic is clean and handles HTML entities via the he library.
extensions/open-browser-search/src/utils.ts Utility helpers for URL building, URL detection, and DuckDuckGo bang stripping; correct and well-tested patterns.
extensions/open-browser-search/src/types.ts Type definitions for saved sites, browser info, and editing operations; well-organised and appropriately typed.
extensions/open-browser-search/src/delete-modal.ts Thin wrapper around Raycast's confirmAlert for deletion confirmation; simple and correct.
extensions/open-browser-search/package.json Extension manifest with valid categories (Productivity, Web), correct preference types, and proper platforms declaration.
extensions/open-browser-search/CHANGELOG.md Initial release changelog correctly uses the {PR_MERGE_DATE} placeholder.
extensions/open-browser-search/.prettierrc Correctly configured with printWidth: 120 and singleQuote: false per Raycast standards.

Last reviewed commit: 52f3052

Comment thread extensions/open-browser-search/eslint.config.js Outdated
Comment thread extensions/open-browser-search/src/search-any-site.tsx Outdated
@0xdhrv 0xdhrv self-assigned this Mar 18, 2026
@raycastbot
Copy link
Copy Markdown
Collaborator

This pull request has been automatically marked as stale because it did not have any recent activity.

It will be closed if no further activity occurs in the next 7 days to keep our backlog clean 😊

@raycastbot raycastbot added the status: stalled Stalled due inactivity label Apr 1, 2026
@MrBunbao
Copy link
Copy Markdown
Author

MrBunbao commented Apr 1, 2026

Both issues from the Greptile review were already addressed in commit 60f06d9:

  • ESLint config: Switched from raycastConfig.flat(Infinity) to defineConfig([...raycastConfig]) per ESLint v9 conventions
  • Preferences type: Removed the manual Preferences interface in favor of the auto-generated type from raycast-env.d.ts, and added raycast-env.d.ts to tsconfig.json includes

Ready for review!

@raycastbot raycastbot removed the status: stalled Stalled due inactivity label Apr 1, 2026
@0xdhrv
Copy link
Copy Markdown
Contributor

0xdhrv commented Apr 2, 2026

Thanks for your contribution {cursor} 🔥

We already have an extension in the Store that deals with Search Link. Could we consider enhancing the existing extension below instead of creating another one?

I think it has overlap with the existing extension, so I suggest we enhance the existing extension instead of creating another one.

If there are unique features or workflows you’re aiming to add, we’d love to hear them and see if they can be integrated into this to avoid duplication and improve discoverability.

This would help avoid duplication and keep related functionality consolidated in one place.
As mentioned in our extension guidelines here ↗

@0xdhrv 0xdhrv marked this pull request as draft April 2, 2026 03:43
@MrBunbao
Copy link
Copy Markdown
Author

MrBunbao commented Apr 7, 2026

I could definitely do something with the existing extension. That's actually the extension I based mine off of, since I wasn't sure if it was still being maintained until recently where there was a commit pushed by pernielsentikaer.

@raycastbot
Copy link
Copy Markdown
Collaborator

This pull request has been automatically marked as stale because it did not have any recent activity.

It will be closed if no further activity occurs in the next 7 days to keep our backlog clean 😊

@raycastbot raycastbot added the status: stalled Stalled due inactivity label Apr 21, 2026
@0xdhrv
Copy link
Copy Markdown
Contributor

0xdhrv commented Apr 22, 2026

I could definitely do something with the existing extension. That's actually the extension I based mine off of, since I wasn't sure if it was still being maintained until recently where there was a commit pushed by pernielsentikaer.

You can extend the existing extension, and we will review it soon. I think it's maintained by @pernielsentikaer

@raycastbot raycastbot removed the status: stalled Stalled due inactivity label Apr 22, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

new extension Label for PRs with new extensions platform: macOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants