Fresh is a web framework built for Deno, and it works completely differently than the React frameworks you're used to. Developed by the Deno team, Fresh ditches the JavaScript-heavy approach that's been breaking web performance for years.
How Fresh Works (The Non-Bullshit Version)
Here's what makes Fresh weird in a good way:
Zero JavaScript by Default: Only the parts that actually need JavaScript get JavaScript. Your boring blog post stays as plain HTML - no 500KB React bundle to render static text. I learned this shit the hard way after spending a Friday night debugging a client's Next.js 13.4 site that took 8 seconds to show a simple paragraph because Create React App was shipping the entire React DevTools bundle to production.
Island Architecture: Fresh uses the Islands pattern where your static content is surrounded by small interactive "islands." This concept was originally proposed by Jason Miller and implemented by Astro first. Instead of React taking over your entire page like a digital parasite, Fresh only adds JavaScript where you actually need it - like a normal fucking website.
Edge Rendering: Pages render server-side on Deno Deploy's edge network, not in some distant data center. The performance difference is real - way faster cold starts, like 50x better than traditional serverless. V8 isolates start much faster than AWS Lambda containers. Don't quote me on the exact numbers, but it's noticeably faster.
The Technical Reality
File-System Routing: Works like Next.js routing but uses Fresh's routing conventions - drop a file in routes/
, get a URL. No config, no route mapping bullshit. Create routes/about.tsx
and /about
just works.
TypeScript Without the Headache: Deno handles TypeScript natively, so no tsconfig.json, no compilation step, no watching 47 different webpack processes crash when you change one line. Just write .ts
files and run them. Coming from Node.js, this feels like magic until you hit import map conflicts with existing projects and spend 3 hours getting something like Error: Cannot resolve "react"
or whatever the fuck Deno was complaining about because Deno 1.38+ changed how import maps work with npm: specifiers.
Preact Under the Hood: Uses Preact instead of React - same JSX, same hooks, but 3KB instead of 45KB. Your React muscle memory works fine, just don't try to npm install React components because that'll break spectacularly.
Actually Progressive Enhancement: Pages work with JavaScript disabled. I know, shocking concept in 2025. Interactive bits enhance the experience instead of being required for basic functionality. This follows web standards best practices rather than the SPA-first approach that breaks the web.
Production Reality Check
Deno.com runs on Fresh, along with Deco.cx's ecommerce platform that handles serious traffic. At least they eat their own dog food instead of building something they wouldn't use.
Fresh 2.0 Just Hit Beta (September 2025): Fresh 2.0 graduated to beta after 63 alpha releases that kept breaking my import maps. This isn't some distant roadmap bullshit - it's basically release-candidate ready and powers deno.com in production:
- Vite integration: Optional Vite plugin support for HMR and access to the Vite ecosystem
- 9-12x faster boot times: Production apps start in 8ms instead of 86ms (measured on deno.com)
- Hot module reloading in island components (finally!)
- React aliasing solved: No more manual preact/compat mapping headaches
<Head>
component is back for managing document head
Look, if you're starting a new project in September 2025, use Fresh 2.0 beta. The architecture is stable and the performance improvements are real.
Bottom Line: Fresh delivers what it promises - genuinely fast web apps with minimal JavaScript. But you're making a strategic trade: React's massive ecosystem for Deno's performance and simplicity.
The real question isn't whether Fresh is objectively "better" than Next.js. It's whether your project can thrive in a smaller ecosystem in exchange for dramatically better performance and developer experience. If you're building content-heavy sites where speed matters more than having 47 different date picker libraries, Fresh might be exactly what you need.
The web is moving toward less JavaScript, better performance, and simpler developer experiences. Fresh is betting on that future - and the early results look promising.