<?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: netsi1964 🙏🏻</title>
    <description>The latest articles on DEV Community by netsi1964 🙏🏻 (@netsi1964).</description>
    <link>https://dev.to/netsi1964</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%2F137308%2F2e48a9bb-5c27-47f7-b80d-3c4b9af09d6e.jpg</url>
      <title>DEV Community: netsi1964 🙏🏻</title>
      <link>https://dev.to/netsi1964</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/netsi1964"/>
    <language>en</language>
    <item>
      <title>Stop med at lade AI styre dit projekt! 6 benhårde tips til prompt engineering</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Fri, 26 Jun 2026 15:32:28 +0000</pubDate>
      <link>https://dev.to/netsi1964/stop-med-at-lade-ai-styre-dit-projekt-6-benharde-tips-til-prompt-engineering-50d2</link>
      <guid>https://dev.to/netsi1964/stop-med-at-lade-ai-styre-dit-projekt-6-benharde-tips-til-prompt-engineering-50d2</guid>
      <description>&lt;p&gt;Jeg har læst gode blog posts af Allan Knox og har samlet noget af essensen omkring prompt engineering. &lt;/p&gt;

&lt;p&gt;Jeg samlet dem til 6 Do's &amp;amp; Don'ts til dit arbejde med AI, og vigtigst af alt: &lt;em&gt;hvorfor&lt;/em&gt; de virker i maskinrummet.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Lad aldrig AI vælge dit "Hvorfor" (Own the Why)
&lt;/h3&gt;

&lt;p&gt;🔴 &lt;strong&gt;DON'T:&lt;/strong&gt; "Find på funktionerne til en god opgavestyrings-app."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hvorfor det er skidt:&lt;/strong&gt; Du lader AI'en udfylde hullerne og gætte på, hvilket problem appen egentlig løser. Hele dit projekt ender med at bygge på en maskines forkerte antagelse.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🟢 &lt;strong&gt;DO:&lt;/strong&gt; "Jeg bygger en app specifikt til freelance-tømrere, der glemmer at fakturere. Skærp denne idé."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hvorfor det er godt:&lt;/strong&gt; Dit "hvorfor" er det fundament, som alle fremtidige beslutninger og funktioner skal pege tilbage på. Du skal selv eje formålet.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Styr dit scope (AI forbereder, du beslutter)
&lt;/h3&gt;

&lt;p&gt;🔴 &lt;strong&gt;DON'T:&lt;/strong&gt; Lad AI'ens gigantiske bruttoliste over mulige features blive dit faktiske projekt-scope.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hvorfor det er skidt:&lt;/strong&gt; AI'ens liste ser flot ud, men det er en fælde. Det er bare en bunke af muligheder uden nogen form for prioritering. Faren er, at du ikke aktivt træffer en beslutning, men bare glemmer at vælge fra.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🟢 &lt;strong&gt;DO:&lt;/strong&gt; Brug AI til at kortlægge mulighederne, men træf selv den hårde beslutning om at skære alt andet end din Minimum Viable Product (MVP) fra.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hvorfor det er godt:&lt;/strong&gt; AI er fantastisk til at skabe bredde og idégenerere, men det er din opgave at prioritere og foretage fravalg.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Kend forskel på model og værktøj (De to lag)
&lt;/h3&gt;

&lt;p&gt;🔴 &lt;strong&gt;DON'T:&lt;/strong&gt; Skæld dit værktøj (f.eks. Cursor eller Copilot) ud over at være "dumt".&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hvorfor det er skidt:&lt;/strong&gt; Hvis du forveksler selve AI-modellen med platformen, fører det til uretfærdige sammenligninger, dårlige beslutninger og spildte penge.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🟢 &lt;strong&gt;DO:&lt;/strong&gt; Husk at skelne mellem "hjernen" (Claude/GPT, som tænker og ræsonnerer) og "skrivebordet" (dit IDE/platform, som leverer filer og kontekst).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hvorfor det er godt:&lt;/strong&gt; Det hjælper dig med at identificere det sande problem. Oftest er modellen fin, men dit miljø mangler at give den adgang til de rette informationer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Mestre opgave-nedbrydning (Task Decomposition)
&lt;/h3&gt;

&lt;p&gt;🔴 &lt;strong&gt;DON'T:&lt;/strong&gt; "Byg et komplet login-system med database, emails og sikkerhed."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hvorfor det er skidt:&lt;/strong&gt; Store problemer skjuler altid mindre problemer, og mange projekter fejler udelukkende fordi, opgaven aldrig blev brudt ordentligt ned.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🟢 &lt;strong&gt;DO:&lt;/strong&gt; "Første trin: Skriv kun database-schemaet for brugeren. Bagefter bygger vi API'et."&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hvorfor det er godt:&lt;/strong&gt; God opgave-nedbrydning forvandler kompleksitet til fremdrift, og AI præsterer langt bedre med små, overskuelige opgaver.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Gætteri er ikke debugging
&lt;/h3&gt;

&lt;p&gt;🔴 &lt;strong&gt;DON'T:&lt;/strong&gt; At prompte "Det virker ikke, fix det!" eller at indsætte tilfældige print-statements.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hvorfor det er skidt:&lt;/strong&gt; Gætteri er ikke debugging. Denne tilgang skjuler ofte det egentlige problem og har det med at skabe nye fejl, mens AI'en famler i blinde.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🟢 &lt;strong&gt;DO:&lt;/strong&gt; Analyser fejlmeddelelser, observer systemet og find rodårsagen, før koden ændres. Prompt derefter AI'en med specifikke logs og fejlmeddelelser.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hvorfor det er godt:&lt;/strong&gt; Systematisk fejlfinding identificerer selve roden til problemet, hvilket gør dine prototyper langt mere stabile og nemmere at bygge videre på.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Gør teknisk gæld synlig
&lt;/h3&gt;

&lt;p&gt;🔴 &lt;strong&gt;DON'T:&lt;/strong&gt; Bed om quick-fixes og glem alt om dem, når koden ender i produktion.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hvorfor det er skidt:&lt;/strong&gt; Det lader den tekniske gæld vokse usynligt og uhåndteret. Du ofrer langsigtet vedligeholdelse for kortsigtet hastighed uden at være bevidst om konsekvenserne.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🟢 &lt;strong&gt;DO:&lt;/strong&gt; Accepter genveje for at bevare farten, men efterlad altid en tydelig kommentar: &lt;code&gt;// TODO: TECH DEBT&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hvorfor det er godt:&lt;/strong&gt; Teknisk gæld er ofte en nødvendighed i tidlige prototyper. Når du tager genveje bevidst og gør dem eksplicitte, kan du styre gælden i stedet for, at den styrer dig.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Som jeg har nævnt før i mine indlæg: &lt;strong&gt;AI skal ikke erstatte din dømmekraft, den skal levere bedre input til dine beslutninger.&lt;/strong&gt; 💡&lt;/p&gt;

&lt;p&gt;Hvilken af disse AI-faldgruber er du oftest selv stødt på i din dagligdag? Smid en kommentar herunder – jeg vil elske at høre jeres erfaringer! 👇&lt;/p&gt;

</description>
      <category>promptengineering</category>
      <category>ai</category>
      <category>softwaredevelopment</category>
      <category>vibecoding</category>
    </item>
    <item>
      <title>A Harness for Every Task: Dynamic Workflows in Claude Code – Master Custom Multi-Agent Systems</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Sun, 21 Jun 2026 09:06:50 +0000</pubDate>
      <link>https://dev.to/netsi1964/a-harness-for-every-task-dynamic-workflows-in-claude-code-master-custom-multi-agent-systems-1edm</link>
      <guid>https://dev.to/netsi1964/a-harness-for-every-task-dynamic-workflows-in-claude-code-master-custom-multi-agent-systems-1edm</guid>
      <description>&lt;p&gt;&lt;strong&gt;A Harness for Every Task: Dynamic Workflows (dynamic work orchestration) in Claude Code – How to Solve Complex Tasks with Tailor-Made Multi-Agent Systems&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As an AI-native builder, you already know the real bottleneck isn’t raw model intelligence anymore — it’s &lt;strong&gt;context, persistence, and the ability to orchestrate work across time and parallel streams&lt;/strong&gt;. Anthropic’s new &lt;strong&gt;dynamic workflows&lt;/strong&gt; solve exactly this by letting Claude instantly write and run a &lt;strong&gt;custom harness&lt;/strong&gt; (a tailored orchestration layer that defines how agents are spawned, coordinated, verified, and concluded) for your specific task.&lt;/p&gt;

&lt;p&gt;This deep dive is written for experienced AI-native developers, architects, and power users who already live in tools like Claude Code, Cursor, or Aider. We’ll break down the concept from Anthropic’s blog post “A Harness for Every Task,” explain the mechanics, showcase powerful patterns, deliver practical examples, and end with key concepts you can immediately apply to your own work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Background: Why the Default Harness Isn’t Always Enough
&lt;/h3&gt;

&lt;p&gt;Claude Code ships with a strong default harness optimized for coding — handling files, tools, iterations, and reasoning in one coherent session. It works incredibly well for most daily tasks because many jobs &lt;em&gt;feel&lt;/em&gt; like coding: structured, iterative, and with clear outputs.&lt;/p&gt;

&lt;p&gt;But with longer, more ambitious, or high-stakes projects, classic failure modes appear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agentic laziness&lt;/strong&gt; (agent laziness: the tendency to stop halfway and declare the task complete — e.g., fixing only 35 out of 50 security issues).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-preferential bias&lt;/strong&gt; (self-favoring bias: the model prefers its own outputs when it has to verify or judge them).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Goal drift&lt;/strong&gt; (goal drift: important nuances, edge cases, and “do not do X” instructions fade across many turns and summarizations).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Static custom harnesses built via SDKs or scripts were the old workaround — but they’re generic and maintenance-heavy. Dynamic workflows flip the script: &lt;strong&gt;Claude generates the precise orchestration&lt;/strong&gt; for your exact task, on the fly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Concept: What Is a Harness and How Do Dynamic Workflows Work?
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;harness&lt;/strong&gt; (orchestration layer) is everything around the model: how the task is broken down, which sub-agents run, what tools they have, how outputs are verified, and when the job is truly done. It turns a single model into a coordinated team.&lt;/p&gt;

&lt;p&gt;With dynamic workflows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude writes a &lt;strong&gt;JavaScript file&lt;/strong&gt; using special functions to spawn sub-agents.&lt;/li&gt;
&lt;li&gt;Each sub-agent gets its own context window, isolated worktree (clean workspace), and can use different models (Sonnet for speed, Opus for depth).&lt;/li&gt;
&lt;li&gt;Workflows can run &lt;strong&gt;tens or even hundreds of parallel sub-agents&lt;/strong&gt; in a single session.&lt;/li&gt;
&lt;li&gt;They are resumable (pause and continue later) and can be saved, shared, and reused (e.g., via skills or &lt;code&gt;~/.claude/workflows&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn’t just “more compute.” It’s &lt;strong&gt;structural resistance&lt;/strong&gt; against the common failure modes of long-running agent sessions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Powerful Patterns – Your Building Blocks
&lt;/h3&gt;

&lt;p&gt;Claude composes workflows from these reusable patterns. Learn them so you can guide the model more effectively:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Classify-and-Act&lt;/strong&gt; (classify and route)&lt;br&gt;&lt;br&gt;
A classifier agent determines the task type and routes it to the right behavior or specialized sub-agent.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Fan-out-and-Synthesize&lt;/strong&gt; (split wide and merge)&lt;br&gt;&lt;br&gt;
Break a big task into many small ones, run them in parallel in clean contexts, then let a synthesizer agent combine the results. Prevents cross-contamination.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Adversarial Verification&lt;/strong&gt; (opponent-based checking)&lt;br&gt;&lt;br&gt;
Every producer agent gets a dedicated “adversary” agent that checks output against a rubric. Kills self-preferential bias.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Generate-and-Filter / Tournament&lt;/strong&gt; (generate, filter, compete)&lt;br&gt;&lt;br&gt;
Create many ideas or solutions, deduplicate, and let them compete through pairwise judging. Excellent for creative or ranking tasks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Loop-until-Done&lt;/strong&gt; (iterate until success criteria)&lt;br&gt;&lt;br&gt;
Keep spawning agents until a stop condition is met (no new findings, no remaining errors). Perfect for debugging, research, and exhaustive analysis.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These patterns combine beautifully — for example, fan-out + adversarial verification + synthesize.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-World Examples You Can Use Today
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Coding &amp;amp; Engineering:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Large-scale refactors or migrations: Fan-out across files/callsites/tests → adversarial review → merge.&lt;/li&gt;
&lt;li&gt;Bug hunting: Generate competing hypotheses from logs/code/data → verify with a panel of agents.&lt;/li&gt;
&lt;li&gt;Documentation or blog verification: Identify claims → spawn fact-check sub-agents → adversarial validation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Non-Coding Work (often where the biggest wins are):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review 50 conversation histories and extract rules into &lt;code&gt;CLAUDE.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Analyze Slack incidents for true root causes.&lt;/li&gt;
&lt;li&gt;Evaluate 80 CVs: Rank them, then double-check the top 10 with dedicated verifiers.&lt;/li&gt;
&lt;li&gt;Stress-test a business plan with agents playing investor, customer, and competitor roles.&lt;/li&gt;
&lt;li&gt;Deep research: Fan-out searches, fetch sources, adversarial verification, then synthesize with citations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Concrete Prompt Example (inspired by Anthropic):&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This test fails maybe 1 in 50 runs. Set up a workflow to reproduce it. Form competing theories about the race condition, and don’t stop until one theory survives all the evidence.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The resulting workflow: Classifier → Fan-out hypothesis generation → Adversarial verifiers/refuters → Loop-until-done.&lt;/p&gt;

&lt;h3&gt;
  
  
  Benefits, Trade-offs, and My Analysis
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Superior context isolation dramatically reduces drift and bias.&lt;/li&gt;
&lt;li&gt;Parallelization + specialization boosts both speed and quality.&lt;/li&gt;
&lt;li&gt;Workflows become reusable assets — you gradually build your personal agent team.&lt;/li&gt;
&lt;li&gt;Scales beautifully beyond coding into research, analysis, triage, and decision-making.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This represents a natural evolution from &lt;em&gt;prompt engineering&lt;/em&gt; to &lt;em&gt;workflow engineering&lt;/em&gt;. You no longer design the full system — you design the prompt that makes the system design itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Trade-offs:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Higher token usage — reserve for high-value tasks.&lt;/li&gt;
&lt;li&gt;More complexity when debugging multi-agent setups.&lt;/li&gt;
&lt;li&gt;Still dependent on the underlying model’s ability to design good orchestrations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key Concepts – Take These With You
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Custom harness per task&lt;/strong&gt; is the new paradigm. Stop forcing every job into one default structure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structure beats raw intelligence&lt;/strong&gt; on long horizons. Separate contexts + dedicated roles (producer, verifier, synthesizer, judge) crush hallucinations and drift.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallelism + Verification&lt;/strong&gt; is the golden combo. Fan-out gives scale; adversarial checks give trust.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Workflows are both output and capital&lt;/strong&gt;. Save the best ones — you’re building your own agent organization over time.&lt;/li&gt;
&lt;li&gt;Use strategically. They cost more tokens, so deploy them where quality and thoroughness matter most.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dynamic workflows mark a shift from “better single agent” to &lt;strong&gt;orchestrated agent teams on demand&lt;/strong&gt;. It’s not just a feature in Claude Code — it’s a new way to think about reliable agentic work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it today:&lt;/strong&gt; Take a complex task you’re struggling with and add “Use a dynamic workflow…” or the trigger “ultracode”. Watch how Claude designs the perfect harness. Iterate on the prompt, save what works, and level up.&lt;/p&gt;

&lt;p&gt;The world isn’t getting simpler. But now we have a harness for every task.&lt;/p&gt;

&lt;p&gt;Use it wisely.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Further Reading / Primary Source&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
“A harness for every task: dynamic workflows in Claude Code” by Anthropic (June 2, 2026)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Highly Recommended Video&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
For a practical, hands-on breakdown of &lt;strong&gt;Ultracode&lt;/strong&gt; and dynamic workflows (including live demos and pro tips), watch this excellent video from Chase AI:&lt;br&gt;&lt;br&gt;
&lt;a href="https://youtu.be/6cmi7qyFwEE" rel="noopener noreferrer"&gt;“the most POWERFUL claude code feature in months”&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It complements the Anthropic blog perfectly and shows exactly how to start using these capabilities right away.&lt;/p&gt;

&lt;p&gt;What complex task are you going to throw at a dynamic workflow first? Drop it in the comments — I’d love to see what you build.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>workflows</category>
      <category>agents</category>
      <category>productivity</category>
    </item>
    <item>
      <title>All the Chrome Hidden Links: The Ultimate Power User Guide</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Mon, 08 Dec 2025 10:21:38 +0000</pubDate>
      <link>https://dev.to/netsi1964/all-the-chrome-hidden-links-the-ultimate-power-user-guide-1mnh</link>
      <guid>https://dev.to/netsi1964/all-the-chrome-hidden-links-the-ultimate-power-user-guide-1mnh</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Have you ever wondered what’s going on under the hood of your web browser? While most people only ever visit &lt;code&gt;chrome://settings&lt;/code&gt; or &lt;code&gt;chrome://history&lt;/code&gt;, Google Chrome is packed with hundreds of internal pages. These are hidden tools used by developers, engineers, and curious power users to debug, tweak, and analyze exactly how the browser behaves.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;These URLs (Uniform Resource Locators) start with &lt;code&gt;chrome://&lt;/code&gt; or &lt;code&gt;chrome-untrusted://&lt;/code&gt;. They bypass the web and talk directly to the browser's internal code.&lt;/p&gt;

&lt;p&gt;Here is your complete guide to these hidden links, what they do, and &lt;strong&gt;when&lt;/strong&gt; you should actually use them.&lt;/p&gt;




&lt;h2&gt;
  
  
  🛠️ The Essentials (Everyday Utilities)
&lt;/h2&gt;

&lt;p&gt;These are the pages you might actually use in your daily browsing life to manage the browser.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://about&lt;/code&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;code&gt;chrome://chrome-urls&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The "Master List." It displays clickable links to all other available internal URLs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; When you are looking for a specific tool but can't remember the exact address.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://settings&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The standard settings interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To change your homepage, manage cookies, or search settings.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://extensions&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The manager for all your installed add-ons.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; When Chrome is running slow and you suspect a rogue extension, or to enable "Developer Mode" to load unpacked extensions.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://history&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Your browsing history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To find that site you visited three days ago.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://bookmarks&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The bookmark manager.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To organize, import, or export your saved sites.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://downloads&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; A list of all files you’ve downloaded.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To find a lost file or resume a paused download.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://version&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Displays technical details: exact Chrome version, OS, User Agent, Flash/JavaScript versions, and command-line variations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Essential for troubleshooting. If you are reporting a bug, IT support will ask for this.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://dino&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The famous T-Rex runner game usually seen when you have no internet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; When you are bored (you can play it even when you &lt;em&gt;are&lt;/em&gt; online).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧪 Experiments &amp;amp; Tweaks
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://flags&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The playground for experimental features that aren't quite ready for primetime.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To enable new features (like darker dark modes, faster download speeds) before they are officially released, or to disable annoying new UI changes.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  📡 Network &amp;amp; Connectivity Debugging
&lt;/h2&gt;

&lt;p&gt;These are critical for diagnosing internet and connection issues.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://net-internals&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://net-export&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; A deep-dive network event logger. &lt;code&gt;net-export&lt;/code&gt; allows you to save a log file of your network traffic to send to support engineers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; If a specific website won't load, you have DNS issues, or proxy errors.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://webrtc-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Real-time statistics for WebRTC (used by Google Meet, Zoom web, Discord web).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Your video call is lagging or pixelated. Check here to see packet loss, bitrate, and audio graphs.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://bluetooth-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Debugger for the Web Bluetooth API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; If you are a developer building a web app that connects to Bluetooth devices.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://usb-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Similar to Bluetooth, but for testing WebUSB devices.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Testing hardware connections via the browser.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://connection-help&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; A user-friendly help page for connection errors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Troubleshooting basic "This site can't be reached" errors.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  💻 Developer &amp;amp; Performance Tools
&lt;/h2&gt;

&lt;p&gt;Tools for web developers to understand how Chrome renders pages and uses resources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://inspect&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Port forwarding and remote debugging. Allows you to inspect open tabs on an Android device via USB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; You are building a mobile site and need to use the desktop DevTools to fix layout issues on your phone.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://serviceworker-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Manages Service Workers (scripts that run in the background for offline capabilities and push notifications).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; A website is "stuck" showing an old cached version, or you want to force-unregister a worker.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://gpu&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Detailed info on your Graphics Processing Unit and hardware acceleration status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; You see visual glitches, black boxes, or slow rendering on graphics-heavy sites.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://system&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Aggregated system logs (similar to &lt;code&gt;about:support&lt;/code&gt; in Firefox).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; checking hardware details and OS logs specifically related to the browser.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://blob-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Inspects "Binary Large Objects" (file data) currently in memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Debugging file uploads or large data transfers in web apps.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://indexeddb-internals&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://quota-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Shows how much local storage space websites are using on your hard drive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; You need to free up disk space and want to see which web apps are hoarding data.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://process-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; A deep view of the process isolation model (Site Isolation).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Advanced debugging of which websites are sharing which OS processes.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://translate-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Logs regarding the Google Translate feature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Debugging why Chrome did (or didn't) offer to translate a foreign language page.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔒 Security, Privacy &amp;amp; Identity
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://policy&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Shows policies enforced on the browser (common on work/school computers).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To see why an extension is forced-installed or why you can't change a specific setting ("Managed by your organization").&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://password-manager&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://password-manager-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; The UI for your saved passwords and the internal logs of how the manager is working.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; To export passwords or debug why a "Save Password" prompt isn't appearing.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://certificate-manager&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://view-cert&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; View and manage SSL/TLS certificates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Importing a custom certificate for a corporate intranet or identifying an expired certificate.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;&lt;code&gt;chrome://privacy-sandbox-internals&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://topics-internals&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://attribution-internals&lt;/code&gt;&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Description:&lt;/strong&gt; Controls and data regarding Google's replacement for third-party cookies (Topics API, FLEDGE, etc.).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;When to use:&lt;/strong&gt; Developers understanding how ad-targeting works without cookies.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  🖼️ UI Components (Side Panels &amp;amp; Interfaces)
&lt;/h2&gt;

&lt;p&gt;Chrome is built of many smaller web pages. These links open specific parts of the user interface directly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Side Panels:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;chrome://bookmarks-side-panel.top-chrome&lt;/code&gt; (Bookmarks panel)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://history-side-panel.top-chrome&lt;/code&gt; (History panel)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://customize-chrome-side-panel.top-chrome&lt;/code&gt; (Theme customization)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://read-later.top-chrome&lt;/code&gt; (Reading List)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://shopping-insights-side-panel.top-chrome&lt;/code&gt; (Price tracking)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://comments-side-panel.top-chrome&lt;/code&gt; (Google Workspace comments)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;New Tab &amp;amp; Search:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;chrome://newtab&lt;/code&gt; / &lt;code&gt;chrome://new-tab-page&lt;/code&gt; (The homepage)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://omnibox-popup.top-chrome&lt;/code&gt; (The search suggestion dropdown)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://tab-search.top-chrome&lt;/code&gt; (The arrow icon to search open tabs)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Login &amp;amp; Profile:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;chrome://profile-picker&lt;/code&gt; (The "Who is using Chrome?" startup screen)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;chrome://signin-internals&lt;/code&gt; (Logs about the Google account login process)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  ⚠️ "Untrusted" &amp;amp; Sandbox
&lt;/h2&gt;

&lt;p&gt;You will see links starting with &lt;code&gt;chrome-untrusted://&lt;/code&gt;. These are pages that handle content requiring strict isolation for security reasons.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome-untrusted://print&lt;/code&gt;&lt;/strong&gt;: The Print Preview window (sandboxed to prevent printer drivers from crashing the browser).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome-untrusted://lens&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;lens-overlay&lt;/code&gt;&lt;/strong&gt;: The Google Lens image search integration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome-untrusted://read-anything-side-panel.top-chrome&lt;/code&gt;&lt;/strong&gt;: The Reader Mode panel (strips ads/formatting).&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  📋 The Complete Index (The Rest)
&lt;/h2&gt;

&lt;p&gt;Here are brief descriptions of the remaining links from your list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://access-code-cast&lt;/code&gt;&lt;/strong&gt;: Interface for casting to a device using a pin code (Education/Enterprise).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://accessibility&lt;/code&gt;&lt;/strong&gt;: Shows the internal accessibility tree for screen readers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://actor-overlay&lt;/code&gt;&lt;/strong&gt;: Internal testing overlay.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://app-service-internals&lt;/code&gt;&lt;/strong&gt;: Diagnostics for installed Web Apps and Android Apps (on ChromeOS).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://app-settings&lt;/code&gt;&lt;/strong&gt;: Settings for specific web apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://apps&lt;/code&gt;&lt;/strong&gt;: The launcher page for installed Chrome Apps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://autofill-internals&lt;/code&gt;&lt;/strong&gt;: Logs explaining why forms did/didn't autofill.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://batch-upload&lt;/code&gt;&lt;/strong&gt;: Internal data upload interface.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://browser-switch&lt;/code&gt;&lt;/strong&gt;: For admins; controls switching between Chrome and legacy browsers (IE).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://cast-feedback&lt;/code&gt;&lt;/strong&gt;: Submit logs regarding Chromecast issues.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://chrome&lt;/code&gt;&lt;/strong&gt;: Usually redirects to the updates page or version.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://chrome-signin&lt;/code&gt;&lt;/strong&gt;: Internal sign-in flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://compare&lt;/code&gt;&lt;/strong&gt;: New feature for comparing products in shopping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://components&lt;/code&gt;&lt;/strong&gt;: Check for updates to individual components (like Widevine for Netflix).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://connection-monitoring-detected&lt;/code&gt;&lt;/strong&gt;: Notification page for network monitoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://connectors-internals&lt;/code&gt;&lt;/strong&gt;: Enterprise security connectors.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://contextual-tasks&lt;/code&gt;&lt;/strong&gt;: AI/ML suggestions based on browsing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://crashes&lt;/code&gt;&lt;/strong&gt;: Lists recent crash reports (if reporting is enabled).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://credits&lt;/code&gt;&lt;/strong&gt;: A long list of open-source licenses used in Chrome.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://debug-webuis-disabled&lt;/code&gt;&lt;/strong&gt;: Error page for when WebUI is off.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://device-log&lt;/code&gt;&lt;/strong&gt;: Logs for hardware events (USB, HID).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://extensions-internals&lt;/code&gt;&lt;/strong&gt;: JSON data about extensions (dev use).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://extensions-zero-state&lt;/code&gt;&lt;/strong&gt;: The screen shown when no extensions are installed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://feedback&lt;/code&gt;&lt;/strong&gt;: Opens the "Report an Issue" dialog.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://gcm-internals&lt;/code&gt;&lt;/strong&gt;: Google Cloud Messaging (Push notifications) status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://glic&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;chrome://glic-fre&lt;/code&gt;&lt;/strong&gt;: Related to Google Lens Image Context (Visual search features).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://histograms&lt;/code&gt;&lt;/strong&gt;: Text-based stats on browser performance metrics.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://history-clusters-side-panel.top-chrome&lt;/code&gt;&lt;/strong&gt;: "Journeys" view in history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://history-sync-optin&lt;/code&gt;&lt;/strong&gt;: The setup screen for syncing history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://internals&lt;/code&gt;&lt;/strong&gt;: A directory for various internal pages.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://intro&lt;/code&gt;&lt;/strong&gt;: The "Welcome to Chrome" first-run experience.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://managed-user-profile-notice&lt;/code&gt;&lt;/strong&gt;: Notice for supervised accounts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://management&lt;/code&gt;&lt;/strong&gt;: Shows if your browser is managed by an admin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://media-engagement&lt;/code&gt;&lt;/strong&gt;: Scores determining if sites can autoplay video.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://metrics-internals&lt;/code&gt;&lt;/strong&gt;: Real-time browser metrics logging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://new-tab-page-third-party&lt;/code&gt;&lt;/strong&gt;: NTP for search engines other than Google.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://newtab-footer&lt;/code&gt;&lt;/strong&gt;: Footer element for the new tab page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://ntp-tiles-internals&lt;/code&gt;&lt;/strong&gt;: Debugging the shortcut icons on the New Tab Page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://on-device-translation-internals&lt;/code&gt;&lt;/strong&gt;: Debugging local AI translation models.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://predictors&lt;/code&gt;&lt;/strong&gt;: Auto-complete predictions for the address bar.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://print&lt;/code&gt;&lt;/strong&gt;: The print dialog.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://privacy-sandbox-base-dialog&lt;/code&gt;&lt;/strong&gt; / &lt;strong&gt;&lt;code&gt;dialog&lt;/code&gt;&lt;/strong&gt;: Popups related to privacy consent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://private-aggregation-internals&lt;/code&gt;&lt;/strong&gt;: Privacy sandbox reporting data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://profile-customization&lt;/code&gt;&lt;/strong&gt;: Avatar/color picker.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://profile-internals&lt;/code&gt;&lt;/strong&gt;: Data about the loaded user profile.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://reset-password&lt;/code&gt;&lt;/strong&gt;: Password reset flow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://saved-tab-groups-unsupported&lt;/code&gt;&lt;/strong&gt;: Error state for tab groups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://search-engine-choice&lt;/code&gt;&lt;/strong&gt;: The "Choose your search engine" screen (EU specific).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://segmentation-internals&lt;/code&gt;&lt;/strong&gt;: How Chrome groups users for feature rollouts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://signin-dice-web-intercept.top-chrome&lt;/code&gt;&lt;/strong&gt;: Part of the account login interception.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://signin-email-confirmation&lt;/code&gt;&lt;/strong&gt;: Email verification screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://signin-error&lt;/code&gt;&lt;/strong&gt;: Login error display.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://signout-confirmation&lt;/code&gt;&lt;/strong&gt;: Confirming sign out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://site-engagement&lt;/code&gt;&lt;/strong&gt;: A score of how much you interact with sites (affects resource throttling).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://suggest-internals&lt;/code&gt;&lt;/strong&gt;: Debugging omnibox suggestions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://support-tool&lt;/code&gt;&lt;/strong&gt;: Generates support logs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://sync-confirmation&lt;/code&gt;&lt;/strong&gt;: "Turn on Sync?" dialog.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://sync-internals&lt;/code&gt;&lt;/strong&gt;: Vital for debugging why bookmarks/passwords aren't syncing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://tab-group-home&lt;/code&gt;&lt;/strong&gt;: Overview of saved tab groups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://terms&lt;/code&gt;&lt;/strong&gt;: Chrome Terms of Service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://user-actions&lt;/code&gt;&lt;/strong&gt;: Logs user clicks and actions for debugging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://watermark&lt;/code&gt;&lt;/strong&gt;: Internal overlay (rarely used).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://web-app-internals&lt;/code&gt;&lt;/strong&gt;: PWA debugging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://webui-browser&lt;/code&gt;&lt;/strong&gt;: Visualizer for WebUI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome://whats-new&lt;/code&gt;&lt;/strong&gt;: The "What's New" update page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome-untrusted://compose&lt;/code&gt;&lt;/strong&gt;: AI writing assistance container.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome-untrusted://data-sharing&lt;/code&gt;&lt;/strong&gt;: Internal data sharing UI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;chrome-untrusted://ntp-microsoft-auth&lt;/code&gt;&lt;/strong&gt;: Authentication for Microsoft modules (specific integrations).&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;Chrome is much more than a window to the web; it is a complex application with its own internal operating system. By knowing about &lt;code&gt;chrome://&lt;/code&gt; URLs, you transition from a standard user to a Power User.&lt;/p&gt;

&lt;p&gt;Whether you need to debug a slow internet connection with &lt;code&gt;net-internals&lt;/code&gt;, check for rogue extensions with &lt;code&gt;extensions&lt;/code&gt;, or just play the &lt;code&gt;dino&lt;/code&gt; game, these links give you total control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which of these hidden pages will you try first?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>generatedbygooglegemini</category>
      <category>chrome</category>
    </item>
    <item>
      <title>5 Powerful Web Platform Features You Probably Missed in 2025</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Sun, 07 Dec 2025 08:22:50 +0000</pubDate>
      <link>https://dev.to/netsi1964/5-powerful-web-platform-features-you-probably-missed-in-2025-2pk5</link>
      <guid>https://dev.to/netsi1964/5-powerful-web-platform-features-you-probably-missed-in-2025-2pk5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;CSS and JavaScript APIs that shipped quietly but deserve your attention—from state-preserving DOM moves to auto-sizing form fields.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The web platform is evolving faster than ever. Between the hype around AI tooling and framework updates, some genuinely useful browser features have shipped without much fanfare.&lt;/p&gt;

&lt;p&gt;I've been digging through the Interop 2025 focus areas and recent browser release notes, and I found five features that are &lt;strong&gt;production-ready now&lt;/strong&gt; but flying under most developers' radars.&lt;/p&gt;

&lt;p&gt;Let's fix that.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. &lt;code&gt;moveBefore()&lt;/code&gt; — Finally, True DOM Movement
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; Chrome 133+, Firefox 144+, Safari in development&lt;/p&gt;

&lt;p&gt;Ever tried to move a playing video or an iframe to a different part of the page? If you used &lt;code&gt;appendChild()&lt;/code&gt; or &lt;code&gt;insertBefore()&lt;/code&gt;, you watched helplessly as the video restarted, focus was lost, and animations reset.&lt;/p&gt;

&lt;p&gt;That's because the DOM never had a &lt;em&gt;move&lt;/em&gt; primitive—only remove and insert. Until now.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Old way: state is destroyed&lt;/span&gt;
&lt;span class="nx"&gt;newParent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;insertBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;referenceNode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// New way: state is preserved ✨&lt;/span&gt;
&lt;span class="nx"&gt;newParent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;moveBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;referenceNode&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;moveBefore()&lt;/code&gt; method preserves:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Animation and transition progress&lt;/li&gt;
&lt;li&gt;Focus and active states&lt;/li&gt;
&lt;li&gt;Fullscreen mode&lt;/li&gt;
&lt;li&gt;Popover open/close state&lt;/li&gt;
&lt;li&gt;Modal &lt;code&gt;&amp;lt;dialog&amp;gt;&lt;/code&gt; state&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Real-world use case:&lt;/strong&gt; Building a responsive layout where a video player moves from a sidebar to the main content area on mobile—without interrupting playback.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;moveBefore&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nx"&gt;Element&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;prototype&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;mainContent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;moveBefore&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;videoPlayer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Fallback for older browsers&lt;/span&gt;
  &lt;span class="nx"&gt;mainContent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;appendChild&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;videoPlayer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  2. CSS Custom Highlight API — Highlighting Without DOM Surgery
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; Baseline as of June 2025 (Chrome, Edge, Safari, Firefox 140+)&lt;/p&gt;

&lt;p&gt;Building a search feature? Syntax highlighter? You've probably wrapped matches in &lt;code&gt;&amp;lt;mark&amp;gt;&lt;/code&gt; or &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; elements. It works, but you're mutating the DOM, triggering layout recalculations, and wrestling with edge cases when highlights span multiple elements.&lt;/p&gt;

&lt;p&gt;The Custom Highlight API takes a completely different approach: define text ranges in JavaScript, style them in CSS, and the DOM stays untouched.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Find text and create a range&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;range&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Range&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setStart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;textNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;startIndex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setEnd&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;textNode&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;endIndex&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Register the highlight&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;highlight&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Highlight&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;CSS&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;highlights&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;search-result&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;highlight&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;::highlight&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nt"&gt;search-result&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#fef08a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#1e1e1e&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why this matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zero DOM mutations = zero layout thrashing&lt;/li&gt;
&lt;li&gt;Multiple ranges can share one highlight name&lt;/li&gt;
&lt;li&gt;Highlights can span across element boundaries&lt;/li&gt;
&lt;li&gt;Perfect for search-as-you-type UIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; A single &lt;code&gt;Highlight&lt;/code&gt; object can hold multiple &lt;code&gt;Range&lt;/code&gt; instances, so you can highlight all search matches with one CSS rule.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. &lt;code&gt;field-sizing: content&lt;/code&gt; — Auto-Growing Form Fields in One Line
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; Chrome 123+, Edge, Safari 26.2+&lt;/p&gt;

&lt;p&gt;Remember writing JavaScript to auto-resize textareas? Or using the &lt;code&gt;size&lt;/code&gt; attribute and hoping for the best? Those days are over.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;textarea&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;input&lt;/span&gt;&lt;span class="o"&gt;,&lt;/span&gt; &lt;span class="nt"&gt;select&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;field-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Your form fields now grow and shrink to fit their content.&lt;/p&gt;

&lt;p&gt;For production use, you'll want constraints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nt"&gt;textarea&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;field-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;min-block-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="n"&gt;lh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c"&gt;/* At least 3 lines */&lt;/span&gt;
  &lt;span class="py"&gt;max-block-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12&lt;/span&gt;&lt;span class="n"&gt;lh&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;  &lt;span class="c"&gt;/* Cap at 12 lines */&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nt"&gt;input&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;field-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;min-inline-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10ch&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;max-inline-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40ch&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Works with:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;input&amp;gt;&lt;/code&gt; (text, email, url, etc.)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;&amp;lt;select&amp;gt;&lt;/code&gt; (both dropdown and multi-select)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Progressive enhancement:&lt;/strong&gt; Browsers that don't support it simply show fixed-size fields. No JavaScript fallback needed.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. &lt;code&gt;sibling-index()&lt;/code&gt; and &lt;code&gt;sibling-count()&lt;/code&gt; — CSS Finally Knows Position
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; Chrome 138+, Firefox in development&lt;/p&gt;

&lt;p&gt;How many times have you done this?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;--index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;))}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Just to create staggered animations. Now CSS can figure out the index itself:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;fade-in&lt;/span&gt; &lt;span class="m"&gt;0.3s&lt;/span&gt; &lt;span class="n"&gt;ease-out&lt;/span&gt; &lt;span class="n"&gt;backwards&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;animation-delay&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sibling-index&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="m"&gt;100ms&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;fade-in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nt"&gt;from&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;opacity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And &lt;code&gt;sibling-count()&lt;/code&gt; tells you the total number of siblings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Equal-width columns without knowing the count */&lt;/span&gt;
&lt;span class="nc"&gt;.tab&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;100%&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;sibling-count&lt;/span&gt;&lt;span class="p"&gt;());&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Creative use cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Staggered animations (obviously)&lt;/li&gt;
&lt;li&gt;Dynamic color gradients across items&lt;/li&gt;
&lt;li&gt;Responsive grid layouts based on item count&lt;/li&gt;
&lt;li&gt;Circular positioning with trigonometry
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Rainbow gradient across any number of items */&lt;/span&gt;
&lt;span class="nc"&gt;.item&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;--hue&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;360&lt;/span&gt; &lt;span class="p"&gt;/&lt;/span&gt; &lt;span class="n"&gt;sibling-count&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sibling-index&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="n"&gt;-&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;hsl&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;--hue&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;70%&lt;/span&gt; &lt;span class="m"&gt;60%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  5. CSS Anchor Positioning — Tooltips Without JavaScript
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Support:&lt;/strong&gt; Chrome 125+, Safari 26+, Firefox expected late 2025&lt;/p&gt;

&lt;p&gt;If you've ever used Floating UI, Popper.js, or Tippy.js just to position a tooltip, you know the pain. Now CSS handles it natively.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.trigger&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;anchor-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;--my-trigger&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.tooltip&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;position-anchor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;--my-trigger&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;position-area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;top&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tooltip automatically positions itself relative to the trigger. But here's the magic: &lt;strong&gt;it flips automatically&lt;/strong&gt; when it would overflow the viewport.&lt;/p&gt;

&lt;p&gt;Even better—Chrome 133 introduced &lt;em&gt;implicit anchoring&lt;/em&gt; for popovers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;button&lt;/span&gt; &lt;span class="na"&gt;popovertarget=&lt;/span&gt;&lt;span class="s"&gt;"tip"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Hover me&lt;span class="nt"&gt;&amp;lt;/button&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"tip"&lt;/span&gt; &lt;span class="na"&gt;popover&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;I'm anchored automatically!&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;popover&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;position-area&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;bottom&lt;/span&gt; &lt;span class="n"&gt;span-left&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No &lt;code&gt;anchor-name&lt;/code&gt; needed. The browser knows the button triggers the popover and creates the relationship automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  Which Should You Adopt First?
&lt;/h2&gt;

&lt;p&gt;My recommendation: &lt;strong&gt;Start with &lt;code&gt;field-sizing: content&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's why:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero risk&lt;/strong&gt; — Unsupported browsers just show normal fixed fields&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero JavaScript&lt;/strong&gt; — Delete your auto-resize handlers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Immediate UX win&lt;/strong&gt; — Users notice when forms feel responsive&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One line of CSS&lt;/strong&gt; — Lowest effort, highest impact&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After that, anchor positioning is your next big win if you're building any kind of tooltip, dropdown, or popover UI.&lt;/p&gt;




&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;The web platform is getting genuinely better at things we've been solving with JavaScript for years. State-preserving moves, auto-sizing fields, and declarative positioning aren't just nice-to-haves—they're more performant, more accessible, and more maintainable than the JS equivalents.&lt;/p&gt;

&lt;p&gt;The features in this post are shipping in stable browsers &lt;em&gt;right now&lt;/em&gt;. No flags, no polyfills required (though fallbacks are smart for &lt;code&gt;moveBefore()&lt;/code&gt; and the sibling functions).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What overlooked feature are you most excited to try?&lt;/strong&gt; Let me know in the comments 👇&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>javascript</category>
      <category>writtenbyaieditedbyhumman</category>
    </item>
    <item>
      <title>Understanding SSL Certificates and Domain Expiry</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Tue, 22 Jul 2025 07:09:38 +0000</pubDate>
      <link>https://dev.to/netsi1964/understanding-ssl-certificates-and-domain-expiry-553f</link>
      <guid>https://dev.to/netsi1964/understanding-ssl-certificates-and-domain-expiry-553f</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TL;DR:&lt;/strong&gt; SSL certificates secure your website’s connection, but managing them can be tricky. Domains also have expiry dates that require attention. This post breaks down key concepts around SSL and domain expiry, common pitfalls, and best practices to keep your web services secure and accessible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1. What Is an SSL Certificate and Why Does It Matter?
&lt;/h2&gt;

&lt;p&gt;SSL (Secure Sockets Layer) certificates encrypt data exchanged between browsers and servers, preventing eavesdropping and tampering. Without a valid SSL certificate, browsers will warn users that your site is insecure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key point:&lt;/strong&gt; Certificates have a validity period (often 90 days for Let’s Encrypt, or 1 year+ for paid certs), and must be renewed before expiry to avoid downtime.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Domain Expiry — The Often Overlooked Deadline
&lt;/h2&gt;

&lt;p&gt;Your domain name (for instance: &lt;code&gt;mydomain.dk&lt;/code&gt;) registration also has an expiry date, independent from SSL certificates. If the domain expires, your entire website becomes unreachable, no matter how valid your certificates are.&lt;/p&gt;

&lt;p&gt;Domains are usually registered for 1 year but can be extended longer. Keep track of renewal dates to avoid service interruptions.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Why Do Multiple SSL Expiry Dates Appear for One Domain?
&lt;/h2&gt;

&lt;p&gt;You might see several SSL certificates with different expiry dates for the same domain. This is normal due to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Certificate rotation:&lt;/strong&gt; New certs issued before old ones expire to allow seamless transition.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multiple servers or load balancers:&lt;/strong&gt; Each may have its own cert.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Different certs for subdomains or services:&lt;/strong&gt; Email, APIs, and main site might use separate certs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your browser only sees the certificate presented by the server it connects to.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Common Issues &amp;amp; Troubleshooting
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Old cert still served:&lt;/strong&gt; Sometimes servers or load balancers aren’t updated properly, causing expired certs to still be presented.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mismatch between domain and cert:&lt;/strong&gt; If the cert does not cover the requested domain or subdomain, you’ll get warnings.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain expiry unnoticed:&lt;/strong&gt; Even with valid SSL, an expired domain means no access.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Practical Example
&lt;/h2&gt;

&lt;p&gt;A customer reported login issues due to an expired SSL cert dated 19/7, but automated checks showed a cert expiring 10/8. This often means some servers or proxies still serve the old cert. Fixing requires verifying cert deployment across all servers and proxies.&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Automate SSL certificate renewal with tools like &lt;a href="https://certbot.eff.org/" rel="noopener noreferrer"&gt;Certbot&lt;/a&gt;.
&lt;/li&gt;
&lt;li&gt;Monitor both SSL expiry and domain registration dates with scripts or services.
&lt;/li&gt;
&lt;li&gt;Ensure all servers, proxies, and CDNs are updated with the newest certificates.
&lt;/li&gt;
&lt;li&gt;Use multi-factor alerts for domain expiry to avoid service loss.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Useful Resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://letsencrypt.org/docs/" rel="noopener noreferrer"&gt;Let's Encrypt Documentation&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.icann.org/resources/pages/domain-name-expiration-2018-06-28-en" rel="noopener noreferrer"&gt;ICANN Domain Expiry FAQ&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.ssllabs.com/ssltest/" rel="noopener noreferrer"&gt;SSL Labs Server Test&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://certbot.eff.org/" rel="noopener noreferrer"&gt;Certbot - Automatic SSL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ssl</category>
      <category>domains</category>
      <category>security</category>
      <category>writtenbyai</category>
    </item>
    <item>
      <title>A practical guide to the new import features in Deno — with comparisons, do’s &amp; don’ts, and an illustration prompt.</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Mon, 21 Jul 2025 08:59:44 +0000</pubDate>
      <link>https://dev.to/netsi1964/a-practical-guide-to-the-new-import-features-in-deno-with-comparisons-dos-donts-and-an-lj3</link>
      <guid>https://dev.to/netsi1964/a-practical-guide-to-the-new-import-features-in-deno-with-comparisons-dos-donts-and-an-lj3</guid>
      <description>&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Import Attributes are here&lt;/strong&gt;, using the &lt;code&gt;with&lt;/code&gt; keyword to specify the module type.&lt;/li&gt;
&lt;li&gt;  Natively import &lt;strong&gt;JSON&lt;/strong&gt;, &lt;strong&gt;text&lt;/strong&gt;, and even &lt;strong&gt;binary files&lt;/strong&gt; directly into your modules.&lt;/li&gt;
&lt;li&gt;  Use the &lt;code&gt;with { type: "json" }&lt;/code&gt; syntax for JSON modules, which is now stable.&lt;/li&gt;
&lt;li&gt;  Leverage the experimental &lt;code&gt;with { type: "text" }&lt;/code&gt; and &lt;code&gt;with { type: "bytes" }&lt;/code&gt; for raw file imports, which requires the &lt;code&gt;--unstable-raw-imports&lt;/code&gt; flag.&lt;/li&gt;
&lt;li&gt;  Seamlessly import from npm using &lt;code&gt;npm:&lt;/code&gt; specifiers for greater compatibility with the existing JavaScript ecosystem.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. What’s new with &lt;code&gt;import&lt;/code&gt;?
&lt;/h2&gt;

&lt;p&gt;Deno continues to evolve its module system to be more standards-aligned and powerful. The latest versions introduce "Import Attributes," a standards-track feature that clarifies how non-JavaScript files should be handled. This is done using the &lt;code&gt;with&lt;/code&gt; keyword in an import statement.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Import a JSON configuration file&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;config&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./config.json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Import a startup script as a plain text string (experimental)&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;startupScript&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./init.sql&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// Import a WebAssembly binary as a module (experimental)&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;wasm&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./module.wasm&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bytes&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This syntax tells the Deno runtime explicitly what kind of data to expect, making the process more secure and predictable than relying on bundler-specific magic.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Where can I use these new import types?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Module Type&lt;/th&gt;
&lt;th&gt;Supported?&lt;/th&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JSON&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Stable&lt;/td&gt;
&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Natively parsed JSON data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Text&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Experimental (&lt;code&gt;--unstable-raw-imports&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The raw text content of the file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Bytes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Experimental (&lt;code&gt;--unstable-raw-imports&lt;/code&gt;)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Uint8Array&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The raw binary data of the file.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;npm modules&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Stable&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Module exports&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;npm:package-name&lt;/code&gt; to import from the npm registry.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;JSR modules&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Stable&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Module exports&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;jsr:@scope/package&lt;/code&gt; for versioned, TypeScript-native modules.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 &lt;strong&gt;Deno Docs:&lt;/strong&gt; &lt;a href="https://docs.deno.com/runtime/fundamentals/modules/#import-attributes" rel="noopener noreferrer"&gt;https://docs.deno.com/runtime/fundamentals/modules/#import-attributes&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. &lt;code&gt;import&lt;/code&gt; attributes vs. other loading methods
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;th&gt;Typical use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Importing structured data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;import data from "./cfg.json" with { type: "json" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;object&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loading configuration, manifests, or static data.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Importing raw text&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;import txt from "./file.txt" with { type: "text" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loading templates, scripts (SQL, shell), or articles.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Importing binary data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;import bin from "./file.wasm" with { type: "bytes" }&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Uint8Array&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Loading WebAssembly modules, images, or other assets.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Traditional file reading&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;Deno.readTextFile()&lt;/code&gt; / &lt;code&gt;Deno.readFile()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;`Promise&amp;lt;string&lt;/td&gt;
&lt;td&gt;Uint8Array&amp;gt;`&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Importing JS/TS code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;import { func } from "./mod.ts"&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;Module exports&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;The standard way to import application logic.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  4. Do’s ✅ and Don’ts ❌
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;✅ Do&lt;/th&gt;
&lt;th&gt;❌ Don’t&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Use &lt;code&gt;with&lt;/code&gt; for import attributes; the old &lt;code&gt;assert&lt;/code&gt; syntax is deprecated.&lt;/td&gt;
&lt;td&gt;Forget the &lt;code&gt;--unstable-raw-imports&lt;/code&gt; flag for text and bytes imports.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manage third-party dependencies with &lt;code&gt;jsr:&lt;/code&gt; and &lt;code&gt;npm:&lt;/code&gt; specifiers.&lt;/td&gt;
&lt;td&gt;Manually fetch and parse JSON when you can import it directly.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use import maps in &lt;code&gt;deno.json&lt;/code&gt; to create clear, version-locked dependencies.&lt;/td&gt;
&lt;td&gt;Mix stable and unstable import features without being aware of the implications.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Check for official JSR packages before falling back to npm for better Deno integration.&lt;/td&gt;
&lt;td&gt;Assume text/bytes imports work in older Deno versions; they are a recent addition.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  5. Real-world snippet: Loading configuration and a welcome message
&lt;/h2&gt;

&lt;p&gt;Imagine an application that needs a configuration file and a "message of the day" from a separate text file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// config.json&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;port&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;8080&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;logging&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;features&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;alpha&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;beta&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// motd.txt&lt;/span&gt;
&lt;span class="nx"&gt;Welcome&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;the&lt;/span&gt; &lt;span class="nx"&gt;application&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nx"&gt;Today&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;s focus is on robust module loading.

// main.ts
import config from "./config.json" with { type: "json" };
import message from "./motd.txt" with { type: "text" };

console.log(`--- Message of the Day ---`);
console.log(message);
console.log(`------------------------`);

if (config.logging) {
  console.log(`Starting server on port: ${config.port}`);
  console.log(`Enabled features: ${config.features.join(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;)}`);
}

// To run this (as of Deno 2.4+):
// deno run --allow-read --unstable-raw-imports main.ts
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Key takeaway
&lt;/h3&gt;

&lt;p&gt;Deno's new import features, especially import attributes for JSON, text, and bytes, make your code more explicit and robust. By handling different file types directly within the ES module system, Deno eliminates boilerplate code, enhances security, and improves tooling integration, bringing your non-JavaScript assets into the main module graph.&lt;/p&gt;

</description>
      <category>deno</category>
      <category>import</category>
      <category>attributes</category>
    </item>
    <item>
      <title>DOM entries() - explained — and When to Use It</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Mon, 21 Jul 2025 07:02:27 +0000</pubDate>
      <link>https://dev.to/netsi1964/dom-entries-explained-and-when-to-use-it-4gag</link>
      <guid>https://dev.to/netsi1964/dom-entries-explained-and-when-to-use-it-4gag</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A practical guide to the&amp;nbsp;&lt;code&gt;entries()&lt;/code&gt;&amp;nbsp;iterator on arrays, NodeLists, and more&amp;nbsp;— with comparisons, do’s &amp;amp; don’ts, and an illustration prompt.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;entries()&lt;/code&gt; &lt;strong&gt;is a method&lt;/strong&gt; (&lt;code&gt;list.entries()&lt;/code&gt;), not a property (&lt;code&gt;list.entries&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;It returns an &lt;strong&gt;iterator&lt;/strong&gt; that yields &lt;code&gt;[index,&amp;nbsp;value]&lt;/code&gt; pairs.&lt;/li&gt;
&lt;li&gt;Use &lt;strong&gt;&lt;code&gt;for…of&lt;/code&gt;&lt;/strong&gt; or the iterator protocol; &lt;strong&gt;never&lt;/strong&gt; use &lt;code&gt;for…in&lt;/code&gt; to walk it.&lt;/li&gt;
&lt;li&gt;Exists on &lt;strong&gt;&lt;code&gt;Array&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;NodeList&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;Map&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;Set&lt;/code&gt;&lt;/strong&gt;, and more.&lt;/li&gt;
&lt;li&gt;If you don’t need the index, iterate directly with &lt;code&gt;for…of&lt;/code&gt; or &lt;code&gt;values()&lt;/code&gt; instead.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1&amp;nbsp;&amp;nbsp;What does&amp;nbsp;&lt;code&gt;entries()&lt;/code&gt;&amp;nbsp;return?
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;links&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.article a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;links&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;el&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;href&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="c1"&gt;//→ 0 "https://…"   1 "https://…"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;entries()&lt;/code&gt; gives back an &lt;strong&gt;iterator object&lt;/strong&gt; whose &lt;code&gt;.next()&lt;/code&gt; method delivers an object shaped like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nl"&gt;value&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;element&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="nx"&gt;done&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;When &lt;code&gt;done&lt;/code&gt; becomes &lt;code&gt;true&lt;/code&gt;, the iterator is exhausted.&lt;/li&gt;
&lt;li&gt;The iterator is &lt;em&gt;lazy&lt;/em&gt;&amp;nbsp;— memory‑efficient for large collections.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2&amp;nbsp;&amp;nbsp;Where can I use&amp;nbsp;&lt;code&gt;entries()&lt;/code&gt;?
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Host object&lt;/th&gt;
&lt;th&gt;Supported?&lt;/th&gt;
&lt;th&gt;What you get&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Array&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[index,&amp;nbsp;item]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;ES2015+&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;NodeList&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ (modern browsers)&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[index,&amp;nbsp;DOM&amp;nbsp;node]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Same order as the DOM query&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Map&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[key,&amp;nbsp;value]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Map’s default iterator is already &lt;code&gt;entries()&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Set&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[value,&amp;nbsp;value]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Mirrors Map behaviour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;strong&gt;Arguments&lt;/strong&gt; object&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;Convert to array first&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;🔗 &lt;strong&gt;MDN docs:&lt;/strong&gt; &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries" rel="noopener noreferrer"&gt;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/entries&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3&amp;nbsp;&amp;nbsp;&lt;code&gt;entries()&lt;/code&gt;&amp;nbsp;vs. other list helpers
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Method&lt;/th&gt;
&lt;th&gt;Output&lt;/th&gt;
&lt;th&gt;Typical use&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Keys only&lt;/td&gt;
&lt;td&gt;&lt;code&gt;keys()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0,&amp;nbsp;1,&amp;nbsp;2…&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pagination, sparse&amp;nbsp;arrays&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Values only&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;values()&lt;/code&gt; or &lt;em&gt;direct&amp;nbsp;&lt;code&gt;for…of&lt;/code&gt;&lt;/em&gt;
&lt;/td&gt;
&lt;td&gt;&lt;code&gt;el1,&amp;nbsp;el2…&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;When index is irrelevant&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Index + value&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;entries()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;[index,&amp;nbsp;value]&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Logging, diffing, stable sorting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transform all items&lt;/td&gt;
&lt;td&gt;&lt;code&gt;map()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;em&gt;New array&lt;/em&gt;&lt;/td&gt;
&lt;td&gt;Create derived arrays&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Side-effects&lt;/td&gt;
&lt;td&gt;&lt;code&gt;forEach()&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;td&gt;DOM mutations, analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  4&amp;nbsp;&amp;nbsp;Do’s&amp;nbsp;✅&amp;nbsp;and Don’ts&amp;nbsp;❌
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;✅&amp;nbsp;Do&lt;/th&gt;
&lt;th&gt;❌&amp;nbsp;Don’t&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Call the method: &lt;code&gt;list.entries()&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Forget the parentheses and store the function reference&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consume with &lt;code&gt;for…of&lt;/code&gt;, destructuring &lt;code&gt;[i, item]&lt;/code&gt;
&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;for…in&lt;/code&gt; (gets property names, not pairs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Break early* once you found what you need&lt;/td&gt;
&lt;td&gt;Assume you must iterate the entire collection&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Polyfill (&lt;code&gt;core-js&lt;/code&gt;) if you target IE11&lt;/td&gt;
&lt;td&gt;Rely on NodeList&amp;nbsp;&lt;code&gt;entries()&lt;/code&gt; in legacy browsers&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  5&amp;nbsp;&amp;nbsp;Real‑world snippet: click analytics
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;ul&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"cases"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/c1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Case&amp;nbsp;1&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/c2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Case&amp;nbsp;2&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;li&amp;gt;&amp;lt;a&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/c3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Case&amp;nbsp;3&lt;span class="nt"&gt;&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/ul&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;script&amp;gt;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clicks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;querySelectorAll&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;.cases a&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;clicks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;link&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;addEventListener&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;click&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;++&lt;/span&gt;&lt;span class="nx"&gt;clicks&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;]);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="c1"&gt;// clicks → [3,&amp;nbsp;0,&amp;nbsp;1]&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Key takeaway
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;entries()&lt;/code&gt; is the most &lt;em&gt;explicit&lt;/em&gt; way to access both index and value in one pass. Use it when you care about position; otherwise reach for &lt;code&gt;values()&lt;/code&gt; or plain &lt;code&gt;for…of&lt;/code&gt; for cleaner code.&lt;/p&gt;




&lt;h2&gt;
  
  
  *) Early&amp;nbsp;Break&amp;nbsp;Example&amp;nbsp;— Stop at the &lt;em&gt;Current&lt;/em&gt; Customer
&lt;/h2&gt;

&lt;p&gt;Assume you receive an array of customer objects from an API. Each object has a boolean &lt;code&gt;current&lt;/code&gt; flag that marks which customer is &lt;strong&gt;currently selected / logged‑in&lt;/strong&gt;. You only need the &lt;em&gt;first&lt;/em&gt; match, so breaking out early saves time (and often makes intentions clearer).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;customers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;101&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Alice&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;102&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Bob&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;     &lt;span class="na"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;103&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Charlie&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;  &lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="c1"&gt;// &amp;lt;-- we want to stop here&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;104&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Dora&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;    &lt;span class="na"&gt;current&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Current customer found at index&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="c1"&gt;// do something with this customer, e.g. load profile UI&lt;/span&gt;
    &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// exit loop early, no need to traverse the rest&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why break early?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt;&amp;nbsp;— for large datasets, exiting on the first match avoids extra iterations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clarity&lt;/strong&gt;&amp;nbsp;— shows the intent: &lt;em&gt;find the first current customer and stop&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Index access&lt;/strong&gt;&amp;nbsp;— &lt;code&gt;entries()&lt;/code&gt; delivers the array index alongside the object, handy for updating UIs or data structures by position.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you only need the customer object (not the index), iterate the array directly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;customer&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;customer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;current&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="cm"&gt;/* … */&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>javascript</category>
      <category>entries</category>
      <category>explained</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Creating a "Open in Cursor" Context Menu for macOS Finder</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Thu, 13 Mar 2025 10:00:18 +0000</pubDate>
      <link>https://dev.to/netsi1964/creating-a-open-in-cursor-context-menu-for-macos-finder-3g8m</link>
      <guid>https://dev.to/netsi1964/creating-a-open-in-cursor-context-menu-for-macos-finder-3g8m</guid>
      <description>&lt;h2&gt;
  
  
  TLDR
&lt;/h2&gt;

&lt;p&gt;Add a custom "Open in Cursor" option to your Finder context menu by creating an Automator Quick Action with AppleScript. Makes opening projects in Cursor a breeze!&lt;/p&gt;

&lt;h2&gt;
  
  
  Why You Need This
&lt;/h2&gt;

&lt;p&gt;As developers, we often browse our filesystems looking for projects to work on. If you're using Cursor as your code editor (which many are, for its excellent AI integration), you'll quickly get tired of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Finding a folder in Finder&lt;/li&gt;
&lt;li&gt;Opening Cursor separately &lt;/li&gt;
&lt;li&gt;Navigating to the same folder through Cursor's interface&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This quick automation adds a right-click option to instantly open any folder or file in Cursor, directly from Finder!&lt;/p&gt;

&lt;h2&gt;
  
  
  The Complete Guide
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;macOS (tested on Monterey, Big Sur, and Ventura)&lt;/li&gt;
&lt;li&gt;Cursor installed at &lt;code&gt;/Applications/Cursor.app&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;5 minutes of your time&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 1: Open Automator
&lt;/h3&gt;

&lt;p&gt;Find Automator in your Applications folder or search for it using Spotlight (⌘+Space).&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2: Create a New Quick Action
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;When Automator opens, select &lt;strong&gt;Quick Action&lt;/strong&gt; (or "Service" in older macOS versions)&lt;/li&gt;
&lt;li&gt;Configure the workflow settings at the top:

&lt;ul&gt;
&lt;li&gt;Workflow receives: &lt;strong&gt;files and folders&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;in: &lt;strong&gt;Finder&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 3: Add an AppleScript Action
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Search for "Run AppleScript" in the actions library&lt;/li&gt;
&lt;li&gt;Drag it to the workflow area&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 4: Add the Script
&lt;/h3&gt;

&lt;p&gt;Replace the default AppleScript code with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight applescript"&gt;&lt;code&gt;&lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="nb"&gt;run&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;parameters&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="k"&gt;repeat&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;with&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;from&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;count&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;theItem&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;item&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="k"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;thePath&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;quoted form&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;POSIX&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;theItem&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="nb"&gt;do shell script&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/usr/bin/open -a '/Applications/Cursor.app' "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;thePath&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;repeat&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nb"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nb"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;error&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;errMsg&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nb"&gt;display dialog&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Error opening files in Cursor: "&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;&amp;amp;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;errMsg&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;buttons&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"OK"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;button&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nb"&gt;return&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nv"&gt;input&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="k"&gt;end&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;run&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 5: Save Your Quick Action
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Choose File &amp;gt; Save&lt;/li&gt;
&lt;li&gt;Name it "Open in Cursor" (or whatever you prefer)&lt;/li&gt;
&lt;li&gt;Click Save&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Step 6: Use Your New Action
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;In Finder, right-click on any file or folder&lt;/li&gt;
&lt;li&gt;Look for "Open in Cursor" in the context menu or under "Quick Actions"&lt;/li&gt;
&lt;li&gt;Click it, and watch as your selection opens in Cursor!&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Troubleshooting
&lt;/h2&gt;

&lt;p&gt;If your menu item doesn't appear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to System Preferences &amp;gt; Extensions &amp;gt; Finder and ensure "Open in Cursor" is enabled&lt;/li&gt;
&lt;li&gt;If your Cursor app is installed elsewhere, modify the path in the script&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you receive an error message:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Check that Cursor is properly installed&lt;/li&gt;
&lt;li&gt;Ensure the path in the script matches your installation&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Customization (Optional)
&lt;/h2&gt;

&lt;p&gt;Want this to be even more accessible? Assign a keyboard shortcut:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to System Preferences &amp;gt; Keyboard &amp;gt; Shortcuts &amp;gt; Services&lt;/li&gt;
&lt;li&gt;Find "Open in Cursor" under "Files and Folders"&lt;/li&gt;
&lt;li&gt;Click on it and press your desired key combination&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why This Works
&lt;/h2&gt;

&lt;p&gt;This automation uses AppleScript to grab the selected file paths from Finder and passes them to the &lt;code&gt;open&lt;/code&gt; command with Cursor specified as the application. The error handling ensures you're notified if something goes wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Small automations like this can significantly improve your development workflow. No more tedious navigation through multiple interfaces - just right-click and get to coding!&lt;/p&gt;

&lt;p&gt;What other Finder integrations would you find useful? Let me know in the comments!&lt;/p&gt;

</description>
      <category>cursor</category>
      <category>macos</category>
      <category>ai</category>
      <category>llm</category>
    </item>
    <item>
      <title>Enriching Event Listings with Microformats/Microdata for a Better User Experience</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Sun, 09 Jun 2024 09:07:59 +0000</pubDate>
      <link>https://dev.to/netsi1964/enriching-event-listings-with-microformatsmicrodata-for-a-better-user-experience-5bgl</link>
      <guid>https://dev.to/netsi1964/enriching-event-listings-with-microformatsmicrodata-for-a-better-user-experience-5bgl</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;TLDR: Use microdata/microformats to add more meaning to event listings on your website, enabling users to easily add events to their calendars and providing a better user experience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Many websites have lists of events which they in the best intention want their users to know about. But maybe they could get feedback from users like this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Hey, love the event listings! But adding them to my calendar is a pain. Can you please add a 'Add to Calendar' feature? It'd make my life so much easier!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Cause text links are nice for the brain, but not good for the user to easily add to her calendar. Microformats/Microdata + some javascript can change that!&lt;/p&gt;

&lt;h2&gt;
  
  
  The overlooked HTML feature: Microformats/Microdata
&lt;/h2&gt;

&lt;p&gt;The microformats/microdata used in this example is based on the &lt;code&gt;h-event&lt;/code&gt; vocabulary, which is a standardized way of marking up events on the web.&lt;/p&gt;

&lt;p&gt;Microformats/microdata is a way to add additional semantic meaning to HTML elements, making it easier for search engines and other machines to understand the structure and content of a webpage.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;h-event&lt;/code&gt; vocabulary is part of the &lt;a href="https://microformats.org/wiki/microformats2"&gt;Microformats 2 specification&lt;/a&gt;, which is a standardized way of marking up common data structures on the web.&lt;/p&gt;

&lt;p&gt;Here is an example of the microformats used in this example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;li&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"h-event"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"dt-start"&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"2024-11-05T12:00:00"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;11/5&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"p-name"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Tennis Band på Nytorv&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"dt-start"&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"2024-11-05T12:00:00"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;kl. 12.00&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt; -
  &lt;span class="nt"&gt;&amp;lt;time&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"dt-end"&lt;/span&gt; &lt;span class="na"&gt;datetime=&lt;/span&gt;&lt;span class="s"&gt;"2024-11-05T13:00:00"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;13.00&lt;span class="nt"&gt;&amp;lt;/time&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/li&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the &lt;code&gt;h-event&lt;/code&gt; class is used to indicate that the element represents an event. The &lt;code&gt;dt-start&lt;/code&gt; and &lt;code&gt;dt-end&lt;/code&gt; classes are used to indicate the start and end dates and times of the event, respectively. The &lt;code&gt;p-name&lt;/code&gt; class is used to indicate the name of the event.&lt;/p&gt;

&lt;p&gt;You can find more information about the &lt;code&gt;h-event&lt;/code&gt; vocabulary and Microformats 2 in general on the official Microformats website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://microformats.org/wiki/microformats-2"&gt;Microformats 2 specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://microformats.org/wiki/h-event"&gt;h-event vocabulary&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Additionally, you can find more information about microdata on the W3C website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.w3.org/TR/microdata/"&gt;W3C Microdata specification&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Using javascript to dynamically add link "Add to Calendar"
&lt;/h2&gt;

&lt;p&gt;Adding an 'Add to Calendar' feature to your event listings is easier than you think!&lt;/p&gt;

&lt;p&gt;With a bit of JavaScript magic, you can add a link to your microdata-extended HTML that allows users to easily add events to their calendars.&lt;/p&gt;

&lt;p&gt;Together with &lt;a href="https://groq.com/"&gt;GROK&lt;/a&gt; i've generated a script to demonstrate this, and you can see it in action on &lt;a href="https://codepen.io/netsi1964/pen/KKLvoGz?editors=1010"&gt;CodePen&lt;/a&gt;. With just a few lines of code, you can give your users a seamless way to add events to their calendars, making your event listings even more user-friendly. So why not give it a try and take your event listings to the next level?&lt;/p&gt;

</description>
      <category>microdata</category>
      <category>eventlistings</category>
      <category>ux</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Blazor CSS-isolation a ::shallow quick fix..</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Thu, 23 May 2024 08:20:03 +0000</pubDate>
      <link>https://dev.to/netsi1964/blazor-css-isolation-a-shallow-look-at-it-280</link>
      <guid>https://dev.to/netsi1964/blazor-css-isolation-a-shallow-look-at-it-280</guid>
      <description>&lt;p&gt;Vanilla CSS, the pure not-infected by frameworks, is IMHO the best way to do CSS. With all the nice features like native nesting and custom properties (CSS variables) it seems to me that we have what we need. That however seems not to be the understanding of many frameworks, like Blazor, Angular and others.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Blazor CSS-isolation issue
&lt;/h2&gt;

&lt;p&gt;Here I want to share a quick fix understanding when fighting the Blazor CSS effects to your css. It seems to actually be a valid solution.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Add &lt;code&gt;::deep&lt;/code&gt; after your component root css class&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is as simple as that! (it seems).&lt;/p&gt;

&lt;h2&gt;
  
  
  The Blazor CSS-isolation technique
&lt;/h2&gt;

&lt;p&gt;Blazor uses like other frameworks (Angular for instance) a technique of injecting a unique attribute on component HTML. It looks like this: &lt;code&gt;b-khlzklwsq4&lt;/code&gt;. It is a "b" and then a random 10 chars long GUID sort of string. This combined with the rewriting of you pretty vanilla CSS for the component allows Blazor to have scoped css. CSS which will not break other components (but only itself ;-)).&lt;/p&gt;

&lt;p&gt;So if I have my css:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.my-component {
  outline: 1px black solid;
}
.my-component *:focus {
  outline: none;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Blazor will pass it at runtime into:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.my-component[b-khlzklwsq4] {
  outline: 1px black solid;
}
.my-component *:focus[b-khlzklwsq4] {
  outline: none;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;However I need to target &lt;strong&gt;any&lt;/strong&gt; element which has focus, not just elements in focus which &lt;strong&gt;has&lt;/strong&gt; the attribute &lt;code&gt;b-khlzklwsq4&lt;/code&gt;!&lt;/p&gt;

&lt;p&gt;My rule-of-fix-::deep is then to simply add a &lt;code&gt;::deep&lt;/code&gt; after the main component selector (&lt;code&gt;.my-component&lt;/code&gt;) and get this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.my-component {
  outline: 1px black solid;
}
.my-component ::deep *:focus {
  outline: none;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That way I instruct Blazor: "Please do not manipulate any of my CSS other than the main selector (&lt;code&gt;.my-component&lt;/code&gt;). It seems to work! :-)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.my-component[b-khlzklwsq4] {
  outline: 1px black solid;
}
.my-component *:focus {
  outline: none;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That in fact was my &lt;code&gt;::shallow&lt;/code&gt; quick-fix of the broken Blazor CSS-isolation functionality!&lt;/p&gt;

</description>
      <category>blazor</category>
      <category>css</category>
      <category>cssisolation</category>
      <category>html</category>
    </item>
    <item>
      <title>Konklusion på fordelene ved elbil</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Sun, 07 Apr 2024 07:47:19 +0000</pubDate>
      <link>https://dev.to/netsi1964/konklusion-pa-fordelene-ved-elbil-7hp</link>
      <guid>https://dev.to/netsi1964/konklusion-pa-fordelene-ved-elbil-7hp</guid>
      <description>&lt;p&gt;En opsummering af indhold i denne video: &lt;a href="https://www.youtube.com/watch?v=P2l14cqJ9iQ"&gt;222.000 km i Tesla Model 3 Long Range: Se Franks regnskab for elbilen | bilguiden&lt;/a&gt; lavet ved hjælp af GPT &lt;a href="https://chat.openai.com/g/g-GvcYCKPIH-youtube"&gt;YouTube∑✏️ - YouTube Summarize&lt;/a&gt;.&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Elbiler kan tilbyde betydelige økonomiske besparelser og miljøfordele i form af lavere driftsomkostninger og reduktion i CO2-udslip. Selvom der kan være udfordringer med værditab og tilgængelighed af opladningsmuligheder, er elbiler generelt en fordelagtig investering for mange bilkøbere.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Elbiler frembyder ikke kun en mere miljøvenlig løsning, men tilbyder også lavere løbende omkostninger sammenlignet med konventionelle benzin- eller dieselbiler. Denne type køretøj kræver færre mekaniske reparationer på grund af færre bevægelige dele, hvilket bidrager til den samlede økonomiske fordel ved at eje en elbil.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fordele:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Økonomiske besparelser:&lt;/strong&gt; Lavere omkostninger til brændstof og vedligehold.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Miljøvenlig:&lt;/strong&gt; Reducerer CO2-udslip og forurening.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mindre vedligeholdelse:&lt;/strong&gt; Færre bevægelige dele reducerer behovet for hyppige reparationer.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Udfordringer:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Værditab:&lt;/strong&gt; Elbiler kan opleve et hurtigere værditab end traditionelle biler.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Opladningsinfrastruktur:&lt;/strong&gt; Tilgængelighed af ladestationer kan være begrænset afhængigt af geografisk placering.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>tesla</category>
      <category>elbiler</category>
      <category>ai</category>
      <category>youtubesummerizer</category>
    </item>
    <item>
      <title>A virtual podcaster</title>
      <dc:creator>netsi1964 🙏🏻</dc:creator>
      <pubDate>Fri, 05 Apr 2024 22:35:14 +0000</pubDate>
      <link>https://dev.to/netsi1964/a-virtual-podcaster-42ho</link>
      <guid>https://dev.to/netsi1964/a-virtual-podcaster-42ho</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Exploring sides of AI generation of content&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As I listened to a podcast generated by AI and read by an AI I thought: why not make a 100% virtual interview? Where an AI chat bot played the two roles as an interviewer (Eloquence) and a given guest, here a frontend developer at Trifork, Aarhus.&lt;/p&gt;

&lt;p&gt;Below you can see my first test done using the API from Groq.com: &lt;a href="https://console.groq.com"&gt;&lt;/a&gt;&lt;a href="https://console.groq.com"&gt;https://console.groq.com&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  An interview with a frontend developer at Trifork, Aarhus
&lt;/h2&gt;

&lt;p&gt;Welcome to another episode of Eloquence, the podcast that engages in deep, thought-provoking discussions with experts from various fields. I'm your host, Eloquence, and today we have a special guest - a frontend developer at Trifork, Aarhus. We'll be diving into the world of CSS on a technical level, with code examples and practical insights.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Welcome to the show! It's great to have you here. Before we dive into the technical aspects of CSS, could you briefly introduce yourself and your experience with frontend development?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank you for having me! I'm a frontend developer at Trifork, Aarhus, and I've been working in the industry for over five years now. I specialize in building responsive, user-friendly websites using HTML, CSS, and JavaScript.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Fantastic! Let's get started with CSS. Can you explain what CSS is and why it's essential for frontend development?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Certainly! CSS, or Cascading Style Sheets, is a style sheet language used for describing the look and formatting of a document written in HTML or XML. It's essential for frontend development because it allows developers to separate the presentation layer from the structure and content of a webpage. This separation makes it easier to maintain, update, and scale websites while ensuring consistency across different pages.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Excellent explanation! Now, let's dive into some code examples. Can you show us how to create a simple CSS layout using Flexbox?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sure! Here's an example of a simple CSS layout using Flexbox:&lt;br&gt;
HTML:&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&lt;/span&gt; &lt;span class="na"&gt;lang=&lt;/span&gt;&lt;span class="s"&gt;"en"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;charset=&lt;/span&gt;&lt;span class="s"&gt;"UTF-8"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;meta&lt;/span&gt; &lt;span class="na"&gt;name=&lt;/span&gt;&lt;span class="s"&gt;"viewport"&lt;/span&gt; &lt;span class="na"&gt;content=&lt;/span&gt;&lt;span class="s"&gt;"width=device-width, initial-scale=1.0"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"styles.css"&lt;/span&gt; &lt;span class="nt"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;title&amp;gt;&lt;/span&gt;Flexbox Layout Example&lt;span class="nt"&gt;&amp;lt;/title&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"box box-1"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 1&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"box box-2"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 2&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
            &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"box box-3"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Box 3&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;box-sizing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;border-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.container&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-wrap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;wrap&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;100%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.box&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f1f1f1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#333&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;20px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;font-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.box-1&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-shrink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-basis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.box-2&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-shrink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-basis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;200px&lt;/span&gt; &lt;span class="err"&gt;*&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.box-3&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;order&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-grow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-shrink&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;flex-basis&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;In this example, we have a container with three boxes inside. We're using the &lt;code&gt;display: flex&lt;/code&gt; property on the container to create a flexible layout. Each box has a &lt;code&gt;flex-basis&lt;/code&gt; of 200px, meaning they'll each take up at least 200px of space. The &lt;code&gt;flex-grow&lt;/code&gt; and &lt;code&gt;flex-shrink&lt;/code&gt; properties determine how the boxes will grow or shrink if there's extra or limited space.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Great! Can you show us how to create a CSS animation using keyframes?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Sure! Here's an example of a simple CSS animation using keyframes:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="k"&gt;@keyframes&lt;/span&gt; &lt;span class="n"&gt;slide-in&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="err"&gt;0&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-100%&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="err"&gt;100&lt;/span&gt;&lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateX&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That's a great example! Can you explain how CSS Grid Layout differs from Flexbox and when you might choose to use one over the other?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Certainly! While both CSS Grid Layout and Flexbox are powerful layout systems, they serve different purposes. Flexbox is designed for one-dimensional layouts, either in a row or a column, making it perfect for components or smaller layouts. On the other hand, CSS Grid Layout is designed for two-dimensional layouts, allowing you to create complex grid layouts with rows and columns.&lt;/p&gt;

&lt;p&gt;When working with smaller components or simple layouts, Flexbox is often the better choice due to its simplicity and ease of use. However, when building complex layouts with multiple rows and columns, such as a dashboard or a magazine-style website, CSS Grid Layout is the better option.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank you for the clarification! Lastly, can you share any tips or resources for developers looking to improve their CSS skills?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Of course! Here are some tips and resources for developers looking to improve their CSS skills:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Practice, practice, practice! Build projects and experiment with different techniques to gain hands-on experience.&lt;/li&gt;
&lt;li&gt;Learn from others by reading blogs, articles, and tutorials on CSS best practices, new features, and techniques.&lt;/li&gt;
&lt;li&gt;Stay up-to-date with the latest CSS specifications and browser support by following the W3C and caniuse.com.&lt;/li&gt;
&lt;li&gt;Use CSS preprocessors like Sass or Less to simplify your workflow and write cleaner, more maintainable code.&lt;/li&gt;
&lt;li&gt;Learn about accessibility and how to create inclusive, user-friendly websites for all users.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Some resources I recommend include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CSS-Tricks (&lt;a href="https://css-tricks.com/"&gt;https://css-tricks.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Smashing Magazine (&lt;a href="https://www.smashingmagazine.com/"&gt;https://www.smashingmagazine.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A List Apart (&lt;a href="https://alistapart.com/"&gt;https://alistapart.com/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;CSS WG (&lt;a href="https://www.w3.org/Style/CSS/"&gt;https://www.w3.org/Style/CSS/&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;caniuse.com (&lt;a href="https://caniuse.com/"&gt;https://caniuse.com/&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank you so much for joining us today and sharing your insights on CSS! It was a pleasure having you on the show.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Guest&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thank you for having me! It was a great experience, and I'm glad I could share my knowledge with your audience.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Eloquence&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And that wraps up another episode of Eloquence. Thank you for listening, and we'll see you in the next episode!&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>ai</category>
      <category>poc</category>
      <category>groq</category>
    </item>
  </channel>
</rss>
