Add blog section and first blog entries#496
Conversation
Summary of ChangesHello @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
Changelog
Activity
Using Gemini Code AssistThe 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
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 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
|
There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughAdds 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
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Poem
🚥 Pre-merge checks | ✅ 1 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (1 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
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. Comment |
There was a problem hiding this comment.
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 theFromCustomexample.The bare
val.(string)on line 150 panics if the stored value is not astring. 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
⛔ Files ignored due to path filters (1)
blog/authors.ymlis excluded by!**/*.yml
📒 Files selected for processing (14)
blog/2026-02-10-welcome-to-fiber-blog.mdblog/2026-02-11-whats-new-in-fiber-v3.mdblog/2026-02-12-build-a-crud-app-with-fiber.mdblog/2026-02-13-static-server-with-fiber-v3.mdblog/2026-02-14-spa-delivery-with-fiber-v3.mdblog/2026-02-15-fiber-v3-client-deep-dive.mdblog/2026-02-16-fiber-v3-binding-in-practice.mdblog/2026-02-17-fiber-v3-custom-context.mdblog/2026-02-18-fiber-v3-rfc-conformance.mdblog/2026-02-19-fiber-v3-adapter-pattern.mdblog/2026-02-20-fiber-v3-hooks-guide.mdblog/2026-02-21-fiber-v3-extractors-guide.mddocusaurus.config.tssrc/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-teamis properly defined inblog/authors.ymlwith 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: TheParsemethod signature shown in the blog post matches the official Fiber v3CustomBinderinterface 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-embeddeddefault: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—thego runpath is correct.The path
./cmd/react-router/main.gomatches 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', andonUntruncatedBlogPosts: '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 patternc.(*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/Secureauto-enforcement, CHIPS support,fiber.Ctximplementingcontext.Context,SendEarlyHints,Drop, andEndare 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@latestand invoked withfiber 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 theFromCustomsource-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.
There was a problem hiding this comment.
🧹 Nitpick comments (1)
docusaurus.config.ts (1)
377-386: Verify new blog posts carry<!--truncate-->markers.
onUntruncatedBlogPostswas 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
📒 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.
There was a problem hiding this comment.
Actionable comments posted: 2
📜 Review details
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (5)
blog/2026-02-12-build-a-crud-app-with-fiber.mdblog/2026-02-13-static-server-with-fiber-v3.mdblog/2026-02-15-fiber-v3-client-deep-dive.mdblog/2026-02-19-fiber-v3-adapter-pattern.mdblog/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 isapp.go, so thego run app.gocommand 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.mdcontainsslug: fiber-v3-binding-in-practiceblog/2026-02-11-whats-new-in-fiber-v3.mdcontainsslug: whats-new-in-fiber-v3The 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.
Adaptoris 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/OnRoutesplit is now correct — past issue resolved.The previously flagged unreachable
r.Name == ""guard insideOnNamehas been removed.OnName(lines 122–129) is now used only for logging named routes, and the enforcement pattern (lines 133–139) correctly lives inOnRoute, 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 onclient.Request, and the hook now correctly acceptsreq *client.Requestas a separate parameter instead of calling the non-existentresp.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()
})).
There was a problem hiding this comment.
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
📒 Files selected for processing (2)
blog/2026-02-15-fiber-v3-client-deep-dive.mdblog/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) vsadapter(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 formfunc(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 withnext) 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.
There was a problem hiding this comment.
🧹 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: Adddefer resp.Close()to model proper response pool lifecycle.
Closereleases both the associatedRequestandResponseobjects back to their pools. The returned response may be returned to the pool withReleaseResponsewhen no longer needed, which allows reducing GC load.In this handler (called on every inbound request),
respis acquired from the pool in all non-error paths but never returned. Over time this causes measurable allocation pressure. The same omission applies toprofileRespin 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
📒 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: Thereq.SetHeadermethod exists on*client.Requestin 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.
Summary by CodeRabbit
New Features
Documentation