Skip to content

feat: the 1.3 announcement, fresh benchmark numbers, and mobile fixes - #23

Draft
devol-bot wants to merge 4 commits into
mainfrom
feat/1.3-blog-and-mobile-fixes
Draft

feat: the 1.3 announcement, fresh benchmark numbers, and mobile fixes#23
devol-bot wants to merge 4 commits into
mainfrom
feat/1.3-blog-and-mobile-fixes

Conversation

@devol-bot

Copy link
Copy Markdown
Member

Everything the 1.3 release needs on the site, plus three mobile faults found
while reading the post on a phone.

Do not merge until 1.3.0 is on npm. The post says the release is out and the
benchmark numbers come from code that is on main in the framework repo but not
yet published.

The announcement post

content/blog/3.announcing-1.3.md. Sections run in the order the release
matters: the cheaper request path, the queue module, devtools rebuilt as a
telemetry consumer, then the telemetry all three sit on. Introspection and the
logger hooks come after it, because both open by referring to telemetry and read
as footnotes to it.

The performance section reports 1.2.1 against 1.3 from a dedicated run,
alternating the two versions on one machine, four rounds per route:

route 1.2.1 1.3
GET / 101,729 102,004 unchanged
GET /id/:id?name= 96,949 100,095 +3.1%
POST /json 89,598 91,817 +2.5%

The plain route not moving is the honest tell rather than a weak spot: it takes
no arguments and its path is static, so neither of the changes behind those
numbers can reach it. The section also carries both costs, the bundle growing
from 267.6 KB to 294.5 KB and the route matcher compiling on first use.

Blocked on a video. public/video/devtools/Queues.mp4 does not exist yet
and the Queues paragraph links it. There is a TODO comment directly above the
tag. The video element will render empty until that file lands.

The benchmark section

Fresh numbers from results/results.md in vercube/benchmarks, a full run of the
suite on one machine. Vercube leads five of the six cells: all three workloads
against the JS routers, and plain text and JSON body against the frameworks that
also ship a container.

Two changes to the shape. Rows are split into the two questions a reader
actually has - how it compares to a bare router, and how it compares to what
they would otherwise pick - because one list mixing both answered neither. And
the "Fastest" badge is computed per group rather than pinned to Vercube, which
now matters: Rikta leads the container group on the query route.

Still open, and worth a decision before this ships. Three node targets are
faster than Vercube and are not on the chart: uws (169,005 on plain text),
hyper-express (124,616) and ultimate-express (163,799). All three are
uWebSockets, so a native binding rather than a JS framework, which is a
principled reason to keep them apart - but the page does not say so, it simply
omits them, while linking the results file where anyone can find them in a
minute. Either the caption should name the exclusion or the chart should include
them in a group of their own.

Mobile fixes

Three separate faults, all below the md breakpoint.

  • No gutter on the article body. max-w-3xl mx-auto is wider than a phone,
    so mx-auto had nothing to centre and the text ran edge to edge. px-4 now
    matches the !p-4 of the title block, so the two left edges line up.
  • The header collided with the logo. The nav is absolutely positioned with
    its lower edge around 62px and the post container started at mt-8, so the
    date line rendered under the logo mark. Real top padding at every breakpoint
    now, not only at xl.
  • Body text sat on the bright halftone. The backdrop fades to transparent on
    the right, which is fine while the text column is on the left, but on a phone
    the column spans the full width. A scrim below md backs it.

Plus one that was not mobile-specific: inline code could not wrap. Nuxt UI
gives it inline-block, which makes a chip unbreakable, so @vercube/telemetry
pushed itself onto a line of its own. Inline with overflow-wrap now. This one
applies to the docs as well, which had the same problem, so that is worth a look
on a dense page.

The hero

Vertical rhythm only. With min-h-[78vh] plus padding the code window started
about a hundred pixels below the fold, so the first screen was a title card and
then nothing. At 60vh its top edge lands inside the first screen and the fold
crops it. Also a denser scrim under the headline, because the display face is
built from dots and so is the field behind it; five staggered entrances
collapsed into two beats; and a focus ring on the install command, which had
none.

Layout, type scale and copy are untouched. An earlier pass moved the code beside
the headline and rewrote the slogan; both were reverted.

Checks

pnpm test:lint clean. pnpm test:tscheck reports the same two pre-existing
OgImageComponents errors as main does, in app/pages/blog/[...slug].vue and
app/pages/blog/index.vue, neither touched by these commits. Verified against a
dev server: all three posts, the blog index, the home page and a docs page
return 200. Not verified visually at phone width - I have no browser here, so
the mobile fixes were made by reading the layout.

Sections in the order the release actually matters: the cheaper request path,
the queue module, devtools rebuilt as a telemetry consumer, then the telemetry
that all three sit on, with introspection and the logger hooks after it because
both read as footnotes to telemetry.

The performance section reports 1.2.1 against 1.3 from a run of its own,
alternating the two versions on one machine: +3.1% on a route with parameters,
+2.5% on a JSON body, and the plain route unchanged, which is the honest tell
since neither change can reach a static route that takes no arguments. It also
carries the two costs: the bundle grew 267.6 KB to 294.5 KB, and the route
matcher compiles on first use through `new Function`.

Still needs a video: `public/video/devtools/Queues.mp4` does not exist yet, and
the section links it. There is a TODO comment above the tag.
Numbers come from results/results.md in vercube/benchmarks, a full run of the
suite on one machine. Vercube now leads five of the six cells: first on all
three workloads against the JS routers, and first on plain text and on a JSON
body against the frameworks that also ship a container.

Two changes to the shape as well. The rows are split into the two questions a
reader actually has, "how does it compare to a bare router" and "how does it
compare to what I would otherwise pick", because one list mixing both answered
neither. And the "Fastest" badge is computed per group instead of being pinned
to Vercube, which now matters: Rikta leads the container group on the query
route.

Both groups share one scale per metric, so the row Vercube appears in twice is
the same width twice and the two groups can be read against each other.
The first screen ended in dead space: with min-h-[78vh] plus padding the code
window started about a hundred pixels below the fold, so the page opened on a
title card and nothing else. At 60vh its top edge lands inside the first screen
and the fold crops it, which is what invites the scroll.

Also: a denser scrim under the headline, because the display face is built from
dots and so is the particle field behind it, so the two were competing; five
staggered entrances collapsed into two beats, the title card then the file; and
a focus-visible ring on the install command, which had none.

Layout, type scale and copy are untouched.
Three separate faults, all only visible below the md breakpoint.

The article body had no gutter. `max-w-3xl mx-auto` is wider than a phone, so
`mx-auto` had nothing to centre and the text ran edge to edge. It now carries
px-4, which matches the !p-4 of the title block above it, so both left edges
line up.

The header collided with the logo. The nav is positioned absolutely, its lower
edge sitting around 62px, and the post container started at mt-8. The date line
was rendering underneath the logo mark. The container now has real top padding
at every breakpoint rather than only at xl.

Body text sat on the bright halftone. The backdrop fades to transparent on the
right, which works while the text column is on the left, but on a phone the
column spans the full width and the fading end left half of every line without
a backing. A scrim below md fixes it.

And inline code could not wrap: Nuxt UI gives it `inline-block`, which makes a
chip unbreakable, so a token like `@vercube/telemetry` pushed itself onto a line
of its own. Now inline, with overflow-wrap. This one applies to the docs too,
which had the same problem.
@coderabbitai

coderabbitai Bot commented Sep 7, 2026

Copy link
Copy Markdown

Important

Draft PR not reviewed

Draft PRs are not automatically reviewed by default.

  • Trigger a manual review

To automatically review draft PRs, update your CodeRabbit configuration:

reviews:
  auto_review:
    drafts: true

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant