The State of Web Frameworks on Deno
Recently, we announced
npm: specifiers on Deno Deploy. This
built on isolates to support the more than 2
million modules on npm. While Deno is intentionally not designed as a drop-in
replacement for Node.js, our ongoing work to provide backward
compatibility with modules designed for Node has unlocked new ways to use Deno
to build web applications.
To help you get started, we’ve prepared a whirlwind tour of the state of web frameworks in Deno. Here’s an overview of what we’ll cover - click on a framework’s name to jump right to that section, and explore what you can build next in Deno.
- 🦕 Lume A Deno-native static site generator.
- ⬢ Docusaurus SSG for documentation-focused websites.
- ⬢ Gatsby Extensible SSG, a “Jamstack” pioneer.
- ⬢ Next.js (static export) React web framework, works on Deploy in SSG mode.
Dynamic web apps
- 🦕 Fresh A Deno-native web app framework with server rendering and interactive client-side islands.
- 🦕 Hono A light-weight dynamic web framework in the tradition of Express and Sinatra.
- 🦕 Oak A Deno-native middleware framework inspired by Koa.
- ⬢ Astro A hybrid SSR and SSG framework for content-focused sites.
- ⬢ SvelteKit An SSR and SSG web framework powered by Svelte.
- ⬢ Nuxt An SSR and SSG web framework powered by Vue.js.
- ⬢ Remix Dynamic web apps with server rendering and client hydration.
- ⬢ Qwik An SSR and SSG web framework built around resumability.
Static sites on Deno
For some time, it has been possible to host purely static sites on Deno Deploy. Using either an app server like Hono or the static file server from the Deno standard library, you can quite happily serve up static files from Deploy.
Here are a few popular static site development options that are supported on Deno today.
Vanilla JS or Single-page application (SPA) frameworks
For web applications designed for long usage sessions and complex front-end interactions, a single-page application (SPA) architecture might be the right choice. You’d serve static assets through Deno, but you’d develop more client-side code that uses front-end frameworks like React, Angular, or Vue.js.
Depending on your framework choice, there may be a compilation or pre-processing step required before your code can run in the browser. Some of those build processes can be run in Deno, but some may still require the use of Node.js.
Here are a few templates for SPA development you can try with Deno and Deno Deploy today:
Docusaurus is a static site generator optimized for technical documentation. It has been adopted by a number of open source and commercial projects because of its support for versioning, internationalization, and content features required of many documentation sites. In fact, Deno recently migrated much of our own documentation to a site powered by Hono and Docusaurus.
For an optimal developer experience, we recommend using Docusaurus today
alongside Node.js and an npm-compatible package manager. You can build your site
npm scripts, but then deploy and serve it through a Deno
static file server or
This configuration allows you to take advantage of the tooling and ecosystem around Docusaurus, but still get the benefits of using Deno for any dynamic code your doc site might need.
Gatsby is a static site generator and early pioneer of the “Jamstack” architecture, which favors static site generation from data fetched at build time. This React-based static site generator is still a great choice to build static sites that sit on top of data in a headless CMS, or across many different data sources. You can serve static assets exported from the Gatsby build process through a Deno static file server or application server.
Next.js is a web framework based on React that uses a mixture of static site generation and dynamic rendering to serve web sites. As of this writing, many Next.js dynamic rendering features are not yet supported on Deno or Deno Deploy.
However, if you are using Next.js to generate static sites, that usage pattern works perfectly well with Deno and Deno Deploy. You can serve static assets exported from the Next.js build process through a Deno static file server or application server.
Dynamic web app frameworks
Deno Deploy really shines when you start building dynamic web applications. Minimal cold start times and low latency on our global network make Deploy a great option for building data-driven web applications of any kind.
Here are a number of dynamic web frameworks that work today on Deno Deploy.
Fresh is a web framework designed for Deno that features dynamic rendering at the edge, interactive islands on the client, and super fast deploys with no build step by default. With a feature set similar to frameworks like Next.js, SvelteKit, or Nuxt, we recommend checking it out for any green field projects you might want to try on Deno.
If you’re building a SaaS application, you might also want to check out SaaSKit, a Fresh application that has already implemented authentication, payments, and many other features you would need for a new SaaS project.
Hono is a light-weight web app framework in the tradition of Express and Sinatra. In just a few lines of code, you can set up an API server or a server for dynamic web pages. Hono provides a Deno-native installation path, and works great with Deno’s built-in TypeScript tooling.
Astro is a web framework designed for content-focused websites. It is capable of server-side rendering in a number of runtime environments, including Deno Deploy. Beyond Astro components and pages, you can build interactive islands on the front end using your favorite client-side frameworks.
Astro runs in production in a number of different environments using adapters, with Deno Deploy among them. During local development, we recommend using npm to manage dependencies and run admin scripts, as Astro was designed around these workflows. However, you can still run your code on the Deno runtime, which gives you access to zero config TypeScript and built-in APIs like Deno KV.
If you’d like to use Astro and Deno together, we strongly recommend starting with this template, which is preconfigured with a Deno SSR adapter and local development scripts.
Like other frameworks designed around npm, we recommend using npm for local development and dependency management. However, you can run the Svelte dev server using Deno, allowing you to take advantage of Deno runtime features.
As with the other Node-centric frameworks in this list, we recommend using npm to manage dependencies and run local development scripts. However, using the Deno preset for Nitro means your Nuxt run great on Deno Deploy.
Your Remix project can be configured to output a production build using the
deno server build target.
The resulting project can then be run on Deno Deploy.
Qwik supports Deno Deploy through a
middleware component that
takes advantage of the web standard
Response objects used by
Try a new framework now on Deno Deploy!
Ready to stop reading and start hacking? Check out our recently revamped new project experience, and try one of these frameworks in a ready-to-use template.