DEV Community

Cover image for Exploring Fresh (Deno Framework) for the First Time: My Beginner’s Journey
Prasoon  Jadon
Prasoon Jadon

Posted on

Exploring Fresh (Deno Framework) for the First Time: My Beginner’s Journey

Exploring Fresh (Deno Framework) for the First Time: My Beginner’s Journey

I’ve been working with Node.js and JavaScript frameworks for a while, but recently I decided to step into the Deno ecosystem. One framework that instantly caught my attention was Fresh.

Fresh promises no build step, TypeScript support by default, and blazing fast performance thanks to its islands architecture. That was enough for me to give it a try. 🚀


🌱 What is Fresh?

Fresh is a web framework built on top of Deno.

Some key features that stood out to me:

  • No build step → just write code and run.
  • TypeScript out of the box (no extra config).
  • Islands architecture → server-rendered pages with selective client-side hydration.
  • Tight integration with Deno Deploy.

⚡ Getting Started

1. Install Deno

If you don’t already have Deno installed:

curl -fsSL https://deno.land/install.sh | sh
Enter fullscreen mode Exit fullscreen mode

2. Create a Fresh Project

The Fresh CLI can scaffold a project in seconds:

deno run -A -r https://fresh.deno.dev my-app
cd my-app
deno task start
Enter fullscreen mode Exit fullscreen mode

Your app should now be running locally 🎉


📂 Project Structure

When I opened the project, here’s what I found:

  • routes/ → defines pages (like Next.js).
  • components/ → UI pieces you can reuse.
  • islands/ → interactive components that hydrate on the client.

This structure felt very natural and beginner-friendly.


🎨 My First Page

Let’s create a simple About page:

// routes/about.tsx
export default function About() {
  return (
    <div>
      <h1>About Fresh</h1>
      <p>This is my first Fresh project, and I’m loving it!</p>
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

Now, navigating to /about instantly shows the page. No builds, no waiting.


🏝️ Trying Islands

Fresh’s islands concept allows adding interactivity only where needed.

Example: a counter component.

// islands/Counter.tsx
import { useState } from "preact/hooks";

export default function Counter() {
  const [count, setCount] = useState(0);

  return (
    <button onClick={() => setCount(count + 1)}>
      Count: {count}
    </button>
  );
}
Enter fullscreen mode Exit fullscreen mode

Use it inside routes/index.tsx:

import Counter from "../islands/Counter.tsx";

export default function Home() {
  return (
    <div>
      <h1>Hello Fresh!</h1>
      <Counter />
    </div>
  );
}
Enter fullscreen mode Exit fullscreen mode

Only this counter will hydrate on the client side — everything else stays static. Pretty cool! ✨


🔥 First Impressions

Super fast setup – literally just works.

TypeScript by default – no config stress.

Lightweight and modern – feels refreshing compared to heavy frameworks.

Smaller ecosystem – fewer packages and tutorials.

Docs are basic – could be more detailed for beginners.

npm compatibility – not all packages play nicely yet.


🚀 What’s Next?

I plan to explore:

  • API routes in Fresh.
  • Middleware and advanced routing.
  • Deploying on Deno Deploy.

If you’ve already tried Fresh, I’d love to hear your experiences and tips! 💬


🎯 Conclusion

Fresh is still young, but it already feels like a framework designed for the future — fast, minimal, and TypeScript-first.

For me, it was refreshing to use a framework that just works without a build step. If you’re curious about Deno, Fresh might be the perfect entry point. 🌿


Have you tried Fresh yet? What’s your take on Deno frameworks? Let’s chat in the comments!

Top comments (2)

Collapse
 
aquascript-team profile image
AquaScript Team

You should create any demo website using this. By using demo website people can see how much beautiful website they can create using this.

Collapse
 
pjdeveloper896 profile image
Prasoon Jadon

OK, and thank you for suggestions