Skip to content

feat: migrate from Wails v2 to v3 - #44

Merged
joshuapare merged 55 commits into
mainfrom
feat/wails3-migration
Mar 21, 2026
Merged

feat: migrate from Wails v2 to v3#44
joshuapare merged 55 commits into
mainfrom
feat/wails3-migration

Conversation

@joshuapare

Copy link
Copy Markdown
Contributor

Summary

Complete migration of Omniview from Wails v2 (v2.11.0) to Wails v3 (alpha.74).

Backend

  • All 17 bound structs converted to v3 services with explicit method delegation
  • EventEmitter abstraction updated to v3 API (variadic, no context)
  • 32 fully typed events via RegisterEvent[T] with CustomEvents TypeScript augmentation
  • All map[string]interface{} event payloads replaced with typed structs
  • PluginAssetHandler as asset middleware, WindowManager with hide-on-close recycling
  • v3 menu system with context menu stubs and standalone keybindings
  • Zero wails/v2 imports, zero binding warnings, all Go tests pass

Frontend

  • All EventsOn/EventsEmit/EventsOff migrated to Events.On/Events.Emit/Events.Off
  • All wailsjs/go/ imports replaced with v3 generated binding paths
  • All namespace model imports replaced with direct imports
  • Typed events via CustomEvents interface augmentation
  • @vitejs/plugin-react v6, Vite 8, HMR working in Wails webview
  • Per-card error boundaries so plugin crashes don't take down the IDE

Build System

  • Taskfile.yml replaces Makefile, build/config.yml replaces wails.json
  • CI workflow updated to use task commands
  • Binding generation outputs to packages/omniviewdev-runtime/src/bindings/

Known Items

  • Wails v3 server mode doesn't compile on macOS (upstream build tag issue)
  • Plugins need dev rebuild for v3 binding compatibility

Test plan

  • Go build and tests pass
  • Frontend typecheck and build pass
  • Binding generation: zero warnings, 32 typed events
  • task dev: app boots, HMR works, dev indicator visible
  • Plugin loading works
  • Plugin crash error boundaries work

…ils v2 imports

- Migrate exec, logs, metric, networker, settings, data, ui, utils, devserver, diagnostics
- Delete 7 client wrapper files
- Convert dialog calls in installer.go to v3 builder pattern
- Update main.go service registration with interface wrappers
- Zero wails/v2 imports remaining in Go codebase
… API

- Update 22 source files and 4 test files
- EventsOn → Events.On with event.data unwrapping
- EventsOff → Events.Off
- BrowserOpenURL → Browser.OpenURL
- Update imports from wailsjs/runtime to @wailsio/runtime or @omniviewdev/runtime/runtime
- Generate v3 bindings to packages/omniviewdev-runtime/src/bindings/
- Update all hook imports from wailsjs/go/ to v3 binding paths
- Remove all namespace patterns (types.Connection -> Connection)
- Update WatchState enum to v3 member names
- Delete old wailsjs/ directory
- Update Taskfile binding generation to output to correct location
- Update api.ts and models.ts to re-export v3 bindings
- Wrap multi-arg Emit calls in struct payloads (UpdatePayload, UpdateErrorPayload, DevServerErrorPayload)
- Add typed event registration for update events
- Restore CreateTerminal method on exec controller (wraps CreateSession with TTY)
- Fix frontend tuple destructuring to use struct payload fields
- Regenerate v3 bindings (222 methods, 28 enums, 118 models)
- Replace PluginManagerService interface embedding with explicit method delegation
  (excludes SetDevServerChecker, SetPluginLogManager, HandlePluginCrash)
- Create PluginLogService wrapper exposing only frontend-safe methods
  (excludes OnEmit/EmitFunc, Stream, Close, LogDir)
- Create DevServerService wrapper to prevent service/model type shadowing
- Update api.ts and models.ts for new binding file names
- Binding warnings reduced from 7 to 3 (remaining are transitive SDK types)
…all service wrappers

All controller service wrappers now use explicit method delegation instead of
interface embedding. This ensures the binding generator only discovers
frontend-safe methods and eliminates all 7 binding warnings:

- PluginManagerService: 22 frontend methods, excludes SetDevServerChecker/etc
- ResourceControllerService: 45 methods, excludes OnPlugin*/Run/SetCrashCallback
- ExecControllerService: 14 methods, excludes plugin lifecycle
- LogsControllerService: 9 methods
- MetricControllerService: 8 methods
- NetworkerControllerService: 9 methods
- SettingsControllerService: 8 methods
- DataControllerService: 4 methods
- SettingsProviderService: 19 methods, excludes Initialize/RegisterChangeHandler
- PluginLogService: 5 methods, excludes OnEmit/Stream/Close
- DevServerService: 12 methods, separates service from model type

Binding generation: 0 warnings, 16 services, 174 methods, 28 enums, 110 models
- Replace map[string]interface{} with ConnectionStatusPayload for connection/status
- Register connection/status, watch/STATE, plugin/process/log, menu events via RegisterEvent[T]
- Add event constants for all menu events
- Import eventcreate.ts and reference eventdata.d.ts in runtime.ts for type augmentation
- 32 fully typed events in CustomEvents interface (was 23)
- Update test assertions to use typed payloads
- Remove unnecessary `as` casts where CustomEvents provides proper types
- Add null guards for v3 binding return types (T | null)
- Fix CancellablePromise/TanStack Query type mismatch in useResourceMetrics
- Handle optional map values in useWatchState and useConnectionStatus
- Runtime package typecheck: 0 errors
- Root Taskfile: dev task just calls wails3 dev (no manual build/run)
- darwin Taskfile: proper build:native with DEV flag, correct run task with APP_NAME in paths
- linux/windows Taskfiles: simplified to match scaffold pattern
- build/Taskfile.yml: proper deps chain (install:frontend:deps, generate:bindings, build:frontend)
- config.yml dev_mode.executes drives the dev lifecycle automatically
build:dev does a non-minified development vite build, needed because
the Go binary embeds dist/ even in dev mode while Vite dev server
provides hot reload on the side.
…ugin loading

Controllers must receive ctx from ServiceStartup BEFORE the bootstrap
service calls pluginManager.Initialize(), which triggers OnPluginStart
on all controllers. Without ctx, gRPC stream creation panics with nil
pointer dereference.

Follows Wails v3 documented pattern: 'The context will be valid as long
as the application is running, and will be cancelled right before shutdown.'
- Replace babel config with @rolldown/plugin-babel + reactCompilerPreset
- Update @vitejs/plugin-react to v6
- Install @rolldown/plugin-babel
- Eliminates esbuild/optimizeDeps deprecation warnings
- Delete packages/omniviewdev-providers/internal/runtime/ (legacy v2 wailsjs wrapper)
- Update providers index.ts to re-export from @wailsio/runtime directly
- Update portforward hooks to use Browser.OpenURL instead of BrowserOpenURL
- Add dist/.gitkeep for go:embed directive on fresh clones
- Add @wailsio/runtime dependency to providers package
…ing down the IDE

- HomepageCard: wrap plugin component in ErrorBoundary with InlineErrorFallback
  so a single card crash shows an inline error with retry, not a full-page crash
- LinkedResourceDrawer: wrap sidebar component in ErrorBoundary so plugin
  sidebar crashes don't block the entire drawer

Both use resetKeys tied to the specific plugin/resource so retries are scoped.
Wails v3's asset server proxy doesn't support WebSocket upgrades,
so HMR module updates can't flow through it. Configure the HMR client
to connect directly to localhost:9245 via ws:// protocol, bypassing
the Wails proxy while keeping module fetches proxied.
The scaffold has zero server config. wails3 dev handles port assignment
via CLI flags and WAILS_VITE_PORT env var. Our custom server block with
host/port/strictPort/hmr was overriding Vite's defaults and breaking
the HMR connection through the Wails webview proxy.
…#3064

The Wails webview loads from wails.localhost which can't resolve
WebSocket connections. The confirmed fix from the community is to set
server.hmr.host='localhost' and server.hmr.protocol='ws' so the HMR
client connects directly to the Vite dev server bypassing wails.localhost.
The Wails v3 asset server returns 501 for WebSocket upgrade requests,
preventing Vite HMR from connecting through the proxy. Use a separate
port (9246) for the HMR WebSocket so the webview connects directly
to Vite, bypassing the asset server entirely.
http.FileServerFS always serves from embedded dist/ assets, completely
bypassing the Wails dev server proxy. application.AssetFileServerFS
checks FRONTEND_DEVSERVER_URL and proxies to the Vite dev server in
dev mode, serving live content with HMR support. This is why:
- import.meta.env.DEV was false (serving production build)
- HMR client was never injected
- Dev mode indicator was missing from footer
The separate HMR port (9246) was a workaround for when the webview
was loading from embedded dist/ assets. Now that AssetFileServerFS
proxies to Vite in dev mode, HMR works natively through the proxy.
Only keep hmr.host=localhost and hmr.protocol=ws per wailsapp/wails#3064.
- Add Server options (localhost:34115) to application.Options for
  headless HTTP server mode (built with -tags server)
- Add build:server and run:server tasks to Taskfile
- Update Playwright config to use run:server with /health endpoint
- Server mode serves the same app without native GUI dependencies,
  suitable for CI/CD testing
- Add ServerOptions (port 34115) to application.Options
- Playwright config targets server mode at localhost:34115
- Server mode tasks commented out — blocked by Wails v3 alpha.74 macOS
  build tag conflict (darwin files don't exclude server tag)
- E2E tests can run in CI on Linux where server mode works
- TODO: uncomment server tasks when Wails fixes upstream
@coderabbitai

coderabbitai Bot commented Mar 21, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 269 files, which is 119 over the limit of 150.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro

Run ID: f50cfa00-2f25-4968-8e11-7315fffc5c68

📥 Commits

Reviewing files that changed from the base of the PR and between 8582397 and 174656c.

⛔ Files ignored due to path filters (3)
  • build/windows/icon.ico is excluded by !**/*.ico
  • go.sum is excluded by !**/*.sum
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (269)
  • .github/workflows/nightly.yaml
  • .github/workflows/pr-checks.yml
  • .github/workflows/pr.yml
  • .github/workflows/release.yaml
  • .gitignore
  • .tool-versions
  • Makefile
  • Taskfile.yml
  • app.go
  • backend/diagnostics/logger.go
  • backend/menus/app_v3.go
  • backend/menus/context_v3.go
  • backend/menus/keybindings_v3.go
  • backend/menus/menus.go
  • backend/menus/view.go
  • backend/pkg/plugin/data/client.go
  • backend/pkg/plugin/data/controller.go
  • backend/pkg/plugin/devserver/manager.go
  • backend/pkg/plugin/devserver/manager_test.go
  • backend/pkg/plugin/devserver/types.go
  • backend/pkg/plugin/events.go
  • backend/pkg/plugin/events_test.go
  • backend/pkg/plugin/exec/client.go
  • backend/pkg/plugin/exec/controller.go
  • backend/pkg/plugin/health.go
  • backend/pkg/plugin/health_test.go
  • backend/pkg/plugin/installer.go
  • backend/pkg/plugin/loader.go
  • backend/pkg/plugin/loader_test.go
  • backend/pkg/plugin/logs/client.go
  • backend/pkg/plugin/logs/controller.go
  • backend/pkg/plugin/logs/controller_apperror_test.go
  • backend/pkg/plugin/manager.go
  • backend/pkg/plugin/manager_test.go
  • backend/pkg/plugin/metric/client.go
  • backend/pkg/plugin/metric/controller.go
  • backend/pkg/plugin/networker/client.go
  • backend/pkg/plugin/networker/controller.go
  • backend/pkg/plugin/resource/client.go
  • backend/pkg/plugin/resource/controller.go
  • backend/pkg/plugin/resource/controller_actions_test.go
  • backend/pkg/plugin/resource/controller_connections_test.go
  • backend/pkg/plugin/resource/controller_crash_test.go
  • backend/pkg/plugin/resource/controller_integration_test.go
  • backend/pkg/plugin/resource/emitter.go
  • backend/pkg/plugin/resource/emitter_test.go
  • backend/pkg/plugin/resource/grpc_integration_test.go
  • backend/pkg/plugin/resource/sink_test.go
  • backend/pkg/plugin/resource/testutil_test.go
  • backend/pkg/plugin/settings/client.go
  • backend/pkg/plugin/settings/controller.go
  • backend/pkg/plugin/ui/client.go
  • backend/pkg/plugin/ui/manager.go
  • backend/pkg/plugin/utils/client.go
  • backend/window/manager.go
  • build/Taskfile.yml
  • build/config.yml
  • build/darwin/Info.dev.plist
  • build/darwin/Info.plist
  • build/darwin/Taskfile.yml
  • build/darwin/icons.icns
  • build/ios/Assets.xcassets
  • build/ios/Info.dev.plist
  • build/ios/Info.plist
  • build/ios/LaunchScreen.storyboard
  • build/ios/build.sh
  • build/ios/entitlements.plist
  • build/ios/project.pbxproj
  • build/linux/Taskfile.yml
  • build/linux/desktop
  • build/linux/nfpm/nfpm.yaml
  • build/windows/Taskfile.yml
  • build/windows/info.json
  • build/windows/nsis/wails_tools.nsh
  • build/windows/wails.exe.manifest
  • docs/superpowers/plans/2026-03-20-wails3-migration.md
  • docs/superpowers/specs/2026-03-20-wails3-migration-design.md
  • e2e/package.json
  • e2e/playwright.config.ts
  • go.mod
  • main.go
  • package.json
  • packages/omniviewdev-providers/index.ts
  • packages/omniviewdev-providers/internal/runtime/runtime.d.ts
  • packages/omniviewdev-providers/internal/runtime/runtime.js
  • packages/omniviewdev-providers/lib/portforward/hooks.tsx
  • packages/omniviewdev-providers/package.json
  • packages/omniviewdev-runtime/package.json
  • packages/omniviewdev-runtime/src/api.ts
  • packages/omniviewdev-runtime/src/bindings/encoding/json/index.ts
  • packages/omniviewdev-runtime/src/bindings/encoding/json/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/appservice.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/diagnostics/diagnosticsclient.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/diagnostics/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/devserver/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/devserver/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/lifecycle/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/lifecycle/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/metric/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/metric/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/pluginlog/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/pluginlog/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/registry/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/registry/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/resource/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/resource/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/types/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/types/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/ui/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/ui/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/ui/servicewrapper.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/utils/client.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/utils/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/backend/pkg/plugin/utils/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/datacontrollerservice.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/devserverservice.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/execcontrollerservice.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/internal/telemetry/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/internal/telemetry/telemetrybinding.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/logscontrollerservice.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/metriccontrollerservice.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/networkercontrollerservice.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/pluginlogservice.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/pluginmanagerservice.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/resourcecontrollerservice.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/settingscontrollerservice.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/omniview/settingsproviderservice.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/config/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/config/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/types/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/types/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/v1/exec/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/v1/exec/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/v1/logs/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/v1/logs/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/v1/metric/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/v1/metric/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/v1/networker/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/v1/networker/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/v1/resource/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/pkg/v1/resource/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/settings/index.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/omniviewdev/plugin-sdk/settings/models.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/wailsapp/wails/v3/internal/eventcreate.ts
  • packages/omniviewdev-runtime/src/bindings/github.com/wailsapp/wails/v3/internal/eventdata.d.ts
  • packages/omniviewdev-runtime/src/bindings/time/index.ts
  • packages/omniviewdev-runtime/src/bindings/time/models.ts
  • packages/omniviewdev-runtime/src/context/plugins/PluginContext.tsx
  • packages/omniviewdev-runtime/src/context/plugins/PluginContextProvider.tsx
  • packages/omniviewdev-runtime/src/context/settings/SettingsContext.tsx
  • packages/omniviewdev-runtime/src/hooks/connection/useConnection.tsx
  • packages/omniviewdev-runtime/src/hooks/connection/useConnectionNamespaces.ts
  • packages/omniviewdev-runtime/src/hooks/connection/useConnectionStatus.ts
  • packages/omniviewdev-runtime/src/hooks/connection/useConnections.ts
  • packages/omniviewdev-runtime/src/hooks/data/usePluginData.ts
  • packages/omniviewdev-runtime/src/hooks/exec/useExecSession.ts
  • packages/omniviewdev-runtime/src/hooks/logs/useLogSession.ts
  • packages/omniviewdev-runtime/src/hooks/metric/useMetricProviders.ts
  • packages/omniviewdev-runtime/src/hooks/metric/useMetricStream.ts
  • packages/omniviewdev-runtime/src/hooks/metric/useResourceMetrics.ts
  • packages/omniviewdev-runtime/src/hooks/networker/types.ts
  • packages/omniviewdev-runtime/src/hooks/networker/usePortForwardSessions.ts
  • packages/omniviewdev-runtime/src/hooks/networker/useResourcePortForwarder.tsx
  • packages/omniviewdev-runtime/src/hooks/resource/useActiveSyncs.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useEditorSchemas.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useResource.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useResourceActions.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useResourceAreaComponent.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useResourceGroups.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useResourceMutations.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useResourceSearch.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useResourceType.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useResourceTypes.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useResources.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useStreamAction.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useWatchState.test.ts
  • packages/omniviewdev-runtime/src/hooks/resource/useWatchState.ts
  • packages/omniviewdev-runtime/src/models.ts
  • packages/omniviewdev-runtime/src/runtime.ts
  • packages/omniviewdev-runtime/src/types/watch.ts
  • packages/omniviewdev-runtime/src/utils/activeSyncAggregator.test.ts
  • packages/omniviewdev-runtime/src/utils/activeSyncAggregator.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/data/Client.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/data/Client.js
  • packages/omniviewdev-runtime/src/wailsjs/go/devserver/DevServerManager.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/devserver/DevServerManager.js
  • packages/omniviewdev-runtime/src/wailsjs/go/diagnostics/DiagnosticsClient.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/diagnostics/DiagnosticsClient.js
  • packages/omniviewdev-runtime/src/wailsjs/go/exec/Client.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/exec/Client.js
  • packages/omniviewdev-runtime/src/wailsjs/go/logs/Client.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/logs/Client.js
  • packages/omniviewdev-runtime/src/wailsjs/go/main/App.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/main/App.js
  • packages/omniviewdev-runtime/src/wailsjs/go/metric/Client.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/metric/Client.js
  • packages/omniviewdev-runtime/src/wailsjs/go/models.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/networker/Client.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/networker/Client.js
  • packages/omniviewdev-runtime/src/wailsjs/go/plugin/pluginManager.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/plugin/pluginManager.js
  • packages/omniviewdev-runtime/src/wailsjs/go/pluginlog/Manager.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/pluginlog/Manager.js
  • packages/omniviewdev-runtime/src/wailsjs/go/resource/Client.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/resource/Client.js
  • packages/omniviewdev-runtime/src/wailsjs/go/settings/Client.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/settings/Client.js
  • packages/omniviewdev-runtime/src/wailsjs/go/settings/provider.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/settings/provider.js
  • packages/omniviewdev-runtime/src/wailsjs/go/telemetry/TelemetryBinding.js
  • packages/omniviewdev-runtime/src/wailsjs/go/ui/Client.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/go/ui/Client.js
  • packages/omniviewdev-runtime/src/wailsjs/go/utils/Client.js
  • packages/omniviewdev-runtime/src/wailsjs/runtime/package.json
  • packages/omniviewdev-runtime/src/wailsjs/runtime/runtime.d.ts
  • packages/omniviewdev-runtime/src/wailsjs/runtime/runtime.js
  • packages/omniviewdev-showcase/package.json
  • packages/omniviewdev-ui/package.json
  • plugin_asset_handler.go
  • ui/components/displays/Footer/AppStatusFooter.tsx
  • ui/components/tables/Resources/actions/ExecAction.tsx
  • ui/components/tables/Resources/actions/types.ts
  • ui/components/tables/Resources/cells/ResourceLinkCell.tsx
  • ui/components/tables/Resources/cells/TextCell.tsx
  • ui/contexts/PluginContext.tsx
  • ui/features/devtools/types.ts
  • ui/features/devtools/wailsBridge.ts
  • ui/features/logger/useLogger.tsx
  • ui/features/pluginlogs/types.ts
  • ui/features/pluginlogs/wailsBridge.ts
  • ui/features/plugins/adapters/createProductionDeps.ts
  • ui/features/plugins/react/PluginServiceProvider.tsx
  • ui/federation/LinkedResourceDrawer.tsx
  • ui/federation/ResourceSidebarComponent.tsx
  • ui/hooks/plugin/useDevServer.ts
  • ui/hooks/plugin/usePluginManager.ts
  • ui/hooks/resource/useResourceDefinition.tsx
  • ui/hooks/settings/useCoreSettings.ts
  • ui/hooks/settings/usePluginSettings.ts
  • ui/layouts/core/main/BottomDrawer/__tests__/BottomDrawer.test.tsx
  • ui/layouts/core/main/BottomDrawer/index.tsx
  • ui/layouts/core/main/Header/areas/HeaderItemsArea.tsx
  • ui/layouts/core/main/Header/areas/HeaderTabsArea.tsx
  • ui/layouts/core/main/Header/index.tsx
  • ui/pages/[plugin]/ConnectionListItem.tsx
  • ui/pages/[plugin]/ConnectionTable.tsx
  • ui/pages/[plugin]/ConnectionTableItem.tsx
  • ui/pages/[plugin]/[connectionID]/resources/ResourceTableView.tsx
  • ui/pages/connecting/index.tsx
  • ui/pages/home/HomepageCard.tsx
  • ui/pages/plugins/InstalledPluginCard.tsx
  • ui/pages/plugins/PluginDetails.tsx
  • ui/pages/settings/SettingsEntries.tsx
  • ui/pages/settings/SettingsEntry.tsx
  • ui/providers/BottomDrawer/__tests__/tabs.test.tsx
  • ui/providers/BottomDrawer/containers/LogViewer/hooks/useLogStream.ts
  • ui/providers/BottomDrawer/containers/LogViewer/sources/sessionSource.ts
  • ui/providers/BottomDrawer/containers/Terminal.tsx
  • ui/providers/BottomDrawer/containers/__tests__/Terminal.test.tsx
  • ui/providers/BottomDrawer/events.ts
  • ui/providers/BottomDrawer/tabs.tsx
  • ui/providers/RightDrawer/index.tsx
  • ui/providers/RightDrawerProvider.tsx
  • vite.config.ts
  • wails.json

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/wails3-migration

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.

- pr.yml: task + wails3 for builds and E2E (server mode on Linux)
- nightly.yaml: task + wails3 for all 3 platform builds, Go 1.24→1.26
- release.yaml: task + wails3 for all 3 platform builds
- All: output paths updated from build/bin/ to bin/
- All: wails build replaced with task common:build:frontend + go build
Match Wails v3 CI (build-and-test-v3.yml): libgtk-3-dev libwebkit2gtk-4.1-dev
libwayland-dev build-essential pkg-config. Use awalsh128/cache-apt-pkgs-action
for caching across runs.
… limit

- E2E job disabled with if:false until Wails v3 fixes BrowserWindow.AttachModal
- Add repo-token to all arduino/setup-task calls to prevent GitHub API rate limiting
- Add .app bundle creation step (Contents/MacOS + Resources + Info.plist)
- Sign and notarize the .app bundle, not the bare binary
- DMG references Omniview.app instead of bare Omniview
- Add CGO/MACOSX_DEPLOYMENT_TARGET env vars for macOS builds
- PR artifacts zip the .app bundle
Info.plist had Go template placeholders ({{.Name}}, {{.Info.ProductVersion}})
from the v2 era. Ran wails3 update:build-assets to render actual values.
Also removed stale CFBundleURLTypes with unrendered template vars.
Critical:
- UI ServiceWrapper: replace struct embedding with explicit delegation,
  excluding OnPluginInit/Start/Stop/Shutdown/Destroy from frontend

Important:
- PluginAssetHandler: replace panic with 500 response on UserHomeDir failure
- PluginAssetHandler: compile regex once at package level, not per request
- Main window: add UseApplicationMenu: true for Windows/Linux menu support
- Wire SetupKeyBindings and SetupContextMenus (were defined but never called)
@joshuapare
joshuapare merged commit a0ec1de into main Mar 21, 2026
8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant