Build a Simple Web Page with Fresh, Deno's Official Web Framework
📖 Scenario: You want to create a fast and simple web page using Fresh, the official web framework for Deno. Fresh helps you build web apps with no build step and uses islands architecture for fast loading.
🎯 Goal: Build a basic Fresh app that shows a welcome message on the homepage.
📋 What You'll Learn
Create a Fresh project data structure
Add a configuration variable for the page title
Write the main page component using Fresh's syntax
Complete the app by exporting the page component
💡 Why This Matters
🌍 Real World
Fresh is used to build fast, modern web apps with Deno. It helps developers create pages that load quickly and update efficiently.
💼 Career
Knowing Fresh is valuable for Deno developers building web apps, improving performance and developer experience.
Progress0 / 4 steps
1
DATA SETUP: Create a Fresh page component file
Create a file named routes/index.tsx and inside it, define a functional component called Home that returns a simple <div> with the text "Welcome to Fresh!".
Deno
Hint
Use a function named Home that returns JSX with a div containing the welcome text.
2
CONFIGURATION: Add a page title variable
Inside routes/index.tsx, above the Home function, create a constant called pageTitle and set it to the string "Fresh Framework Demo".
Deno
Hint
Use const pageTitle = "Fresh Framework Demo"; before the Home function.
3
CORE LOGIC: Use the pageTitle variable in the component
Modify the Home component to display the pageTitle inside an <h1> tag above the welcome message inside the <div>.
Deno
Hint
Use JSX to insert {pageTitle} inside an <h1> tag.
4
COMPLETION: Export the Home component as default
Ensure the Home component is exported as the default export from routes/index.tsx so Fresh can use it as the homepage.
Deno
Hint
Make sure the Home function is exported with export default.
Practice
(1/5)
1. What is the main reason Fresh is Deno's official web framework?
easy
A. It uses modern Deno features and server-side rendering for speed.
B. It requires heavy client-side JavaScript for interactivity.
C. It is designed only for mobile app development.
D. It depends on third-party Node.js packages.
Solution
Step 1: Understand Fresh's design goals
Fresh focuses on speed and simplicity by using Deno's modern features and server-side rendering.
Step 2: Compare options with Fresh's characteristics
Options B, C, and D contradict Fresh's lightweight and server-side approach.
Final Answer:
It uses modern Deno features and server-side rendering for speed. -> Option A
Quick Check:
Fresh = modern Deno + server-side rendering [OK]
Hint: Fresh is fast because it uses server-side rendering [OK]
Common Mistakes:
Thinking Fresh needs heavy client-side code
Confusing Fresh with mobile-only frameworks
Assuming Fresh depends on Node.js packages
2. Which of the following is the correct way to create a new Fresh project using Deno?
easy
A. deno run -A https://fresh.deno.dev/init my-app
B. deno create fresh my-app
C. fresh new my-app
D. deno fresh init my-app
Solution
Step 1: Recall Fresh's official project creation command
Fresh projects are created by running a Deno script from fresh.deno.dev with permissions.
Step 2: Match the command syntax
deno run -A https://fresh.deno.dev/init my-app matches the official command format: deno run -A https://fresh.deno.dev/init my-app.
Final Answer:
deno run -A https://fresh.deno.dev/init my-app -> Option A
Quick Check:
Fresh project init uses deno run -A URL [OK]
Hint: Fresh uses deno run -A with fresh.deno.dev URL [OK]
Common Mistakes:
Using 'deno create' which doesn't exist
Trying 'fresh new' without installing Fresh CLI
Assuming 'deno fresh init' is valid
3. Given this Fresh component code snippet, what will be rendered in the browser?
export default function Home() {
return (
<main>
<h1>Welcome to Fresh</h1>
<p>Fast and simple web apps</p>
</main>
);
}
medium
A. A syntax error preventing rendering
B. An empty page with no content
C. Only the <h1> tag content is shown
D. <main><h1>Welcome to Fresh</h1><p>Fast and simple web apps</p></main>
Solution
Step 1: Understand Fresh component rendering
Fresh components return JSX-like HTML elements that render as HTML in the browser.
Step 2: Analyze the returned JSX
The component returns a <main> element containing <h1> and <p> tags with text content.
Final Answer:
<main><h1>Welcome to Fresh</h1><p>Fast and simple web apps</p></main> -> Option D
Quick Check:
JSX returns full HTML structure [OK]
Hint: Fresh renders returned JSX as HTML in browser [OK]
Common Mistakes:
Expecting no output or empty page
Thinking JSX causes syntax errors in Fresh
Assuming partial rendering of tags
4. Identify the error in this Fresh route handler code:
export const handler = {
GET(req) {
return new Response('Hello from Fresh!');
}
};
medium
A. The handler should be a default export, not a named export.
B. The GET method should return a JSON object, not a Response.
C. The handler object must use async functions for HTTP methods.
D. The Response constructor is missing a status code.
Solution
Step 1: Review Fresh handler method requirements
Fresh expects HTTP method handlers like GET to be async functions returning a Response.
Step 2: Check the GET method definition
The GET method is synchronous here, missing async keyword, which can cause issues.
Final Answer:
The handler object must use async functions for HTTP methods. -> Option C
Quick Check:
Fresh handlers = async functions [OK]
Hint: Fresh HTTP handlers must be async functions [OK]
Common Mistakes:
Omitting async keyword in handler methods
Returning plain strings instead of Response
Confusing default and named exports
5. You want to build a Fresh app that loads data from an API on the server and renders it without client-side JavaScript. Which Fresh feature helps achieve this efficiently?
hard
A. Using client-side React components for all UI
B. Server-side rendering with Islands architecture
C. Adding heavy client-side state management libraries
D. Disabling server rendering to speed up load
Solution
Step 1: Understand Fresh's Islands architecture
Fresh uses Islands architecture to render most UI on the server and hydrate only small interactive parts on the client.
Step 2: Match the requirement to Fresh features
Server-side rendering with Islands allows loading data on server and minimal client JS, fitting the requirement.
Final Answer:
Server-side rendering with Islands architecture -> Option B
Quick Check:
Fresh Islands = server render + minimal client JS [OK]
Hint: Use Islands for server data and minimal client JS [OK]
Common Mistakes:
Thinking all UI must be client-side React
Adding heavy client-side libraries unnecessarily
Disabling server rendering which slows load
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.