{"id":592,"date":"2024-03-15T10:00:00","date_gmt":"2024-03-15T10:00:00","guid":{"rendered":"https:\/\/jacar.es\/deno-deploy-edge\/"},"modified":"2024-03-15T10:00:00","modified_gmt":"2024-03-15T10:00:00","slug":"deno-deploy-edge","status":"publish","type":"post","link":"https:\/\/jacar.es\/en\/deno-deploy-edge\/","title":{"rendered":"Deno Deploy: TypeScript at the Edge Without a Server"},"content":{"rendered":"<p><strong><a href=\"https:\/\/deno.com\/deploy\">Deno Deploy<\/a><\/strong> is the serverless-edge platform from the team that built <strong><a href=\"https:\/\/deno.com\/\">Deno<\/a><\/strong> (Ryan Dahl, after leaving Node.js). The bet: native TypeScript, standard Web APIs (Fetch, Web Crypto, WebSockets), and global deployment to ~35 regions. It competes directly with Cloudflare Workers. This article is an honest look at what it offers, when it fits, and what it lacks.<\/p>\n<h2 id=\"deno-deploy-philosophy\">Deno Deploy Philosophy<\/h2>\n<p>The pillars:<\/p>\n<ul>\n<li><strong>First-class TypeScript<\/strong>: no transpile step, runtime executes TS directly.<\/li>\n<li><strong>Standard Web APIs<\/strong>: <code>fetch<\/code>, <code>Response<\/code>, <code>Request<\/code>, <code>URL<\/code>, <code>crypto.subtle<\/code>. No proprietary APIs.<\/li>\n<li><strong>Secure by default<\/strong>: explicit permissions, no arbitrary network\/disk access.<\/li>\n<li><strong>ES modules<\/strong>: HTTP imports, npm (after Deno 2), or <code>jsr:<\/code> (JavaScript Registry).<\/li>\n<\/ul>\n<p>The contrast with Node is intentional: recover what Dahl considers Node\u2019s design errors.<\/p>\n<h2 id=\"architecture\">Architecture<\/h2>\n<p>Deno Deploy runs your code in <strong>V8 isolates<\/strong> (like Workers), distributed across ~35 global locations. The same isolate can serve multiple warm requests. Cold start: ~50ms.<\/p>\n<p>Underlying platforms:<\/p>\n<ul>\n<li><strong>Fly.io<\/strong>: recent partnership for some cases.<\/li>\n<li><strong>Deno Cloud<\/strong>: own infrastructure expanding.<\/li>\n<\/ul>\n<p>Deno Deploy isn\u2019t heavy edge \u2014 you can\u2019t run long workloads or native binaries. More \u201cfunction handler per request\u201d like Lambda\/Workers.<\/p>\n<h2 id=\"hello-world\">Hello World<\/h2>\n<div class=\"sourceCode\" id=\"cb1\">\n<pre class=\"sourceCode typescript\"><code class=\"sourceCode typescript\"><span id=\"cb1-1\"><a href=\"#cb1-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\">\/\/ main.ts<\/span><\/span>\n<span id=\"cb1-2\"><a href=\"#cb1-2\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>Deno<span class=\"op\">.<\/span><span class=\"fu\">serve<\/span>((req<span class=\"op\">:<\/span> Request) <span class=\"kw\">=&gt;<\/span> {<\/span>\n<span id=\"cb1-3\"><a href=\"#cb1-3\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"kw\">const<\/span> url <span class=\"op\">=<\/span> <span class=\"kw\">new<\/span> <span class=\"fu\">URL<\/span>(req<span class=\"op\">.<\/span><span class=\"at\">url<\/span>)<span class=\"op\">;<\/span><\/span>\n<span id=\"cb1-4\"><a href=\"#cb1-4\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"cf\">if<\/span> (url<span class=\"op\">.<\/span><span class=\"at\">pathname<\/span> <span class=\"op\">===<\/span> <span class=\"st\">&quot;\/&quot;<\/span>) {<\/span>\n<span id=\"cb1-5\"><a href=\"#cb1-5\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>    <span class=\"cf\">return<\/span> <span class=\"kw\">new<\/span> <span class=\"fu\">Response<\/span>(<span class=\"st\">&quot;Hi from Deno Deploy&quot;<\/span>)<span class=\"op\">;<\/span><\/span>\n<span id=\"cb1-6\"><a href=\"#cb1-6\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  }<\/span>\n<span id=\"cb1-7\"><a href=\"#cb1-7\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"cf\">return<\/span> <span class=\"kw\">new<\/span> <span class=\"fu\">Response<\/span>(<span class=\"st\">&quot;Not found&quot;<\/span><span class=\"op\">,<\/span> { status<span class=\"op\">:<\/span> <span class=\"dv\">404<\/span> })<span class=\"op\">;<\/span><\/span>\n<span id=\"cb1-8\"><a href=\"#cb1-8\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>})<span class=\"op\">;<\/span><\/span><\/code><\/pre>\n<\/div>\n<p>Deploy with <code>deployctl<\/code> CLI:<\/p>\n<div class=\"sourceCode\" id=\"cb2\">\n<pre class=\"sourceCode bash\"><code class=\"sourceCode bash\"><span id=\"cb2-1\"><a href=\"#cb2-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"ex\">deno<\/span> install <span class=\"at\">-Arf<\/span> jsr:@deno\/deployctl<\/span>\n<span id=\"cb2-2\"><a href=\"#cb2-2\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"ex\">deployctl<\/span> deploy <span class=\"at\">--project<\/span><span class=\"op\">=<\/span>my-app main.ts<\/span><\/code><\/pre>\n<\/div>\n<p>Or via GitHub Actions with automatic deployment on each push.<\/p>\n<h2 id=\"deno-kv-persistent-state\">Deno KV: Persistent State<\/h2>\n<p>One difference with Workers: <strong>Deno KV<\/strong>, an integrated key-value store included with the platform:<\/p>\n<div class=\"sourceCode\" id=\"cb3\">\n<pre class=\"sourceCode typescript\"><code class=\"sourceCode typescript\"><span id=\"cb3-1\"><a href=\"#cb3-1\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"kw\">const<\/span> kv <span class=\"op\">=<\/span> <span class=\"cf\">await<\/span> Deno<span class=\"op\">.<\/span><span class=\"fu\">openKv<\/span>()<span class=\"op\">;<\/span><\/span>\n<span id=\"cb3-2\"><a href=\"#cb3-2\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb3-3\"><a href=\"#cb3-3\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\">\/\/ Write<\/span><\/span>\n<span id=\"cb3-4\"><a href=\"#cb3-4\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"cf\">await<\/span> kv<span class=\"op\">.<\/span><span class=\"fu\">set<\/span>([<span class=\"st\">&quot;users&quot;<\/span><span class=\"op\">,<\/span> <span class=\"st\">&quot;123&quot;<\/span>]<span class=\"op\">,<\/span> { name<span class=\"op\">:<\/span> <span class=\"st\">&quot;Ana&quot;<\/span><span class=\"op\">,<\/span> email<span class=\"op\">:<\/span> <span class=\"st\">&quot;ana@ex.com&quot;<\/span> })<span class=\"op\">;<\/span><\/span>\n<span id=\"cb3-5\"><a href=\"#cb3-5\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb3-6\"><a href=\"#cb3-6\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\">\/\/ Read<\/span><\/span>\n<span id=\"cb3-7\"><a href=\"#cb3-7\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"kw\">const<\/span> user <span class=\"op\">=<\/span> <span class=\"cf\">await<\/span> kv<span class=\"op\">.<\/span><span class=\"fu\">get<\/span>([<span class=\"st\">&quot;users&quot;<\/span><span class=\"op\">,<\/span> <span class=\"st\">&quot;123&quot;<\/span>])<span class=\"op\">;<\/span><\/span>\n<span id=\"cb3-8\"><a href=\"#cb3-8\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb3-9\"><a href=\"#cb3-9\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\">\/\/ Atomic transactions<\/span><\/span>\n<span id=\"cb3-10\"><a href=\"#cb3-10\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"cf\">await<\/span> kv<span class=\"op\">.<\/span><span class=\"fu\">atomic<\/span>()<\/span>\n<span id=\"cb3-11\"><a href=\"#cb3-11\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"op\">.<\/span><span class=\"fu\">check<\/span>({ key<span class=\"op\">:<\/span> [<span class=\"st\">&quot;counter&quot;<\/span>]<span class=\"op\">,<\/span> versionstamp<span class=\"op\">:<\/span> <span class=\"dt\">null<\/span> })<\/span>\n<span id=\"cb3-12\"><a href=\"#cb3-12\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"op\">.<\/span><span class=\"fu\">set<\/span>([<span class=\"st\">&quot;counter&quot;<\/span>]<span class=\"op\">,<\/span> <span class=\"dv\">1<\/span>)<\/span>\n<span id=\"cb3-13\"><a href=\"#cb3-13\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"op\">.<\/span><span class=\"fu\">commit<\/span>()<span class=\"op\">;<\/span><\/span>\n<span id=\"cb3-14\"><a href=\"#cb3-14\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb3-15\"><a href=\"#cb3-15\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\">\/\/ Queue messages (durable)<\/span><\/span>\n<span id=\"cb3-16\"><a href=\"#cb3-16\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"cf\">await<\/span> kv<span class=\"op\">.<\/span><span class=\"fu\">enqueue<\/span>({ type<span class=\"op\">:<\/span> <span class=\"st\">&quot;email&quot;<\/span><span class=\"op\">,<\/span> to<span class=\"op\">:<\/span> <span class=\"st\">&quot;ana@ex.com&quot;<\/span> })<span class=\"op\">;<\/span><\/span>\n<span id=\"cb3-17\"><a href=\"#cb3-17\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><\/span>\n<span id=\"cb3-18\"><a href=\"#cb3-18\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"co\">\/\/ Real-time watches<\/span><\/span>\n<span id=\"cb3-19\"><a href=\"#cb3-19\" aria-hidden=\"true\" tabindex=\"-1\"><\/a><span class=\"cf\">for<\/span> <span class=\"cf\">await<\/span> (<span class=\"kw\">const<\/span> entry <span class=\"kw\">of<\/span> kv<span class=\"op\">.<\/span><span class=\"fu\">watch<\/span>([[<span class=\"st\">&quot;users&quot;<\/span><span class=\"op\">,<\/span> <span class=\"st\">&quot;123&quot;<\/span>]])) {<\/span>\n<span id=\"cb3-20\"><a href=\"#cb3-20\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>  <span class=\"bu\">console<\/span><span class=\"op\">.<\/span><span class=\"fu\">log<\/span>(entry)<span class=\"op\">;<\/span><\/span>\n<span id=\"cb3-21\"><a href=\"#cb3-21\" aria-hidden=\"true\" tabindex=\"-1\"><\/a>}<\/span><\/code><\/pre>\n<\/div>\n<p>KV globally replicates with eventual consistency, strong per-region. Useful for many cases without external DB.<\/p>\n<h2 id=\"web-apis-instead-of-node-apis\">Web APIs Instead of Node APIs<\/h2>\n<p>What breaks compatibility with many npm libs:<\/p>\n<ul>\n<li><strong>Node <code>fs<\/code><\/strong> \u2192 no native (use <code>Deno.readFile<\/code>).<\/li>\n<li><strong>Node <code>http<\/code><\/strong> \u2192 use <code>fetch<\/code> and <code>Deno.serve<\/code>.<\/li>\n<li><strong>Node <code>stream<\/code><\/strong> \u2192 Web Streams.<\/li>\n<\/ul>\n<p>Deno 2 introduced better npm interop (packages with <code>npm:<\/code> specifier), but Node-specific libs remain incompatible. <strong>Libs using only Web APIs<\/strong> (React Router, Hono, Zod, date-fns) work without changes.<\/p>\n<h2 id=\"frameworks-on-deno-deploy\">Frameworks on Deno Deploy<\/h2>\n<p>Modern framework-compatible:<\/p>\n<ul>\n<li><strong><a href=\"https:\/\/fresh.deno.dev\/\">Fresh<\/a><\/strong>: Deno\u2019s own web framework, islands architecture.<\/li>\n<li><strong><a href=\"https:\/\/hono.dev\/\">Hono<\/a><\/strong>: multi-runtime micro-framework (Deno, Bun, Workers, Node).<\/li>\n<li><strong><a href=\"https:\/\/oakserver.github.io\/oak\/\">Oak<\/a><\/strong>: middleware-style, Express-like.<\/li>\n<li><strong>React Router v7 \/ Remix<\/strong>: via adapters.<\/li>\n<li><strong>Astro<\/strong>: via Deno adapter.<\/li>\n<\/ul>\n<p>Hono is probably the most practical choice for portable code between edge runtimes.<\/p>\n<h2 id=\"deno-deploy-vs-cloudflare-workers\">Deno Deploy vs Cloudflare Workers<\/h2>\n<p>Honest comparison:<\/p>\n<table>\n<thead>\n<tr class=\"header\">\n<th>Aspect<\/th>\n<th>Deno Deploy<\/th>\n<th>Cloudflare Workers<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr class=\"odd\">\n<td>Runtime<\/td>\n<td>Deno (V8)<\/td>\n<td>V8 isolates<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>Native TypeScript<\/td>\n<td>Yes<\/td>\n<td>Via wrangler<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>Web APIs<\/td>\n<td>Yes<\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>KV<\/td>\n<td>Deno KV (integrated)<\/td>\n<td>Workers KV<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>R2 \/ Objects<\/td>\n<td>\u2014<\/td>\n<td>R2<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>D1 (SQL)<\/td>\n<td>\u2014<\/td>\n<td>D1<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>Durable Objects<\/td>\n<td>\u2014<\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>Queue<\/td>\n<td>Yes (in Deno KV)<\/td>\n<td>Cloudflare Queues<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>Cron triggers<\/td>\n<td>Yes (<code>Deno.cron<\/code>)<\/td>\n<td>Yes<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>Regions<\/td>\n<td>~35<\/td>\n<td>300+<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>Entry price<\/td>\n<td>$0 free tier, $10\/mo<\/td>\n<td>$0 free, $5\/mo<\/td>\n<\/tr>\n<tr class=\"even\">\n<td>Cold start<\/td>\n<td>~50ms<\/td>\n<td>~1-5ms<\/td>\n<\/tr>\n<tr class=\"odd\">\n<td>Ecosystem<\/td>\n<td>Emerging<\/td>\n<td>Large<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Cloudflare has more infrastructure pieces. Deno Deploy is more focused on \u201cexcellent JS\/TS runtime\u201d.<\/p>\n<h2 id=\"where-it-fits\">Where It Fits<\/h2>\n<p>Good fits:<\/p>\n<ul>\n<li><strong>Lightweight multi-region API<\/strong>.<\/li>\n<li><strong>Fresh \/ Astro static SSR<\/strong>.<\/li>\n<li><strong>Small microservices<\/strong> with TypeScript focus.<\/li>\n<li><strong>Experimentation<\/strong> with standard Web APIs.<\/li>\n<li><strong>Project prioritising portability<\/strong> Deno \u2194\ufe0e Bun \u2194\ufe0e browser.<\/li>\n<\/ul>\n<p>Less ideal:<\/p>\n<ul>\n<li><strong>Apps with complex state<\/strong>: storage offering more limited.<\/li>\n<li><strong>Heavy Node ecosystem<\/strong>: missing interop for complex packages.<\/li>\n<li><strong>Extreme volume with critical latency<\/strong>: Cloudflare has more PoPs.<\/li>\n<\/ul>\n<h2 id=\"pricing\">Pricing<\/h2>\n<ul>\n<li><strong>Free<\/strong>: 100k requests\/day, 100GB-hours compute.<\/li>\n<li><strong>Pro<\/strong>: $10\/mo + usage overage.<\/li>\n<li><strong>Enterprise<\/strong>: custom.<\/li>\n<\/ul>\n<p>For small projects, free tier covers well. For volume, pricing is competitive but not cheapest.<\/p>\n<h2 id=\"limitations\">Limitations<\/h2>\n<p>Honestly:<\/p>\n<ul>\n<li><strong>Young ecosystem<\/strong>: fewer plugins and examples than Workers.<\/li>\n<li><strong>10x cold start vs Workers<\/strong>: 50ms vs 5ms. For ultra-sensitive apps it matters.<\/li>\n<li><strong>Few PoPs<\/strong> relatively.<\/li>\n<li><strong>Generous free tier but with limits<\/strong>.<\/li>\n<li><strong>Deno KV lock-in<\/strong> if you use it heavily: migrating to another DB is work.<\/li>\n<\/ul>\n<h2 id=\"deno-deploy-playground\">Deno Deploy Playground<\/h2>\n<p>A differentiator: <strong>Deploy Playground<\/strong> \u2014 web editor to write Deno code and deploy globally instantly. Useful for:<\/p>\n<ul>\n<li>Quick demo sharing.<\/li>\n<li>API experimentation.<\/li>\n<li>Ad-hoc webhooks.<\/li>\n<li>Weekend prototypes.<\/li>\n<\/ul>\n<p>Doesn\u2019t replace an IDE, but accelerates iteration.<\/p>\n<h2 id=\"migrating-from-node-express\">Migrating from Node \/ Express<\/h2>\n<p>Migrating an Express app to Deno Deploy isn\u2019t mechanical:<\/p>\n<ul>\n<li><strong>Express<\/strong> uses Node APIs \u2192 rewrite required.<\/li>\n<li><strong>Alternative<\/strong>: use <strong>Hono<\/strong>, which works in Deno, port first to Hono on Node, then Deno Deploy.<\/li>\n<li><strong>Packages<\/strong>: many work with <code>npm:<\/code> specifier.<\/li>\n<li><strong>DB<\/strong>: if using Postgres, libs like <code>deno-postgres<\/code> replace <code>pg<\/code>.<\/li>\n<\/ul>\n<p>Small project: 1-2 days. Mid-size: weeks.<\/p>\n<h2 id=\"security\">Security<\/h2>\n<p>Deno Deploy inherits Deno\u2019s model:<\/p>\n<ul>\n<li>No filesystem access by default.<\/li>\n<li>No arbitrary network permissions.<\/li>\n<li>V8 escape-proof sandbox.<\/li>\n<li>Managed secrets via env vars.<\/li>\n<\/ul>\n<p>Auditability and simplicity superior to Node.<\/p>\n<h2 id=\"conclusion\">Conclusion<\/h2>\n<p>Deno Deploy is an edge-serverless platform coherent with Deno philosophy: TypeScript first, standard Web APIs, secure by default. For new projects not needing Cloudflare\u2019s complex ecosystem (R2, D1, Durable Objects), it\u2019s an elegant choice. For teams with existing Node investment, migration has cost. Development pace is strong \u2014 Deno Deploy competes seriously with Workers on DX and proposition. Final choice depends on how much Cloudflare ecosystem you need vs how much you value Deno ergonomics.<\/p>\n<p>Follow us on jacar.es for more on edge computing, serverless, and JavaScript runtimes.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Deno Deploy is the edge-serverless offering from Deno&#8217;s creators. What it brings vs Workers and Lambda, when it fits, and where it falls short.<\/p>\n","protected":false},"author":1,"featured_media":593,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[19],"tags":[397,398,345,142,383,399],"class_list":["post-592","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tecnologia","tag-deno","tag-deno-deploy","tag-edge","tag-serverless","tag-typescript","tag-v8-isolates"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"en","enabled_languages":["es","en"],"languages":{"es":{"title":true,"content":true,"excerpt":true},"en":{"title":true,"content":true,"excerpt":true}}},"gutentor_comment":0,"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Deno Deploy: TypeScript at the Edge Without a Server - Jacar<\/title>\n<meta name=\"description\" content=\"Deno Deploy: edge functions with native TypeScript and standard Web APIs. Comparison with Cloudflare Workers, use cases, and limitations.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/jacar.es\/deno-deploy-edge\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Deno Deploy: TypeScript at the Edge Without a Server - Jacar\" \/>\n<meta property=\"og:description\" content=\"Deno Deploy: edge functions with native TypeScript and standard Web APIs. Comparison with Cloudflare Workers, use cases, and limitations.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/jacar.es\/deno-deploy-edge\/\" \/>\n<meta property=\"og:site_name\" content=\"Jacar\" \/>\n<meta property=\"article:published_time\" content=\"2024-03-15T10:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2020\/09\/favicon.png\" \/>\n\t<meta property=\"og:image:width\" content=\"252\" \/>\n\t<meta property=\"og:image:height\" content=\"229\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"javi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"javi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/jacar.es\\\/deno-deploy-edge\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/deno-deploy-edge\\\/\"},\"author\":{\"name\":\"javi\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#\\\/schema\\\/person\\\/54a7f7b4224b38fafc9866eb3e614208\"},\"headline\":\"Deno Deploy: TypeScript at the Edge Without a Server\",\"datePublished\":\"2024-03-15T10:00:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/deno-deploy-edge\\\/\"},\"wordCount\":1610,\"publisher\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/deno-deploy-edge\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/20033537\\\/jwp-1510606-7638.jpg\",\"keywords\":[\"deno\",\"deno deploy\",\"edge\",\"serverless\",\"typescript\",\"v8 isolates\"],\"articleSection\":[\"Tecnolog\u00eda\"],\"inLanguage\":\"en-US\"},{\"@type\":[\"WebPage\",\"ItemPage\"],\"@id\":\"https:\\\/\\\/jacar.es\\\/deno-deploy-edge\\\/\",\"url\":\"https:\\\/\\\/jacar.es\\\/deno-deploy-edge\\\/\",\"name\":\"Deno Deploy: TypeScript at the Edge Without a Server - Jacar\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/deno-deploy-edge\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/deno-deploy-edge\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/20033537\\\/jwp-1510606-7638.jpg\",\"datePublished\":\"2024-03-15T10:00:00+00:00\",\"description\":\"Deno Deploy: edge functions with native TypeScript and standard Web APIs. Comparison with Cloudflare Workers, use cases, and limitations.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/deno-deploy-edge\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/jacar.es\\\/deno-deploy-edge\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jacar.es\\\/deno-deploy-edge\\\/#primaryimage\",\"url\":\"https:\\\/\\\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/20033537\\\/jwp-1510606-7638.jpg\",\"contentUrl\":\"https:\\\/\\\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\\\/wp-content\\\/uploads\\\/2024\\\/03\\\/20033537\\\/jwp-1510606-7638.jpg\",\"width\":1200,\"height\":1798,\"caption\":\"Superposici\u00f3n de c\u00f3digo sobre monitor con luz de ne\u00f3n azul\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/jacar.es\\\/deno-deploy-edge\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/jacar.es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Deno Deploy: TypeScript en el edge sin servidor\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#website\",\"url\":\"https:\\\/\\\/jacar.es\\\/\",\"name\":\"Jacar\",\"description\":\"Passion for Technology\",\"publisher\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/jacar.es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#organization\",\"name\":\"Jacar\",\"url\":\"https:\\\/\\\/jacar.es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/jacar.es\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/favicon.png\",\"contentUrl\":\"https:\\\/\\\/jacar.es\\\/wp-content\\\/uploads\\\/2020\\\/09\\\/favicon.png\",\"width\":252,\"height\":229,\"caption\":\"Jacar\"},\"image\":{\"@id\":\"https:\\\/\\\/jacar.es\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/javiercanetearroyo\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/jacar.es\\\/#\\\/schema\\\/person\\\/54a7f7b4224b38fafc9866eb3e614208\",\"name\":\"javi\",\"sameAs\":[\"https:\\\/\\\/jacar.es\"],\"url\":\"https:\\\/\\\/jacar.es\\\/en\\\/author\\\/javi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Deno Deploy: TypeScript at the Edge Without a Server - Jacar","description":"Deno Deploy: edge functions with native TypeScript and standard Web APIs. Comparison with Cloudflare Workers, use cases, and limitations.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/jacar.es\/deno-deploy-edge\/","og_locale":"en_US","og_type":"article","og_title":"Deno Deploy: TypeScript at the Edge Without a Server - Jacar","og_description":"Deno Deploy: edge functions with native TypeScript and standard Web APIs. Comparison with Cloudflare Workers, use cases, and limitations.","og_url":"https:\/\/jacar.es\/deno-deploy-edge\/","og_site_name":"Jacar","article_published_time":"2024-03-15T10:00:00+00:00","og_image":[{"width":252,"height":229,"url":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2020\/09\/favicon.png","type":"image\/png"}],"author":"javi","twitter_card":"summary_large_image","twitter_misc":{"Written by":"javi","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/jacar.es\/deno-deploy-edge\/#article","isPartOf":{"@id":"https:\/\/jacar.es\/deno-deploy-edge\/"},"author":{"name":"javi","@id":"https:\/\/jacar.es\/#\/schema\/person\/54a7f7b4224b38fafc9866eb3e614208"},"headline":"Deno Deploy: TypeScript at the Edge Without a Server","datePublished":"2024-03-15T10:00:00+00:00","mainEntityOfPage":{"@id":"https:\/\/jacar.es\/deno-deploy-edge\/"},"wordCount":1610,"publisher":{"@id":"https:\/\/jacar.es\/#organization"},"image":{"@id":"https:\/\/jacar.es\/deno-deploy-edge\/#primaryimage"},"thumbnailUrl":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2024\/03\/20033537\/jwp-1510606-7638.jpg","keywords":["deno","deno deploy","edge","serverless","typescript","v8 isolates"],"articleSection":["Tecnolog\u00eda"],"inLanguage":"en-US"},{"@type":["WebPage","ItemPage"],"@id":"https:\/\/jacar.es\/deno-deploy-edge\/","url":"https:\/\/jacar.es\/deno-deploy-edge\/","name":"Deno Deploy: TypeScript at the Edge Without a Server - Jacar","isPartOf":{"@id":"https:\/\/jacar.es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/jacar.es\/deno-deploy-edge\/#primaryimage"},"image":{"@id":"https:\/\/jacar.es\/deno-deploy-edge\/#primaryimage"},"thumbnailUrl":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2024\/03\/20033537\/jwp-1510606-7638.jpg","datePublished":"2024-03-15T10:00:00+00:00","description":"Deno Deploy: edge functions with native TypeScript and standard Web APIs. Comparison with Cloudflare Workers, use cases, and limitations.","breadcrumb":{"@id":"https:\/\/jacar.es\/deno-deploy-edge\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/jacar.es\/deno-deploy-edge\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jacar.es\/deno-deploy-edge\/#primaryimage","url":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2024\/03\/20033537\/jwp-1510606-7638.jpg","contentUrl":"https:\/\/jcs-wp-jacar-es.fsn1.your-objectstorage.com\/wp-content\/uploads\/2024\/03\/20033537\/jwp-1510606-7638.jpg","width":1200,"height":1798,"caption":"Superposici\u00f3n de c\u00f3digo sobre monitor con luz de ne\u00f3n azul"},{"@type":"BreadcrumbList","@id":"https:\/\/jacar.es\/deno-deploy-edge\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/jacar.es\/"},{"@type":"ListItem","position":2,"name":"Deno Deploy: TypeScript en el edge sin servidor"}]},{"@type":"WebSite","@id":"https:\/\/jacar.es\/#website","url":"https:\/\/jacar.es\/","name":"Jacar","description":"Passion for Technology","publisher":{"@id":"https:\/\/jacar.es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/jacar.es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/jacar.es\/#organization","name":"Jacar","url":"https:\/\/jacar.es\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/jacar.es\/#\/schema\/logo\/image\/","url":"https:\/\/jacar.es\/wp-content\/uploads\/2020\/09\/favicon.png","contentUrl":"https:\/\/jacar.es\/wp-content\/uploads\/2020\/09\/favicon.png","width":252,"height":229,"caption":"Jacar"},"image":{"@id":"https:\/\/jacar.es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/in\/javiercanetearroyo\/"]},{"@type":"Person","@id":"https:\/\/jacar.es\/#\/schema\/person\/54a7f7b4224b38fafc9866eb3e614208","name":"javi","sameAs":["https:\/\/jacar.es"],"url":"https:\/\/jacar.es\/en\/author\/javi\/"}]}},"_links":{"self":[{"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/posts\/592","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/comments?post=592"}],"version-history":[{"count":0,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/posts\/592\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/media\/593"}],"wp:attachment":[{"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/media?parent=592"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/categories?post=592"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jacar.es\/en\/wp-json\/wp\/v2\/tags?post=592"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}