Skip to content

Add DOGEAR extension#26219

Draft
flexphere wants to merge 2 commits intoraycast:mainfrom
flexphere:add-dogear-extension
Draft

Add DOGEAR extension#26219
flexphere wants to merge 2 commits intoraycast:mainfrom
flexphere:add-dogear-extension

Conversation

@flexphere
Copy link
Copy Markdown

Description

DOGEAR is a Raycast extension for fuzzy searching bookmarks defined in a YAML config file and opening them in the browser.

Features

  • Fuzzy search through bookmarks
  • Displays favicons for each bookmark
  • Open bookmarks in default browser
  • Copy URLs to clipboard

Configuration

Users create a config.yaml with their bookmarks and set the file path in extension preferences.

bookmarks:
  - title: "GitHub"
    url: "https://github.com"

Checklist

  • npm run build - buildsass successfully
  • npm run lint - no linting issues
  • Extension follows naming conventions
  • README includes setup instructions
  • CHANGELOG included
  • Screenshot in metadata/
  • MIT license

🤖 Generated with Claude Code

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@raycastbot raycastbot added the new extension Label for PRs with new extensions label Mar 11, 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.

@greptile-apps
Copy link
Copy Markdown
Contributor

greptile-apps bot commented Mar 11, 2026

Greptile Summary

This PR introduces DOGEAR, a new Raycast extension that reads bookmarks from a user-defined YAML config file and provides fuzzy search, favicon display, browser-open, and clipboard-copy actions. The implementation is clean and straightforward, with good error handling and correct use of getFavicon from @raycast/utils. A few standards violations need addressing before merge:

  • Wrong category"Productivity" should be "Web", which is the correct category for a bookmark search/browser-open tool.
  • Hardcoded changelog date2026-03-11 in CHANGELOG.md must be replaced with the {PR_MERGE_DATE} placeholder.
  • Outdated ESLint config patterneslint.config.js should use defineConfig from eslint/config for ESLint v9 compatibility.
  • Manually defined Preferences interface — The Preferences interface in search-bookmarks.tsx should be removed; it is auto-generated in raycast-env.d.ts.

Confidence Score: 3/5

  • Safe to merge after fixing the category, changelog placeholder, ESLint config pattern, and removing the manual Preferences interface.
  • No runtime bugs or security issues; all four flagged items are standards/conventions violations that are straightforward to fix.
  • package.json (wrong category), CHANGELOG.md (hardcoded date), eslint.config.js (outdated config pattern), and src/search-bookmarks.tsx (manual Preferences interface).

Important Files Changed

Filename Overview
extensions/dogear/src/search-bookmarks.tsx Main extension command — correctly uses getFavicon from @raycast/utils and handles YAML loading with error feedback, but manually defines the Preferences interface which should be auto-generated via raycast-env.d.ts.
extensions/dogear/package.json Extension manifest is well-formed, but uses Productivity as category — Web is the more appropriate category for a bookmark search and browser-opening tool.
extensions/dogear/eslint.config.js Uses the old CJS pattern without defineConfig from eslint/config; ESLint v9+ requires defineConfig to properly handle nested arrays from @raycast/eslint-config.
extensions/dogear/CHANGELOG.md Present and covers the initial release, but uses a hardcoded date instead of the required {PR_MERGE_DATE} placeholder.
extensions/dogear/.prettierrc Correctly configured with printWidth: 120 and singleQuote: false per Raycast standards.
extensions/dogear/README.md Clear setup instructions and feature overview with a YAML config example — no issues.

Last reviewed commit: 1f92d21

@@ -0,0 +1 @@
module.exports = require("@raycast/eslint-config").flat();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use defineConfig from eslint/config

ESLint v9+ requires using defineConfig from the eslint/config subpath to correctly handle nested arrays from config presets. The current CJS module.exports pattern without defineConfig is outdated.

Suggested change
module.exports = require("@raycast/eslint-config").flat();
const { defineConfig } = require("eslint/config");
const raycastConfig = require("@raycast/eslint-config");
module.exports = defineConfig([...raycastConfig]);

Rule Used: What: In ESLint v9+, defineConfig is exported fr... (source)

@@ -0,0 +1,7 @@
# DOGEAR Changelog

## [Initial Version] - 2026-03-11
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use {PR_MERGE_DATE} placeholder

Changelog entry titles must use the {PR_MERGE_DATE} placeholder so the merge date is set automatically during release, rather than a hardcoded date.

Suggested change
## [Initial Version] - 2026-03-11
## [Initial Version] - {PR_MERGE_DATE}

Rule Used: What: Changelog entries must use {PR_MERGE_DATE}... (source)

Comment on lines +16 to +18
interface Preferences {
configPath: string;
}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Avoid manually defining the Preferences interface

Preference types are auto-generated in raycast-env.d.ts when the extension runs, so manually defining Preferences here creates a maintenance burden and risks going out of sync with the actual package.json preference schema.

Remove the manual interface and rely on the auto-generated type:

Suggested change
interface Preferences {
configPath: string;
}

Then update the call site to just:

const { configPath } = getPreferenceValues<Preferences>();

The Preferences type will be available from the auto-generated raycast-env.d.ts.

Rule Used: What: Don't manually define Preferences for `get... (source)

"description": "Fuzzy search bookmarks from config.yaml and open in browser",
"icon": "extension-icon.png",
"author": "flexphere",
"categories": ["Productivity"],
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Category should be Web, not Productivity

DOGEAR is a bookmark search and browser-opening tool, which maps directly to the Web category ("Web search and browsing tools"). Productivity is intended for task management tools like Todoist. Using the most specific category improves discoverability in the Raycast store.

Suggested change
"categories": ["Productivity"],
"categories": ["Web"],

Rule Used: What: Assign at least one predefined category to e... (source)

- Use defineConfig in eslint.config.js (CJS format)
- Use {PR_MERGE_DATE} placeholder in CHANGELOG
- Remove manual Preferences interface (use auto-generated type)
- Change category to Web
- Update README with improved documentation
- Clean up package.json for Raycast monorepo
@0xdhrv 0xdhrv self-assigned this Mar 23, 2026
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: metadata image style

The current screenshot has local extension icon in the bottom bar

Could you make sure that the metadata images use the same background/appearance as the rest to maintain the same visual expression?

Reference:

{
"$schema": "https://www.raycast.com/schemas/extension.json",
"name": "dogear",
"title": "DOGEAR",
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue: update name

DOGEAR → Dogear - Bookmarks

Copy link
Copy Markdown
Contributor

@0xdhrv 0xdhrv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hey @flexphere 👋

I have added a few comments for you to address.

Also, can you look into the failing checks?

I'm looking forward to testing this extension again 🔥

Feel free to contact me here or at Slack if you have any questions.


I converted this PR into a draft until it's ready for the review, please press the button Ready for review when it's ready and we'll have a look 😊

@0xdhrv 0xdhrv marked this pull request as draft March 23, 2026 14:08
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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants