From 3121581881d766e46a3d5db759b7e93d465198c2 Mon Sep 17 00:00:00 2001
From: Alexander Karan <47707063+AlexanderKaran@users.noreply.github.com>
Date: Thu, 6 Aug 2026 18:31:03 +0800
Subject: [PATCH 1/2] Fixed Mastro SetUp
---
.github/frameworks.json | 16 +++++++++++++---
packages/app-mastro/handlers/detail.ts | 7 +++++++
packages/app-mastro/server.ts | 11 ++++++++---
packages/stats-generator/src/serve/mastro.ts | 17 +++++++++++++++++
.../src/serverSideRendered/index.ts | 6 ++++++
packages/stats-generator/src/ssrLoad/index.ts | 6 ++++++
.../src/ssrRequestThroughput/handlers/mastro.ts | 9 ++++++++-
.../src/ssrRequestThroughput/index.ts | 7 +++++++
8 files changed, 72 insertions(+), 7 deletions(-)
create mode 100644 packages/app-mastro/handlers/detail.ts
create mode 100644 packages/stats-generator/src/serve/mastro.ts
diff --git a/.github/frameworks.json b/.github/frameworks.json
index ca33af7f..e4af9a18 100644
--- a/.github/frameworks.json
+++ b/.github/frameworks.json
@@ -67,11 +67,11 @@
{
"name": "mastro",
"displayName": "Mastro",
- "frameworkPackage": "jsr:@mastrojs/mastro",
+ "frameworkPackage": "@mastrojs/mastro",
"focusedFramework": false,
"starter": {
"package": "starter-mastro",
- "buildScript": "generate",
+ "buildScript": "build",
"buildOutputDir": "generated",
"measurements": [
{
@@ -94,7 +94,17 @@
"package": "app-mastro",
"buildScript": "build",
"buildOutputDir": "generated",
- "measurements": []
+ "measurements": [
+ {
+ "type": "ssrRequestThroughput"
+ },
+ {
+ "type": "serverSideRendered"
+ },
+ {
+ "type": "ssrLoad"
+ }
+ ]
}
},
{
diff --git a/packages/app-mastro/handlers/detail.ts b/packages/app-mastro/handlers/detail.ts
new file mode 100644
index 00000000..3a8ee038
--- /dev/null
+++ b/packages/app-mastro/handlers/detail.ts
@@ -0,0 +1,7 @@
+import { getParams, html, htmlToResponse } from '@mastrojs/mastro'
+
+export const GET = (request: Request) => {
+ const { id } = getParams(request)
+
+ return htmlToResponse(html`
${id}
`)
+}
diff --git a/packages/app-mastro/server.ts b/packages/app-mastro/server.ts
index 42913ac7..5ebc9522 100644
--- a/packages/app-mastro/server.ts
+++ b/packages/app-mastro/server.ts
@@ -1,6 +1,7 @@
import * as http from 'node:http'
import { createRequestListener } from '@remix-run/node-fetch-server'
import { Mastro } from '@mastrojs/mastro/server-programmatic'
+import { GET as getDetail } from './handlers/detail.ts'
import { GET as getHome } from './handlers/home.ts'
// This is using Mastro's programmatic (Express-like) router
@@ -10,9 +11,13 @@ import { GET as getHome } from './handlers/home.ts'
export const handler = new Mastro()
.get('/', getHome)
+ .get('/ssr-throughput', getHome)
+ .get('/server-side-rendered', getHome)
+ .get('/server-side-rendered/:id', getDetail)
.createHandler()
-const port = 8000
+const host = process.env.HOST ?? '127.0.0.1'
+const port = Number.parseInt(process.env.PORT ?? '8000', 10)
if (import.meta.main) {
const server = http.createServer(createRequestListener(handler))
@@ -21,7 +26,7 @@ if (import.meta.main) {
console.error(e)
})
- server.listen(port, () => {
- console.log(`Server running at http://localhost:${port}`)
+ server.listen(port, host, () => {
+ console.log(`Server running at http://${host}:${port}`)
})
}
diff --git a/packages/stats-generator/src/serve/mastro.ts b/packages/stats-generator/src/serve/mastro.ts
new file mode 100644
index 00000000..0fe2fd88
--- /dev/null
+++ b/packages/stats-generator/src/serve/mastro.ts
@@ -0,0 +1,17 @@
+import { join } from 'node:path'
+import {
+ getHost,
+ getPort,
+ parseAppDir,
+ spawnProductionServer,
+} from './common.ts'
+
+const appDir = parseAppDir()
+const HOST = getHost()
+const PORT = getPort(8000)
+const entryPath = join(appDir, 'server.ts')
+
+spawnProductionServer([entryPath], appDir, {
+ HOST,
+ PORT: String(PORT),
+})
diff --git a/packages/stats-generator/src/serverSideRendered/index.ts b/packages/stats-generator/src/serverSideRendered/index.ts
index 21b436b7..e7f311d7 100644
--- a/packages/stats-generator/src/serverSideRendered/index.ts
+++ b/packages/stats-generator/src/serverSideRendered/index.ts
@@ -23,6 +23,12 @@ const SERVER_SIDE_RENDERED_FRAMEWORKS: ServerSideRenderedFrameworkConfig[] = [
package: 'app-astro',
serveScript: 'astro.ts',
},
+ {
+ name: 'mastro-server-side-rendered',
+ displayName: 'Mastro Server Side Rendered',
+ package: 'app-mastro',
+ serveScript: 'mastro.ts',
+ },
{
name: 'next-server-side-rendered',
displayName: 'Next.js Server Side Rendered',
diff --git a/packages/stats-generator/src/ssrLoad/index.ts b/packages/stats-generator/src/ssrLoad/index.ts
index e1ccd4fe..da83166f 100644
--- a/packages/stats-generator/src/ssrLoad/index.ts
+++ b/packages/stats-generator/src/ssrLoad/index.ts
@@ -30,6 +30,12 @@ const SSR_LOAD_FRAMEWORKS: SSRLoadFrameworkConfig[] = [
package: 'app-astro',
serveScript: 'astro.ts',
},
+ {
+ name: 'mastro-ssr-load',
+ displayName: 'Mastro SSR Load',
+ package: 'app-mastro',
+ serveScript: 'mastro.ts',
+ },
{
name: 'next-ssr-load',
displayName: 'Next.js SSR Load',
diff --git a/packages/stats-generator/src/ssrRequestThroughput/handlers/mastro.ts b/packages/stats-generator/src/ssrRequestThroughput/handlers/mastro.ts
index 7f7f7f7e..4dfd5cc9 100644
--- a/packages/stats-generator/src/ssrRequestThroughput/handlers/mastro.ts
+++ b/packages/stats-generator/src/ssrRequestThroughput/handlers/mastro.ts
@@ -7,5 +7,12 @@ export async function buildMastroHandler(): Promise {
const entryPath = join(packagesDir, 'app-mastro', 'server.ts')
const entryUrl = pathToFileURL(entryPath).href
const { handler } = await import(entryUrl)
- return { type: 'web', handler }
+ return {
+ type: 'web',
+ handler: (request) => {
+ const url = new URL(request.url)
+ url.hostname = '127.0.0.1'
+ return handler(new Request(url, request))
+ },
+ }
}
diff --git a/packages/stats-generator/src/ssrRequestThroughput/index.ts b/packages/stats-generator/src/ssrRequestThroughput/index.ts
index 237a36d4..ac071ed3 100644
--- a/packages/stats-generator/src/ssrRequestThroughput/index.ts
+++ b/packages/stats-generator/src/ssrRequestThroughput/index.ts
@@ -1,6 +1,7 @@
import { runBenchmark } from './run-benchmark.ts'
import { buildAstroHandler } from './handlers/astro.ts'
import { buildBaselineHtmlHandler } from './handlers/baseline-html.ts'
+import { buildMastroHandler } from './handlers/mastro.ts'
import { buildNuxtHandler } from './handlers/nuxt.ts'
import { buildSvelteKitHandler } from './handlers/sveltekit.ts'
import { buildNextJSHandler } from './handlers/nextjs.ts'
@@ -34,6 +35,12 @@ const SSR_REQUEST_THROUGHPUT_FRAMEWORKS: SSRRequestThroughputFrameworkConfig[] =
package: 'app-astro',
buildHandler: buildAstroHandler,
},
+ {
+ name: 'mastro-ssr-request-throughput',
+ displayName: 'Mastro SSR Request Handler Throughput',
+ package: 'app-mastro',
+ buildHandler: buildMastroHandler,
+ },
{
name: 'nuxt-ssr-request-throughput',
displayName: 'Nuxt SSR Request Handler Throughput',
From dc7a5835a1c1d25e4a4aa02d567f1e6dfbefe0aa Mon Sep 17 00:00:00 2001
From: Alexander Karan <47707063+AlexanderKaran@users.noreply.github.com>
Date: Fri, 7 Aug 2026 20:21:39 +0800
Subject: [PATCH 2/2] Revert to jsr
---
.github/frameworks.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/frameworks.json b/.github/frameworks.json
index e4af9a18..77291e23 100644
--- a/.github/frameworks.json
+++ b/.github/frameworks.json
@@ -67,7 +67,7 @@
{
"name": "mastro",
"displayName": "Mastro",
- "frameworkPackage": "@mastrojs/mastro",
+ "frameworkPackage": "jsr:@mastrojs/mastro",
"focusedFramework": false,
"starter": {
"package": "starter-mastro",