<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Somaraj</title>
    <description>The latest articles on DEV Community by Somaraj (@nsomaraj).</description>
    <link>https://dev.to/nsomaraj</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3650651%2F6e6b395d-8b24-45c9-bfb8-e24e55133321.jpg</url>
      <title>DEV Community: Somaraj</title>
      <link>https://dev.to/nsomaraj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nsomaraj"/>
    <language>en</language>
    <item>
      <title>Building a cross-platform "quick capture" app for Notion with Electron, Vue 3 and TypeScript</title>
      <dc:creator>Somaraj</dc:creator>
      <pubDate>Sun, 01 Nov 2026 02:43:50 +0000</pubDate>
      <link>https://dev.to/nsomaraj/building-a-cross-platform-quick-capture-app-for-notion-with-electron-vue-3-and-typescript-m3f</link>
      <guid>https://dev.to/nsomaraj/building-a-cross-platform-quick-capture-app-for-notion-with-electron-vue-3-and-typescript-m3f</guid>
      <description>&lt;p&gt;I write a lot in &lt;strong&gt;Notion&lt;/strong&gt;, but getting a thought &lt;em&gt;into&lt;/em&gt; Notion was always slower than the thought itself. Switch apps, find the page, wait for it to load, and the idea is gone.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://github.com/somaraj/notion-quick-capture" rel="noopener noreferrer"&gt;Notion Quick Capture&lt;/a&gt;: a tray app for Windows, macOS and Linux. Press &lt;strong&gt;Ctrl+Shift+N&lt;/strong&gt; anywhere, type, press &lt;strong&gt;Ctrl+Enter&lt;/strong&gt;, and the note lands in a Notion page or database.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjk3edr94gs8yopk57ncl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fjk3edr94gs8yopk57ncl.png" alt="notion quick capture" width="600" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This post covers the parts that turned out to be more interesting than I expected.&lt;/p&gt;

&lt;h3&gt;
  
  
  The architecture in one picture
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;src/
├── main/        Electron main process
│   ├── auth/    Token storage (safeStorage)
│   ├── notion/  API client + rate limiting, schema cache, search, capture
│   ├── drafts/  Offline queue (sql.js) and background sync
│   ├── ipc/     IPC handlers (Zod-validated)
│   ├── hotkey/  Global shortcut
│   └── tray/    Tray icon and menu
├── preload/     contextBridge API exposed to the renderer
├── renderer/    Vue 3 UI
└── shared/      Types and the Markdown → Notion converter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The renderer never touches the network or the file system. It asks the main process for everything through a small, typed &lt;code&gt;contextBridge&lt;/code&gt; API.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Markdown in, native Notion blocks out
&lt;/h3&gt;

&lt;p&gt;Notion's API doesn't accept Markdown. It wants a tree of block objects (&lt;code&gt;heading_2&lt;/code&gt;, &lt;code&gt;bulleted_list_item&lt;/code&gt;, &lt;code&gt;to_do&lt;/code&gt;, &lt;code&gt;code&lt;/code&gt;, &lt;code&gt;table&lt;/code&gt;…) with rich-text arrays for inline formatting.&lt;/p&gt;

&lt;p&gt;The editor is &lt;a href="https://milkdown.dev" rel="noopener noreferrer"&gt;Milkdown&lt;/a&gt;, so you get live formatting while you type (&lt;code&gt;#&lt;/code&gt; becomes a heading, &lt;code&gt;[]&lt;/code&gt; becomes a to-do, &lt;code&gt;/&lt;/code&gt; opens a block menu). On save, the Markdown goes through &lt;a href="https://github.com/markdown-it/markdown-it" rel="noopener noreferrer"&gt;markdown-it&lt;/a&gt;. I walk its token stream and build Notion blocks: nested lists become &lt;code&gt;children&lt;/code&gt;, bold/italic/strikethrough/code/links become rich-text annotations, and tables become &lt;code&gt;table&lt;/code&gt; + &lt;code&gt;table_row&lt;/code&gt; blocks.&lt;/p&gt;

&lt;p&gt;The converter lives in &lt;code&gt;src/shared/&lt;/code&gt; and is pure TypeScript with no Electron dependency, which makes it easy to unit test with Vitest.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Database-aware forms
&lt;/h3&gt;

&lt;p&gt;If your destination is a database, the app fetches its schema and renders a field for each property: select, multi-select, status, date, people, relation, checkbox, number, URL, email, phone, files. Schemas are cached, so the panel opens instantly the next time.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Offline first, with no native modules
&lt;/h3&gt;

&lt;p&gt;Captures go into a local queue before they're sent. If you're offline, or Notion returns a 5xx or rate-limit error, the note stays queued and a background sync retries later. Captures that can &lt;em&gt;never&lt;/em&gt; succeed (say the destination was deleted) are surfaced in the tray menu so you can discard them.&lt;/p&gt;

&lt;p&gt;For storage I used &lt;strong&gt;sql.js&lt;/strong&gt;, SQLite compiled to WebAssembly. That means no &lt;code&gt;better-sqlite3&lt;/code&gt;, no &lt;code&gt;node-gyp&lt;/code&gt;, and no "please install Visual Studio Build Tools" for contributors. &lt;code&gt;npm install &amp;amp;&amp;amp; npm run dev&lt;/code&gt; works the same on all three OSes.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Security: a small app still holds a powerful token
&lt;/h3&gt;

&lt;p&gt;A Notion integration token can read and write whatever you've shared with it, so I treated it accordingly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The token is encrypted with Electron's &lt;a href="https://www.electronjs.org/docs/latest/api/safe-storage" rel="noopener noreferrer"&gt;&lt;code&gt;safeStorage&lt;/code&gt;&lt;/a&gt;: DPAPI on Windows, Keychain on macOS, libsecret on Linux. It's never logged.&lt;/li&gt;
&lt;li&gt;Renderer windows are &lt;strong&gt;sandboxed&lt;/strong&gt;, use &lt;strong&gt;context isolation&lt;/strong&gt;, have a strict &lt;strong&gt;CSP&lt;/strong&gt;, and have &lt;strong&gt;no Node.js access&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Every IPC message is validated with &lt;strong&gt;Zod&lt;/strong&gt; in the main process. The renderer is treated as untrusted input.&lt;/li&gt;
&lt;li&gt;The only hosts the app talks to are &lt;code&gt;api.notion.com&lt;/code&gt; and GitHub Releases (for updates). No telemetry.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Why there's no "Sign in with Notion" button
&lt;/h3&gt;

&lt;p&gt;OAuth would be friendlier than asking users to create an internal integration. But Notion's OAuth flow needs a &lt;strong&gt;client secret&lt;/strong&gt;, and anything shipped inside a desktop binary that anyone can download isn't secret. Rather than pretend otherwise, public builds use integration tokens, and I wrote a &lt;a href="https://github.com/somaraj/notion-quick-capture/blob/main/docs/connect-notion.md" rel="noopener noreferrer"&gt;step-by-step guide with screenshots&lt;/a&gt;. OAuth is still in the code for anyone running a private build with their own public integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Cross-platform CI, and two bugs that only happened on Linux and macOS
&lt;/h3&gt;

&lt;p&gt;GitHub Actions runs lint, typecheck, unit tests and &lt;strong&gt;UI smoke tests&lt;/strong&gt; on Windows, macOS and Linux for every push, and builds installers for all three. The smoke tests launch the real Electron app against a stubbed Notion API, so no token is needed.&lt;/p&gt;

&lt;p&gt;Windows was green from the start. Linux and macOS weren't, and the causes were worth writing down:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;ELECTRON_RUN_AS_NODE&lt;/code&gt; was set in the test environment.&lt;/strong&gt; When it is, Electron starts as plain Node.js, &lt;code&gt;require('electron')&lt;/code&gt; doesn't give you the &lt;code&gt;app&lt;/code&gt; API, and you get a confusing &lt;code&gt;Cannot read properties of undefined (reading 'on')&lt;/code&gt;. Explicitly unsetting it for the test run fixed it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offscreen windows get throttled.&lt;/strong&gt; The tests render offscreen, and Chromium throttles background windows, so CSS transitions and timers stalled until the tests timed out. Setting &lt;code&gt;webPreferences.backgroundThrottling: false&lt;/code&gt; on the test windows fixed it.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  What's next
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Code signing for Windows and macOS (current builds trigger SmartScreen/Gatekeeper warnings)&lt;/li&gt;
&lt;li&gt;More capture sources, such as sending the current clipboard or selected text&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is MIT licensed and contributions are welcome:&lt;br&gt;
👉 Website: &lt;a href="https://notioncapture.somaraj.com" rel="noopener noreferrer"&gt;https://notioncapture.somaraj.com&lt;/a&gt;&lt;br&gt;
👉 Source: &lt;a href="https://github.com/somaraj/notion-quick-capture" rel="noopener noreferrer"&gt;https://github.com/somaraj/notion-quick-capture&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you try it, I'd love to hear what breaks and what's missing.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Not affiliated with or endorsed by Notion Labs, Inc.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>notion</category>
      <category>electron</category>
      <category>vue</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Building a TickTick extension for Visual Studio: five API surprises</title>
      <dc:creator>Somaraj</dc:creator>
      <pubDate>Tue, 29 Sep 2026 18:05:38 +0000</pubDate>
      <link>https://dev.to/nsomaraj/building-a-ticktick-extension-for-visual-studio-five-api-surprises-eme</link>
      <guid>https://dev.to/nsomaraj/building-a-ticktick-extension-for-visual-studio-five-api-surprises-eme</guid>
      <description>&lt;p&gt;I just shipped a preview of &lt;strong&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=Somaraj.ticktick-for-visual-studio" rel="noopener noreferrer"&gt;TickTick for Visual Studio&lt;/a&gt;&lt;/strong&gt;, an unofficial extension that puts your TickTick tasks in a Visual Studio tool window. You can add tasks with TickTick's quick-add syntax, turn selected code into a task, and complete, snooze and edit tasks without leaving the IDE.&lt;/p&gt;

&lt;p&gt;It started as a fork of a Todoist extension I'd already built: I kept the UI and replaced the API layer. I expected the new API layer to be the easy part. Here are the five things that surprised me.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The API doesn't parse quick-add syntax
&lt;/h2&gt;

&lt;p&gt;In the TickTick apps you can type &lt;code&gt;Review PR #code ^Work !high tomorrow&lt;/code&gt; and get a tagged, prioritised, scheduled task. I assumed the API would do the same. It doesn't. Given that title, the API:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;adds the tag &lt;code&gt;code&lt;/code&gt;, &lt;strong&gt;but leaves &lt;code&gt;#code&lt;/code&gt; in the title&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;ignores &lt;code&gt;^Work&lt;/code&gt;, &lt;code&gt;!high&lt;/code&gt; and &lt;code&gt;tomorrow&lt;/code&gt; entirely&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the extension parses the text itself, then sends a clean title plus real fields. Two details mattered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Project names contain emoji.&lt;/strong&gt; TickTick's default projects are named like "💼Work", so &lt;code&gt;^work&lt;/code&gt; is matched on letters and digits only.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A trailing number is not a time.&lt;/strong&gt; "Read chapter 5" must stay "Read chapter 5", not become a task due today at 5:00. "Meeting at 3" does become 3:00.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. The Inbox isn't a project, until it is
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;GET /project&lt;/code&gt; doesn't include the Inbox. Tasks in it have a project id like &lt;code&gt;inbox123456789&lt;/code&gt; (your user id). There's also an &lt;code&gt;inbox&lt;/code&gt; alias that works on some endpoints. The extension shows a synthetic "Inbox" entry and normalises those ids, but keeps each task's real project id, because endpoints such as complete and comments need it.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. &lt;code&gt;GET /tag&lt;/code&gt; doesn't return all your tags
&lt;/h2&gt;

&lt;p&gt;It only lists tags you created explicitly. A tag that exists only because a task uses it doesn't appear. Tag suggestions therefore merge &lt;code&gt;/tag&lt;/code&gt; with every tag seen on loaded tasks.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. All-day dates are midnight UTC... in someone's time zone
&lt;/h2&gt;

&lt;p&gt;An all-day task on 2 October, created in India, comes back as &lt;code&gt;2026-10-01T18:30:00.000+0000&lt;/code&gt;: local midnight, converted to UTC. Read it naively in UTC and you get the wrong day.&lt;/p&gt;

&lt;p&gt;The obvious fix is to convert with the task's &lt;code&gt;timeZone&lt;/code&gt; field (e.g. &lt;code&gt;Asia/Calcutta&lt;/code&gt;). But a Visual Studio extension runs on &lt;strong&gt;.NET Framework&lt;/strong&gt;, which can't resolve IANA zone names on Windows. So the extension:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;reads the date in the machine's own zone, and uses it if the result is exactly midnight;&lt;/li&gt;
&lt;li&gt;otherwise rounds the UTC time to the nearest midnight, which is correct for any zone within ±12 hours of UTC.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I tested it with the machine set to India, Shanghai, Pacific, Tokyo, UTC, New Zealand and Hawaii.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The Marketplace, &lt;code&gt;System.Text.Json&lt;/code&gt; and Visual Studio 2022
&lt;/h2&gt;

&lt;p&gt;My first upload was rejected: an installation-target lower bound of &lt;code&gt;18.0&lt;/code&gt; (Visual Studio 2026) counts as an experimental API version, and the Marketplace asked for &lt;code&gt;17.14&lt;/code&gt;. That admits Visual Studio 2022, which raised a hidden problem.&lt;/p&gt;

&lt;p&gt;VSIX packages don't carry &lt;code&gt;System.Text.Json&lt;/code&gt;, because Visual Studio supplies it. Visual Studio 2026 supplies 10.0, but Visual Studio 2022 17.14 supplies 9.0, and my SDK referenced 10.0. On Visual Studio 2022 the extension would have failed to load. Pinning &lt;code&gt;System.Text.Json&lt;/code&gt; to 9.0.x fixed it: Visual Studio 2022 is satisfied, and Visual Studio 2026 redirects any version up to 10.0 to its own copy.&lt;/p&gt;

&lt;p&gt;If you ship Visual Studio extensions, check which versions your dependencies expect against what each Visual Studio version actually ships.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security choices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Personal API token, not OAuth.&lt;/strong&gt; The user pastes a token from TickTick's settings. It's checked against the API before it's saved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encrypted locally.&lt;/strong&gt; The token is stored with Windows DPAPI for the current Windows user, never in Visual Studio's settings, which roam between machines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Host-checked.&lt;/strong&gt; The HTTP handler refuses to attach the token to any host other than &lt;code&gt;ticktick.com&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revocation handled.&lt;/strong&gt; A &lt;code&gt;401&lt;/code&gt; clears the token and asks you to sign in again.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No telemetry, no logs.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;It's a preview. Repeating dates can't be set yet, and descriptions show as plain text. Feedback is very welcome.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=Somaraj.ticktick-for-visual-studio" rel="noopener noreferrer"&gt;TickTick for Visual Studio on the Marketplace&lt;/a&gt;&lt;/strong&gt; (Visual Studio 2022 17.14+ and Visual Studio 2026)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Unofficial integration, not affiliated with Appest Inc. TickTick is a trademark of Appest Inc.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>visualstudio</category>
      <category>dotnet</category>
      <category>csharp</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Todoist extension for Visual Studio</title>
      <dc:creator>Somaraj</dc:creator>
      <pubDate>Fri, 18 Sep 2026 17:24:03 +0000</pubDate>
      <link>https://dev.to/nsomaraj/todoist-extension-for-visual-studio-57la</link>
      <guid>https://dev.to/nsomaraj/todoist-extension-for-visual-studio-57la</guid>
      <description>&lt;p&gt;Ever spot a bug or improvement while working on something else and think, “I'll come back to this later”?&lt;/p&gt;

&lt;p&gt;I built a Visual Studio extension that lets you manage your Todoist tasks without leaving the IDE.&lt;/p&gt;

&lt;p&gt;The feature I personally find most useful:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Select a line of code → press a shortcut → create a Todoist task with the file and line number attached.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Later, you can jump directly back to that exact location.&lt;/p&gt;

&lt;p&gt;It also includes:&lt;/p&gt;

&lt;p&gt;📋 Todoist tasks in a dockable Visual Studio tool window&lt;br&gt;
➕ Quick task creation using Todoist syntax&lt;br&gt;
✏️ Edit task name, description and due date&lt;br&gt;
✅ Complete or reschedule tasks&lt;br&gt;
💬 View Todoist comments and attachments&lt;br&gt;
🔎 Filter tasks by text, project or label&lt;br&gt;
📁 Attach each Visual Studio window to a different Todoist project&lt;br&gt;
🔐 OAuth 2.0 + PKCE&lt;br&gt;
🔒 Tokens encrypted locally using Windows DPAPI&lt;br&gt;
🚫 No telemetry&lt;br&gt;
🆓 Works with free Todoist accounts&lt;/p&gt;

&lt;p&gt;It's &lt;strong&gt;free and currently in preview&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://marketplace.visualstudio.com/items?itemName=Somaraj.todoist-for-visual-studio" rel="noopener noreferrer"&gt;Visual Studio Marketplace&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'd love to hear from other Visual Studio + Todoist users — especially what you'd want to see added.&lt;/p&gt;

&lt;p&gt;Unofficial extension. Not affiliated with or endorsed by Doist.&lt;/p&gt;

</description>
      <category>todoist</category>
      <category>visualstudio</category>
    </item>
    <item>
      <title>Bookmark +</title>
      <dc:creator>Somaraj</dc:creator>
      <pubDate>Thu, 30 Jul 2026 07:46:33 +0000</pubDate>
      <link>https://dev.to/nsomaraj/bookmark--3h6e</link>
      <guid>https://dev.to/nsomaraj/bookmark--3h6e</guid>
      <description>&lt;p&gt;Are you tired of the cluttered bookmark bar and endless scrolling to find that one important link you saved? Do you struggle to manage a growing library of bookmarks that seem impossible to organize? Meet Bookmark +, the browser extension designed to bring order, speed, and power to your bookmark management.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Get &lt;strong&gt;Bookmark+&lt;/strong&gt; for your browser:&lt;br&gt;
&lt;a href="https://chromewebstore.google.com/detail/bookmark-+/iohjnomobdieobhenffbeinlmdcnbafi" rel="noopener noreferrer"&gt;Google Chrome&lt;/a&gt;&lt;br&gt;
&lt;a href="https://microsoftedge.microsoft.com/addons/detail/bookmark-/lljieackmjdanfojeebgojnhkdlmhcpa" rel="noopener noreferrer"&gt;Microsoft Edge&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Whether you’re a researcher managing large collections of links, a developer juggling multiple projects, or just someone who wants a clean, organized browsing experience, Bookmark + adapts to your needs and streamlines the way you interact with bookmarks. Say goodbye to chaos and hello to a beautifully structured and highly efficient way to manage your web life.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F87yprpm7095o8m7w70wb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F87yprpm7095o8m7w70wb.png" alt="Browser Preview" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhny50yz7w16t9oez3dq2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhny50yz7w16t9oez3dq2.png" alt="Browser Preview" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdlud9ff88900mxv7jepp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdlud9ff88900mxv7jepp.png" alt="Browser Preview" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3typdofpvlx2q857qp0g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F3typdofpvlx2q857qp0g.png" alt="Browser Preview" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F80vrvfzwizrwyr49g3y3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F80vrvfzwizrwyr49g3y3.png" alt="Browser Preview" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Bookmark +?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Bookmark +&lt;/strong&gt; isn’t just about saving links—it’s about transforming the way you organize and access them. This premium bookmark manager provides a rich set of features to help you stay productive, organized, and focused:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Nested Folders&lt;/strong&gt;: Create unlimited folders and subfolders to build a hierarchy that reflects your workflow. Categorize your bookmarks by project, theme, or priority to keep everything in order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Tagging System&lt;/strong&gt;: Add relevant tags to your bookmarks for easy cross-folder organization. Instantly retrieve related links by their tags—without duplicating bookmarks in multiple places.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant Search&lt;/strong&gt;: Need a bookmark fast? The smart search bar provides real-time results as you type, scanning through titles, URLs, and tags. You’ll be able to find what you need in seconds, even if you have hundreds of bookmarks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Sync&lt;/strong&gt;: For users who work across devices, an optional cloud sync feature ensures that your bookmarks, folders, and tags stay up-to-date everywhere. Syncing is seamless and secure, giving you access to your organized bookmarks on any device.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drag-and-Drop Management&lt;/strong&gt;: Organizing your bookmarks is as easy as dragging and dropping. The intuitive sidebar allows you to quickly rearrange, move, and edit your bookmarks and folders with a few clicks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Menu Integration&lt;/strong&gt;: Add bookmarks quickly with the right-click menu, so you can keep your workflow uninterrupted while browsing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard Shortcuts&lt;/strong&gt;: Save time by managing your bookmarks with customizable keyboard shortcuts, ensuring you have quick access to search and organization whenever you need it.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Key Features
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Deeply Nested Folders&lt;/strong&gt;: Organize bookmarks into unlimited nested folders to mirror your projects, themes, or interests.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart Tagging System&lt;/strong&gt;: Tag bookmarks with relevant keywords for easy cross-folder access. Retrieve your links in an instant using the tagging system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Instant, Intelligent Search&lt;/strong&gt;: Find any bookmark in seconds with real-time search results, even when your collection is large.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Sync&lt;/strong&gt;: Keep your bookmarks, folders, and tags in sync across multiple devices for seamless access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Drag-and-Drop Management&lt;/strong&gt;: Effortlessly organize your bookmarks by dragging them into different folders or reordering them within the sidebar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Menu Integration&lt;/strong&gt;: Quickly add a bookmark from the right-click menu while browsing—no need to interrupt your flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keyboard Shortcuts&lt;/strong&gt;: Access and manage your bookmarks using fully customizable keyboard shortcuts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tag Filtering &amp;amp; Management&lt;/strong&gt;: Filter bookmarks by clicking on Tag Chips, or manage all tags globally from the Settings panel.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backup &amp;amp; Restore&lt;/strong&gt;: Export and import your bookmarks using JSON files to back up or restore your entire collection.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  How It Works
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install &lt;strong&gt;Bookmark +&lt;/strong&gt; from your browser’s extension store (&lt;a href="https://microsoftedge.microsoft.com/addons/detail/bookmark-/lljieackmjdanfojeebgojnhkdlmhcpa" rel="noopener noreferrer"&gt;Microsoft Edge&lt;/a&gt;/&lt;a href="https://chromewebstore.google.com/detail/bookmark-+/iohjnomobdieobhenffbeinlmdcnbafi" rel="noopener noreferrer"&gt;Google Chrome&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Once installed, open the sidebar by clicking the Bookmark + icon or use the default keyboard shortcut (Alt+Shift+B), which can be customized.&lt;/li&gt;
&lt;li&gt;To add a bookmark, click the + icon in the header or footer, then enter a title, select or create folders, and add tags to categorize it.&lt;/li&gt;
&lt;li&gt;Organize your bookmarks by creating nested folders, editing tags, and dragging and dropping items within the sidebar.&lt;/li&gt;
&lt;li&gt;Need to find something quickly? Use the smart search bar to get real-time search results from titles, URLs, or tags.&lt;/li&gt;
&lt;li&gt;Filter your bookmarks by clicking on Tag Chips to display only items related to specific categories.&lt;/li&gt;
&lt;li&gt;Use the right-click context menu to add bookmarks instantly while browsing, and take full advantage of keyboard shortcuts to manage your bookmarks without interrupting your work.&lt;/li&gt;
&lt;li&gt;Enable cloud sync for secure backup and synchronization of your bookmarks across devices.&lt;/li&gt;
&lt;li&gt;Manage your tags, export or import bookmark data, and back up your collection via the Settings panel.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Privacy-First Design
&lt;/h2&gt;

&lt;p&gt;At Bookmark +, we respect your privacy. No personal data is collected—all your bookmarks, folders, and tags are stored locally within your browser. We ensure that all your information remains private and secure, without ever transmitting any of your data externally. Whether you’re using the extension to organize a small collection or an extensive library, you can rely on Bookmark + to keep your data safe.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get Started with Bookmark + Today!
&lt;/h2&gt;

&lt;p&gt;Don’t let your bookmarks become a chaotic mess—take control with Bookmark + and enjoy a clean, organized, and efficient browsing experience. Whether you’re a researcher, developer, or casual user, Bookmark + has everything you need to manage your web life with ease.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Get &lt;strong&gt;Bookmark+&lt;/strong&gt; for your browser:&lt;br&gt;
&lt;a href="https://chromewebstore.google.com/detail/bookmark-+/iohjnomobdieobhenffbeinlmdcnbafi" rel="noopener noreferrer"&gt;Google Chrome&lt;/a&gt;&lt;br&gt;
&lt;a href="https://microsoftedge.microsoft.com/addons/detail/bookmark-/lljieackmjdanfojeebgojnhkdlmhcpa" rel="noopener noreferrer"&gt;Microsoft Edge&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>extensions</category>
      <category>productivity</category>
      <category>browser</category>
    </item>
  </channel>
</rss>
