{"id":8954,"date":"2026-03-16T10:31:50","date_gmt":"2026-03-16T15:31:50","guid":{"rendered":"https:\/\/frontendmasters.com\/blog\/?p=8954"},"modified":"2026-03-16T10:31:51","modified_gmt":"2026-03-16T15:31:51","slug":"when-deno-or-bun-is-a-better-solution-than-node-js","status":"publish","type":"post","link":"https:\/\/frontendmasters.com\/blog\/when-deno-or-bun-is-a-better-solution-than-node-js\/","title":{"rendered":"When Deno or Bun is a Better Solution than Node.js"},"content":{"rendered":"\n<p>I&#8217;m a freelance developer. I jump between client stacks constantly \u2014 a fintech startup one month, a SaaS platform the next, a logistics company after that. That kind of context-switching has a way of making you question assumptions that full-time engineers never have to revisit. Runtime choice is one of them.<\/p>\n\n\n\n<p>We often treat runtime choice like an inherited assumption. <a href=\"https:\/\/nodejs.org\/en\">Node.js<\/a> is there, so we use it. But this mental model is flawed. The runtime isn&#8217;t just a JavaScript executor. It affects more than you\u2019d expect \u2014 your tooling, your deployment story, even who wants to join your team.<\/p>\n\n\n\n<p>Every time you spin up a new project, you&#8217;re making a decision. You provide the requirements (performance, security, developer experience), and the runtime either solves for them elegantly or fights you the whole way.<\/p>\n\n\n\n<p>When you choose the right runtime for your constraints, the result feels magical: fast iteration, clean deployments, happy engineers.<\/p>\n\n\n\n<p>But when we default to Node.js without thinking \u2014 because it&#8217;s familiar, because it&#8217;s everywhere \u2014 we sometimes miss opportunities. We force ourselves into configuration overhead that didn&#8217;t need to exist. We accept performance characteristics that aren&#8217;t optimal for our use case<\/p>\n\n\n\n<p>In engineering, sometimes we call this &#8220;technical debt.&#8221; But really, it&#8217;s <strong>constraint mismatch<\/strong>. It happens because we failed to evaluate the actual requirements before reaching for the default.<\/p>\n\n\n\n<p>To fix this, we need to stop defaulting and start choosing. Let&#8217;s look at when that choice should land somewhere other than Node.js.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The &#8220;Default&#8221; Approach.<\/strong><\/h2>\n\n\n\n<p>I call reaching for Node.js without evaluation the &#8220;default&#8221; approach because it ignores the specific constraints of your project. It treats runtime selection like a non-decision.<\/p>\n\n\n\n<p>In a typical greenfield project, there are three distinct <strong>friction points<\/strong> that might signal a mismatch:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>The Configuration Tax:<\/strong> You need TypeScript, so you install five packages and create three config files before writing a single line of business logic.<\/li>\n\n\n\n<li><strong>The Security Assumption:<\/strong> Your code has access to everything\u2014filesystem, network, environment variables\u2014whether it needs them or not. You&#8217;re trusting every dependency implicitly.<\/li>\n\n\n\n<li><strong>The Tooling Fragmentation:<\/strong> Package manager, test runner, bundler, TypeScript compiler\u2014four different tools, four different configurations, four different upgrade cycles.<\/li>\n<\/ol>\n\n\n\n<p>None of these are <em>wrong<\/em>. They&#8217;re just constraints that Node.js imposes. The question is whether those constraints serve your project or fight against it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>When Deno Solves Your Actual Problem<\/strong><\/h2>\n\n\n\n<p><strong>The Security Constraint<\/strong><\/p>\n\n\n\n<p>I was recently consulting for a fintech startup building an <strong>AI-driven portfolio manager<\/strong>. We needed to allow users to write their own <strong>data-fetching scripts<\/strong> that could plug into their private bank APIs. With Node.js, we were looking at spinning up heavy Docker containers just to keep one user&#8217;s script from stealing another user&#8217;s API keys. It was an architectural nightmare.<\/p>\n\n\n\n<p>With Deno, we used the <strong>permission-based security<\/strong> to white-list only the specific banking API domains. We ran the user code with <code>--allow-net=api.banking-partner.com<\/code> and nothing else. Even if a user\u2019s script was buggy or outright malicious, it literally couldn&#8217;t &#8216;phone home&#8217; to an external server because Deno&#8217;s permission system blocked the request before it ever left the process.<\/p>\n\n\n\n<p>The browser figured out sandboxing decades ago. Deno asks: why doesn&#8217;t the server-side runtime work the same way? I&#8217;ll be honest \u2014 we almost bailed on Deno halfway through the project. The npm compatibility in earlier versions was rough, and debugging import maps made one engineer threaten to rewrite everything in Go. Deno 2 fixed most of those headaches, but I still hold my breath when onboarding someone new to it.<\/p>\n\n\n\n<p><strong>Consider Deno when:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>You&#8217;re running untrusted or semi-trusted code<\/li>\n\n\n\n<li>You need to demonstrate security compliance to clients<\/li>\n\n\n\n<li>Your threat model includes supply chain attacks<\/li>\n<\/ol>\n\n\n\n<p><strong>The Configuration Constraint<\/strong><\/p>\n\n\n\n<p>Yes, <a href=\"https:\/\/nodejs.org\/en\/learn\/typescript\/run-natively\">Node.js 22+ now supports TypeScript execution natively<\/a>. That&#8217;s a significant improvement. But Deno&#8217;s TypeScript integration remains more comprehensive \u2014 built-in formatting, linting, and language server support create a cohesive experience that Node.js&#8217;s bolted-on approach doesn&#8217;t match.<\/p>\n\n\n\n<p><strong>Node.js project setup (even with native TS):<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">npm init -y\n<span class=\"hljs-comment\"># Configure tsconfig.json<\/span>\n<span class=\"hljs-comment\"># Set up linting (ESLint + typescript-eslint)\u00a0\u00a0\u00a0<\/span>\n<span class=\"hljs-comment\"># Set up formatting (Prettier)<\/span>\n<span class=\"hljs-comment\"># Configure test runner<\/span>\n<span class=\"hljs-comment\"># 15 minutes of configuration<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p><strong>Deno project setup:<\/strong><\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">deno init\n<span class=\"hljs-comment\"># Done. TypeScript, linting, formatting, testing included.<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>For quick prototypes, internal tools, or projects where setup friction matters, this difference compounds. A good example: a logistics client of mine needed a CLI tool to aggregate deployment logs across three separate AWS accounts and generate a daily performance summary for their on-call team. They didn&#8217;t have a dedicated DevOps engineer \u2014 that&#8217;s why they hired me. I could have scaffolded a Node.js project, but the overhead of setting up ESLint, Prettier, a tsconfig, and a test runner for a single internal utility felt absurd. The Deno version took me an afternoon and I shipped it the same day. The Node.js equivalent would have burned half the next day on tooling config before I wrote a single line of business logic.<\/p>\n\n\n\n<p><strong>The Distribution Constraint<\/strong><\/p>\n\n\n\n<p>Last month, I needed to ship a <strong>log-parsing utility<\/strong> to our <strong>Site Reliability Engineering (SRE) team<\/strong>. These engineers work in &#8216;locked-down&#8217; environments \u2014 hardened RHEL servers where they aren&#8217;t allowed to install new versions of Node.js without a month-long security audit.<\/p>\n\n\n\n<p>I used deno compile <code>--target x86_64-unknown-linux-gnu<\/code> to generate a single, <strong>self-contained 60MB binary<\/strong>. I Slacked them the file, they ran <code>chmod +x<\/code>, and it just worked. No node_modules, no npm install on a restricted network, and no version conflicts. It turned a &#8216;dev-ops headache&#8217; into a five-minute win.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>When Bun Solves Your Actual Problem<\/strong><\/h2>\n\n\n\n<p><strong>The Speed Constraint<\/strong><\/p>\n\n\n\n<p>Let me share actual numbers from a recent project:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Operation<\/strong><\/td><td><strong>Node.js (npm)<\/strong><\/td><td><strong>Bun<\/strong><\/td><\/tr><tr><td>Fresh install (medium project)<\/td><td>38 seconds<\/td><td>6 seconds<\/td><\/tr><tr><td>Dev server cold start<\/td><td>2.8 seconds<\/td><td>0.7 seconds<\/td><\/tr><tr><td>Test suite (Jest vs Bun test)<\/td><td>29 seconds<\/td><td>9 seconds<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Benchmark context: <\/strong>M3 MacBook Pro, 16GB RAM. Project was a Next.js 15 app with ~200 dependencies, ~52k&nbsp; lines of TypeScript. All runs were cold cache (fresh <code>rm -rf node_modules<\/code>). Local development environment, not CI. Your mileage will vary \u2014 CI runners with warm caches show smaller gaps, though Bun&#8217;s advantage remains consistent<\/p>\n\n\n\n<p>These numbers might seem like micro-optimizations until you multiply them by a team of 15 developers running these commands hundreds of times daily.<\/p>\n\n\n\n<p>But here&#8217;s the thing that matters more than the raw numbers: <strong>developer flow state is fragile<\/strong>. A 3-second delay breaks concentration differently than a sub-second response. Bun keeps you in the zone. That&#8217;s not measurable in benchmarks, but it&#8217;s real.<\/p>\n\n\n\n<p><strong>The Compatibility Constraint<\/strong><\/p>\n\n\n\n<p>Bun&#8217;s Node.js compatibility layer has matured to the point where most applications run without modification. If you&#8217;re in a framework-heavy environment \u2014 Next.js, Remix, whatever \u2014 Bun is effectively a drop-in replacement for your development workflow.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># This reliably just works now<\/span>\nbun install\nbun run dev<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>We migrated a medium-sized Next.js 15 application to Bun recently. The &#8216;minor issue&#8217; was actually <strong>better-sqlite3<\/strong><strong> repeatedly segfaulting<\/strong> because of a mismatch in how Bun\u2019s native module layer handles better-sqlite3&#8217;s C++ bindings..<\/p>\n\n\n\n<p>The fix took 10 minutes: we swapped the dependency for the native <strong>bun:sqlite<\/strong>. Not only did the crashes stop, but our local integration tests \u2014 which hit that database hundreds of times \u2014 dropped from 29 seconds down to just 9 seconds. That was the moment the team stopped asking &#8216;Why Bun?&#8217; and started asking &#8216;When can we deploy this?<\/p>\n\n\n\n<p><strong>The Fragmentation Constraint<\/strong><\/p>\n\n\n\n<p>Node.js evolved organically, which means you need:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>A package manager (npm\/yarn\/pnpm)<\/li>\n\n\n\n<li>A test runner (Jest\/Vitest\/Mocha)<\/li>\n\n\n\n<li>A bundler (webpack\/esbuild\/rollup\/Vite)<\/li>\n\n\n\n<li>A TypeScript compiler (tsc\/swc\/tsx)<\/li>\n<\/ol>\n\n\n\n<p>Bun says: &#8220;I do all of that.&#8221;<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"Bash\" data-shcb-language-slug=\"bash\"><span><code class=\"hljs language-bash\">bun <span class=\"hljs-built_in\">test<\/span> \u00a0 \u00a0 \u00a0 \u00a0 <span class=\"hljs-comment\"># Built-in test runner<\/span>\nbun build \u00a0 \u00a0 \u00a0  <span class=\"hljs-comment\"># Built-in bundler\u00a0\u00a0<\/span>\nbun run file.ts\u00a0 <span class=\"hljs-comment\"># Built-in TypeScript execution<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Bash<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">bash<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Fewer moving parts means fewer things breaking on updates. That&#8217;s not nothing.<\/p>\n\n\n\n<p><strong>The Constraint Nobody Talks About: Hiring<\/strong><\/p>\n\n\n\n<p>Here&#8217;s something I didn&#8217;t fully appreciate until recently: <strong>your runtime choice is a talent signal<\/strong>.<\/p>\n\n\n\n<p>We posted two nearly identical backend roles last year. One specified Node.js, the other Deno. The Node.js posting got 3x more applications \u2014 but the Deno posting attracted candidates who were disproportionately curious, self-directed, and comfortable with ambiguity. They&#8217;d already invested time learning something that wasn&#8217;t the default choice.<\/p>\n\n\n\n<p>This cuts both ways. If you need to scale a team quickly, Node.js gives you a deeper talent pool. But if you&#8217;re building a small, senior team and want to filter for engineers who actively explore new tools? A Deno or Bun requirement is surprisingly effective.<\/p>\n\n\n\n<p><strong>During a post-interview debrief with a colleague who leads a high-growth platform team<\/strong>, she mentioned she deliberately uses Bun for internal tooling specifically because it attracts the kind of engineers who read changelogs for fun. &#8216;It&#8217;s a cultural filter,&#8217; she told me. <strong>In one final-round interview I sat in on with her<\/strong>, a candidate didn&#8217;t just say they liked Bun how they used Bun\u2019s <strong>built-in WebSocket implementation<\/strong> to reduce memory overhead in a high-concurrency chat app. They knew exactly why they chose <strong>JavaScriptCore over V8<\/strong> for that specific use case. That\u2019s the kind of senior-level curiosity you rarely find in someone who just sticks to the &#8220;Node default&#8221;.<\/p>\n\n\n\n<p>Runtime choice has second-order effects on who wants to work with your stack. That&#8217;s worth considering.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The Honest Trade-offs<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Deno&#8217;s Considerations<\/h3>\n\n\n\n<p><strong>Ecosystem breadth still favors Node.js.<\/strong> Deno 2+ has largely solved npm compatibility, but Deno-native packages remain a smaller ecosystem. For common use cases this rarely matters; for niche requirements, you may find yourself reaching for npm packages anyway.<\/p>\n\n\n\n<p><strong>Enterprise tooling integration varies.<\/strong> Some APM providers, logging services, and infrastructure tools have first-class Node.js support with Deno as an afterthought. This gap is closing but worth investigating for your specific stack.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Bun&#8217;s Considerations<\/h3>\n\n\n\n<p><strong>Edge cases still exist.<\/strong> Bun has matured dramatically, but it&#8217;s younger than Node.js by over a decade. For highly specialized workloads \u2014 particularly around certain native modules or obscure Node.js APIs \u2014 you may encounter differences. Test thoroughly for your specific use case.<\/p>\n\n\n\n<p><strong>It&#8217;s fast because it makes trade-offs.<\/strong> Some of those trade-offs are around spec compliance in edge cases. Usually it doesn&#8217;t matter. Occasionally it does.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The Time It Didn&#8217;t Work (And What That Taught Me)<\/h3>\n\n\n\n<p>I want to be honest about a project that didn&#8217;t go cleanly, because it&#8217;s more useful than another success story.<\/p>\n\n\n\n<p>A SaaS client, project management tooling, mid-sized team, wanted to migrate their API server to Bun. The benchmarks looked great in isolation. But their stack had a dependency on a library that used Node.js&#8217;s worker threads in a way Bun handled slightly differently at the time. Not broken, just off, race conditions that only appeared under load, the kind that take days to reproduce reliably in staging and are invisible in unit tests.<\/p>\n\n\n\n<p>We rolled back. We kept Bun for the dev toolchain \u2014 installs, test runner, local TypeScript execution \u2014 and kept Node.js in production. That hybrid turned out to be the right call, not a compromise. They got the iteration speed where it mattered most without betting the production runtime on edge cases they couldn&#8217;t afford to debug.<\/p>\n\n\n\n<p><strong>The lesson wasn&#8217;t &#8220;Bun isn&#8217;t ready.&#8221; It was that the question is never binary.<\/strong> You don&#8217;t have to pick one runtime for everything. The dev environment, the CI pipeline, the production server, and the internal tooling can all have different answers.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">When to Use What (Honestly)<\/h2>\n\n\n\n<p>After shipping production code with all three runtimes across enough client contexts to see the patterns repeat, here&#8217;s the short version:<\/p>\n\n\n\n<p><strong>Deno<\/strong> makes sense when security is a genuine architectural requirement, not a checkbox, but something you&#8217;d have to engineer around anyway. The permission model eliminates a whole category of infrastructure complexity. It also wins on distribution: if you need to ship a self-contained binary to people who don&#8217;t have a JavaScript environment, nothing else comes close.<\/p>\n\n\n\n<p><strong>Bun<\/strong> makes sense when you want the speed without the risk. Start with the dev toolchain. If it works cleanly there, and it usually does, you can evaluate production deployment separately, on your terms, with your actual workload.<\/p>\n\n\n\n<p><strong>Node.js<\/strong> makes sense when the cost of the unknown outweighs the cost of the familiar. Scaling a team fast, enterprise compliance requirements, infrastructure tooling that assumes Node.js\u2014these are real constraints, not excuses. <strong>Default to Node.js deliberately, not by accident.<\/strong><\/p>\n\n\n\n<p>The question worth asking before you start: what&#8217;s the actual constraint I&#8217;m solving for? Not &#8220;what&#8217;s the most interesting choice&#8221; or &#8220;what will look good in a post-mortem.&#8221; What does this project actually need? The runtime that answers that question honestly is the right one.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Practical Migration Advice<\/h2>\n\n\n\n<p>If you&#8217;re considering a shift, start small:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Internal tools first.<\/strong> Build your next CLI script or internal utility with Deno or Bun. Low risk, high learning value.<\/li>\n\n\n\n<li><strong>Development environment.<\/strong> Try using Bun as your dev runtime while keeping Node.js in production. You get the speed benefits where they matter most without the risk.<\/li>\n\n\n\n<li><strong>New services.<\/strong> When you spin up a new microservice, that&#8217;s a natural experimentation point. Contained scope, fresh start.<\/li>\n\n\n\n<li><strong>Measure everything.<\/strong> Don&#8217;t assume you&#8217;ll see the same improvements others report. Benchmark your actual workloads.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Runtime selection is not about finding the &#8220;best&#8221; option. It&#8217;s about finding the option that matches your constraints.<\/p>\n\n\n\n<p>Every configuration headache, every security concern, every slow test suite is a signal that your runtime might be fighting your requirements instead of serving them. We failed to evaluate the actual constraints before reaching for the default.<\/p>\n\n\n\n<p>Node.js isn&#8217;t going anywhere \u2014 but it&#8217;s not the only serious option anymore, and that&#8217;s worth something.<\/p>\n\n\n\n<p>Pick what actually fits. You&#8217;ll know when it&#8217;s right because you&#8217;ll stop fighting your tools.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Node.js is the default, but should it be? Bun and Deno have come a long way in compatibility and there are reasons that can make them better choices depending on the project.<\/p>\n","protected":false},"author":43,"featured_media":8986,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"sig_custom_text":"","sig_image_type":"featured-image","sig_custom_image":0,"sig_is_disabled":false,"inline_featured_image":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[194,116,3,147],"class_list":["post-8954","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-post","tag-bun","tag-deno","tag-javascript","tag-node"],"acf":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/frontendmasters.com\/blog\/wp-content\/uploads\/2026\/03\/node-bun-deno-1-scaled.jpg?fit=2560%2C1429&ssl=1","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts\/8954","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/users\/43"}],"replies":[{"embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/comments?post=8954"}],"version-history":[{"count":8,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts\/8954\/revisions"}],"predecessor-version":[{"id":8979,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/posts\/8954\/revisions\/8979"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/media\/8986"}],"wp:attachment":[{"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/media?parent=8954"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/categories?post=8954"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/frontendmasters.com\/blog\/wp-json\/wp\/v2\/tags?post=8954"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}