[v3] update docs to reflect changes from Manager API Refactoring#4476
Conversation
WalkthroughThis update refactors documentation examples to reflect a new API structure in the application framework. It replaces direct method calls on the Changes
Sequence Diagram(s)sequenceDiagram
participant Developer
participant App
participant WindowManager
participant EventManager
participant MenuManager
Developer->>App: app.Window.New(options)
App->>WindowManager: New(options)
WindowManager-->>Developer: Window instance
Developer->>App: app.Event.On(event, handler)
App->>EventManager: On(event, handler)
EventManager-->>Developer: Subscription
Developer->>App: app.Menu.New()
App->>MenuManager: New()
MenuManager-->>Developer: Menu instance
Estimated code review effort🎯 2 (Simple) | ⏱️ ~8 minutes Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Note ⚡️ Unit Test Generation is now available in beta!Learn more here, or try it out under "Finishing Touches" below. 📜 Recent review detailsConfiguration used: .coderabbit.yaml 📒 Files selected for processing (4)
✅ Files skipped from review due to trivial changes (1)
🚧 Files skipped from review as they are similar to previous changes (3)
⏰ 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). (4)
✨ Finishing Touches🧪 Generate unit tests
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Actionable comments posted: 3
🔭 Outside diff range comments (6)
docs/src/content/docs/contributing/runtime-internals.mdx (1)
42-45: Out-of-date API reference –NewWebviewWindowshould beapp.Window.New()
The explanatory text still refers to the oldNewWebviewWindowconstructor even though the surrounding example was migrated toapp.Window.New(). This inconsistency will confuse readers who try to search for a non-existent symbol.-`NewWebviewWindow` delegates to `internal/runtime/webview_window_*.go` where +# `app.Window.New()` delegates to `internal/runtime/webview_window_*.go` wherePlease update the method name (and any additional wording) to match the refactored Manager API.
docs/src/content/docs/guides/gin-routing.mdx (1)
275-288: Mismatch between frontend → backend event route pathsThe backend registers the endpoint at
"/events/emit"(Line 275) yet the JavaScript poly-fill forwards requests to"/api/events/emit"while intercepting"/wails/events/emit".
Unless additional reverse-proxying exists, one of these paths is wrong and events will 404.- await fetch('/api/events/emit', { + await fetch('/events/emit', {docs/src/content/docs/learn/systray.mdx (1)
115-121: Callback signature incorrect – will not compile
MenuItem.OnClickexpectsfunc(ctx *application.Context), but the example supplies a zero-arg lambda:-menu.Add("Open").OnClick(func() { - window.Show() -}) +menu.Add("Open").OnClick(func(ctx *application.Context) { + window.Show() +})The same applies to the “Quit” item.
docs/src/content/docs/guides/menus.mdx (1)
35-40:_ "embed"is invalid – example will not compileBlank-ident importing
embedis a compile-time error. The correct import is:-import ( - _ "embed" +import ( + "embed"Without this fix, users copying the snippet will hit
expected 'alias' or '.', found '_'.docs/src/content/docs/whats-new.md (1)
109-114: Replace blank-identifier import forembedThe example uses
//go:embed assetsbut importsembedwith_, which does not work:import ( _ "embed" // ← compile errorCorrect form:
-import ( - _ "embed" +import ( + "embed"This change is required for the snippet to compile.
docs/src/content/docs/learn/clipboard.mdx (1)
62-67: Remove unusedtimeimport – snippet will not compile
timeis imported but never referenced after the switch toapp.Window.New(), causingcompile: imported and not used: "time".-import ( - "log" - "runtime" - "time" - "github.com/wailsapp/wails/v3/pkg/application" -) +import ( + "log" + "runtime" + "github.com/wailsapp/wails/v3/pkg/application" +)
♻️ Duplicate comments (1)
docs/src/content/docs/tutorials/01-creating-a-service.mdx (1)
418-422: Same pointer/value concern applies hereReplicate whichever fix you apply above to keep the second example compiling.
🧹 Nitpick comments (8)
docs/src/content/docs/guides/gin-routing.mdx (2)
94-101: Window centering option silently dropped
Centered: truewas removed from theWebviewWindowOptions.
If the example is meant to open a centered window (as older docs did) add the explicit option or a comment explaining the new default.
550-553: Listener added but never removedFor long-running examples it’s often good practice to demonstrate removal of global listeners to avoid leaks:
cancel := app.Event.On("gin-button-clicked", func(e *application.CustomEvent){ ... }) defer cancel() // after app.Run()docs/src/content/docs/guides/customising-windows.mdx (2)
53-57: Option struct imported but not aliasedBecause the snippet dropped
application.from enum names elsewhere, consider importing the package with an alias to shorten the call site, e.g.:import app "github.com/wailsapp/wails/v3/pkg/application"Purely stylistic—feel free to ignore.
113-117: Missing Windows build-tag guardThe
w32flags are Windows-only; placing this snippet inside a file guarded by//go:build windowsavoids accidental compilation errors on other OSs.docs/src/content/docs/learn/events.mdx (1)
460-466: Menu event examples compile, but note platform guard
events.Mac.*constants only exist on darwin builds; adding a comment or build-tag hint would help Windows/Linux readers.docs/src/content/docs/guides/menus.mdx (1)
10-14: Update the wording to match the refactored APIThe paragraph still references “the
Menusmanager”, but the code and API have moved toMenu.
Keeping terminology consistent avoids confusion for readers following the guide.docs/src/content/docs/learn/application-menu.mdx (1)
249-253: Consider capturing the returned window handle
app.Window.New()returns a*application.WebviewWindow.
If you intend to configure the window later (size, URL, events, etc.) the example should store the returned value:- // Create main window - app.Window.New() + // Create main window + mainWindow := app.Window.New() + _ = mainWindow // configure later if requiredThis keeps the snippet flexible without changing its current behaviour.
docs/src/content/docs/learn/clipboard.mdx (1)
111-115: Optionally keep a reference to the new windowAs in other docs, capturing the returned window pointer makes future configuration straightforward:
- app.Window.New() + mainWindow := app.Window.New() + _ = mainWindow // use if additional setup is required
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (20)
docs/src/content/docs/contributing/codebase-layout.mdx(1 hunks)docs/src/content/docs/contributing/runtime-internals.mdx(1 hunks)docs/src/content/docs/getting-started/installation.mdx(1 hunks)docs/src/content/docs/guides/custom-protocol-association.mdx(1 hunks)docs/src/content/docs/guides/customising-windows.mdx(2 hunks)docs/src/content/docs/guides/events-reference.mdx(2 hunks)docs/src/content/docs/guides/file-associations.mdx(1 hunks)docs/src/content/docs/guides/gin-routing.mdx(4 hunks)docs/src/content/docs/guides/gin-services.mdx(4 hunks)docs/src/content/docs/guides/menus.mdx(8 hunks)docs/src/content/docs/learn/application-menu.mdx(1 hunks)docs/src/content/docs/learn/browser.mdx(1 hunks)docs/src/content/docs/learn/clipboard.mdx(1 hunks)docs/src/content/docs/learn/context-menu.mdx(1 hunks)docs/src/content/docs/learn/environment.mdx(3 hunks)docs/src/content/docs/learn/events.mdx(5 hunks)docs/src/content/docs/learn/screens.mdx(2 hunks)docs/src/content/docs/learn/systray.mdx(2 hunks)docs/src/content/docs/tutorials/01-creating-a-service.mdx(2 hunks)docs/src/content/docs/whats-new.md(5 hunks)
🧰 Additional context used
🧠 Learnings (16)
📚 Learning: in the codebase, `application.options.keybindings` uses the `application.window` type, whereas `appl...
Learnt from: nixpare
PR: wailsapp/wails#3763
File: v3/examples/keybindings/main.go:16-17
Timestamp: 2024-09-20T23:34:29.841Z
Learning: In the codebase, `application.Options.KeyBindings` uses the `application.Window` type, whereas `application.WebviewWindowOptions.KeyBindings` uses `*application.WebviewWindow`. This is intentional and acceptable.
Applied to files:
docs/src/content/docs/learn/application-menu.mdxdocs/src/content/docs/learn/context-menu.mdxdocs/src/content/docs/guides/customising-windows.mdxdocs/src/content/docs/learn/clipboard.mdxdocs/src/content/docs/learn/systray.mdxdocs/src/content/docs/tutorials/01-creating-a-service.mdxdocs/src/content/docs/guides/menus.mdxdocs/src/content/docs/learn/events.mdxdocs/src/content/docs/contributing/runtime-internals.mdxdocs/src/content/docs/contributing/codebase-layout.mdxdocs/src/content/docs/guides/gin-routing.mdxdocs/src/content/docs/whats-new.md
📚 Learning: the `keybindings` property of `application.option` uses the `application.window` type, while `applic...
Learnt from: nixpare
PR: wailsapp/wails#3763
File: v3/pkg/application/application_options.go:93-93
Timestamp: 2024-10-08T22:11:37.054Z
Learning: The `KeyBindings` property of `application.Option` uses the `application.Window` type, while `application.WebviewWindowOptions` still accepts `*application.WebviewWindow`, and this is intentional.
Applied to files:
docs/src/content/docs/learn/application-menu.mdxdocs/src/content/docs/guides/customising-windows.mdxdocs/src/content/docs/learn/clipboard.mdxdocs/src/content/docs/tutorials/01-creating-a-service.mdxdocs/src/content/docs/guides/menus.mdxdocs/src/content/docs/learn/events.mdxdocs/src/content/docs/contributing/runtime-internals.mdxdocs/src/content/docs/contributing/codebase-layout.mdxdocs/src/content/docs/guides/gin-routing.mdxdocs/src/content/docs/whats-new.md
📚 Learning: in `v3/examples/window/main.go`, `time.sleep` is used within a goroutine and does not block the ui t...
Learnt from: leaanthony
PR: wailsapp/wails#3763
File: v3/examples/window/main.go:472-475
Timestamp: 2024-10-08T22:11:37.054Z
Learning: In `v3/examples/window/main.go`, `time.Sleep` is used within a goroutine and does not block the UI thread.
Applied to files:
docs/src/content/docs/learn/application-menu.mdxdocs/src/content/docs/learn/context-menu.mdxdocs/src/content/docs/learn/clipboard.mdxdocs/src/content/docs/learn/systray.mdxdocs/src/content/docs/tutorials/01-creating-a-service.mdxdocs/src/content/docs/guides/file-associations.mdxdocs/src/content/docs/learn/events.mdxdocs/src/content/docs/contributing/runtime-internals.mdxdocs/src/content/docs/guides/gin-routing.mdxdocs/src/content/docs/whats-new.mddocs/src/content/docs/guides/events-reference.mdx
📚 Learning: in this codebase, typedefs for window references (like replacing `void *` with `windowref`) are not ...
Learnt from: nixpare
PR: wailsapp/wails#3763
File: v3/pkg/application/webview_window_bindings_darwin.h:0-0
Timestamp: 2024-09-21T13:34:24.145Z
Learning: In this codebase, typedefs for window references (like replacing `void *` with `WindowRef`) are not preferred; using `void *` is acceptable.
Applied to files:
docs/src/content/docs/learn/application-menu.mdxdocs/src/content/docs/guides/customising-windows.mdxdocs/src/content/docs/learn/clipboard.mdxdocs/src/content/docs/contributing/runtime-internals.mdxdocs/src/content/docs/contributing/codebase-layout.mdx
📚 Learning: in the wails menu system (v3/pkg/application/menu.go), shared state between menus is intentionally d...
Learnt from: leaanthony
PR: wailsapp/wails#4031
File: v3/pkg/application/menu.go:199-202
Timestamp: 2025-01-24T22:41:18.566Z
Learning: In the Wails menu system (v3/pkg/application/menu.go), shared state between menus is intentionally designed and desirable. Methods like `Append()` and `Prepend()` should maintain shared references to menu items rather than creating deep copies.
Applied to files:
docs/src/content/docs/learn/application-menu.mdxdocs/src/content/docs/learn/context-menu.mdxdocs/src/content/docs/learn/clipboard.mdxdocs/src/content/docs/learn/systray.mdxdocs/src/content/docs/learn/browser.mdxdocs/src/content/docs/guides/menus.mdxdocs/src/content/docs/learn/events.mdxdocs/src/content/docs/whats-new.md
📚 Learning: in `docs/src/content/docs/api/events_mac.md`, the heading levels are intentionally adjusted to impro...
Learnt from: stavros-k
PR: wailsapp/wails#3917
File: docs/src/content/docs/api/events_mac.md:9-9
Timestamp: 2024-12-02T22:13:32.421Z
Learning: In `docs/src/content/docs/api/events_mac.md`, the heading levels are intentionally adjusted to improve sizing on the browser, to avoid manually customizing the styling of the doc generator.
Applied to files:
docs/src/content/docs/learn/screens.mdxdocs/src/content/docs/guides/customising-windows.mdxdocs/src/content/docs/learn/environment.mdxdocs/src/content/docs/guides/menus.mdxdocs/src/content/docs/learn/events.mdxdocs/src/content/docs/contributing/codebase-layout.mdx
📚 Learning: in wails services (like ginservice), initializing the app field in servicestartup rather than in the...
Learnt from: leaanthony
PR: wailsapp/wails#4128
File: v3/examples/gin-service/services/gin_service.go:67-85
Timestamp: 2025-04-18T05:57:34.711Z
Learning: In Wails services (like GinService), initializing the app field in ServiceStartup rather than in the constructor is an acceptable pattern, as ServiceStartup is guaranteed to be called before any HTTP requests are handled.
Applied to files:
docs/src/content/docs/guides/custom-protocol-association.mdxdocs/src/content/docs/guides/gin-services.mdxdocs/src/content/docs/guides/gin-routing.mdxdocs/src/content/docs/guides/events-reference.mdx
📚 Learning: in the notifications package, initialization of the `service` struct is handled through platform-spe...
Learnt from: popaprozac
PR: wailsapp/wails#4098
File: v3/pkg/services/notifications/notifications.go:46-55
Timestamp: 2025-03-24T20:22:56.233Z
Learning: In the notifications package, initialization of the `Service` struct is handled through platform-specific `New()` functions in each implementation file (darwin, windows, linux) rather than a generic constructor in the main package file.
Applied to files:
docs/src/content/docs/tutorials/01-creating-a-service.mdx
📚 Learning: in the notifications package, initialization of the `service` struct is handled through platform-spe...
Learnt from: popaprozac
PR: wailsapp/wails#4098
File: v3/pkg/services/notifications/notifications.go:46-55
Timestamp: 2025-03-24T20:22:56.233Z
Learning: In the notifications package, initialization of the `Service` struct is handled through platform-specific `New()` functions in each implementation file (darwin, windows, linux) rather than a generic constructor in the main package file. Each platform implementation follows a singleton pattern using `notificationServiceOnce.Do()` and creates a global `NotificationService` variable that's accessed through a thread-safe `getNotificationService()` function.
Applied to files:
docs/src/content/docs/tutorials/01-creating-a-service.mdx
📚 Learning: in the wails documentation, all content under 'docs/src/content/docs' is accessible at the root path...
Learnt from: stavros-k
PR: wailsapp/wails#3917
File: docs/astro.config.mjs:0-0
Timestamp: 2024-12-02T22:00:10.339Z
Learning: In the Wails documentation, all content under 'docs/src/content/docs' is accessible at the root path '/', so links in the sidebar configuration should not include the '/docs' prefix.
Applied to files:
docs/src/content/docs/guides/menus.mdx
📚 Learning: in wails v2, unlike v3-alpha which has a `serviceshutdown` method for services, there is no standard...
Learnt from: popaprozac
PR: wailsapp/wails#4256
File: v2/internal/frontend/desktop/linux/notifications.go:27-28
Timestamp: 2025-04-29T23:54:07.488Z
Learning: In Wails v2, unlike v3-alpha which has a `ServiceShutdown` method for services, there is no standardized teardown pattern for frontend implementations. When implementing features that require cleanup (like goroutines or resources), add explicit cleanup methods (e.g., `CleanupNotifications()`) that handle resource release, context cancellation, and connection closure.
Applied to files:
docs/src/content/docs/guides/gin-services.mdxdocs/src/content/docs/guides/gin-routing.mdxdocs/src/content/docs/whats-new.mddocs/src/content/docs/guides/events-reference.mdx
📚 Learning: in the wails v3 codebase, panic is used to catch invalid invocations that should never occur in prod...
Learnt from: fbbdev
PR: wailsapp/wails#4024
File: v3/pkg/application/services.go:38-51
Timestamp: 2025-01-18T21:19:47.778Z
Learning: In the Wails v3 codebase, panic is used to catch invalid invocations that should never occur in production (programming errors), while error returns are reserved for recoverable error conditions (runtime errors). For example, the `NewService` function in `v3/pkg/application/services.go` uses panic to handle the case where more than one `ServiceOptions` instance is provided, as this is considered an unrecoverable programming error.
Applied to files:
docs/src/content/docs/guides/gin-services.mdx
📚 Learning: in the wails v3 project, internal functions are designed to panic on nil parameters as they represen...
Learnt from: fbbdev
PR: wailsapp/wails#4045
File: v3/internal/generator/render/info.go:28-68
Timestamp: 2025-02-04T23:59:43.956Z
Learning: In the Wails v3 project, internal functions are designed to panic on nil parameters as they represent contract violations, rather than adding defensive nil checks.
Applied to files:
docs/src/content/docs/guides/gin-services.mdxdocs/src/content/docs/guides/gin-routing.mdx
📚 Learning: the `//wails:inject` directive in wails enables custom code injection, allowing methods like `custom...
Learnt from: fbbdev
PR: wailsapp/wails#4045
File: v3/internal/generator/testcases/directives/otherpackage/js/test_t.ts:1-3
Timestamp: 2025-02-05T11:53:45.812Z
Learning: The `//wails:inject` directive in Wails enables custom code injection, allowing methods like `CustomMethod` to be injected and used in JavaScript/TypeScript files without being explicitly defined in a service.js file.
Applied to files:
docs/src/content/docs/guides/gin-services.mdx
📚 Learning: error handling is not required in example code within the wails repository as examples should priori...
Learnt from: leaanthony
PR: wailsapp/wails#4013
File: v3/examples/contextmenus/main.go:38-44
Timestamp: 2025-01-17T05:51:02.521Z
Learning: Error handling is not required in example code within the Wails repository as examples should prioritize clarity and simplicity over production-level concerns.
Applied to files:
docs/src/content/docs/guides/gin-services.mdxdocs/src/content/docs/guides/gin-routing.mdx
📚 Learning: in wails applications, it's not necessary to implement explicit graceful shutdown for simple gorouti...
Learnt from: leaanthony
PR: wailsapp/wails#4234
File: v3/examples/badge-custom/main.go:87-93
Timestamp: 2025-04-26T21:03:42.481Z
Learning: In Wails applications, it's not necessary to implement explicit graceful shutdown for simple goroutines (like time emitters) as Go automatically terminates all goroutines as part of the application shutdown process.
Applied to files:
docs/src/content/docs/guides/gin-routing.mdx
⏰ 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: semgrep-cloud-platform/scan
🔇 Additional comments (15)
docs/src/content/docs/getting-started/installation.mdx (1)
20-23: Go version bump confirmedAll v3 modules declare
go 1.24(or higher), so updating the docs to require Go 1.24 is correct. No further changes are needed.docs/src/content/docs/guides/custom-protocol-association.mdx (1)
71-77: Double-check new Event manager API names
The snippet usesapp.Event.OnApplicationEventandapp.Event.Emit. If the new manager follows the same naming conventions used elsewhere (On,Emit, etc.), these method names might differ (e.g.app.Event.On,app.Event.Emit).Please verify the actual exported names in
pkg/application/eventmanager.goand adjust the docs to avoid compile-time errors for readers copy-pasting the example.docs/src/content/docs/learn/environment.mdx (3)
90-107: Event-manager accessor is correct & matches v3 APIThe example now uses
app.Event.OnApplicationEvent, which is the correct accessor after the Manager refactor. Handler signature and import are also in line with currentapplication.ApplicationEventAPI.
No further action required.
402-407: Consistent update across Best-Practices snippetThe same accessor change is applied here and keeps the code in sync with the earlier snippet—nice catch keeping the docs consistent.
499-508: Function-level example updated correctly
monitorThemeChangesnow routes throughapp.Eventas expected. Implementation remains accurate.docs/src/content/docs/learn/screens.mdx (2)
395-402: Screen-change listener reflects new API
app.Event.OnApplicationEvent(events.Common.SystemDisplayChanged, …)is the right call after refactor. Example remains compile-ready.
485-496: Duplicate listener update looks goodSecond occurrence of the screen-change handler is updated consistently. 👍
docs/src/content/docs/contributing/codebase-layout.mdx (1)
119-124: Verify expected argument type forWindow.NewOlder examples used
Window.NewWithOptions(opts)while this snippet passes a pointer toWindow.New(&opts).
IfWindow.New(*application.WebviewWindowOptions)actually expects a value (not a pointer) or the method name is stillNewWithOptions, this example will not compile.-window := app.Window.New(&application.WebviewWindowOptions{ +window := app.Window.New(application.WebviewWindowOptions{Please confirm the current signature and adjust to avoid reader confusion.
docs/src/content/docs/tutorials/01-creating-a-service.mdx (1)
84-88: Compilation-ready: confirm struct-value vs pointer
Window.NewWithOptions(application.WebviewWindowOptions{…})usually expects a pointer to options in the runtime code. Double-check the signature; if it wants*application.WebviewWindowOptions, prepend&.-app.Window.NewWithOptions(application.WebviewWindowOptions{ +app.Window.NewWithOptions(&application.WebviewWindowOptions{Ensures the tutorial builds out-of-the-box.
docs/src/content/docs/guides/file-associations.mdx (1)
72-93: End-to-end example almost perfect – minor dialog API checkGreat job expanding the snippet and updating to
app.Event.OnApplicationEvent.
Small thing:application.InfoDialog()is used instead of the more commonapp.Dialog.Info(). IfInfoDialog()really is a package-level helper that returns a dialog builder, all good; otherwise switch to the instance method so the code compiles.-application.InfoDialog().SetMessage("Application opened with file: " + associatedFile).Show() +app.Dialog.Info().SetMessage("Application opened with file: " + associatedFile).Show()docs/src/content/docs/learn/browser.mdx (1)
243-245: VerifyEnvaccessor – API may still beEnvironmentThe code changed from
app.Environment.Info().Debugtoapp.Env.Info().Debug.
Double-check the latestapplication.AppAPI; ifEnvdoes not exist this snippet will not compile.docs/src/content/docs/learn/systray.mdx (1)
127-135: Preferapp.Menu.New()consistentlyNice alignment with the new Manager API. No issues here.
docs/src/content/docs/learn/events.mdx (2)
16-28: Good migration toEventmanagerListener registration reflects the new API correctly. 👍
517-529: WebView event constants require platform separationSimilar to the menu section, wrap macOS/Windows-specific examples in build-tags or comments to prevent compile errors on the wrong OS.
docs/src/content/docs/learn/context-menu.mdx (1)
211-215: API update looks correctThe switch from
app.NewWebviewWindow()toapp.Window.New()is consistent with the new Manager‐based API and the returned handle is immediately used, so the snippet compiles as-is.
|
|
Absolute legend! 👌 |
…lsapp#4476) * (docs) installation.mdx: update required Go version to 1.24 * (docs) update for Manager API Refactoring wailsapp#4359 * add entry in UNRELEASED_CHANGELOG.md to satisfy github actions * thx coderabbitai * thx coderabbitai



Description
Update docs and examples to match the changes from feat: Complete App API restructuring with organized manager pattern #4359
Change minimum required Go version to 1.24 in the
Getting Started -> InstallationUpdated some examples to use
app := application.Get()Example before:
I believe the
a.appexample here would just be confusing to new people especially becauseAppis not defined in the scope so it becomes ambiguous as to what it is.After:
Just a quick idea I'd like to sneak in:
It would make sense to add some linter or similar for the md/mdx files usage of tabs/spaces is very inconsistent.
Checklist:
website/src/pages/changelog.mdxwith details of this PRSummary by CodeRabbit
app.Window.New(),app.Menu.New()).