Skip to content

Add blog section and first blog entries#496

Merged
ReneWerner87 merged 8 commits into
masterfrom
blogs
Feb 21, 2026
Merged

Add blog section and first blog entries#496
ReneWerner87 merged 8 commits into
masterfrom
blogs

Conversation

@ReneWerner87
Copy link
Copy Markdown
Member

@ReneWerner87 ReneWerner87 commented Feb 18, 2026

Summary by CodeRabbit

  • New Features

    • Launched a blog with a new "📰 Blog" header link, enabled blog indexing for local search, and improved blog metadata and reading-time presentation.
    • Blog-specific styling updates for post headings and sidebar layout.
  • Documentation

    • Added 12 in-depth posts covering Fiber v3: migration guide, binding, custom context, client deep dive, RFC conformance, handler compatibility, lifecycle hooks, extractors, CRUD tutorial, static server, SPA delivery, and adapter patterns.

Copilot AI review requested due to automatic review settings February 18, 2026 19:05
@ReneWerner87 ReneWerner87 linked an issue Feb 18, 2026 that may be closed by this pull request
6 tasks
@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello @ReneWerner87, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the Fiber documentation by establishing a new blog section and populating it with a comprehensive suite of articles. These initial posts are primarily focused on educating users about the significant enhancements and changes introduced in Fiber v3, offering practical guides and strategic insights for migration and adoption. The goal is to provide clearer, more accessible information to facilitate a smoother transition and better utilization of the latest Fiber framework version.

Highlights

  • New Blog Section Added: A dedicated blog section has been introduced to the Fiber documentation site, providing a platform for news, guides, and updates.
  • Comprehensive Fiber v3 Feature Guides: A series of in-depth articles have been published, detailing key Fiber v3 features such as unified binding, lifecycle hooks, handler compatibility, and the new client package.
  • Practical Migration and Best Practices: New guides offer practical advice for migrating to Fiber v3, building CRUD APIs, serving static files, and effectively delivering Single Page Applications (SPAs).
  • Docusaurus Configuration Updates: The Docusaurus configuration was updated to enable blog functionality, integrate it into the main navigation, and apply custom styling for an improved reading experience.
Changelog
  • blog/2026-02-10-welcome-to-fiber-blog.md
    • Added a welcome post to inaugurate the new Fiber blog.
  • blog/2026-02-11-whats-new-in-fiber-v3.md
    • Documented the major new features and changes in Fiber v3.
  • blog/2026-02-12-build-a-crud-app-with-fiber.md
    • Provided a guide for building CRUD APIs using Fiber v3.
  • blog/2026-02-13-static-server-with-fiber-v3.md
    • Detailed how to serve static files effectively with Fiber v3.
  • blog/2026-02-14-spa-delivery-with-fiber-v3.md
    • Explained the process of delivering Single Page Applications using Fiber v3.
  • blog/2026-02-15-fiber-v3-client-deep-dive.md
    • Offered an in-depth look at the new client package in Fiber v3.
  • blog/2026-02-16-fiber-v3-binding-in-practice.md
    • Illustrated practical usage of Fiber v3's unified binding system.
  • blog/2026-02-17-fiber-v3-custom-context.md
    • Guided users on implementing custom contexts in Fiber v3.
  • blog/2026-02-18-fiber-v3-rfc-conformance.md
    • Highlighted RFC conformance improvements in Fiber v3.
  • blog/2026-02-19-fiber-v3-adapter-pattern.md
    • Explained handler compatibility and the adapter pattern in Fiber v3.
  • blog/2026-02-20-fiber-v3-hooks-guide.md
    • Described the new lifecycle hooks available in Fiber v3.
  • blog/2026-02-21-fiber-v3-extractors-guide.md
    • Introduced the extractors package for middleware in Fiber v3.
  • blog/authors.yml
    • Defined the Fiber team as an author for blog posts.
  • docusaurus.config.ts
    • Configured Docusaurus to enable and integrate the new blog section.
    • Added a 'Blog' link to the main navigation bar.
    • Enabled blog indexing for local search.
  • src/css/custom.css
    • Added specific CSS rules to style blog post headings and sidebar elements.
Activity
  • No human activity (comments, reviews, approvals) has been recorded on this pull request yet.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds a blog section to the Fiber documentation site, introducing 12 comprehensive blog posts that provide practical guides for Fiber v3 features. The posts focus on migration strategies, new APIs, and real-world implementation patterns for developers working with Fiber v3.

Changes:

  • Enabled blog functionality in Docusaurus with search indexing and navigation
  • Added 12 detailed blog posts covering key Fiber v3 features (binding, hooks, client, context, extractors, adapters, RFC conformance, CRUD, SPA delivery, static files)
  • Added custom CSS styling for blog post typography and sidebar elements
  • Created authors.yml with fiber-team author configuration

Reviewed changes

Copilot reviewed 15 out of 15 changed files in this pull request and generated no comments.

Show a summary per file
File Description
docusaurus.config.ts Enabled blog indexing in search, added blog navigation item, configured blog settings with reading time, sidebar, and validation warnings
src/css/custom.css Added responsive typography rules for blog post headings and sidebar elements using clamp() functions and media queries
blog/authors.yml Defined fiber-team author with GitHub profile link and avatar
blog/2026-02-21-fiber-v3-extractors-guide.md Comprehensive guide on using extractors for middleware token/value extraction with security considerations
blog/2026-02-20-fiber-v3-hooks-guide.md Guide on lifecycle hooks for startup, shutdown, and route registration with operational patterns
blog/2026-02-19-fiber-v3-adapter-pattern.md Explanation of handler compatibility layer supporting Fiber, net/http, fasthttp, and Express-style handlers
blog/2026-02-18-fiber-v3-rfc-conformance.md Guide on RFC compliance improvements including cookies, context, early hints, and connection management
blog/2026-02-17-fiber-v3-custom-context.md Tutorial on extending Fiber context with typed custom methods for multi-tenant systems
blog/2026-02-16-fiber-v3-binding-in-practice.md Practical guide on unified request binding with validation, defaults, and multi-source support
blog/2026-02-15-fiber-v3-client-deep-dive.md Deep dive on the new HTTP client with retry, hooks, proxy, and cookie jar support
blog/2026-02-14-spa-delivery-with-fiber-v3.md Guide on serving SPAs with correct fallback routing and cache strategies
blog/2026-02-13-static-server-with-fiber-v3.md Tutorial on static file serving with the new middleware approach
blog/2026-02-12-build-a-crud-app-with-fiber.md Walkthrough of building a CRUD API with Fiber v3 and GORM/PostgreSQL
blog/2026-02-11-whats-new-in-fiber-v3.md Comprehensive overview of Fiber v3 changes with migration-first approach
blog/2026-02-10-welcome-to-fiber-blog.md Welcome post announcing the blog section

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a comprehensive blog section to the Fiber documentation site, featuring several detailed entries that cover key aspects of Fiber v3. The content is well-structured and provides practical migration guides, deep dives into new features like the unified binding system and custom context, and tutorials for common use cases like CRUD APIs and SPA delivery. The configuration changes correctly enable the Docusaurus blog plugin and integrate it with the local search functionality. I have identified a few minor issues in the code snippets within the blog posts, specifically regarding idiomatic Go usage in GORM and invalid slice literal syntax, which should be addressed to ensure the examples are compilable and follow best practices.

Comment thread blog/2026-02-12-build-a-crud-app-with-fiber.md Outdated
Comment thread blog/2026-02-19-fiber-v3-adapter-pattern.md Outdated
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented Feb 18, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

Walkthrough

Adds a series of Fiber v3 blog posts and guides (migration, deep dives, tutorials, RFC conformance, adapters, extractors), enables and configures the blog in Docusaurus (including search indexing and a Blog nav link), and adds blog-specific CSS styling.

Changes

Cohort / File(s) Summary
Overview & Migration
blog/2026-02-10-welcome-to-fiber-blog.md, blog/2026-02-11-whats-new-in-fiber-v3.md
Adds a welcome post and a comprehensive "What's New" migration guide describing Fiber v3 changes, migration CLI, and structured upgrade guidance.
Tutorials & Recipes
blog/2026-02-12-build-a-crud-app-with-fiber.md, blog/2026-02-13-static-server-with-fiber-v3.md, blog/2026-02-14-spa-delivery-with-fiber-v3.md, blog/2026-02-15-fiber-v3-client-deep-dive.md
Adds practical guides: CRUD API recipe, static file serving, SPA delivery, and an outbound HTTP client deep-dive with examples, run instructions, and smoke tests.
Binding & Context
blog/2026-02-16-fiber-v3-binding-in-practice.md, blog/2026-02-17-fiber-v3-custom-context.md
Documents unified binding API (c.Bind with source spec and precedence) and Custom Context patterns (NewWithCustomCtx, AppCtx examples, migration notes).
RFC Conformance & Security
blog/2026-02-18-fiber-v3-rfc-conformance.md
Documents RFC-aligned behaviors (cookies/SameSite/CHIPS, Ctx → context.Context, Early Hints, c.Drop/c.End, filename encoding) and audit recommendations.
Adapter & Handler Compatibility
blog/2026-02-19-fiber-v3-adapter-pattern.md
Describes the handler compatibility layer supporting multiple handler families, RouteChain, HEAD auto-generation, and stricter middleware prefix matching.
Hooks & Lifecycle
blog/2026-02-20-fiber-v3-hooks-guide.md
Adds lifecycle hooks guide covering pre/post startup and shutdown, route/group registration hooks, and mount hooks with examples.
Extractors & Middleware
blog/2026-02-21-fiber-v3-extractors-guide.md
Introduces Extractors Guide for centralized middleware extraction APIs (FromAuthHeader, FromHeader, FromCookie, FromQuery, Chain) and policy/fallback patterns.
Docs Config & Styling
docusaurus.config.ts, src/css/custom.css
Enables/configures the blog preset in Docusaurus (titles, reading time, sidebar), sets indexBlog: true for local search, adds a Blog nav link, and adds responsive blog-specific CSS overrides.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

Poem

🐰 I nibbled lines and hopped through each file,

Wrote hooks and clients, made migration worthwile,
Bindings, extractors, RFCs in a row,
Blog posts blooming — watch Fiber grow,
🥕✨

🚥 Pre-merge checks | ✅ 1 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Description check ⚠️ Warning The pull request has no description provided by the author, and the repository template explicitly states that doc file changes should not be submitted to this repository. Provide a detailed description addressing why blog posts belong in the docs repo, or submit the PR to https://github.com/gofiber/fiber instead as instructed by the repository template.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (1 passed)
Check name Status Explanation
Title check ✅ Passed The title directly matches the main change: adding a blog section and multiple initial blog post entries across 11 new files.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch blogs

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 and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 8

🧹 Nitpick comments (1)
blog/2026-02-21-fiber-v3-extractors-guide.md (1)

147-155: Consider the comma-ok type assertion in the FromCustom example.

The bare val.(string) on line 150 panics if the stored value is not a string. Since this snippet is illustrative and readers may copy it, the safer two-value form is worth showing:

♻️ Safer type assertion
 extractor := extractors.FromCustom("computed-token", func(c fiber.Ctx) (string, error) {
-    if val := c.Locals("computed_token"); val != nil {
-        return val.(string), nil
-    }
-    return "", extractors.ErrNotFound
+    val, ok := c.Locals("computed_token").(string)
+    if !ok || val == "" {
+        return "", extractors.ErrNotFound
+    }
+    return val, nil
 })
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@blog/2026-02-21-fiber-v3-extractors-guide.md` around lines 147 - 155, The
example using extractors.FromCustom currently does a bare type assertion
val.(string) which can panic; update the lambda passed to extractors.FromCustom
(the anonymous function parameter c fiber.Ctx) to use the two-value form for the
c.Locals("computed_token") result (e.g., val, ok := val.(string)) and handle the
!ok case by returning "", extractors.ErrNotFound so non-string values don't
cause a panic; keep the existing flow of returning the string when ok is true.
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between b0d11b9 and 002ebc4.

⛔ Files ignored due to path filters (1)
  • blog/authors.yml is excluded by !**/*.yml
📒 Files selected for processing (14)
  • blog/2026-02-10-welcome-to-fiber-blog.md
  • blog/2026-02-11-whats-new-in-fiber-v3.md
  • blog/2026-02-12-build-a-crud-app-with-fiber.md
  • blog/2026-02-13-static-server-with-fiber-v3.md
  • blog/2026-02-14-spa-delivery-with-fiber-v3.md
  • blog/2026-02-15-fiber-v3-client-deep-dive.md
  • blog/2026-02-16-fiber-v3-binding-in-practice.md
  • blog/2026-02-17-fiber-v3-custom-context.md
  • blog/2026-02-18-fiber-v3-rfc-conformance.md
  • blog/2026-02-19-fiber-v3-adapter-pattern.md
  • blog/2026-02-20-fiber-v3-hooks-guide.md
  • blog/2026-02-21-fiber-v3-extractors-guide.md
  • docusaurus.config.ts
  • src/css/custom.css
🧰 Additional context used
🪛 LanguageTool
blog/2026-02-21-fiber-v3-extractors-guide.md

[style] ~19-~19: To elevate your writing, try using a synonym here.
Context: ...ver identical, and the differences were hard to spot in review. When a team wanted ...

(HARD_TO)

blog/2026-02-18-fiber-v3-rfc-conformance.md

[style] ~73-~73: To elevate your writing, try using an alternative expression here.
Context: ...QueryContext(c, "SELECT ...") ``` This matters for deadline propagation, cancellation,...

(MATTERS_RELEVANT)

blog/2026-02-12-build-a-crud-app-with-fiber.md

[style] ~29-~29: Consider an alternative for the overused word “exactly”.
Context: ...ng here is technically complex. That is exactly why it is a good example: if the simple...

(EXACTLY_PRECISELY)

blog/2026-02-15-fiber-v3-client-deep-dive.md

[style] ~98-~98: Consider using a synonym to be more concise.
Context: ... ## Cookie Jar for Session Continuity A lot of teams first see cookie jar support and ...

(A_LOT_OF)

blog/2026-02-14-spa-delivery-with-fiber-v3.md

[style] ~11-~11: Consider using a different adverb to strengthen your wording.
Context: ...uction and gets a server-side 404. It happens all the time because backend and frontend route owne...

(ALL_THE_TIME_CONSTANTLY)


[style] ~35-~35: Consider an alternative for the overused word “exactly”.
Context: ...ow missing files are handled — which is exactly what SPA fallback routing needs. ## Th...

(EXACTLY_PRECISELY)

blog/2026-02-17-fiber-v3-custom-context.md

[style] ~90-~90: To elevate your writing, try using an alternative expression here.
Context: ... enforced by the compiler. ## Why This Matters for Multi-Tenant Systems In a multi-te...

(MATTERS_RELEVANT)

blog/2026-02-20-fiber-v3-hooks-guide.md

[grammar] ~13-~13: Use a hyphen to join words.
Context: ...me script, you can register pre and post handlers for startup and shutdown and ma...

(QB_NEW_EN_HYPHEN)

blog/2026-02-19-fiber-v3-adapter-pattern.md

[uncategorized] ~182-~182: Do not mix variants of the same word (‘adaptor’ and ‘adapter’) within a single text.
Context: ... Methods](/api/app) - Middleware docs: Adaptor Middleware

(EN_WORD_COHERENCY)

blog/2026-02-11-whats-new-in-fiber-v3.md

[uncategorized] ~39-~39: If this is a compound adjective that modifies the following noun, use a hyphen.
Context: ...s a new example into another package. A third person keeps old parsing logic because "it sti...

(EN_COMPOUND_ADJECTIVE_INTERNAL)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: Agent
  • GitHub Check: deploy (docs, gofiber/docs, docs.gofiber.io)
🔇 Additional comments (11)
blog/2026-02-10-welcome-to-fiber-blog.md (1)

4-4: No action needed. fiber-team is properly defined in blog/authors.yml with all required fields (name, title, url, image_url). All 11 blog posts will resolve the author successfully.

blog/2026-02-16-fiber-v3-binding-in-practice.md (2)

176-187: The Parse method signature shown in the blog post matches the official Fiber v3 CustomBinder interface specification. The code will compile and execute correctly.


150-156: The struct tag syntax in the blog post is correct. Fiber v3's binder uses the comma-embedded default: format (e.g., query:"page,default:1") within the tag itself, not as a separate tag. This syntax is documented in Fiber v3's official API documentation and matches the blog post exactly.

blog/2026-02-14-spa-delivery-with-fiber-v3.md (1)

100-112: No action needed—the go run path is correct.

The path ./cmd/react-router/main.go matches the actual structure of the gofiber/recipes repository. Readers will encounter no errors with this command.

docusaurus.config.ts (2)

46-46: LGTM — blog search indexing enabled.


376-385: LGTM — blog preset configuration is complete and well-configured.

Using onInlineTags: 'warn', onInlineAuthors: 'warn', and onUntruncatedBlogPosts: 'warn' instead of 'throw' is a reasonable default for an initial blog launch.

blog/2026-02-17-fiber-v3-custom-context.md (1)

1-165: LGTM — technically accurate and well-structured.

NewWithCustomCtx, fiber.DefaultCtx, fiber.NewDefaultCtx, and the type assertion pattern c.(*AppCtx) all match the official Fiber v3 API documentation. The migration checklist and testing guidance are clear and actionable.

blog/2026-02-18-fiber-v3-rfc-conformance.md (1)

1-152: LGTM — RFC citations are accurate and the technical content is well-grounded.

The SameSite=None/Secure auto-enforcement, CHIPS support, fiber.Ctx implementing context.Context, SendEarlyHints, Drop, and End are all confirmed Fiber v3 features, and the operational guidance is practical.

blog/2026-02-11-whats-new-in-fiber-v3.md (2)

22-31: Go 1.25 requirement and CLI migration command are accurate.

Fiber v3 requires Go 1.25 or later. The CLI migration tool is installed with go install github.com/gofiber/cli/fiber@latest and invoked with fiber migrate --to v3.


49-282: LGTM — comprehensive and accurate migration guide.

The 11 migration areas (binding, hooks, listen, handler compatibility, context, generics, extractors, custom constraints, cookies/RFC, storage/client/middleware, prefix matching) are all consistent with official v3 docs and the accompanying blog series.

blog/2026-02-21-fiber-v3-extractors-guide.md (1)

1-184: LGTM — accurate, security-conscious, and well-organized.

The RFC 9110/7235 token68 validation claims for FromAuthHeader, source-ordered security guidance, CSRF chain example, and the FromCustom source-awareness caveat are all correct and practically useful.

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@blog/2026-02-12-build-a-crud-app-with-fiber.md`:
- Around line 65-71: The Create method call on database.DB.Db needs error
handling to check if the database operation fails. After calling
database.DB.Db.Create(&book), add a check for the returned error. If an error is
returned, respond with an appropriate error status code (such as
fiber.StatusInternalServerError) and return the error using a structured error
envelope (consistent with the error handling pattern demonstrated earlier in the
post). Only return the successfully created book with fiber.StatusOK if the
Create operation completes without error.

In `@blog/2026-02-13-static-server-with-fiber-v3.md`:
- Around line 77-83: The embedded FS was created with `//go:embed public/*` so
files live under the `public/` prefix and the `static` middleware is currently
looking at the FS root; update the middleware to serve the correct root by
either passing the subdirectory as root (use `static.New("public",
static.Config{ FS: embedFS })`) or create a sub FS with `fs.Sub(embedFS,
"public")` and pass that sub FS into `static.Config{ FS: subFS }`; adjust
references to `embedFS`, `static.New`, and `static.Config` accordingly so
requests map to the actual `public/*` files.

In `@blog/2026-02-15-fiber-v3-client-deep-dive.md`:
- Around line 133-139: Update the AddResponseHook callback to use the correct
Fiber v3 signature by accepting (c *client.Client, resp *client.Response, req
*client.Request) instead of a single *client.Response, and replace any calls to
resp.Request() with the provided req (use req.URL() for the upstream URL);
modify the hook passed to cli.AddResponseHook accordingly (keep using
resp.StatusCode() for status).

In `@blog/2026-02-19-fiber-v3-adapter-pattern.md`:
- Around line 136-139: The code sample uses JavaScript array syntax in the Fiber
v3 example (app.Use(["/v1", "/v2"], func(...))) which won't compile in Go;
update the call to use a Go string slice for the routes (app.Use with
[]string{...}) and keep the handler signature (func(c fiber.Ctx) error { return
c.Next() }) unchanged so the example compiles and matches Fiber v3 usage.

In `@blog/2026-02-20-fiber-v3-hooks-guide.md`:
- Around line 122-130: The OnName hook currently checks r.Name=="" which is
unreachable because OnName only runs for named routes; either move the
empty-name enforcement into app.Hooks().OnRoute (which runs for every
registration) and perform the check there (return fmt.Errorf("route %s %s must
have a name", r.Method, r.Path) when r.Name==""), or if you intend to only
inspect named routes keep app.Hooks().OnName but remove the unreachable
r.Name=="" guard and only perform logging/inspection; reference OnName, OnRoute,
r.Name, app.Get(...).Name(...) when making the change.

In `@docusaurus.config.ts`:
- Around line 202-206: The nav entry with to: '/blog' (label '📰 Blog') creates
a 404 on the home build because preset() sets blog: false and the isHome filter
currently keeps items with undefined type; update the code so the home build
does not include this relative blog route: either (A) filter out the Blog item
inside the isHome branch (after the existing naviItems.filter call) by excluding
items where to === '/blog' or label === '📰 Blog', or (B) convert the Blog nav
item to an absolute URL (e.g., 'https://gofiber.io/blog') in the place where nav
items are transformed (the switchToLink-style logic) so it points to the real
site even when preset() has blog: false.

In `@src/css/custom.css`:
- Around line 120-128: The CSS selectors "#__blog-post-container h1" and
"#__blog-post-container h2" target a non‑existent ID so those rules never apply;
either change those selectors to match the actual Docusaurus blog post container
found in the rendered DOM (inspect the blog page and replace
"#__blog-post-container" with the real container class/ID such as the blog post
wrapper or the markdown content container) or create a swizzled/custom blog post
wrapper component that emits the ID "__blog-post-container" so the current rules
apply to elements inside it; update the selectors/renders accordingly and keep
the font-size/line-height rules intact for the matched container.
- Around line 137-145: The selectors starting with "html.blog-wrapper" never
match because the html element never has class blog-wrapper, so update the
selectors in src/css/custom.css by removing the "html.blog-wrapper" prefix and
using the actual blog sidebar structure (e.g., change "html.blog-wrapper
aside.col.col--3 nav [class*='sidebarItemTitle']" and "html.blog-wrapper
aside.col.col--3 nav [class*='yearGroupHeading']" to selectors that match the
real DOM such as "aside.col.col--3 nav [class*='sidebarItemTitle']" or the exact
wrapper found via the inspector), or replace with the specific theme/sidebar
wrapper you observe on /blog; verify in browser devtools and adjust the
selectors accordingly so the font-size rules apply.

---

Nitpick comments:
In `@blog/2026-02-21-fiber-v3-extractors-guide.md`:
- Around line 147-155: The example using extractors.FromCustom currently does a
bare type assertion val.(string) which can panic; update the lambda passed to
extractors.FromCustom (the anonymous function parameter c fiber.Ctx) to use the
two-value form for the c.Locals("computed_token") result (e.g., val, ok :=
val.(string)) and handle the !ok case by returning "", extractors.ErrNotFound so
non-string values don't cause a panic; keep the existing flow of returning the
string when ok is true.

Comment thread blog/2026-02-12-build-a-crud-app-with-fiber.md
Comment thread blog/2026-02-13-static-server-with-fiber-v3.md
Comment thread blog/2026-02-15-fiber-v3-client-deep-dive.md Outdated
Comment thread blog/2026-02-19-fiber-v3-adapter-pattern.md Outdated
Comment thread blog/2026-02-20-fiber-v3-hooks-guide.md Outdated
Comment thread docusaurus.config.ts
Comment thread src/css/custom.css
Comment thread src/css/custom.css
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
docusaurus.config.ts (1)

377-386: Verify new blog posts carry <!--truncate--> markers.

onUntruncatedBlogPosts was added in Docusaurus 3.5, so it's valid here. The intent is to remind authors to add truncation markers, since without them the full post is rendered on paginated list pages.

With 'warn' the build won't fail, but it will emit noisy console warnings if any of the twelve new posts lack the marker. Confirm each new blog post file includes <!--truncate--> (or {/* truncate */}) to keep the build output clean.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@docusaurus.config.ts` around lines 377 - 386, The blog config added
onUntruncatedBlogPosts: 'warn' will emit warnings if posts lack a truncate
marker—open each of the twelve new blog post files referenced by the blog
collection and ensure they include a truncation marker (either <!--truncate-->
for Markdown or {/* truncate */} for MDX) placed where the list preview should
end; if any are missing, add the appropriate marker to the post file so the
Docusaurus build no longer logs warnings from the blog.onUntruncatedBlogPosts
setting.
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 002ebc4 and f93b82f.

📒 Files selected for processing (1)
  • docusaurus.config.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: deploy (docs, gofiber/docs, docs.gofiber.io)
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@docusaurus.config.ts`:
- Around line 203-207: The blog nav link logic using the to property with
(isHome ? docsUrl : '') + '/blog' is correct and should be kept as-is: it
prefixes docsUrl when isHome is true to produce the docs site's absolute blog
path and uses the relative '/blog' for other builds; update nothing else or
optionally add an inline comment near the to expression referencing isHome and
docsUrl to document this behavior for future reviewers.

---

Nitpick comments:
In `@docusaurus.config.ts`:
- Around line 377-386: The blog config added onUntruncatedBlogPosts: 'warn' will
emit warnings if posts lack a truncate marker—open each of the twelve new blog
post files referenced by the blog collection and ensure they include a
truncation marker (either <!--truncate--> for Markdown or {/* truncate */} for
MDX) placed where the list preview should end; if any are missing, add the
appropriate marker to the post file so the Docusaurus build no longer logs
warnings from the blog.onUntruncatedBlogPosts setting.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between f93b82f and 9b23000.

📒 Files selected for processing (5)
  • blog/2026-02-12-build-a-crud-app-with-fiber.md
  • blog/2026-02-13-static-server-with-fiber-v3.md
  • blog/2026-02-15-fiber-v3-client-deep-dive.md
  • blog/2026-02-19-fiber-v3-adapter-pattern.md
  • blog/2026-02-20-fiber-v3-hooks-guide.md
🚧 Files skipped from review as they are similar to previous changes (1)
  • blog/2026-02-13-static-server-with-fiber-v3.md
🧰 Additional context used
🪛 LanguageTool
blog/2026-02-12-build-a-crud-app-with-fiber.md

[style] ~29-~29: Consider an alternative for the overused word “exactly”.
Context: ...ng here is technically complex. That is exactly why it is a good example: if the simple...

(EXACTLY_PRECISELY)

blog/2026-02-19-fiber-v3-adapter-pattern.md

[uncategorized] ~182-~182: Do not mix variants of the same word (‘adaptor’ and ‘adapter’) within a single text.
Context: ... Methods](/api/app) - Middleware docs: Adaptor Middleware

(EN_WORD_COHERENCY)

blog/2026-02-15-fiber-v3-client-deep-dive.md

[style] ~98-~98: Consider using a synonym to be more concise.
Context: ... ## Cookie Jar for Session Continuity A lot of teams first see cookie jar support and ...

(A_LOT_OF)

blog/2026-02-20-fiber-v3-hooks-guide.md

[grammar] ~13-~13: Use a hyphen to join words.
Context: ...me script, you can register pre and post handlers for startup and shutdown and ma...

(QB_NEW_EN_HYPHEN)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: deploy (docs, gofiber/docs, docs.gofiber.io)
🔇 Additional comments (5)
blog/2026-02-12-build-a-crud-app-with-fiber.md (2)

109-113: No action needed — the blog post is correct. The actual entry-point file in the gofiber/recipes gorm-postgres directory is app.go, so the go run app.go command is accurate.

Likely an incorrect or invalid review comment.


90-90: No action required. The referenced blog slugs exist in the repository with correct slug definitions:

  • blog/2026-02-16-fiber-v3-binding-in-practice.md contains slug: fiber-v3-binding-in-practice
  • blog/2026-02-11-whats-new-in-fiber-v3.md contains slug: whats-new-in-fiber-v3

The cross-link paths at lines 90, 148, and 166 are correct and will not produce broken links.

Likely an incorrect or invalid review comment.

blog/2026-02-19-fiber-v3-adapter-pattern.md (1)

180-182: "Adaptor Middleware" link text is intentional — not a coherency error.

The LanguageTool flag for mixing "adapter" and "adaptor" is a false positive here. Adaptor is the actual name of the Fiber middleware package (/middleware/adaptor), so the link text must match.

blog/2026-02-20-fiber-v3-hooks-guide.md (1)

122-139: OnName / OnRoute split is now correct — past issue resolved.

The previously flagged unreachable r.Name == "" guard inside OnName has been removed. OnName (lines 122–129) is now used only for logging named routes, and the enforcement pattern (lines 133–139) correctly lives in OnRoute, which fires for every route registration regardless of whether .Name() was called.

blog/2026-02-15-fiber-v3-client-deep-dive.md (1)

132-138: Response hook signature is now correct — past issue resolved.

The URL() method is documented on client.Request, and the hook now correctly accepts req *client.Request as a separate parameter instead of calling the non-existent resp.Request(). The three-argument form (c *client.Client, resp *client.Response, req *client.Request) matches the documented hook type.

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@blog/2026-02-15-fiber-v3-client-deep-dive.md`:
- Around line 78-82: The code uses a non-existent Delay field on
client.RetryConfig in the SetRetryConfig call; update the struct literal passed
to SetRetryConfig(&client.RetryConfig{...}) to replace Delay with
InitialInterval (keeping the same duration value) so it matches the retry.Config
alias fields (InitialInterval, MaxBackoffTime, Multiplier, MaxRetryCount).

In `@blog/2026-02-19-fiber-v3-adapter-pattern.md`:
- Around line 64-67: The middleware is attempting to call req.Headers().Set
which is invalid on fiber.Req; update the middleware registered with app.Use
(the anonymous func handling req fiber.Req, res fiber.Res, next func() error) to
set the header on the response instead using the fiber.Res.Set(key, val string)
method (replace req.Headers().Set("X-Trace-Source", "compat-layer") with a call
to res.Set("X-Trace-Source", "compat-layer") inside the same middleware).

---

Duplicate comments:
In `@blog/2026-02-12-build-a-crud-app-with-fiber.md`:
- Around line 62-76: The AddBook handler is fine as-is: function AddBook
correctly binds into a *models.Book, checks database.DB.Db.Create(book) for
result.Error and returns stable envelopes with fiber.StatusInternalServerError
on failure and fiber.StatusCreated on success, so no code changes are required
for this review.

In `@blog/2026-02-19-fiber-v3-adapter-pattern.md`:
- Around line 136-139: The multi-prefix middleware example using a Go slice
literal is correct; keep the app.Use usage with the slice []string{"/v1", "/v2"}
and the handler func(c fiber.Ctx) error { return c.Next() } as shown (ensure the
example in the article matches the official docs' pattern like
app.Use([]string{"/api", "/home"}, func(c fiber.Ctx) error { return c.Next()
})).

Comment thread blog/2026-02-15-fiber-v3-client-deep-dive.md
Comment thread blog/2026-02-19-fiber-v3-adapter-pattern.md
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
blog/2026-02-15-fiber-v3-client-deep-dive.md (1)

98-98: Minor prose nit: "A lot of" → "Many".

The static analysis tool flags "A lot of" as wordy. "Many teams" is more concise.

📝 Proposed fix
-A lot of teams first see cookie jar support and think it is only for browsers.
+Many teams first see cookie jar support and think it is only for browsers.
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@blog/2026-02-15-fiber-v3-client-deep-dive.md` at line 98, Replace the wordy
phrase "A lot of" with the more concise "Many" in the blog post text (the
sentence that currently contains "A lot of"); locate the occurrence in the
markdown content of blog/2026-02-15-fiber-v3-client-deep-dive.md (the sentence
around line with "A lot of") and change it to "Many" to improve conciseness
while preserving the rest of the sentence and punctuation.
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9b23000 and 323763b.

📒 Files selected for processing (2)
  • blog/2026-02-15-fiber-v3-client-deep-dive.md
  • blog/2026-02-19-fiber-v3-adapter-pattern.md
🧰 Additional context used
🪛 LanguageTool
blog/2026-02-15-fiber-v3-client-deep-dive.md

[style] ~98-~98: Consider using a synonym to be more concise.
Context: ... ## Cookie Jar for Session Continuity A lot of teams first see cookie jar support and ...

(A_LOT_OF)

blog/2026-02-19-fiber-v3-adapter-pattern.md

[uncategorized] ~182-~182: Do not mix variants of the same word (‘adaptor’ and ‘adapter’) within a single text.
Context: ... Methods](/api/app) - Middleware docs: Adaptor Middleware

(EN_WORD_COHERENCY)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: deploy (docs, gofiber/docs, docs.gofiber.io)
🔇 Additional comments (2)
blog/2026-02-19-fiber-v3-adapter-pattern.md (2)

182-182: Static analysis word-coherency flag is a false positive here.

The static analysis tool flags adaptor (line 182) vs adapter (used throughout the article). However, "Adaptor Middleware" is the official name of the Fiber middleware package (/middleware/adaptor), so the capitalised/linked usage at line 182 is intentional and correct.


69-72: No action needed. The 2-argument void form func(req fiber.Req, res fiber.Res) is explicitly supported by Fiber v3. Line 74 of the blog post clearly states: "The Express-style callbacks support both two-argument (handler) and three-argument (middleware with next) forms, with or without error returns." The code example at lines 69-72 is correct and aligns with the documented behavior.

Likely an incorrect or invalid review comment.

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In `@blog/2026-02-15-fiber-v3-client-deep-dive.md`:
- Around line 109-118: The example is silently discarding errors for
cli.Post("/login", client.Config{...}) and cli.Get("/me"); update the snippet to
check and handle returned errors and non-success responses instead of using "_,
_ =" or "profileResp, _ :="; specifically, capture (resp, err) from cli.Post in
the login flow, return/log/fail the test on err or on non-2xx resp (so the
cookie jar is only relied on after a successful login), and likewise check the
error and response from cli.Get("/me") before using profileResp—use the existing
cli.Post, cli.Get and client.Config identifiers to locate where to add explicit
error checks and proper handling.

---

Duplicate comments:
In `@blog/2026-02-15-fiber-v3-client-deep-dive.md`:
- Around line 78-82: The previous concern about using a non-existent Delay field
is already resolved: ensure SetRetryConfig(&client.RetryConfig{...}) uses
InitialInterval (not Delay) along with MaxRetryCount (and optional
MaxBackoffTime/Multiplier) as shown — verify the call to SetRetryConfig, the
client.RetryConfig struct and its InitialInterval field are used (and remove any
leftover references to Delay) so the configuration matches the pkg.go.dev
documented fields.
- Around line 132-139: The response hook now correctly matches the expected
signature func(c *client.Client, resp *client.Response, req *client.Request)
error and correctly uses req.URL() instead of the non-existent resp.Request();
leave the AddResponseHook implementation (and the use of req.URL()) as-is and no
code changes are necessary.

In `@blog/2026-02-19-fiber-v3-adapter-pattern.md`:
- Around line 136-139: The Go slice literal used in the Fiber middleware call is
correct—replace the previously invalid JavaScript-style array with a Go slice
literal and no further change is needed; ensure the call to app.Use with the
slice literal []string{"/v1", "/v2"} and the handler signature func(c fiber.Ctx)
error remain as shown (app.Use and fiber.Ctx) and approve the change.
- Around line 64-67: The previous bug used req.Headers().Set() which is invalid
for setting response headers; update the middleware signature to accept
fiber.Res and call res.Set("X-Trace-Source", "compat-layer") (as done in app.Use
with func(req fiber.Req, res fiber.Res, next func() error) error) and return
next() — no further change required beyond ensuring the middleware uses
fiber.Res and res.Set.

---

Nitpick comments:
In `@blog/2026-02-15-fiber-v3-client-deep-dive.md`:
- Line 98: Replace the wordy phrase "A lot of" with the more concise "Many" in
the blog post text (the sentence that currently contains "A lot of"); locate the
occurrence in the markdown content of
blog/2026-02-15-fiber-v3-client-deep-dive.md (the sentence around line with "A
lot of") and change it to "Many" to improve conciseness while preserving the
rest of the sentence and punctuation.

Comment thread blog/2026-02-15-fiber-v3-client-deep-dive.md Outdated
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (2)
blog/2026-02-15-fiber-v3-client-deep-dive.md (2)

98-98: Optional: tighten prose ("A lot of" → "Many").

"A lot of teams" can be replaced with "Many teams" for more concise technical writing.

🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@blog/2026-02-15-fiber-v3-client-deep-dive.md` at line 98, Replace the phrase
"A lot of teams" with the tighter wording "Many teams" in the sentence that
currently reads "A lot of teams" (search for that exact phrase in the blog post
content, e.g., the paragraph around the client deep-dive discussion) so the
prose is more concise.

162-188: Add defer resp.Close() to model proper response pool lifecycle.

Close releases both the associated Request and Response objects back to their pools. The returned response may be returned to the pool with ReleaseResponse when no longer needed, which allows reducing GC load.

In this handler (called on every inbound request), resp is acquired from the pool in all non-error paths but never returned. Over time this causes measurable allocation pressure. The same omission applies to profileResp in the cookie-jar example at lines 119–124.

♻️ Proposed fix – handler example
 resp, err := billingClient.Get("/invoices/:id", client.Config{
     PathParam: map[string]string{"id": c.Params("id")},
     Header: map[string]string{
         "X-Request-ID": c.Get("X-Request-ID"),
     },
 })
 if err != nil {
     return c.Status(fiber.StatusBadGateway).JSON(fiber.Map{
         "error": "upstream unavailable",
     })
 }
+defer resp.Close()

 if resp.StatusCode() >= 500 {
♻️ Proposed fix – cookie-jar example (lines 119–124)
 profileResp, err := cli.Get("/me")
 if err != nil {
     return err
 }
+defer profileResp.Close()
 fmt.Println(string(profileResp.Body()))
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@blog/2026-02-15-fiber-v3-client-deep-dive.md` around lines 162 - 188, The
handler example acquires resp from the client pool but never returns it; add a
defer resp.Close() immediately after the successful billingClient.Get call in
the app.Get("/billing/:id", func(c fiber.Ctx) error { ... }) handler so the
Response (and its Request) are released; likewise, in the cookie-jar example
where profileResp is acquired (the example around the profileResp variable), add
defer profileResp.Close() right after the successful client call to ensure both
responses are properly returned to their pools.
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 323763b and 394e5dc.

📒 Files selected for processing (1)
  • blog/2026-02-15-fiber-v3-client-deep-dive.md
🧰 Additional context used
🪛 LanguageTool
blog/2026-02-15-fiber-v3-client-deep-dive.md

[style] ~98-~98: Consider using a synonym to be more concise.
Context: ... ## Cookie Jar for Session Continuity A lot of teams first see cookie jar support and ...

(A_LOT_OF)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (1)
  • GitHub Check: deploy (docs, gofiber/docs, docs.gofiber.io)
🔇 Additional comments (1)
blog/2026-02-15-fiber-v3-client-deep-dive.md (1)

133-137: The req.SetHeader method exists on *client.Request in Fiber v3 and is the correct method for setting a single header value. The code at lines 133–137 is correct and requires no changes.

🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Duplicate comments:
In `@blog/2026-02-15-fiber-v3-client-deep-dive.md`:
- Around line 75-82: The RetryConfig now correctly uses InitialInterval instead
of the old Delay field; update or accept the usage in
client.New().SetRetryConfig(&client.RetryConfig{ InitialInterval: 100 *
time.Millisecond, MaxRetryCount: 3 }) and remove any stale/duplicate review
notes referencing Delay so the code (client.New, SetRetryConfig,
client.RetryConfig, InitialInterval) remains as shown.

---

Nitpick comments:
In `@blog/2026-02-15-fiber-v3-client-deep-dive.md`:
- Line 98: Replace the phrase "A lot of teams" with the tighter wording "Many
teams" in the sentence that currently reads "A lot of teams" (search for that
exact phrase in the blog post content, e.g., the paragraph around the client
deep-dive discussion) so the prose is more concise.
- Around line 162-188: The handler example acquires resp from the client pool
but never returns it; add a defer resp.Close() immediately after the successful
billingClient.Get call in the app.Get("/billing/:id", func(c fiber.Ctx) error {
... }) handler so the Response (and its Request) are released; likewise, in the
cookie-jar example where profileResp is acquired (the example around the
profileResp variable), add defer profileResp.Close() right after the successful
client call to ensure both responses are properly returned to their pools.

@ReneWerner87 ReneWerner87 merged commit ba45c36 into master Feb 21, 2026
5 checks passed
@ReneWerner87 ReneWerner87 deleted the blogs branch February 21, 2026 10:11
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.

Tutorial(s) or Blog(s)

2 participants