Compare commits

..

378 commits

Author SHA1 Message Date
github-actions[bot]
4d0abeb37c
chore: update sponsors.svg (#5025)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-02-28 14:09:40 +11:00
github-actions[bot]
033650d792
chore: update sponsors.svg (#5015)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-02-26 21:01:45 +11:00
github-actions[bot]
4c49f27edf
chore: update sponsors.svg (#5000)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-02-22 15:27:44 +11:00
github-actions[bot]
c84578721c
chore: update sponsors.svg (#4999)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-02-18 21:18:16 +11:00
github-actions[bot]
354fee648e
chore: update sponsors.svg (#4997)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-02-17 22:39:19 +11:00
github-actions[bot]
da3ce17161
chore: update sponsors.svg (#4993)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-02-14 18:43:34 +11:00
Lea Anthony
bbd1b33122
Add Claude Code GitHub Workflow (#4988)
* "Claude PR Assistant workflow"

* "Claude Code Review workflow"
2026-02-14 00:55:40 +11:00
github-actions[bot]
ae40ca4ac1
chore: update sponsors.svg (#4980)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-02-11 21:50:29 +11:00
github-actions[bot]
093aa2d663
chore: update sponsors.svg (#4978)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-02-09 20:56:49 +11:00
Jay Pipes
e906751c89
update github.com/jaypipes/ghw dependency (#4970)
There's been a ton of improvements in the `ghw` library since the
v0.13.0 release, including the update of certain transitive dependencies
around Windows and Darwin support libraries.

This patch simply brings in those improvements. The `v0.21.3` release of
`ghw` is fully backwards-compatible with `v0.13.0`.

Signed-off-by: Jay Pipes <jaypipes@gmail.com>
2026-02-09 07:49:23 +11:00
Lea Anthony
718fd92f85
fix(v2): prevent wails init in non-empty directory with -d flag (#4955)
* fix(v2): prevent wails init in non-empty directory with -d flag

When using -d to specify a target directory, wails init now checks if
the directory is non-empty and errors if so. This prevents accidental
data loss (e.g., overwriting .git directories).

Fixes #4940

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test(v2): add tests for init non-empty directory check

Add tests to verify:
- Install fails when target directory is non-empty
- Install succeeds when target directory is empty

Also update changelog with the fix.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Apply suggestions from code review

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2026-02-04 21:23:07 +11:00
Lea Anthony
01b661f6a5
feat(v2): add runtime.ResetSignalHandlers() for Linux panic recovery (#4921)
* feat(v2): add runtime.ResetSignalHandlers() for Linux panic recovery

Add a new runtime function that allows users to reset signal handlers
before code that might panic from nil pointer dereferences.

On Linux, WebKit installs signal handlers without the SA_ONSTACK flag,
which prevents Go from properly recovering from panics caused by
SIGSEGV and other signals. This function adds SA_ONSTACK to the
relevant signal handlers (SIGSEGV, SIGBUS, SIGFPE, SIGABRT).

Usage:
```go
go func() {
    defer func() {
        if err := recover(); err != nil {
            log.Printf("Recovered: %v", err)
        }
    }()
    runtime.ResetSignalHandlers()
    // Code that might panic...
}()
```

The function is a no-op on macOS and Windows.

Fixes #3965

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* test(v2): add panic-recovery-test example

Add an example that demonstrates the Linux signal handler issue (#3965)
and verifies the fix using runtime.ResetSignalHandlers().

The example includes:
- A Greet function that triggers a nil pointer dereference after a delay
- Auto-call from frontend after 5 seconds
- README with reproduction steps

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 18:55:57 +11:00
github-actions[bot]
896344eb66
chore: update sponsors.svg (#4942)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-02-02 18:40:10 +11:00
github-actions[bot]
8fd0340404
chore: update sponsors.svg (#4911)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-01-31 22:32:06 +11:00
Lea Anthony
bc4ee373b5 ci: add cross-compilation tests to Docker image workflow
- Add test-cross-compile job that tests CGO builds for all 6 platform/arch combos
- Add test-non-cgo job for pure Go cross-compilation verification
- Add test-summary job with GitHub Actions summary output
- Add skip_tests input for manual workflow dispatch
- Verify Linux binaries link to required GTK/WebKit libraries
- Verify binary format matches expected architecture

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-28 08:34:46 +11:00
Lea Anthony
5d39f1aa9a ci: fix cross-compiler workflow for multi-arch builds
- Fix Dockerfile path (was pointing to non-existent setupwizard/docker)
- Add multi-platform build (linux/amd64 + linux/arm64)
- Add QEMU for ARM64 cross-compilation
- Add automatic trigger on Dockerfile.cross changes to v3-alpha
- Update SDK version default to 14.5

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 06:32:08 +11:00
github-actions[bot]
a27995940a
chore: update sponsors.svg (#4907)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-01-26 22:16:26 +11:00
NarciLee
4e8b705cda
fix: add missing EventsOffAll export to runtime templates (#4883)
* fix: add missing EventsOffAll export to runtime templates

The EventsOffAll function was implemented in the internal runtime
(desktop/events.js) and exported in the wrapper runtime files, but was
missing from the public runtime templates that are generated in user
projects. This caused a type mismatch where EventsOffAll was declared
in the TypeScript definition but the implementation was missing.

This commit adds the EventsOffAll export and type declaration to all
frontend framework templates:
- Common templates (generate/assets/common)
- React / React-TS
- Vue / Vue-TS
- Svelte / Svelte-TS
- Preact / Preact-TS
- Lit / Lit-TS
- Vanilla / Vanilla-TS

Fixes #4703

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* docs: add EventsOffAll to runtime events documentation

Added EventsOffAll function documentation to both English and Chinese
versions of the runtime events reference.

The function was already implemented in Go (pkg/runtime/events.go) and
JavaScript (internal/frontend/runtime/desktop/events.js), but was missing
from the public documentation.

Related to #4703

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* chore: add EventsOffAll fix to changelog

Added entry for the EventsOffAll fix to the Unreleased section
of the changelog.

Related to #4703

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* docs: translate EventsOffAll description to Chinese

Improved consistency in Chinese documentation by translating the
EventsOffAll description from English to Chinese, matching the
style of other event method descriptions.

Related to #4703

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

---------

Co-authored-by: cc <Zhuanz@MacBook-Pro.local>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2026-01-25 13:10:24 +11:00
Lea Anthony
7ee2b2d856
fix(v2/linux): fix crash on panic in JS-bound Go methods (#4855)
* fix(v2/linux): fix crash on panic in JS-bound Go methods

WebKit2GTK installs signal handlers after gtk_main() starts, overriding
our SA_ONSTACK fix. This causes Go panics (e.g., nil pointer dereference)
in JS-bound methods to crash with 'non-Go code set up signal handler
without SA_ONSTACK flag'.

Fix by deferring signal handler installation via g_idle_add() to run
after GTK main loop starts, ensuring we fix handlers AFTER WebKit
has installed its own.

Fixes #3965

* docs: add changelog entry for Linux signal handler fix

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 12:38:58 +11:00
Salman
696c55c6ee
Update code block range in howdoesitwork.mdx (#4884)
* Update code block range in howdoesitwork.mdx

* docs: add changelog entry for PR #4884

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-25 12:13:28 +11:00
Xelus22
0357730294
Fix up templates to correct go version (1.23.0) (#4618)
* Fix up templates to correct 1.23.0

* add changelog

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2026-01-25 11:16:42 +11:00
xiejiahe
158fd41a8b
fix(v2): Replace ioutl.Discard with io.Discard (#4877)
* fix(v2): Replace ioutl.Discard with io.Discard

* docs: Update website changelog

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2026-01-20 11:20:02 +11:00
github-actions[bot]
fc2b7309c1
chore: update sponsors.svg (#4881)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-01-18 13:29:39 +11:00
github-actions[bot]
18b3d0587f
chore: update sponsors.svg (#4878)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-01-16 06:58:38 +11:00
Lea Anthony
60d148e4b1
Add JetBrains logo to powered by section
Updated sponsorship section with JetBrains logo.
2026-01-14 21:22:35 +11:00
Lea Anthony
423f7e4498
fix(v2): prevent WebView crash on macOS 26 during rapid UI updates (#4806)
Disable suppressesIncrementalRendering on macOS 26+ (Tahoe) to prevent
WebView crashes when the frontend performs frequent UI updates.

Fixes #4592

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2026-01-13 22:05:05 +11:00
github-actions[bot]
4dbde817f4
chore: update sponsors.svg (#4874)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-01-13 21:48:58 +11:00
github-actions[bot]
95689bdeb7
chore: update sponsors.svg (#4867)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-01-10 20:01:44 +11:00
github-actions[bot]
7d4fe64352
chore: update sponsors.svg (#4860)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-01-07 16:39:33 +11:00
Lea Anthony
e27e85aae9 ci: add branch input to cross-compiler workflow 2026-01-06 11:15:01 +11:00
Lea Anthony
dd7094e5d3 ci: add workflow to build cross-compiler Docker image 2026-01-06 08:50:47 +11:00
github-actions[bot]
6630fa5647
chore: update sponsors.svg (#4846)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2026-01-02 21:19:34 +11:00
github-actions[bot]
7957d23c25
chore: update sponsors.svg (#4833)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-12-28 20:53:38 +11:00
github-actions[bot]
b25fe7496f
chore: update sponsors.svg (#4824)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-12-22 19:23:37 +11:00
github-actions[bot]
00b0ce936d
chore: update sponsors.svg (#4822)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-12-21 13:15:25 +11:00
github-actions[bot]
bc62140ac0
chore: update sponsors.svg (#4809)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-12-17 21:17:03 +11:00
github-actions[bot]
ebe8de8d2b
chore: update sponsors.svg (#4804)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-12-16 21:53:35 +11:00
github-actions[bot]
6a2619880c
chore: update sponsors.svg (#4795)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-12-15 22:20:33 +11:00
github-actions[bot]
db11f350cd
chore: update sponsors.svg (#4787)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-12-14 11:56:20 +11:00
Tilak Sasmal
216c9961a5
Add installation command for Wails CLI (#4692)
* Add installation command for Wails CLI

Added code block for Wails CLI installation command. This will allow coying the command with one click.

* Improve wails installation documentation

Updated wails installation documentation for easier command copying.

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-12-13 10:00:19 +11:00
github-actions[bot]
764f9bb175
chore: update sponsors.svg (#4763)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-12-12 06:33:46 +11:00
Viktor Poletansky
23bd70e057
Fix generated enums ordering (#4664)
* enumsort: enumsort

* enumsort: update changelog

* Add tests for enum ordering fix

Tests added:
- EnumOrderingTest: Verifies multiple enums are output in alphabetical order
- EnumElementOrderingTest: Verifies enum elements are sorted by TSName
- TSNameEnumElementOrderingTest: Verifies TSName() interface enums are also sorted

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 18:20:22 +11:00
Andrey Pshenkin
a0cb86ebff
V2 - Add universal link support for macOS (#4693)
* add universal link support

* add changelog

* add docs about universal links

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-12-10 16:14:23 +11:00
github-actions[bot]
7aaa203c5f
chore: update sponsors.svg (#4754)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-12-07 17:05:54 +11:00
Paul Brickwell
44a9d617e8
Add templates for Nuxt (#4750)
Add Wails templates for Nuxt
2025-12-04 20:40:19 +11:00
github-actions[bot]
8e77d9358e
chore: update sponsors.svg (#4744)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-12-03 21:59:51 +11:00
Anton Gilgur
7b8355a385
[v2] docs(menu): add imports and complete the example (post merge conflict) (#4742)
* [v2] docs(menu): add imports and complete the example (post merge conflict)

This partially redoes commit cb3305a2fc, as a merge conflict resolution seemed to have accidentally removed a large portion of the changes

- the example was missing imports, which [confused a user](https://stackoverflow.com/q/79827619/3431180), particularly due to the `rt` import alias
  - plus there are a good number of imports too, which this makes explicit
  - also give this file the title `menu.go` for clarity / explicitness, particularly to differentiate from the `NewApp` / `app.go` scaffold
- also handle the error at the end similar to [existing examples](4c464b3092/website/docs/guides/application-development.mdx (L54))

* add changelog entry per PR template
2025-12-01 19:16:00 +11:00
Anton Gilgur
cb3305a2fc
[v2] docs(menu): add imports and complete the example (#4727)
* [v2] docs(menu): add imports and complete the example

- the example was missing imports, which [confused a user](https://stackoverflow.com/q/79827619/3431180), particularly due to the `rt` import alias
  - plus there are a good number of imports too, which this makes explicit
- it also didn't mention that it built on top of the `NewApp` / `app.go` scaffold, so mention and link to that as well
  - it wasn't clear where `NewApp` came from without that
  - give this file the title `menu.go` for clarity / explicitness
- also handle the error at the end similar to [existing examples](4c464b3092/website/docs/guides/application-development.mdx (L54))

* add changelog entry per PR template

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-12-01 06:22:52 +11:00
Anton Gilgur
c73b2dd753
[v2] docs(menu): fix some syntax issues (#4726)
* [v2] docs(menu): fix some syntax issues

- one line wasn't properly indented
- one line was missing a closing brace and wouldn't compile as such

noticed this while [answering a question on SO](https://stackoverflow.com/a/79827672/3431180) which linked to this page

* add changelog entry per PR template

* consistent 4 space indentation

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-11-30 17:42:02 +11:00
Anton Gilgur
e37a7b9d4b
[v2] docs(app-dev): fix inconsistent indentation (#4730)
* [v2] docs(app-dev): fix inconsistent indentation

- several places had mixed indentation (tabs _and_ spaces)
- some lines had incorrect indentation, partially due to the above

* add changelog entry per PR template

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-11-30 17:40:51 +11:00
Anton Gilgur
ef7d3301c9
[v2] docs(app-dev): add imports to app.go examples (#4731)
* [v2] docs(app-dev): add imports to `app.go` examples

- add `context` and `fmt` imports to the `app.go` examples
- link to the docs for `context` when it is referenced for explicitness/beginner-friendliness

* add changelog entry per PR template

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-11-30 17:21:27 +11:00
Anton Gilgur
d16fd500df
docs(community): use absolute link to CoC instead of relative (#4732)
* docs(community): use absolute link to CoC instead of relative

- the relative link made it so that if you happen to land on https://wails.io/community-guide/ (with a trailing slash), it would take you to https://wails.io/community-guide/coc, which 404s
  - if you were at https://wails.io/community-guide (no trailing slash), it was fine.
  - use an absolute link so that it works the same regardless of the trailing slash or not

* add changelog entry per PR template

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-11-30 17:19:38 +11:00
github-actions[bot]
27afad59f6
chore: update sponsors.svg (#4740)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-11-30 12:39:10 +11:00
秋澪Akimio
4f71b22665
docs: fix typo of the window hiding method to "WindowHide" in the zh-Hans documentation (#4655) 2025-11-29 13:49:43 +11:00
github-actions[bot]
467f70ada7
chore: update sponsors.svg (#4735)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-11-28 23:24:03 +11:00
Anton Gilgur
9578b627fd
[v2] docs(how): fix inconsistent indentation (#4733)
* [v2] docs(how): fix inconsistent indentation

- several places had mixed indentation (tabs _and_ spaces)
- some lines had incorrect indentation, partially due to the above

* add changelog entry per PR template
2025-11-25 10:16:01 +00:00
Henrique Nunes
4c464b3092
add GameStacker to community showcase (#4724) 2025-11-22 14:44:00 +11:00
github-actions[bot]
ba2c9989e6
chore: update sponsors.svg (#4720)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-11-21 07:53:23 +11:00
github-actions[bot]
9f3b00bed9
chore: update sponsors.svg (#4715)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-11-18 05:37:32 +11:00
github-actions[bot]
e0e96c3bf8
chore: update sponsors.svg (#4714)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-11-16 16:19:26 +11:00
github-actions[bot]
9125ef64be
chore: update sponsors.svg (#4713)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-11-16 07:17:28 +11:00
Sean M. Tracey
e5deb1611e
Add UpBeat to community showcase; (#4705)
* Add UpBeat to community showcase;

* Update website/docs/community/showcase/upbeat.mdx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-11-13 06:09:17 +11:00
Lea Anthony
8d73bec252
Fix copyright year in German website footer (#4696)
Update copyright year from 2022 to 2025 in German (de) translation
to match all other language versions. Fixes #4239

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-11-09 22:12:24 +11:00
Lea Anthony
17bb94bbbf
[Snyk] Fix for 11 vulnerabilities (#4695)
* fix: website/package.json to reduce vulnerabilities

The following vulnerabilities are fixed with an upgrade:
- https://snyk.io/vuln/SNYK-JS-TRIM-1017038
- https://snyk.io/vuln/SNYK-JS-AXIOS-6032459
- https://snyk.io/vuln/SNYK-JS-WEBPACKDEVSERVER-10300775
- https://snyk.io/vuln/SNYK-JS-AXIOS-12613773
- https://snyk.io/vuln/SNYK-JS-AXIOS-9292519
- https://snyk.io/vuln/SNYK-JS-INFLIGHT-6095116
- https://snyk.io/vuln/SNYK-JS-WEBPACKDEVSERVER-10300777
- https://snyk.io/vuln/SNYK-JS-AXIOS-6124857
- https://snyk.io/vuln/SNYK-JS-AXIOS-9403194
- https://snyk.io/vuln/SNYK-JS-GOT-2932019
- https://snyk.io/vuln/SNYK-JS-SIRV-12558119

* Upgrade Docusaurus to v3.9.0 and fix compatibility issues

This commit upgrades Docusaurus from v2.4.3 to v3.9.0 to resolve the
security vulnerabilities identified by Snyk while ensuring the website
builds and runs correctly.

Changes:
- Upgraded React to v18 (required by Docusaurus v3)
- Updated @mdx-js/react to v3 (required by Docusaurus v3)
- Updated prism-react-renderer to v2 and modernized theme imports
- Removed custom webpack config (incompatible with v3)
- Converted Carousel import to ES6 syntax
- Fixed MDX syntax errors in French translations (removed Pandoc footnote syntax)

Result: Build succeeds for all 7 locales with 0 vulnerabilities.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix Cloudflare build: upgrade Node version requirement

Cloudflare was using Node 18.14.0 which lacks URL.canParse (added in 18.17.0).
Docusaurus v3 and its dependencies require Node 20+.

Changes:
- Added .node-version file to specify Node 20.18.0
- Updated package.json engines to require Node >=20.0.0
- Added packageManager field hinting Bun usage

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove incompatible packageManager field

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove .node-version to allow Bun-only builds

Cloudflare will use Bun directly without Node.js installation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Remove engines field to prevent Node auto-detection

Cloudflare was auto-installing Node 18.14.0 based on engines field.
Remove it to allow Bun-only builds via dashboard configuration.

Configure in Cloudflare dashboard:
- Build command: bun run build
- Install command: bun install
- Environment variable: NODE_VERSION=20.18.0 (if needed)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix Docusaurus v4 deprecation warning

Migrated onBrokenMarkdownLinks from root config to markdown.hooks
as required by Docusaurus v3.9+ (deprecated in v4).

Old: siteConfig.onBrokenMarkdownLinks
New: siteConfig.markdown.hooks.onBrokenMarkdownLinks

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Fix MDX syntax errors in remaining French translation files

Fixed v2.11.0 and v2.8.1 French translations that had invalid
Pandoc footnote syntax {.footnote-backref} incompatible with MDX v3.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
Co-authored-by: Claude <noreply@anthropic.com>
2025-11-09 10:07:19 +11:00
Lea Anthony
ac867f6587 v2.11.0 2025-11-08 13:36:09 +11:00
Lea Anthony
cb1c2d86c0 Update docs build configs 2025-11-08 13:10:53 +11:00
Lea Anthony
8513b77fd8 Update package.json 2025-11-08 13:06:08 +11:00
Lea Anthony
9c78746441 Doc fixes 2025-11-08 12:54:44 +11:00
Lea Anthony
7a383e080f Fixed HMTL DnD 2025-11-08 12:00:17 +11:00
github-actions[bot]
9df647bb99
chore: update sponsors.svg (#4688)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-11-08 10:30:57 +11:00
Lea Anthony
fc1c90e0ce
Update windows.go 2025-11-04 08:41:29 +11:00
Lea Anthony
385f1dafb9
Fix Go tests execution in PR workflow
Updated the PR workflow to ensure Go tests run for pull requests and approved reviews.
2025-11-04 08:36:09 +11:00
Sam
70d2d52be4
fix Discord badge link in README (#4626)
* fix Discord badge link in README

* fix Discord badge in README
2025-11-04 08:25:39 +11:00
github-actions[bot]
6e9b6a1ee5
chore: update sponsors.svg (#4684)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-11-02 20:21:22 +11:00
枫枫知道
366e6afa3f
Add Wails templates for Quasar and ArcoDesign (#4651)
* Add Wails templates for Quasar and ArcoDesign

增加一个vue3、ts、arcodesign的wails模板

* Apply suggestion from @coderabbitai[bot]

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2025-11-01 22:05:33 +11:00
github-actions[bot]
de7a04b57a
chore: update sponsors.svg (#4676)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-11-01 13:25:24 +11:00
github-actions[bot]
322088d3f8
chore: update sponsors.svg (#4666)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-10-26 20:03:18 +11:00
github-actions[bot]
f01afbc852
chore: update sponsors.svg (#4657)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-10-22 20:06:16 +11:00
Jae-Sung Lee
4df077f9b2
fix panic when adding menuroles on linux (#4558)
* fix panic when adding menuroles on linux

* update changelog

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-10-03 09:50:40 +10:00
github-actions[bot]
db22cb234d
chore: update sponsors.svg (#4613)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-10-02 10:46:31 +10:00
Mohd Salman
152ac2a7ce
typo in bug report template (#4566)
Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-09-28 08:16:33 +10:00
Taiwofolu
c113a068ad
I would like to add Clustta to the showcase page. (#4544)
* Added Clustta to Wails showcase

* fixed coderabbit issues

* resolved nitpicks

* Fixed more CoderabbitAI nitpicks

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-09-27 02:35:18 +00:00
github-actions[bot]
6943a56e8f
chore: update sponsors.svg (#4603)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-09-27 12:13:12 +10:00
Lea Anthony
909c16c517 Update nightly release script 2025-09-25 14:20:20 +10:00
github-actions[bot]
5ee47ccf7b
chore: update sponsors.svg (#4577)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-09-25 12:23:08 +10:00
Anshuman
dfff549002
Prevent DLL hijacking by setting default DLL directories on initialization (#4207)
* Prevent DLL hijacking by setting default DLL directories on initialization

* Updated the changelog

* Added DLLSearchPaths option to control DLL search paths on Windows

* Changed the order of the execution for uxtheme.go and consts.go

* Init uxtheme.go and consts.go once the dll path is set

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-09-24 15:44:58 +10:00
Lea Anthony
855dcadd79 ci(v3-alpha): nightly release uses PAT for writes; order: notes -> bump version.txt -> commit -> tag 2025-09-10 07:55:01 +10:00
Lea Anthony
2b8276da42 revert to older nightly release pipeline 2025-09-10 07:35:24 +10:00
Lea Anthony
a35b676e05 chore: fix release pipeline 2025-09-10 07:29:21 +10:00
Lea Anthony
45167ff743 chore: fix release pipeline 2025-09-10 06:53:18 +10:00
Copilot
140a110e6d
Fix workflow permissions: add actions:write to unreleased-changelog-trigger.yml (#4553)
* Initial plan

* Fix workflow permissions: add actions:write to unreleased-changelog-trigger.yml

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-09-02 21:05:04 +10:00
Copilot
bc3299fff6
Fix authentication issues in nightly-release-v3.yml workflow (#4552)
* Initial plan

* Fix authentication issues in nightly-release-v3.yml workflow

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>

---------

Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-09-02 20:36:19 +10:00
github-actions[bot]
1589a2f835
chore: update sponsors.svg (#4533)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-09-02 20:03:52 +10:00
aMMu
fcaff5e09d
Add wails-react-vite-ts-tailwind-tanstackrouter-template (#4549)
Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-09-02 20:03:21 +10:00
KAS
b489af776c
docs: fix typos and improve phrasing in BulletinBoard description (#4548) 2025-09-02 19:57:04 +10:00
Lea Anthony
b7f2d4a43b Remove link to guide. 2025-08-20 08:20:09 +10:00
github-actions[bot]
0015f8d3cb
chore: update sponsors.svg (#4512)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-08-16 14:42:05 +10:00
Andrey Pshenkin
857f7b7518
[V2] Add origin verification for bindings (#4480)
* Update go-webview2 to v1.0.22

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-08-13 08:50:23 +10:00
Kristian Tsivkov
ac00787202
Generic bindings (#3626)
* WIP: Enable generic bindings

* Added struct name normalizer

* Removed accidentally left fmt.Println

* Update changelog

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-08-12 21:06:10 +10:00
github-actions[bot]
4d7b0b487c
docs: sync translations (#3569)
Co-authored-by: leaanthony <leaanthony@users.noreply.github.com>
Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-08-12 20:58:06 +10:00
github-actions[bot]
d258771151
chore: update sponsors.svg (#4497)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-08-12 20:12:47 +10:00
Andrey Pshenkin
8aa187b393
[V2] add url validation for BrowserOpenURL (#4484)
* add url validation for BrowserOpenURL

* update changelog

* don't process invalid urls

* address AI issues

* added more validations and sanitization
2025-08-12 20:12:10 +10:00
Francesco Luzzi
ebe377f375
fix: added EventsOffAll to windows.runtime and updated the frontend runtime wrapper (#4254)
* fix: added EventsOffAll to windows.runtime and updated the frontend runtime wrapper

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-08-02 17:15:47 +10:00
Ahmed Alsuwaidi
62f0d7eb26
docs: Add Marasi to showcase (#4455)
Added Marasi to showcase

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-08-02 14:45:26 +10:00
github-actions[bot]
04e1b05d10
chore: update sponsors.svg (#4468)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-08-02 14:44:59 +10:00
Robert Iannucci
03412f9cb0
Use computed style when adding 'wails-drop-target-active' class. (#4420)
* Use computed style when adding 'wails-drop-target-active' class.

This is now consistent with the behavior of OnFileDrop which uses the computed style.

Fixes #4419

* Use computed style for elements when adding 'wails-drop-target-active' class.

This is now consistent with the behavior of OnFileDrop which uses the computed style.

Fixes #4419

* Update changelog

* Update draganddrop.js

Fix typo

* Update changelog.mdx

Moves changelog line to "fixes" section.

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-08-02 14:07:02 +10:00
Lea Anthony
2c2fd26bb5 Prevent v3 workflow from running on PRs against master
Add explicit base_ref checks to ensure the v3 build and test workflow
only runs for PRs targeting the v3-alpha branch.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-02 14:02:32 +10:00
Jae-Sung Lee
ce7b1fc62b
fix linux build error in onWayland caused by declaration after label (#4446)
* fix linux build error in onWayland caused by declaration after label

* update changelog

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-07-28 22:30:43 +10:00
Lea Anthony
91d5da6124
Fix YAML syntax error - indent heredoc content 2025-07-26 08:15:27 +10:00
Lea Anthony
612e0853bf
Fix nightly release workflow issues
- Fix backtick command substitution error using here-document
- Add extra spacing before disclaimer section
- Simplify commit message to just version number
2025-07-26 08:12:55 +10:00
Lea Anthony
ae2d97543f
Update nightly release workflow to use --create-release-notes flag
- Simplify changelog extraction using the new flag
- Remove complex shell scripting for content extraction
- Use release_notes.md file created by the Go script
2025-07-26 08:03:39 +10:00
Lea Anthony
0dc77a2893
Add debugging to nightly release workflow changelog extraction 2025-07-25 22:18:25 +10:00
Lea Anthony
559ff6e2f4
Fix nightly release - extract changelog before running release task 2025-07-25 22:16:01 +10:00
Lea Anthony
254a5a652e
Fix nightly release workflow - update Go version and add debugging 2025-07-25 22:12:34 +10:00
Lea Anthony
34517218f0
Fix nightly release workflow - add missing name field
This fixes the workflow execution issue
2025-07-25 22:03:54 +10:00
Lea Anthony
82b3420e53
Update release workflow 2025-07-25 21:59:25 +10:00
Lea Anthony
b393cf03a3
Fix nightly release workflow for v3-alpha
- Add --target v3-alpha to gh release create to fix commit count
- Fix Go dependency caching with correct path to v3/go.sum
- Replace deprecated actions/create-release with gh CLI
- Add proper authentication tokens for push operations
- Fix release title formatting
- Add permissions for actions:write
2025-07-25 21:58:39 +10:00
Simon
43bfb094c2
Add support for build tags to the wails project schema and update pro… (#4439)
* Add support for build tags to the wails project schema and update project-config documentation for guidance

* Support project tags in dev mode

* Satisfy coderabbit nitpick relating to error variable name

* Added changelog entry for `build:tags` project feature

---------

Co-authored-by: symball <contact@simonball.me>
Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-07-25 20:38:40 +10:00
Lea Anthony
6cbe626e7f
[Snyk] Upgrade sponsorkit from 16.4.2 to 16.5.0 (#4425)
fix: upgrade sponsorkit from 16.4.2 to 16.5.0

Snyk has created this PR to upgrade sponsorkit from 16.4.2 to 16.5.0.

See this package in npm:
sponsorkit

See this project in Snyk:
https://app.snyk.io/org/leaanthony/project/65547be6-c86d-4fef-aa06-dc1445189250?utm_source=github&utm_medium=referral&page=upgrade-pr

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-07-25 19:41:01 +10:00
github-actions[bot]
e6b725b106
chore: update sponsors.svg (#4445)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-07-25 19:38:31 +10:00
Alex11
0282768c10
Add new template wails-template-sveltekit-less-prettier-eslint (#4441)
Add template wails-template-sveltekit-less-prettier-eslint

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-07-25 06:28:40 +10:00
Alex11
6544005892
Add new template wails-template-svelte-ts-less-prettier-eslint-vite (#4440)
Add wails-template-svelte-ts-less-prettier-eslint-vite
2025-07-23 21:36:18 +00:00
github-actions[bot]
ffd98d68da
chore: update sponsors.svg (#4433)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-07-22 07:07:51 +10:00
Taite Nazifi
7002f2e943
Content Privacy flag for Windows and MacOS (#4241)
* feat(options): add ContentProtection bool config to macos and windows options

* feat(darwin): implement ContentProtection for darwin

* feat(windows): implement ContentProtection for windows

* chore(website): add feature to changelog

* feat(examples): add an example showcasing the ContentPrivacy flag

* chore(examples): update readme

* fix(example): format and build

* fix(winc): rename to wda and add version check

* chore(reference): add docs for ContentProtection

* fix(darwin): future-proof setting the sharing type

* fix(example): wording consistency

* chore(examples): remove privatewindow example

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-07-19 16:58:34 +10:00
Lea Anthony
72662cf05f fix: remove branch restriction from nightly workflow job
The workflow now explicitly checks out v3-alpha branch, so the job-level
condition 'if: github.ref == refs/heads/v3-alpha' is no longer needed
and was preventing manual runs from other branches.
2025-07-18 14:43:49 +10:00
Lea Anthony
d9f4a1883f fix: explicitly checkout v3-alpha branch in nightly workflow
Ensures the workflow always checks out the v3-alpha branch regardless
of which branch triggers it (schedule from master or manual dispatch)
2025-07-17 06:59:56 +10:00
Lea Anthony
7f3358d6a8 Nightly release action 2025-07-17 05:38:10 +10:00
Lea Anthony
25f19e03c8 🔧 Fix JavaScript syntax in workflow by using proper string concatenation
Replaced mixed template literals with clean string concatenation to avoid YAML/JS syntax conflicts.
All YAML validation now passes.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 12:43:10 +10:00
Lea Anthony
6486f9d9b2 🔧 Fix YAML syntax error in workflow template literals
Fixed JavaScript template literal syntax issues:
- Escaped @ symbol that was causing YAML parsing errors
- Fixed template literal concatenation for proper YAML compatibility
- Escaped backticks in markdown content

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 12:41:58 +10:00
Lea Anthony
3798b74c7e 🔧 Force workflow refresh for enhanced comment logic
Minor name change to ensure GitHub Actions uses latest workflow definition.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 12:29:07 +10:00
Lea Anthony
8b5fb90dae 🤖 Complete PR comment enhancement with author tagging and collapsible changelog
- Added PR author detection and tagging in comments
- Implemented collapsible details section showing corrected changelog content
- Enhanced error messages with clear action items for users
- Better distinction between auto-fixed and manual-fix-required scenarios
- Complete changelog content display for easy copying

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 12:26:21 +10:00
Lea Anthony
3f925105cb Fix: prevent pushing to v3-alpha main branch, only push to PR feature branches
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 12:05:37 +10:00
Lea Anthony
03758a01e3 Add git rebase before push to handle updated PR branches
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 12:02:09 +10:00
Lea Anthony
dbcf85c50c Add repository guard - only push commits on main wailsapp/wails repo
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 11:52:42 +10:00
Lea Anthony
c9392806ac Hardcode repository owner to 'wailsapp' - simplify logic
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 11:51:54 +10:00
Lea Anthony
a8a1f362cb Add comprehensive debugging and multiple fallback strategies for repository owner detection
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 11:51:20 +10:00
Lea Anthony
82d958747a Fix repository owner detection with explicit fallback logic
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 11:47:15 +10:00
Lea Anthony
3b59c3f3b9 Prevent validation script from being committed to PRs
- Add validation script to git exclude to prevent accidental commits
- Only commit changelog changes, not the temporary validation script
- Keep PR commits clean and focused

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 11:31:44 +10:00
Lea Anthony
73ade6e94f Fix git push issue in changelog workflow
- Properly determine PR branch name and repository owner
- Use correct git push syntax for detached HEAD state
- Handle forked repositories gracefully
- Add proper error handling for push operations

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 11:30:57 +10:00
Lea Anthony
ae8171e9fe Use REAL validation script from v3-alpha branch
Fetch the complete, tested validation script instead of minimal version.
This uses the full-featured script that can detect AND fix misplaced entries.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 11:29:08 +10:00
Lea Anthony
9640e16c12 Create REAL changelog validation workflow
- Validates actual PRs against v3-alpha branch
- Gets real PR diff from GitHub
- Runs actual validation script
- Commits fixes back to PR
- Comments on PR with results
- Automatically triggers on changelog changes to v3-alpha PRs

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 11:26:13 +10:00
Lea Anthony
36a1f7b52b Upgrade changelog workflow to run full validation
Simulates PR #4392 scenario to test detection and fixing of misplaced changelog entries

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 11:19:40 +10:00
Lea Anthony
d2d9acbdf6 Add v3 changelog validation workflow to master branch
- Add changelog-v3.yml workflow for GitHub Actions visibility
- Add v3/scripts/validate-changelog.go validation script
- Monitors PRs to v3-alpha branch for changelog compliance
- Automatically fixes misplaced entries by moving to [Unreleased]

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-13 11:15:38 +10:00
ltcovalt
b987c1b413
Add new HTMX template (#4394)
* Add new HTMX template

* Update changelog.mdx

added new community template wails-htmx-tailwind-daisyui-template

* Update changelog.mdx

* Add new HTMX template
2025-07-11 21:12:46 +10:00
Lea Anthony
1ec3708f68
feat: Make Vite server timeout configurable (#4374)
* feat: Make Vite server timeout configurable

- Add ViteServerTimeout field to wails.json configuration (default: 10 seconds)
- Add --viteservertimeout CLI flag for dev command
- Update error message to be more descriptive about timeout duration
- Fix issue #4372 where slow Vite servers with SvelteKit/Tailwind exceeded 10s timeout

Users can now configure the timeout via:
1. wails.json: "viteServerTimeout": 30
2. CLI flag: wails dev --viteservertimeout 30

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* docs: Add documentation for viteServerTimeout configuration

- Document viteServerTimeout field in wails.json project config
- Add --viteservertimeout CLI flag documentation
- Update save flag description to include new option

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

* Update changelog

---------

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-11 21:08:37 +10:00
github-actions[bot]
a0937fd3ef
chore: update sponsors.svg (#4411)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-07-11 20:24:22 +10:00
Lea Anthony
e753157ad2
v2.10.2 2025-07-06 22:29:24 +10:00
Lea Anthony
6b35e06780 Add test workflow for nightly releases
🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-06 07:00:18 +10:00
github-actions[bot]
01be6e3d1f
chore: update sponsors.svg (#4387)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-07-02 20:47:58 +10:00
Lea Anthony
466719d160 fix: restrict v3 workflow to only v3-alpha PRs with v3 changes
Add path filter to ensure Build + Test v3 workflow only runs on
PRs targeting v3-alpha branch that actually modify v3/ directory.
This prevents the workflow from running on master branch PRs.

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-02 20:26:26 +10:00
Lea Anthony
095e8be923
Fix Wails v2 default log level to suppress trace messages (#4380)
Set default LogLevel to 'Info' in dev command flags to prevent
unnecessary 'No listeners for event' trace messages from appearing
in development mode.

Fixes https://github.com/wailsapp/wails/issues/4160

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-authored-by: Claude <noreply@anthropic.com>
2025-07-01 21:22:15 +10:00
Talha Altınel
4597d7fa64
fix windows CI (#4378)
* update vtblCommonFunc.go

* update iShellItemArray.go

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-07-01 17:36:12 +10:00
github-actions[bot]
136273503e
chore: update sponsors.svg (#4381)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-07-01 17:32:23 +10:00
github-actions[bot]
ca3e4f6c45
chore: update sponsors.svg (#4360)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-06-16 21:44:41 +10:00
github-actions[bot]
52515277a0
chore: update sponsors.svg (#4347)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-06-12 21:04:25 +10:00
github-actions[bot]
ae621d2883
chore: update sponsors.svg (#4344)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-06-11 20:13:08 +10:00
zlaam
832db6d10b
docs: Add Linux PATH Update Commands to Installation Guide (#4340)
This pull request enhances the Wails installation guide by adding instructions to update the PATH environment variable for Linux users after installing the Wails CLI via Go. The change ensures that Linux users can properly access the wails command by adding the Go binary path to their environment and refreshing their shell configuration.
2025-06-07 18:12:44 +10:00
Lea Anthony
be7608e079
Update issue-triage-automation.yml 2025-06-04 21:44:03 +10:00
github-actions[bot]
e1282a6371
chore: update sponsors.svg (#4331)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-06-02 22:48:46 +10:00
github-actions[bot]
fd71325a42
Update Sponsor Image (#4325)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-05-30 21:57:09 +00:00
Lea Anthony
bd8c88e8ac
Update Go tests workflow 2025-05-31 07:55:19 +10:00
Lea Anthony
8e51d6d32f
fix: Correct indentation for build_results job in build-and-test-v3.yml (must be under jobs:) 2025-05-31 07:36:55 +10:00
Lea Anthony
b3bb856ed1
Skip Go tests on sponsor image PRs 2025-05-31 07:27:46 +10:00
Lea Anthony
2936e8b98e
Update semgrep action 2025-05-31 07:18:52 +10:00
Lea Anthony
539effb6b5
Update workflows 2025-05-31 07:13:29 +10:00
Lea Anthony
d3d87d09aa
Fix v3 workflow 2025-05-30 08:12:17 +10:00
github-actions[bot]
c68c85a384
Update Sponsor Image (#4308)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-05-26 21:02:21 +10:00
github-actions[bot]
3248f2fd31
Update Sponsor Image (#4306)
* chore: update sponsors.svg

* Update scripts

* Update node version

---------

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-05-25 22:18:09 +10:00
rynsf
ac1479afa2
fix: cross compiling on linux for windows (#4263)
compile wailsbindings for the build machine

Co-authored-by: rynsf <rynsf@users.noreply.github.com>
Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-05-19 21:16:10 +10:00
Lea Anthony
0c24aa4313
More workflow updates 2025-05-15 06:25:05 +10:00
Lea Anthony
2bd3de1f7f
Add GitHub Actions workflow for stale issue management 2025-05-14 20:52:52 +10:00
Lea Anthony
0744756695
Update stale bot configuration to protect older issues 2025-05-14 20:50:02 +10:00
Lea Anthony
594e2bf60f
Add issue management automation tools 2025-05-14 20:46:51 +10:00
hkhere
151beed7e8
[V2] Upgrade fsnotify to v1.9.0 to fix hot reload and quit issues on … (#4266)
* [V2] Upgrade fsnotify to v1.9.0 to fix hot reload and quit issues on Windows

There may be a bug in fsnotify v1.8.0 that prevents hot reloading and Ctrl+C quitting from working on Windows. Upgrading to fsnotify v1.9.0 resolves the issue.

* Update changelog.mdx

---------

Co-authored-by: hkhere <hk@tinyclouds.cn>
2025-05-08 07:37:09 +10:00
Mehdi
6af1028856
fix(logger): respect log level from environment variable in dev mode (#4083)
* fix(logger): respect log level from environment variable in dev mode

* chore: add entry to changelog

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-05-05 19:09:34 +10:00
Lea Anthony
a93c52e182
Merge pull request #4253 from FrancescoLuzzi/bugfix/4252_fix_SaveFileDialog_logic
fix: don't return error when SaveFileDialog is cancelled by the user
2025-05-02 08:07:54 +10:00
Lea Anthony
49a4193887
Merge pull request #4260 from TekWizely/tekwizely-primevue-sakai
Submitted a Vue template to the Community Templates List
2025-05-02 07:52:22 +10:00
TekWizely
1bc5a2758f
Nitpick Feedback Changes
Moved entry to be in sorted location.
Removed version numbers from Vue and PrimeVue
2025-04-30 12:51:25 -07:00
TekWizely
0581290cfe
Update templates.mdx
Adds primevue-sakai template.
2025-04-29 15:53:59 -07:00
Francesco Luzzi
105c10aee7 fix: don't return error when SaveFileDialog is cancelled by the user 2025-04-29 19:46:44 +02:00
Lea Anthony
d1838f42bf
Merge pull request #4249 from sid-the-sloth1/patch-1
Submitted a Vanilla JS template to the Community Templates List
2025-04-28 22:35:32 +10:00
Hardy
30d7cccf50
Submitted a Vanilla JS template
project link: https://github.com/sid-the-sloth1/wails-vanillaJSWithRouter-template
2025-04-28 10:54:47 +05:30
Lea Anthony
19c8d98ed3
Merge pull request #4243 from nnashwin/fix/updates-copyright-year
fix: updates the copyright to be this year (2025)
2025-04-26 23:50:29 +10:00
Norman Nashwin
ce5f733457 fix: adds record of the change within the changelog.mdx 2025-04-26 12:30:22 +09:00
Norman Nashwin
312146c70e fix: updates the copyright to be this year (2025) 2025-04-26 11:42:29 +09:00
Lea Anthony
4788263b9a
Merge pull request #4047 from lyimmi/bugfix/2431_wayland_max_size
[V2 - Linux] Bugfix/2431 wayland max size
2025-04-18 16:40:09 +10:00
Lea Anthony
a220d53a91
Merge branch 'master' into bugfix/2431_wayland_max_size 2025-04-18 16:39:59 +10:00
Lea Anthony
de29a0bd6f
Revert "Make calls thread safe"
This reverts commit 347d8cf861.
2025-04-18 16:36:46 +10:00
Lea Anthony
467bbfc4e5
Merge pull request #4136 from APshenkin/feature/allow-disable-panic-recovery
Add option to disable panic recovery in message processing
2025-04-18 15:44:02 +10:00
Lea Anthony
741ff242f7
Merge pull request #4215 from superDingda/bugfix/4211_long_ws_msg_truncation
fix: prevent truncation of long WebSocket messages in dev mode
2025-04-18 15:34:28 +10:00
Lea Anthony
83ec246f63
Merge branch 'master' into bugfix/4211_long_ws_msg_truncation 2025-04-18 15:34:17 +10:00
Lea Anthony
af659850fc
Merge pull request #4209 from joshuapare/invalid-mapkey-array-arg-generation
fixing typescript generation of map of struct arrays
2025-04-18 15:28:10 +10:00
Lea Anthony
9a10be69ae
Merge branch 'master' into invalid-mapkey-array-arg-generation 2025-04-18 15:22:48 +10:00
Andrey Pshenkin
797016d736
Merge branch 'master' into feature/allow-disable-panic-recovery 2025-04-17 11:52:36 +01:00
dingda.li
fc1cf90574 fix: correct message type to TextMessage 2025-04-15 15:42:10 +08:00
dingda.li
b12dcb054b fix: prevent truncation of long WebSocket messages in dev mode 2025-04-15 14:13:56 +08:00
Lea Anthony
f8998da78d
Fix for webview2 detection 2025-04-12 13:21:37 +10:00
joshuapare
bc7b816c37
postfix [] in instance is element accessor, not array type declaration 2025-04-10 08:50:12 -05:00
Lea Anthony
194b0586ba
Merge pull request #4141 from josStorer/fix-dev-skipmodtidy
fix -m build flag for dev command when recompiling
2025-04-09 18:14:02 +10:00
Lea Anthony
2f389d99a8
Merge branch 'master' into fix-dev-skipmodtidy 2025-04-09 18:13:42 +10:00
Lea Anthony
5b1caf0d08
Merge pull request #4110 from superDingda/bugfix/4109_restore_minimized_window
fix(windows): correct window restoration behavior after minimization
2025-04-09 18:03:49 +10:00
dingda
8dc509f49b
Merge branch 'master' into bugfix/4109_restore_minimized_window 2025-04-09 11:18:51 +08:00
Lea Anthony
3930f58203
Merge pull request #4162 from brianetaveras/patch-3
Update options docs to clarify linux webview gpu defaults
2025-04-09 08:40:19 +10:00
Lea Anthony
ba9ab72893
Merge pull request #4182 from superDingda/bugfix/4111_abundant_console_logs
fix: suppress excessive console logs after updating to v2.10.1
2025-04-09 08:17:24 +10:00
Lea Anthony
27c9737ecd
Merge branch 'master' into bugfix/4111_abundant_console_logs 2025-04-08 21:57:51 +10:00
Lea Anthony
f9392e9980
Merge pull request #4184 from darkb0ts/v3-alpha-docs-template
new template for wails 2025 react-ts and typescript
2025-04-08 21:48:36 +10:00
darkb0ts
6ac0bcdf7f new template for wails 2025 react-ts and typescript 2025-04-07 12:26:06 +05:30
Andrey Pshenkin
125c4ab485
Merge branch 'master' into feature/allow-disable-panic-recovery 2025-04-01 17:20:33 +01:00
dingda.li
92a25c7dfd fix: suppress excessive console logs after updating to v2.10.1 2025-04-01 15:19:27 +08:00
B.T
dadf638c00
Merge branch 'master' into patch-3 2025-03-31 20:09:56 -04:00
brian
e7643b8605 Added more information to the documentation 2025-03-31 20:08:45 -04:00
brian
9763cd3465 Added updates to the changelog 2025-03-31 19:56:45 -04:00
Lea Anthony
7245b5b4d7
Merge pull request #4167 from Khady/patch-1
doc/howdoesitwork: fix indentation
2025-03-31 21:05:19 +11:00
Louis
2acf32cd36
doc/howdoesitwork: fix indentation 2025-03-27 12:49:10 +08:00
B.T
9c7dc05cea
Update options docs to clarify linux webview gpu defaults 2025-03-25 08:10:44 -04:00
josc146
59d8650a0f
Update dev.go 2025-03-20 16:33:04 +08:00
josc146
00e2f16971
Merge branch 'master' into fix-dev-skipmodtidy 2025-03-20 16:32:14 +08:00
Lea Anthony
993fde17fe
Merge pull request #4143 from josStorer/skipembedcreate
add -skipembedcreate cli option to improve recompile time
2025-03-20 06:18:31 +11:00
josc146
ae5e3f47a7 update cli doc for -skipembedcreate 2025-03-19 15:16:27 +08:00
josc146
6bf875f2a2 Update changelog 2025-03-19 15:04:21 +08:00
josc146
61876448f7 Update changelog 2025-03-19 14:55:47 +08:00
Lea Anthony
202eecdf94
Merge branch 'master' into bugfix/4109_restore_minimized_window 2025-03-19 07:21:22 +11:00
josc146
ecf1c41db4 improve comment 2025-03-16 19:32:31 +08:00
josc146
915efa06bb fix -m build flag for dev command when recompile 2025-03-16 18:35:56 +08:00
josc146
4541cf0b3a add -skipembedcreate cli option 2025-03-16 18:26:26 +08:00
Lea Anthony
538ba8daac
Blog Post 2025-03-16 14:01:11 +11:00
Lea Anthony
c2db2e550f
Update semgrep action 2025-03-16 12:36:59 +11:00
Lea Anthony
ea2bfa9bcd
Update verify steps in pipeline 2025-03-16 11:34:29 +11:00
dingda
d4015123dd
Merge branch 'master' into bugfix/4109_restore_minimized_window 2025-03-15 14:15:52 +08:00
Andrey Pshenkin
ef73a75c68
add changelog 2025-03-13 00:18:09 +00:00
Andrey Pshenkin
2478926274
add changelog 2025-03-13 00:17:19 +00:00
Andrey Pshenkin
e9100152e7
feat: add option to disable panic recovery in message processing 2025-03-13 00:06:07 +00:00
dingda.li
5df9ac1a53 docs: update changelog for window restoration fix 2025-03-12 15:43:20 +08:00
Lea Anthony
6a3ba3d613
Update Results stage in pipeline
(cherry picked from commit fe6635c1eb)
2025-03-12 08:33:17 +11:00
Lea Anthony
15191c3bbe
Merge pull request #4127 from wailsapp/update-sponsors
Update Sponsor Image
2025-03-11 20:02:48 +11:00
leaanthony
6b288be2fa chore: update sponsors.svg 2025-03-11 00:16:55 +00:00
Lea Anthony
5f233f9dd6
Merge pull request #4123 from wailsapp/update-sponsors
Update Sponsor Image
2025-03-09 11:43:51 +11:00
leaanthony
a78e8c95ee chore: update sponsors.svg 2025-03-09 00:15:18 +00:00
Lea Anthony
4228eab052
Merge branch 'master' into bugfix/4109_restore_minimized_window 2025-03-08 12:13:37 +11:00
Lea Anthony
267e4ec9fa
PR workflow change 2025-03-08 11:43:22 +11:00
Lea Anthony
aee6d99702
Remove Warp agents 2025-03-08 11:34:08 +11:00
Lea Anthony
dab09a94d7
Merge remote-tracking branch 'origin/master' 2025-03-08 10:53:36 +11:00
Lea Anthony
6381e520b9
Pipeline update 2025-03-08 10:53:18 +11:00
Lea Anthony
36743ca76f
Merge pull request #4113 from wailsapp/update-sponsors
Update Sponsor Image
2025-03-07 09:05:55 +11:00
leaanthony
a04a31be8c chore: update sponsors.svg 2025-03-05 00:16:53 +00:00
dingda.li
114c15197b fix(windows): correct window restoration behavior after minimization
- Replace SW_RESTORE with SW_SHOW flag
- Resolves #4109
2025-03-04 14:39:06 +08:00
Lea Anthony
fa4bf38b12
Try warpbuild 2025-03-03 21:32:09 +11:00
Lea Anthony
7d66f3c26a
Update changelog 2025-03-02 10:50:09 +11:00
Lea Anthony
dbf7bba69f
Merge pull request #3891 from ronen25/master
Fix Windows 11 identification in `wails doctor`
2025-03-02 10:48:03 +11:00
Lea Anthony
b2f84d041c
Merge branch 'master' into master 2025-03-02 10:47:30 +11:00
Lea Anthony
76f806fe82
Merge branch 'master' into bugfix/2431_wayland_max_size 2025-03-01 16:36:10 +11:00
Ben McCann
76e41a6211
docs: update Svelte recommendation (#4085)
* docs: update Svelte recommendation

* Update routing.mdx

* Update changelog.mdx

* Updated changelog

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-03-01 05:24:41 +00:00
Lea Anthony
471a50cd04
[CI] Change PR workflow for v2 2025-03-01 16:20:37 +11:00
Lea Anthony
cacbf030d6
[ci] Remove char 2025-02-28 07:33:51 +11:00
Lea Anthony
49ff9b62bf
[ci] Better PR checks 2025-02-28 07:32:29 +11:00
Lea Anthony
f56093ae27
[ci] update PR Checks conditions 2025-02-28 07:19:57 +11:00
github-actions[bot]
8519d8f024
Update Sponsor Image (#4095)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-02-25 06:36:29 +11:00
Lea Anthony
54438a7644
v2.10.1 2025-02-24 18:56:38 +11:00
Lea Anthony
7aba2c3b95
Fix issues building with darwin/universal target (#4093)
Fixed issues building with `darwin/universal` target
2025-02-24 18:53:43 +11:00
github-actions[bot]
5be7ee74f8
Update Sponsor Image (#4081)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-02-19 05:34:52 +11:00
Lea Anthony
f6aba688a9
Update runtime 2025-02-16 16:15:20 +11:00
Lea Anthony
8624da51f8
Fix listenerOff issue. 2025-02-16 16:13:00 +11:00
Snider
0d81cd2831
Update details (#4052)
Using my GitHub profile + added the GitHub action since it is getting used a fair bit
2025-02-16 11:59:39 +11:00
github-actions[bot]
3224db508d
Update Sponsor Image (#4079)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-02-16 11:23:32 +11:00
Lea Anthony
1fb6403e7d
v2.10 2025-02-15 09:10:13 +11:00
github-actions[bot]
ba01492198
Update Sponsor Image (#4073)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-02-14 18:15:43 +11:00
Lea Anthony
7e45e3d025
[Snyk] Upgrade sponsorkit from 0.9.3 to 0.16.2 (#4062)
fix: upgrade sponsorkit from 0.9.3 to 0.16.2

Snyk has created this PR to upgrade sponsorkit from 0.9.3 to 0.16.2.

See this package in npm:
sponsorkit

See this project in Snyk:
https://app.snyk.io/org/leaanthony/project/65547be6-c86d-4fef-aa06-dc1445189250?utm_source=github&utm_medium=referral&page=upgrade-pr

Co-authored-by: snyk-bot <snyk-bot@snyk.io>
2025-02-14 08:42:17 +11:00
stffabi
49b524d169
[v2, darwin] Fix updating menus (#4057) 2025-02-10 20:59:16 +11:00
github-actions[bot]
bedebe0c06
Update Sponsor Image (#4036)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-02-09 11:49:57 +11:00
Lea Anthony
536422d508
Update contributors 2025-02-09 11:47:53 +11:00
Lea Anthony
fa7c6d80a2
Fix ErrorCancelled typo 2025-02-08 13:03:38 +11:00
Lea Anthony
3605fdf42f
Update dependencies. Fix buildvcs compile error 2025-02-08 12:56:06 +11:00
Lea Anthony
347d8cf861
Make calls thread safe 2025-02-08 10:37:58 +11:00
Zámbó, Levente
89db2ad082 add changelog 2025-02-06 11:23:50 +01:00
Zámbó, Levente
8d1e5188ad fix typo 2025-02-05 16:07:42 +01:00
Zámbó, Levente
f07ead3fb2 add comments 2025-02-05 16:04:49 +01:00
Zámbó, Levente
d04fd9a35f change ifdef to function 2025-02-05 15:49:11 +01:00
Zámbó, Levente
bed3ec4163 add decorator diff to window max values 2025-02-05 15:13:11 +01:00
Lea Anthony
98f3cc845f
Merge branch 'master' into master 2025-01-24 08:13:23 +11:00
Ronen Lapushner
74fa41330e Added to chaneglog 2025-01-23 14:15:53 +02:00
Lea Anthony
4a1d101d04
Fix invalid path for windows dialogs (#4019)
* Fix invalid path for windows dialogs

* Update Go version in pipelines for v2
2025-01-23 22:12:37 +11:00
Atterpac
d824318a66
fix dev mode logging bug (#3972)
changelog.md

retain env support

actually fix the issue
2025-01-23 11:12:18 +00:00
Atterpac
00be6f24d2
[v2] Fix reloaddirs wails.json config (#4005)
fix reloaddirs config option

changelog.mdx
2025-01-23 11:11:29 +00:00
github-actions[bot]
55b90a50bc
Update Sponsor Image (#4022)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-01-23 21:59:02 +11:00
Ronen Lapushner
f82c971cb0 Added "Branding" to doctor 2025-01-21 21:18:10 +02:00
Ronen Lapushner
2aea5e2dae Added initial Windows 11-supporting branding 2025-01-21 21:15:24 +02:00
Lea Anthony
481c145cd3
Update deps 2025-01-20 21:51:11 +11:00
github-actions[bot]
51c7453bd2
Update Sponsor Image (#4018)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-01-17 18:58:52 +11:00
ronaldinho_x86
4598af4d7a
recover from process message instead crash the whole app (#4016)
* recover from process message instead crash the whole app

* update changelog.mdx (#4015)
2025-01-17 16:45:54 +11:00
Jeremy Jay
c4fdfd6415
Fix miscellaneous bindings and typescript export bugs (#3978)
* Do not attempt to export fields that cannot be json-encoded

* update changelog w/ PR

* also skip UnsafePointers

* WIP to allow conversion from Go generic types to typescript

* support for non-primitive generics also :)

* fix generic types in parameters / return args

* fixes a namespacing bug when mapping to pointer to struct

* fixing invalid knownstructs

* found a place it mattered, pushing the star replacement to the generate side

* descend as much as necessary to find structs

caught these examples in http.Request.TLS:

PeerCertificates []*x509.Certificate
VerifiedChains [][]*x509.Certificate

* accidently reverted other fix

* switch syntax for typescript record outputs

prior syntax is primarily useful for naming keys
so not useful here, and this syntax avoids square
brackets in output which greatly simplifies
generation for Go generics

* better handle edge cases for nested arrays and slices

* lots o tests

* update changelog

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-01-13 20:14:54 +11:00
github-actions[bot]
d9b99a990d
Update Sponsor Image (#4004)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-01-13 19:04:57 +11:00
github-actions[bot]
d6383364ab
Update Sponsor Image (#4002)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-01-12 20:41:27 +11:00
Lea Anthony
3a4c3e7a7f
Ensure showHiddenFiles works with directory dialog (#3904)
* Ensure showHiddenFiles works with directory dialog

* Updated docs
2025-01-11 14:35:12 +11:00
github-actions[bot]
caf05adff3
Update Sponsor Image (#3998)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-01-11 14:34:42 +11:00
Akshay Kalose
67afec3c2a
Add grpcmd-gui to Community Showcase (#3994) 2025-01-11 10:31:24 +11:00
Jeremy Jay
7566ed4ba6
Do not attempt to export fields that cannot be json-encoded (#3975)
* Do not attempt to export fields that cannot be json-encoded

* update changelog w/ PR

* also skip UnsafePointers

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2025-01-10 15:11:13 +11:00
github-actions[bot]
90be707d9c
Update Sponsor Image (#3983)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2025-01-05 12:34:48 +11:00
bronya0
82fd9de339
Fix:Adjust the first-level heading to fix the page display format (#3968)
* Update kafka-king.mdx

* Update kafka-king.mdx

* Update kafka-king.mdx
2024-12-27 17:26:27 +00:00
562589540
461d34c620
fix: prevent unnecessary redraws during window minimize/restore (#3955)
* fix: prevent unnecessary redraws during window minimize/restore

This fixes the window flickering issue when minimizing/restoring by:
1. Adding isMinimizing flag to track window state
2. Adding SetPadding filter to prevent redundant redraws
3. Properly handling minimize/restore window states

Fixes #3951

* docs: improve comments and changelog for frameless window flickering fix

- Add detailed comments about frameless window fix
- Update changelog to clarify this is a frameless window issue
- Add bilingual comments for better understanding

Fixes #3951

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2024-12-26 16:13:46 +11:00
Lea Anthony
ee2156ee2c
Added Go requirements for Mac 15+ 2024-12-23 21:05:33 +11:00
bronya0
d730c963f4
docs: add Kafka King to showcase (#3964)
* add showcase img

* Create kafka-king.mdx

* add showcase

* Update kafka-king.mdx

* Delete website/static/img/showcase/kafka-King-img_3.png

* Create kafka-king.mdx

* Create kafka-king.mdx
2024-12-23 21:01:18 +11:00
github-actions[bot]
fc0aea1038
Update Sponsor Image (#3956)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-12-18 19:47:40 +11:00
github-actions[bot]
e219e3b65e
Update Sponsor Image (#3952)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-12-16 19:48:44 +11:00
github-actions[bot]
42e77506d9
Update Sponsor Image (#3943)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-12-13 20:35:31 +11:00
Akshay Kalose
896a90f69e
Add Minesweeper XP to Community Showcase (#3940) 2024-12-09 23:01:25 +11:00
github-actions[bot]
c27d2ceb8e
Update Sponsor Image (#3938)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-12-08 11:36:03 +11:00
lvyaoting
dd4aa56310
chore: fix some comments (#3932)
Signed-off-by: lvyaoting <lvyaoting@outlook.com>
2024-12-06 14:35:46 +11:00
希嘉嘉
6345b64a22
Update templates.mdx (#3930)
add a svelte templage
2024-12-05 05:18:29 +11:00
Lea Anthony
2c45ae69bb
Update go-webview2 to v1.0.18. 2024-12-02 07:48:38 +11:00
github-actions[bot]
dade880064
Update Sponsor Image (#3918)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-11-30 11:30:24 +11:00
Cristian Greco
bd57598c03
Update Mac AppStore Guide to support app names containing spaces (#3923)
* Update Mac AppStore Guide to support app names containing spaces

* Update changelog

* Add author
2024-11-30 09:09:37 +11:00
Lane Shukhov
8deb8a04e7
Add WailsTerm to community showcases (#3914)
add WailsTerm to community showcases
2024-11-26 18:37:29 +11:00
Perny
93b49391c7
chore: update svelte CLI command (#3912)
* chore: update svelte CLI command

* chore: specify folder location for svelte project creation command

* Update website/docs/guides/sveltekit.mdx

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2024-11-25 19:13:55 +11:00
Lea Anthony
e5be3c5cfe
Update MacOS requirements 2024-11-23 22:57:29 +11:00
Lea Anthony
63e1f3c09c
Fix TS definition of WindowSetSize 2024-11-23 22:07:51 +11:00
github-actions[bot]
39c922bc9f
Update Sponsor Image (#3899)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-11-22 19:10:20 +11:00
github-actions[bot]
cadbccfb72
Update Sponsor Image (#3892)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-11-19 19:17:19 +11:00
dependabot[bot]
ba38474050
Bump the go_modules group across 3 directories with 1 update (#3410)
Bumps the go_modules group with 1 update in the /v2 directory: [golang.org/x/net](https://github.com/golang/net).
Bumps the go_modules group with 1 update in the /v2/examples/customlayout directory: [golang.org/x/net](https://github.com/golang/net).
Bumps the go_modules group with 1 update in the /v2/internal/staticanalysis/test/standard directory: [golang.org/x/net](https://github.com/golang/net).


Updates `golang.org/x/net` from 0.20.0 to 0.23.0
- [Commits](https://github.com/golang/net/compare/v0.20.0...v0.23.0)

Updates `golang.org/x/net` from 0.17.0 to 0.23.0
- [Commits](https://github.com/golang/net/compare/v0.20.0...v0.23.0)

Updates `golang.org/x/net` from 0.17.0 to 0.23.0
- [Commits](https://github.com/golang/net/compare/v0.20.0...v0.23.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: direct:production
  dependency-group: go_modules
- dependency-name: golang.org/x/net
  dependency-type: indirect
  dependency-group: go_modules
- dependency-name: golang.org/x/net
  dependency-type: indirect
  dependency-group: go_modules
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2024-11-17 20:56:38 +11:00
dependabot[bot]
86e3d51c8e
Bump the go_modules group across 2 directories with 1 update (#3408)
Bumps the go_modules group with 1 update in the /v2/examples/customlayout directory: [golang.org/x/net](https://github.com/golang/net).
Bumps the go_modules group with 1 update in the /v2/internal/staticanalysis/test/standard directory: [golang.org/x/net](https://github.com/golang/net).


Updates `golang.org/x/net` from 0.17.0 to 0.23.0
- [Commits](https://github.com/golang/net/compare/v0.17.0...v0.23.0)

Updates `golang.org/x/net` from 0.17.0 to 0.23.0
- [Commits](https://github.com/golang/net/compare/v0.17.0...v0.23.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
  dependency-group: go_modules
- dependency-name: golang.org/x/net
  dependency-type: indirect
  dependency-group: go_modules
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-17 20:55:06 +11:00
Damien Sedgwick
10e3a13d12
chore: removed incorrect go.mod instructions (#3878)
* chore: removed incorrect go.mod instructions

* chore: updated changelog.mdx

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2024-11-16 11:04:37 +11:00
Lea Anthony
5df8ecc961
Update PR template
(cherry picked from commit 0f0f9a0262)
2024-11-16 10:46:19 +11:00
github-actions[bot]
dca2064916
Update Sponsor Image (#3884)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-11-16 09:43:28 +11:00
github-actions[bot]
13d4b218e7
Update Sponsor Image (#3883)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-11-14 07:24:05 +11:00
Takuya HARA
d1ba26a043
Fixed typo (#3846)
* Fixed typo

* Update changelog.mdx
2024-11-07 22:24:32 +11:00
Takuya HARA
1c163422aa
Fixed example for macOS menu (#3847)
* Fixed example for macOS menu

* Update changelog.mdx
2024-11-07 06:42:20 +11:00
github-actions[bot]
bdb415130b
Update Sponsor Image (#3874)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-11-04 19:00:29 +11:00
Lea Anthony
e573bf4df9
Update go.sum 2024-11-03 14:44:58 +11:00
灰狼
9772523f46
Add wails-nextjs-tailwind-template (#3871)
Update templates.mdx
2024-11-03 14:43:10 +11:00
Lea Anthony
157c8fdbc7
Update to go-webview 0.1.17 2024-11-02 20:29:34 +11:00
github-actions[bot]
758a63648e
Update Sponsor Image (#3863)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-10-31 00:03:29 +11:00
github-actions[bot]
f2881822d2
Update Sponsor Image (#3858)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-10-26 14:26:31 +11:00
github-actions[bot]
bb4e95e22d
Update Sponsor Image (#3855)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-10-24 12:09:16 +11:00
Pratik Mota
5ebccf1ea6
[Documentation]Adding notes for latest linux version and libwebkit issue (#3806)
* Adding notes for latest linux version and libwebkit issue

* adding change log details

* updating document changes to website/docs folder

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2024-10-21 08:32:19 +11:00
Lea Anthony
f08f4be868 Rebuild runtime js 2024-10-20 14:17:49 +11:00
Andrey Pshenkin
a964be1ada
Allow to specify macos-min-version externally (#3756)
* Allow to specify macos-min-version externally

* update changelog

* add note in documentation for macos version

* spelling fixes
2024-10-20 14:09:39 +11:00
William Kim
f33e627360
docs: add korean translation for Introduction (#3780) 2024-10-20 14:08:52 +11:00
Andrey Pshenkin
1b6ed1bc00
Allow set window class name via options for Windows (#3828)
* Allow set window class name via options

* update changelog
2024-10-20 13:36:13 +11:00
github-actions[bot]
14cc9ec45b
Update Sponsor Image (#3824)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-10-15 01:26:01 +11:00
JinTao Chen
26ff639b62
Updated documentation with new wails template (#3820) 2024-10-13 18:14:58 +11:00
github-actions[bot]
10abe246b0
Update Sponsor Image (#3818)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-10-12 18:01:02 +11:00
fcying
8a5a0506bf
fix: pass platform and arch to GenerateBindings for cross compilation (#3795) 2024-10-10 20:17:43 +11:00
xvertile
a2e32fe414
Updated documentation with new wails template (#3802)
Created a new template using the latest version of wails and tailwind.
2024-10-10 19:46:27 +11:00
Barat Semet
7a5e41f904
Add Resizem to community showcase (#3813)
Resizem is an app designed for bulk image process. It is particularly useful for users who need to resize, convert, and manage large numbers of image files at once.
2024-10-10 19:45:56 +11:00
github-actions[bot]
5b8594928b
Update Sponsor Image (#3799)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-10-10 19:45:35 +11:00
github-actions[bot]
a6288c414e
Update Sponsor Image (#3769)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-09-30 15:48:28 +10:00
nick-bae
bd2c1ea73f
bugfix : fix error on building runnable .app on MacOS when 'name' and 'outputfilename' are different. (#3789)
* mod : added OutputFilename field to assetData \n mod : modified resolveProjectData to export OutputFilename \n mod : modified CFBundleExecutable values to .OutputFilename in info.dev.plist, info.plist

* mod : update changelog.mdx

---------

Co-authored-by: nick-bae <nick.bae@ddkakaoenterprise.com>
2024-09-29 03:06:27 +00:00
github-actions[bot]
429e94f4ce
Update Sponsor Image (#3767)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-09-22 11:29:59 +10:00
Lea Anthony
f302c8053c
v2.9.2 2024-09-18 21:29:21 +10:00
pagal
5d2b4308a8
Removed unnecessary files. Fixes #3737 (#3738)
Removed unnecessary files.

Issue was fixed via #1813 and the extra readmes is not needed anymore
2024-09-09 08:38:14 +10:00
Matt Armstrong
f4b21a6b37
chore: fix DeskGap author link on credits page (#3724) 2024-09-06 08:08:23 +10:00
github-actions[bot]
265d2e45db
Update Sponsor Image (#3727)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-09-06 07:56:29 +10:00
github-actions[bot]
c3a7266001
Update Sponsor Image (#3725)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-09-04 21:11:36 +10:00
Lea Anthony
3721d73423
More syscall fixes (#3713)
* More syscall fixes

* Update changelog.mdx
2024-09-02 19:34:22 +10:00
github-actions[bot]
d218384396
Update Sponsor Image (#3711)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-09-01 17:05:53 +10:00
Lea Anthony
475534c132
V2 bugfix/windows syscall go 1.23 (#3707)
* Initial test

* Fix calls

* Update changelog.mdx

* Free allocated strings

* Misc fixes
2024-08-28 19:24:59 +10:00
dy
8e810d59f0
Update templates.mdx (#3567)
Added "wails-template-nextjs-app-router-src"

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2024-08-25 21:52:31 +10:00
Ignas Bernotas
1a2310265f
Modified docs to reflect the correct password syntax for the gon-sign.json file (#3620)
* fix: docs macOS signing password syntax

* fix: docs macOS signing password syntax

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2024-08-25 11:33:09 +00:00
github-actions[bot]
87b1325dbc
Update Sponsor Image (#3706)
chore: update sponsors.svg

Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-08-25 20:41:19 +10:00
Mohamed Feddad
f8c8611219
Fix drag and drop missing cursor icon (#3703)
* fix: darg and drop missing cursor icon

* chore: update change log
2024-08-25 20:16:09 +10:00
Mohamed Feddad
4b6a8e17c5
fix: failsafe JavaScript event emitter notifyListeners (#3695)
* fix: failsafe JavaScript event emitter `notifyListeners`

* chore: update change log
2024-08-20 21:00:54 +00:00
Andreas Deininger
868931fe72
Fix typos (#3628)
* Fix typos

* Update howdoesitwork.mdx

* Added entry to changelog

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2024-08-20 19:22:43 +10:00
Lea Anthony
3f83b42db5
FIX: Address Mac CGO Crash (#3590)
* Copy request to Go memory

* Update changelog.mdx

* Update v2/pkg/assetserver/webview/responsewriter_darwin.go

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Fix import

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2024-08-20 18:12:56 +10:00
Lea Anthony
9995dae4ad
Nil pointer check for DnD (#3597)
* Nil pointer check for DnD

* Update changelog
2024-08-18 21:04:02 +10:00
levinit
d36d1718d9
Modified ZoomFactor and IsZoomControlEnabled options to be Windows-only options (#3644) 2024-08-18 20:43:53 +10:00
github-actions[bot]
0f61873fe8
chore: update sponsors.svg (#3679)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-08-14 12:20:59 +10:00
Jeremy Jay
fe1f23b0fd
If a field is exported, generate json even in the absence of tags (#3678)
* if no JSON tag, check if field is exported

* add no-tags binding test case

* update changelog for #3678
2024-08-14 07:49:08 +10:00
Ian M. Jones
2b35861aee
Fix doctor command not finding pkg-config on Solus (#3670)
* Fix doctor command not finding pkg-config on Solus

* Update changelog
2024-08-10 17:27:37 +10:00
github-actions[bot]
ddf27038e1
chore: update sponsors.svg (#3661)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-08-06 14:19:37 +10:00
taisei
5b091db26d
Fixed an error that occurred when an author name contains a string that is not suitable for JSON (#3638)
* fix(pkg): Fixed an issue where wails new would throw an error if the author name contained non-JSON legal characters.

* refactor(pkg): Incorporating coderabbit's suggestions

* docs: write changelog.mdx

* Escape using json package. Add tests.

* Update test.

---------

Co-authored-by: Lea O'Anthony <lea.anthony@gmail.com>
2024-07-29 21:34:19 +10:00
github-actions[bot]
fe9495d776
chore: update sponsors.svg (#3641)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-07-28 11:23:53 +10:00
github-actions[bot]
7a40cc59ca
chore: update sponsors.svg (#3624)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-07-20 15:24:11 +10:00
Alex Pliutau
e941f36267
#3200: Use OutputFilename instead of Name (#3551)
* Use OutputFilename instead of Name

* #3200: add changelog entry

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
2024-07-20 08:50:16 +10:00
github-actions[bot]
482f19e6b9
chore: update sponsors.svg (#3619)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-07-18 12:11:31 +10:00
github-actions[bot]
dd6eb0fa75
chore: update sponsors.svg (#3618)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-07-17 20:30:35 +10:00
github-actions[bot]
9efaedfe39
chore: update sponsors.svg (#3604)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-07-12 19:04:04 +10:00
github-actions[bot]
c4c0d64fd5
chore: update sponsors.svg (#3591)
Co-authored-by: leaanthony <1943904+leaanthony@users.noreply.github.com>
2024-07-12 07:38:21 +10:00
Francesco Luzzi
ffcfa1b0e7
fix: compute dropped file path before css handling (#3595)
* fix: compute dropped file path before css handling

* udpate changelog

* Update website/src/pages/changelog.mdx

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

---------

Co-authored-by: Lea Anthony <lea.anthony@gmail.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
2024-07-10 15:00:19 +10:00
Lea Anthony
3204287f96
Fix sponsors workflow 2024-07-10 14:46:51 +10:00
4983 changed files with 144075 additions and 310659 deletions

View file

@ -1,7 +1,6 @@
{
"files": [
"website/src/pages/credits.mdx",
"docs/src/assets/contributors.html"
"website/src/pages/credits.mdx"
],
"imageSize": 75,
"commit": false,

View file

@ -1,71 +0,0 @@
language: en-US
tone_instructions: ''
early_access: false
enable_free_tier: true
reviews:
profile: chill
request_changes_workflow: false
high_level_summary: true
high_level_summary_placeholder: '@coderabbitai summary'
auto_title_placeholder: '@coderabbitai'
review_status: true
poem: true
collapse_walkthrough: false
sequence_diagrams: true
path_filters: []
path_instructions: []
abort_on_close: true
auto_review:
enabled: true
auto_incremental_review: true
ignore_title_keywords: []
labels: []
drafts: false
base_branches: ['v3-alpha', 'master']
tools:
shellcheck:
enabled: true
ruff:
enabled: true
markdownlint:
enabled: true
github-checks:
enabled: true
timeout_ms: 90000
languagetool:
enabled: true
enabled_only: false
level: default
biome:
enabled: true
hadolint:
enabled: true
swiftlint:
enabled: true
phpstan:
enabled: true
level: default
golangci-lint:
enabled: true
yamllint:
enabled: true
gitleaks:
enabled: true
checkov:
enabled: true
detekt:
enabled: true
eslint:
enabled: true
chat:
auto_reply: true
knowledge_base:
opt_out: false
learnings:
scope: auto
issues:
scope: auto
jira:
project_keys: []
linear:
team_keys: []

View file

@ -7,8 +7,6 @@ body:
- type: markdown
attributes:
value: |
***Please note: No bug reports are currently being accepted for Wails v3***
***Please note: No bug reports are currently being accepted for Wails v3***
***Please note: No bug reports are currently being accepted for Wails v3***
Before submitting this issue, please do the following:
- Do a web search for your error. This usually leads to a much better understanding of the issue.
@ -72,7 +70,7 @@ body:
validations:
required: false
- type: textarea
id: systemetails
id: systemdetails
attributes:
label: System Details
description: Please add the output of `wails doctor`.

View file

@ -6,7 +6,6 @@
* YOUR PR MAY BE REJECTED IF IT DOES NOT FOLLOW THESE STEPS *
*********************************************************************
- *DO NOT* submit bugs for a source install of v3, ONLY tagged versions, e.g. v3.0.0-alpha.11
- *DO NOT* submit PRs for v3 alpha enhancements, unless you have opened a post on the discord channel.
All enhancements must be discussed first.
The feedback guide for v3 is here: https://v3alpha.wails.io/getting-started/feedback/
@ -48,7 +47,7 @@ Please paste the output of `wails doctor`. If you are unable to run this command
# Checklist:
- [ ] I have updated `v3/UNRELEASED_CHANGELOG.md` with details of this PR
- [ ] I have updated `website/src/pages/changelog.mdx` with details of this PR
- [ ] My code follows the general coding style of this project
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas

View file

@ -3,7 +3,7 @@ name: Auto Label Issues
on:
issues:
types: [opened, edited, reopened]
pull_request_target:
pull_request:
types: [opened, edited, reopened, synchronize]
jobs:

View file

@ -1,373 +0,0 @@
name: Automated Nightly Releases
on:
workflow_dispatch:
inputs:
force_release:
description: 'Force release even if no changes detected'
required: false
default: false
type: boolean
dry_run:
description: 'Run in dry-run mode (no actual releases)'
required: false
default: false
type: boolean
# schedule:
# Run at 2 AM UTC every day - DISABLED for safety until ready
# - cron: '0 2 * * *'
env:
GO_VERSION: '1.24'
jobs:
check-permissions:
name: Check Release Permissions
permissions: {}
runs-on: ubuntu-latest
outputs:
authorized: ${{ steps.check.outputs.authorized }}
steps:
- name: Check if user is authorized for releases
id: check
run: |
# Only allow specific users to trigger releases
AUTHORIZED_USERS="leaanthony"
if [[ "$AUTHORIZED_USERS" == *"${{ github.actor }}"* ]]; then
echo "✅ User ${{ github.actor }} is authorized for releases"
echo "authorized=true" >> $GITHUB_OUTPUT
else
echo "❌ User ${{ github.actor }} is not authorized for releases"
echo "authorized=false" >> $GITHUB_OUTPUT
fi
detect-v2-changes:
name: Detect v2 Changes
runs-on: ubuntu-latest
needs: check-permissions
if: needs.check-permissions.outputs.authorized == 'true'
outputs:
has_changes: ${{ steps.changes.outputs.has_changes }}
commits_since_last: ${{ steps.changes.outputs.commits_since_last }}
last_release_tag: ${{ steps.changes.outputs.last_release_tag }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Check for v2 changes since last release
id: changes
run: |
echo "🔍 Checking for v2 changes since last release..."
# Find the last v2 release tag
LAST_TAG=$(git tag -l "v2.*" --sort=-version:refname | head -n 1)
if [ -z "$LAST_TAG" ]; then
echo "No previous v2 tags found, assuming first release"
LAST_TAG=$(git rev-list --max-parents=0 HEAD)
echo "has_changes=true" >> $GITHUB_OUTPUT
echo "commits_since_last=999" >> $GITHUB_OUTPUT
echo "last_release_tag=none" >> $GITHUB_OUTPUT
else
echo "Last v2 release tag: $LAST_TAG"
echo "last_release_tag=$LAST_TAG" >> $GITHUB_OUTPUT
# Count commits since last release affecting v2 or root files
COMMITS_COUNT=$(git rev-list --count ${LAST_TAG}..HEAD -- v2/ website/ README.md CHANGELOG.md || echo "0")
echo "Commits since last v2 release: $COMMITS_COUNT"
echo "commits_since_last=$COMMITS_COUNT" >> $GITHUB_OUTPUT
if [ "$COMMITS_COUNT" -gt 0 ] || [ "${{ github.event.inputs.force_release }}" == "true" ]; then
echo "✅ Changes detected or forced release"
echo "has_changes=true" >> $GITHUB_OUTPUT
else
echo " No changes detected since last release"
echo "has_changes=false" >> $GITHUB_OUTPUT
fi
fi
detect-v3-changes:
name: Detect v3-alpha Changes
runs-on: ubuntu-latest
needs: check-permissions
if: needs.check-permissions.outputs.authorized == 'true'
outputs:
has_changes: ${{ steps.changes.outputs.has_changes }}
commits_since_last: ${{ steps.changes.outputs.commits_since_last }}
last_release_tag: ${{ steps.changes.outputs.last_release_tag }}
steps:
- name: Checkout v3-alpha branch
uses: actions/checkout@v4
with:
ref: v3-alpha
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Check for v3-alpha changes since last release
id: changes
run: |
echo "🔍 Checking for v3-alpha changes since last release..."
# Find the last v3 alpha release tag
LAST_TAG=$(git tag -l "v3.*-alpha.*" --sort=-version:refname | head -n 1)
if [ -z "$LAST_TAG" ]; then
echo "No previous v3-alpha tags found, assuming first release"
LAST_TAG=$(git rev-list --max-parents=0 HEAD)
echo "has_changes=true" >> $GITHUB_OUTPUT
echo "commits_since_last=999" >> $GITHUB_OUTPUT
echo "last_release_tag=none" >> $GITHUB_OUTPUT
else
echo "Last v3-alpha release tag: $LAST_TAG"
echo "last_release_tag=$LAST_TAG" >> $GITHUB_OUTPUT
# Count commits since last release affecting v3 or docs
COMMITS_COUNT=$(git rev-list --count ${LAST_TAG}..HEAD -- v3/ docs/ || echo "0")
echo "Commits since last v3-alpha release: $COMMITS_COUNT"
echo "commits_since_last=$COMMITS_COUNT" >> $GITHUB_OUTPUT
if [ "$COMMITS_COUNT" -gt 0 ] || [ "${{ github.event.inputs.force_release }}" == "true" ]; then
echo "✅ Changes detected or forced release"
echo "has_changes=true" >> $GITHUB_OUTPUT
else
echo " No changes detected since last release"
echo "has_changes=false" >> $GITHUB_OUTPUT
fi
fi
release-v2:
name: Create v2 Release
runs-on: ubuntu-latest
needs: [check-permissions, detect-v2-changes]
if: |
needs.check-permissions.outputs.authorized == 'true' &&
needs.detect-v2-changes.outputs.has_changes == 'true'
outputs:
version: ${{ steps.release.outputs.version }}
release_notes: ${{ steps.release.outputs.release_notes }}
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
- name: Run v2 release script and extract notes
id: release
run: |
echo "🚀 Running v2 release script..."
cd v2/tools/release
# Run release script and capture output
RELEASE_OUTPUT=$(go run release.go 2>&1)
echo "$RELEASE_OUTPUT"
# Extract version from output or version file
NEW_VERSION=$(cat ../../cmd/wails/internal/version.txt)
echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT
# Extract release notes from delimited output
RELEASE_NOTES=$(echo "$RELEASE_OUTPUT" | sed -n '/=== RELEASE NOTES FOR/,/=== END RELEASE NOTES ===/p' | sed '1d;$d')
# Save release notes to file for multiline output
echo "$RELEASE_NOTES" > ../../../release_notes_v2.md
# Set output (escape for GitHub Actions)
{
echo "release_notes<<EOF"
echo "$RELEASE_NOTES"
echo "EOF"
} >> $GITHUB_OUTPUT
echo "✅ v2 release script completed - version: $NEW_VERSION"
- name: Create v2 git tag and release
if: github.event.inputs.dry_run != 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
VERSION="${{ steps.release.outputs.version }}"
echo "📝 Creating v2 release: $VERSION"
# Configure git
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
# Commit the changelog changes
git add website/src/pages/changelog.mdx v2/cmd/wails/internal/version.txt
git commit -m "chore: release $VERSION
Automated release created by GitHub Actions
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>"
# Create and push tag
git tag -a "$VERSION" -m "Release $VERSION"
git push origin master
git push origin "$VERSION"
# Create GitHub release with notes
gh release create "$VERSION" \
--title "Release $VERSION" \
--notes-file release_notes_v2.md \
--target master
- name: Log dry-run results for v2
if: github.event.inputs.dry_run == 'true'
run: |
echo "🧪 DRY RUN - Would have created v2 release:"
echo "Version: ${{ steps.release.outputs.version }}"
echo "Release Notes:"
cat release_notes_v2.md
release-v3:
name: Create v3-alpha Release
runs-on: ubuntu-latest
needs: [check-permissions, detect-v3-changes]
if: |
needs.check-permissions.outputs.authorized == 'true' &&
needs.detect-v3-changes.outputs.has_changes == 'true'
outputs:
version: ${{ steps.release.outputs.version }}
release_notes: ${{ steps.release.outputs.release_notes }}
steps:
- name: Checkout v3-alpha branch
uses: actions/checkout@v4
with:
ref: v3-alpha
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: ${{ env.GO_VERSION }}
- name: Run v3 release script and extract notes
id: release
run: |
echo "🚀 Running v3-alpha release script..."
cd v3/tasks/release
# Run release script and capture output
RELEASE_OUTPUT=$(go run release.go 2>&1)
echo "$RELEASE_OUTPUT"
# Extract version from output or version file
NEW_VERSION=$(cat ../../internal/version/version.txt)
echo "version=$NEW_VERSION" >> $GITHUB_OUTPUT
# Extract release notes from delimited output
RELEASE_NOTES=$(echo "$RELEASE_OUTPUT" | sed -n '/=== RELEASE NOTES FOR/,/=== END RELEASE NOTES ===/p' | sed '1d;$d')
# Save release notes to file for multiline output
echo "$RELEASE_NOTES" > ../../../release_notes_v3.md
# Set output (escape for GitHub Actions)
{
echo "release_notes<<EOF"
echo "$RELEASE_NOTES"
echo "EOF"
} >> $GITHUB_OUTPUT
echo "✅ v3-alpha release script completed - version: $NEW_VERSION"
- name: Create v3-alpha git tag and release
if: github.event.inputs.dry_run != 'true'
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
VERSION="${{ steps.release.outputs.version }}"
echo "📝 Creating v3-alpha release: $VERSION"
# Configure git
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
# Commit the changelog changes
git add docs/src/content/docs/changelog.mdx v3/internal/version/version.txt
git commit -m "chore: release $VERSION
Automated v3-alpha release created by GitHub Actions
🤖 Generated with [Claude Code](https://claude.ai/code)
Co-Authored-By: Claude <noreply@anthropic.com>"
# Create and push tag
git tag -a "$VERSION" -m "Release $VERSION"
git push origin v3-alpha
git push origin "$VERSION"
# Create GitHub release with notes
gh release create "$VERSION" \
--title "Release $VERSION" \
--notes-file release_notes_v3.md \
--target v3-alpha \
--prerelease
- name: Log dry-run results for v3-alpha
if: github.event.inputs.dry_run == 'true'
run: |
echo "🧪 DRY RUN - Would have created v3-alpha release:"
echo "Version: ${{ steps.release.outputs.version }}"
echo "Release Notes:"
cat release_notes_v3.md
summary:
name: Release Summary
runs-on: ubuntu-latest
needs: [check-permissions, detect-v2-changes, detect-v3-changes, release-v2, release-v3]
if: always() && needs.check-permissions.outputs.authorized == 'true'
steps:
- name: Create release summary
run: |
echo "# 🚀 Automated Release Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Repository**: ${{ github.repository }}" >> $GITHUB_STEP_SUMMARY
echo "**Triggered by**: ${{ github.actor }}" >> $GITHUB_STEP_SUMMARY
echo "**Dry Run Mode**: ${{ github.event.inputs.dry_run || 'false' }}" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
# v2 Summary
echo "## v2 Release" >> $GITHUB_STEP_SUMMARY
if [ "${{ needs.detect-v2-changes.outputs.has_changes }}" == "true" ]; then
if [ "${{ needs.release-v2.result }}" == "success" ]; then
echo "✅ **v2 Release**: Created successfully" >> $GITHUB_STEP_SUMMARY
echo " - Version: ${{ needs.release-v2.outputs.version }}" >> $GITHUB_STEP_SUMMARY
echo " - Commits since last: ${{ needs.detect-v2-changes.outputs.commits_since_last }}" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **v2 Release**: Failed" >> $GITHUB_STEP_SUMMARY
fi
else
echo "⏭️ **v2 Release**: Skipped (no changes)" >> $GITHUB_STEP_SUMMARY
echo " - Commits since last: ${{ needs.detect-v2-changes.outputs.commits_since_last }}" >> $GITHUB_STEP_SUMMARY
fi
# v3 Summary
echo "## v3-alpha Release" >> $GITHUB_STEP_SUMMARY
if [ "${{ needs.detect-v3-changes.outputs.has_changes }}" == "true" ]; then
if [ "${{ needs.release-v3.result }}" == "success" ]; then
echo "✅ **v3-alpha Release**: Created successfully" >> $GITHUB_STEP_SUMMARY
echo " - Version: ${{ needs.release-v3.outputs.version }}" >> $GITHUB_STEP_SUMMARY
echo " - Commits since last: ${{ needs.detect-v3-changes.outputs.commits_since_last }}" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **v3-alpha Release**: Failed" >> $GITHUB_STEP_SUMMARY
fi
else
echo "⏭️ **v3-alpha Release**: Skipped (no changes)" >> $GITHUB_STEP_SUMMARY
echo " - Commits since last: ${{ needs.detect-v3-changes.outputs.commits_since_last }}" >> $GITHUB_STEP_SUMMARY
fi
echo "" >> $GITHUB_STEP_SUMMARY
echo "---" >> $GITHUB_STEP_SUMMARY
echo "🤖 **Automated Release System** | Generated with [Claude Code](https://claude.ai/code)" >> $GITHUB_STEP_SUMMARY

View file

@ -5,6 +5,8 @@ on:
types: [opened, synchronize, reopened, ready_for_review]
branches:
- v3-alpha
paths:
- 'v3/**'
pull_request_review:
types: [submitted]
branches:
@ -27,78 +29,9 @@ jobs:
echo "approved=false" >> $GITHUB_OUTPUT
fi
test_js:
name: Run JS Tests
needs: check_approval
runs-on: ubuntu-latest
if: github.base_ref == 'v3-alpha'
strategy:
matrix:
node-version: [20.x]
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}
- name: Install Task
uses: arduino/setup-task@v2
with:
version: 3.x
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install dependencies
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
run: |
npm ci
npx --yes esbuild@latest --version
- name: Clean build artifacts
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
run: npm run clean
- name: Type-check runtime
working-directory: v3
run: task runtime:check
- name: Test runtime
working-directory: v3
run: task runtime:test
- name: Check that the bundled runtime builds
working-directory: v3
run: task runtime:build
- name: Check that the npm package builds
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
run: npm run build
- name: Pack runtime for template tests
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
run: npm pack
- name: Store runtime build artifacts
uses: actions/upload-artifact@v4
with:
name: runtime-build-artifacts
path: |
v3/internal/runtime/desktop/@wailsio/runtime/dist/
v3/internal/runtime/desktop/@wailsio/runtime/types/
v3/internal/runtime/desktop/@wailsio/runtime/tsconfig.tsbuildinfo
- name: Store runtime package
uses: actions/upload-artifact@v4
with:
name: runtime-package
path: v3/internal/runtime/desktop/@wailsio/runtime/*.tgz
test_go:
name: Run Go Tests v3
needs: [check_approval, test_js]
needs: check_approval
runs-on: ${{ matrix.os }}
if: github.base_ref == 'v3-alpha'
strategy:
@ -122,7 +55,6 @@ jobs:
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
cache: true
cache-dependency-path: "v3/go.sum"
- name: Install Task
@ -131,18 +63,9 @@ jobs:
version: 3.x
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Retrieve runtime build artifacts
uses: actions/download-artifact@v4
with:
name: runtime-build-artifacts
path: v3/internal/runtime/desktop/@wailsio/runtime/
- name: Build Examples
working-directory: v3
run: |
echo "Starting example compilation tests..."
task test:examples
echo "Example compilation tests completed successfully"
run: task test:examples
- name: Run tests (mac)
if: matrix.os == 'macos-latest'
@ -170,22 +93,35 @@ jobs:
working-directory: v3
run: task generator:test:check
cleanup:
name: Cleanup build artifacts
if: always()
needs: [test_js, test_go, test_templates]
test_js:
name: Run JS Tests
needs: check_approval
runs-on: ubuntu-latest
if: github.base_ref == 'v3-alpha'
strategy:
matrix:
node-version: [20.x]
steps:
- uses: geekyeggo/delete-artifact@v5
- name: Checkout code
uses: actions/checkout@v4
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v4
with:
name: |
runtime-build-artifacts
runtime-package
failOnError: false
node-version: ${{ matrix.node-version }}
- name: Install dependencies
run: npm install
working-directory: v2/internal/frontend/runtime
- name: Run tests
run: npm test
working-directory: v2/internal/frontend/runtime
test_templates:
name: Test Templates
needs: [test_js, test_go]
needs: test_go
runs-on: ${{ matrix.os }}
if: github.base_ref == 'v3-alpha'
strategy:
@ -221,7 +157,6 @@ jobs:
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
cache: true
cache-dependency-path: "v3/go.sum"
- name: Install Task
@ -236,28 +171,12 @@ jobs:
task install
wails3 doctor
- name: Download runtime package
uses: actions/download-artifact@v4
with:
name: runtime-package
path: wails-runtime-temp
- name: Generate template '${{ matrix.template }}'
shell: bash
run: |
# Get absolute path - use pwd -W on Windows for native paths, pwd elsewhere
if [[ "$RUNNER_OS" == "Windows" ]]; then
RUNTIME_TGZ="$(cd wails-runtime-temp && pwd -W)/$(ls wails-runtime-temp/*.tgz | xargs basename)"
else
RUNTIME_TGZ="$(cd wails-runtime-temp && pwd)/$(ls wails-runtime-temp/*.tgz | xargs basename)"
fi
mkdir -p ./test-${{ matrix.template }}
cd ./test-${{ matrix.template }}
wails3 init -n ${{ matrix.template }} -t ${{ matrix.template }}
cd ${{ matrix.template }}/frontend
# Replace @wailsio/runtime version with local tarball
npm pkg set dependencies.@wailsio/runtime="file://$RUNTIME_TGZ"
cd ..
cd ${{ matrix.template }}
wails3 build
build_results:

View file

@ -12,8 +12,8 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-22.04, ubuntu-24.04, windows-latest, macos-latest, macos-11]
go-version: ['1.21']
os: [ubuntu-22.04, ubuntu-24.04, windows-latest, macos-latest]
go-version: ['1.22']
steps:
- name: Checkout code
@ -28,7 +28,7 @@ jobs:
- uses: awalsh128/cache-apt-pkgs-action@latest
if: matrix.os == 'ubuntu-24.04'
with:
packages: libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config
packages: libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config libegl1
version: 1.0
- name: Setup Go
@ -38,14 +38,14 @@ jobs:
cache-dependency-path: ./v2/go.sum
- name: Run tests (mac)
if: matrix.os == 'macos-latest' || matrix.os == 'macos-11'
if: matrix.os == 'macos-latest'
env:
CGO_LDFLAGS: -framework UniformTypeIdentifiers -mmacosx-version-min=10.13
working-directory: ./v2
run: go test -v ./...
- name: Run tests (!mac)
if: matrix.os != 'macos-latest' && matrix.os != 'macos-11' && matrix.os != 'ubuntu-24.04'
if: matrix.os != 'macos-latest' && matrix.os != 'ubuntu-24.04'
working-directory: ./v2
run: go test -v ./...
@ -86,7 +86,7 @@ jobs:
strategy:
fail-fast: true
matrix:
os: [ubuntu-22.04, windows-latest, macos-latest, ubuntu-24.04, macos-11]
os: [ubuntu-22.04, windows-latest, macos-latest, ubuntu-24.04]
template:
[
svelte,
@ -103,13 +103,13 @@ jobs:
vanilla-ts,
plain,
]
go-version: ['1.21']
go-version: ['1.22']
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Go
uses: actions/setup-go@v4
uses: actions/setup-go@v5
with:
go-version: ${{ matrix.go-version }}
cache-dependency-path: ./v2/go.sum
@ -120,13 +120,25 @@ jobs:
go install
wails -help
- name: Install linux dependencies ( 22.04 )
- uses: awalsh128/cache-apt-pkgs-action@latest
if: matrix.os == 'ubuntu-22.04'
run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config
with:
packages: libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config
version: 1.0
- name: Install linux dependencies ( 24.04 )
# - name: Install linux dependencies ( 22.04 )
# if: matrix.os == 'ubuntu-22.04'
# run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev build-essential pkg-config
- uses: awalsh128/cache-apt-pkgs-action@latest
if: matrix.os == 'ubuntu-24.04'
run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config
with:
packages: libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config libegl1
version: 1.0
# - name: Install linux dependencies ( 24.04 )
# if: matrix.os == 'ubuntu-24.04'
# run: sudo apt-get update -y && sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config
- name: Generate & Build template '${{ matrix.template }}'
if: matrix.os != 'ubuntu-24.04'

View file

@ -94,18 +94,10 @@ jobs:
build-args: |
ZIG_VERSION=${{ steps.vars.outputs.zig_version }}
MACOS_SDK_VERSION=${{ steps.vars.outputs.sdk_version }}
cache-from: |
type=gha
type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache
cache-to: |
type=gha,mode=max
type=registry,ref=${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:buildcache,mode=max
cache-from: type=gha
cache-to: type=gha,mode=max
# Test cross-compilation using wails3 task system (3 parallel jobs)
# Runs on Linux/amd64 runner - tests actual cross-compilation only:
# - darwin: cross-platform (arm64)
# - windows: cross-platform (arm64)
# - linux: cross-architecture (arm64 from amd64 runner)
# Test cross-compilation for all platforms
test-cross-compile:
needs: build
if: ${{ inputs.skip_tests != 'true' }}
@ -114,24 +106,33 @@ jobs:
fail-fast: false
matrix:
include:
# Darwin arm64 (Intel Macs are EOL, skip amd64)
# Darwin targets (Zig + macOS SDK) - no platform emulation needed
- os: darwin
arch: arm64
expected: "Mach-O 64-bit.*arm64"
# Windows - both archs
- os: windows
platform: ""
expected_file: "Mach-O 64-bit.*arm64"
- os: darwin
arch: amd64
expected: "PE32.*x86-64"
- os: windows
arch: arm64
expected: "PE32.*Aarch64"
# Linux - both archs via Docker
platform: ""
expected_file: "Mach-O 64-bit.*x86_64"
# Linux targets (GCC) - need platform to match architecture
- os: linux
arch: amd64
expected: "ELF 64-bit LSB.*x86-64"
platform: "linux/amd64"
expected_file: "ELF 64-bit LSB.*x86-64"
- os: linux
arch: arm64
expected: "ELF 64-bit LSB.*ARM aarch64"
platform: "linux/arm64"
expected_file: "ELF 64-bit LSB.*ARM aarch64"
# Windows targets (Zig + mingw) - no platform emulation needed
- os: windows
arch: amd64
platform: ""
expected_file: "PE32\\+ executable.*x86-64"
- os: windows
arch: arm64
platform: ""
expected_file: "PE32\\+ executable.*Aarch64"
steps:
- name: Checkout
@ -139,29 +140,8 @@ jobs:
with:
ref: ${{ inputs.branch || github.ref }}
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: '1.24'
cache: false
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install Linux dev dependencies
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.1-dev
- name: Install wails3 CLI
run: |
cd v3
go install ./cmd/wails3
- name: Set up QEMU
if: matrix.os == 'linux'
if: matrix.platform != ''
uses: docker/setup-qemu-action@v3
- name: Log in to Container Registry
@ -171,74 +151,95 @@ jobs:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Pull and tag Docker image
- name: Create test CGO project
run: |
# Pull both platform variants and tag them for the task system
# The task uses --platform flag which requires matching arch variant
IMAGE="${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.build.outputs.image_tag || 'latest' }}"
mkdir -p test-project
cd test-project
# For Linux arm64 test, we need the arm64 variant
if [ "${{ matrix.os }}" = "linux" ] && [ "${{ matrix.arch }}" = "arm64" ]; then
docker pull --platform linux/arm64 "$IMAGE"
docker tag "$IMAGE" wails-cross
else
docker pull "$IMAGE"
docker tag "$IMAGE" wails-cross
# Create a minimal CGO test program
cat > main.go << 'EOF'
package main
/*
#include <stdlib.h>
int add(int a, int b) {
return a + b;
}
*/
import "C"
import "fmt"
func main() {
result := C.add(1, 2)
fmt.Printf("CGO test: 1 + 2 = %d\n", result)
}
EOF
cat > go.mod << 'EOF'
module test-cgo
go 1.21
EOF
- name: Build ${{ matrix.os }}/${{ matrix.arch }} (CGO)
run: |
cd test-project
PLATFORM_FLAG=""
if [ -n "${{ matrix.platform }}" ]; then
PLATFORM_FLAG="--platform ${{ matrix.platform }}"
fi
- name: Generate wails3 test project
run: |
cd /tmp
wails3 init -n test-wails-app -t vanilla
cd test-wails-app
docker run --rm $PLATFORM_FLAG \
-v "$(pwd):/app" \
-e APP_NAME="test-cgo" \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.build.outputs.image_tag || 'latest' }} \
${{ matrix.os }} ${{ matrix.arch }}
# Update replace directive to use absolute path (wails3 init adds relative path)
sed -i 's|replace github.com/wailsapp/wails/v3 => .*|replace github.com/wailsapp/wails/v3 => ${{ github.workspace }}/v3|' go.mod
- name: Cross-compile ${{ matrix.os }}/${{ matrix.arch }} via task
- name: Verify binary format
run: |
cd /tmp/test-wails-app
# For Linux, always use docker build to test the Docker image
if [ "${{ matrix.os }}" = "linux" ]; then
wails3 task linux:build:docker ARCH=${{ matrix.arch }}
else
wails3 task ${{ matrix.os }}:build ARCH=${{ matrix.arch }}
fi
- name: Verify binary
run: |
cd /tmp/test-wails-app/bin
cd test-project/bin
ls -la
# Find the built binary
if [ "${{ matrix.os }}" = "windows" ]; then
BINARY="test-wails-app.exe"
BINARY=$(ls test-cgo-${{ matrix.os }}-${{ matrix.arch }}.exe 2>/dev/null || ls *.exe | head -1)
else
BINARY="test-wails-app"
BINARY=$(ls test-cgo-${{ matrix.os }}-${{ matrix.arch }} 2>/dev/null || ls test-cgo* | grep -v '.exe' | head -1)
fi
echo "Checking: $BINARY"
echo "Binary: $BINARY"
FILE_OUTPUT=$(file "$BINARY")
echo " $FILE_OUTPUT"
echo "File output: $FILE_OUTPUT"
if echo "$FILE_OUTPUT" | grep -qE "${{ matrix.expected }}"; then
echo " ✅ Cross-compilation verified: ${{ matrix.os }}/${{ matrix.arch }}"
# Verify the binary format matches expected
if echo "$FILE_OUTPUT" | grep -qE "${{ matrix.expected_file }}"; then
echo "✅ Binary format verified: ${{ matrix.os }}/${{ matrix.arch }}"
else
echo " ❌ Format mismatch! Expected: ${{ matrix.expected }}"
echo "❌ Binary format mismatch!"
echo "Expected pattern: ${{ matrix.expected_file }}"
echo "Got: $FILE_OUTPUT"
exit 1
fi
- name: Check library dependencies (Linux only)
if: matrix.os == 'linux'
run: |
cd /tmp/test-wails-app/bin
cd test-project/bin
BINARY=$(ls test-cgo-${{ matrix.os }}-${{ matrix.arch }} 2>/dev/null || ls test-cgo* | grep -v '.exe' | head -1)
echo "## Library Dependencies"
echo "## Library Dependencies for $BINARY"
echo ""
# Use readelf to show dynamic dependencies
echo "### NEEDED libraries:"
readelf -d test-wails-app | grep NEEDED || echo "No dynamic dependencies"
echo ""
readelf -d "$BINARY" | grep NEEDED || echo "No dynamic dependencies (statically linked)"
# Verify expected libraries are linked
echo ""
echo "### Verifying required libraries..."
NEEDED=$(readelf -d "$BINARY" | grep NEEDED)
NEEDED=$(readelf -d test-wails-app | grep NEEDED)
MISSING=""
for lib in libwebkit2gtk-4.1.so libgtk-3.so libglib-2.0.so libc.so; do
if echo "$NEEDED" | grep -q "$lib"; then
@ -250,13 +251,139 @@ jobs:
done
if [ -n "$MISSING" ]; then
echo ""
echo "ERROR: Missing required libraries:$MISSING"
exit 1
fi
# Test non-CGO builds (pure Go cross-compilation)
test-non-cgo:
needs: build
if: ${{ inputs.skip_tests != 'true' }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
include:
- os: darwin
arch: arm64
expected_file: "Mach-O 64-bit.*arm64"
- os: darwin
arch: amd64
expected_file: "Mach-O 64-bit.*x86_64"
- os: linux
arch: amd64
expected_file: "ELF 64-bit LSB"
- os: linux
arch: arm64
expected_file: "ELF 64-bit LSB.*ARM aarch64"
- os: windows
arch: amd64
expected_file: "PE32\\+ executable.*x86-64"
- os: windows
arch: arm64
expected_file: "PE32\\+ executable.*Aarch64"
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: ${{ inputs.branch || github.ref }}
- name: Log in to Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Create test non-CGO project
run: |
mkdir -p test-project
cd test-project
# Create a pure Go test program (no CGO)
cat > main.go << 'EOF'
package main
import "fmt"
func main() {
fmt.Println("Pure Go cross-compilation test")
}
EOF
cat > go.mod << 'EOF'
module test-pure-go
go 1.21
EOF
- name: Build ${{ matrix.os }}/${{ matrix.arch }} (non-CGO)
run: |
cd test-project
# For non-CGO, we can use any platform since Go handles cross-compilation
# We set CGO_ENABLED=0 to ensure pure Go build
docker run --rm \
-v "$(pwd):/app" \
-e APP_NAME="test-pure-go" \
-e CGO_ENABLED=0 \
--entrypoint /bin/sh \
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ needs.build.outputs.image_tag || 'latest' }} \
-c "GOOS=${{ matrix.os }} GOARCH=${{ matrix.arch }} go build -o bin/test-pure-go-${{ matrix.os }}-${{ matrix.arch }}${{ matrix.os == 'windows' && '.exe' || '' }} ."
- name: Verify binary format
run: |
cd test-project/bin
ls -la
# Find the built binary
if [ "${{ matrix.os }}" = "windows" ]; then
BINARY="test-pure-go-${{ matrix.os }}-${{ matrix.arch }}.exe"
else
BINARY="test-pure-go-${{ matrix.os }}-${{ matrix.arch }}"
fi
echo "Binary: $BINARY"
FILE_OUTPUT=$(file "$BINARY")
echo "File output: $FILE_OUTPUT"
# Verify the binary format matches expected
if echo "$FILE_OUTPUT" | grep -qE "${{ matrix.expected_file }}"; then
echo "✅ Binary format verified: ${{ matrix.os }}/${{ matrix.arch }} (non-CGO)"
else
echo "❌ Binary format mismatch!"
echo "Expected pattern: ${{ matrix.expected_file }}"
echo "Got: $FILE_OUTPUT"
exit 1
fi
- name: Check library dependencies (Linux only)
if: matrix.os == 'linux'
run: |
cd test-project/bin
BINARY="test-pure-go-${{ matrix.os }}-${{ matrix.arch }}"
echo "## Library Dependencies for $BINARY (non-CGO)"
echo ""
# Non-CGO builds should have minimal dependencies (just libc or statically linked)
echo "### NEEDED libraries:"
readelf -d "$BINARY" | grep NEEDED || echo "No dynamic dependencies (statically linked)"
# Verify NO GTK/WebKit libraries (since CGO is disabled)
NEEDED=$(readelf -d "$BINARY" | grep NEEDED || true)
if echo "$NEEDED" | grep -q "libwebkit\|libgtk"; then
echo "❌ ERROR: Non-CGO binary should not link to GTK/WebKit!"
exit 1
else
echo "✅ Confirmed: No GTK/WebKit dependencies (expected for non-CGO)"
fi
# Summary job
test-summary:
needs: [build, test-cross-compile]
needs: [build, test-cross-compile, test-non-cgo]
if: always() && inputs.skip_tests != 'true'
runs-on: ubuntu-latest
steps:
@ -266,23 +393,30 @@ jobs:
echo "" >> $GITHUB_STEP_SUMMARY
if [ "${{ needs.test-cross-compile.result }}" = "success" ]; then
echo "✅ **All Tests Passed**" >> $GITHUB_STEP_SUMMARY
echo "✅ **CGO Tests**: All passed" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **Some Tests Failed**" >> $GITHUB_STEP_SUMMARY
echo "❌ **CGO Tests**: Failed" >> $GITHUB_STEP_SUMMARY
fi
if [ "${{ needs.test-non-cgo.result }}" = "success" ]; then
echo "✅ **Non-CGO Tests**: All passed" >> $GITHUB_STEP_SUMMARY
else
echo "❌ **Non-CGO Tests**: Failed" >> $GITHUB_STEP_SUMMARY
fi
echo "" >> $GITHUB_STEP_SUMMARY
echo "### Cross-Compilation Tests (from Linux/amd64 runner)" >> $GITHUB_STEP_SUMMARY
echo "| Target | Status |" >> $GITHUB_STEP_SUMMARY
echo "|--------|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Darwin/arm64 | ✅ |" >> $GITHUB_STEP_SUMMARY
echo "| Windows/amd64 | ✅ |" >> $GITHUB_STEP_SUMMARY
echo "| Windows/arm64 | ✅ |" >> $GITHUB_STEP_SUMMARY
echo "| Linux/amd64 | ✅ |" >> $GITHUB_STEP_SUMMARY
echo "| Linux/arm64 | ✅ |" >> $GITHUB_STEP_SUMMARY
echo "### Tested Platforms" >> $GITHUB_STEP_SUMMARY
echo "| Platform | Architecture | CGO | Non-CGO |" >> $GITHUB_STEP_SUMMARY
echo "|----------|-------------|-----|---------|" >> $GITHUB_STEP_SUMMARY
echo "| Darwin | arm64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
echo "| Darwin | amd64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
echo "| Linux | arm64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
echo "| Linux | amd64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
echo "| Windows | arm64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
echo "| Windows | amd64 | ✅ | ✅ |" >> $GITHUB_STEP_SUMMARY
# Fail if any test failed
if [ "${{ needs.test-cross-compile.result }}" != "success" ]; then
if [ "${{ needs.test-cross-compile.result }}" != "success" ] || [ "${{ needs.test-non-cgo.result }}" != "success" ]; then
echo ""
echo "❌ Some tests failed. Check the individual job logs for details."
exit 1

216
.github/workflows/changelog-v3.yml vendored Normal file
View file

@ -0,0 +1,216 @@
name: Changelog Validation (v3)
on:
pull_request:
branches: [ v3-alpha ]
paths:
- 'docs/src/content/docs/changelog.mdx'
workflow_dispatch:
inputs:
pr_number:
description: 'PR number to validate'
required: true
type: string
jobs:
validate:
runs-on: ubuntu-latest
permissions:
contents: write
pull-requests: write
actions: write
steps:
- name: Checkout PR code
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || format('refs/pull/{0}/head', github.event.inputs.pr_number) }}
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN || github.token }}
- name: Get REAL validation script from v3-alpha
run: |
echo "Fetching the REAL validation script from v3-alpha branch..."
git fetch origin v3-alpha
git checkout origin/v3-alpha -- v3/scripts/validate-changelog.go
echo "Validation script fetched successfully:"
ls -la v3/scripts/
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: '1.23'
- name: Get PR information
id: pr_info
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
echo "pr_number=${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT
echo "base_ref=${{ github.event.pull_request.base.ref }}" >> $GITHUB_OUTPUT
else
echo "pr_number=${{ github.event.inputs.pr_number }}" >> $GITHUB_OUTPUT
echo "base_ref=v3-alpha" >> $GITHUB_OUTPUT
fi
- name: Check changelog modifications
id: changelog_check
run: |
echo "Checking PR #${{ steps.pr_info.outputs.pr_number }} for changelog changes"
git fetch origin ${{ steps.pr_info.outputs.base_ref }}
if git diff --name-only origin/${{ steps.pr_info.outputs.base_ref }}..HEAD | grep -q "docs/src/content/docs/changelog.mdx"; then
echo "changelog_modified=true" >> $GITHUB_OUTPUT
echo "✅ Changelog was modified in this PR"
else
echo "changelog_modified=false" >> $GITHUB_OUTPUT
echo " Changelog was not modified - skipping validation"
fi
- name: Get changelog diff
id: get_diff
if: steps.changelog_check.outputs.changelog_modified == 'true'
run: |
echo "Getting diff for changelog changes..."
git diff origin/${{ steps.pr_info.outputs.base_ref }}..HEAD docs/src/content/docs/changelog.mdx | grep "^+" | grep -v "^+++" | sed 's/^+//' > /tmp/pr_added_lines.txt
echo "Lines added in this PR:"
cat /tmp/pr_added_lines.txt
echo "Total lines added: $(wc -l < /tmp/pr_added_lines.txt)"
- name: Validate changelog
id: validate
if: steps.changelog_check.outputs.changelog_modified == 'true'
run: |
echo "Running changelog validation..."
cd v3/scripts
OUTPUT=$(go run validate-changelog.go ../../docs/src/content/docs/changelog.mdx /tmp/pr_added_lines.txt 2>&1)
echo "$OUTPUT"
RESULT=$(echo "$OUTPUT" | grep "VALIDATION_RESULT=" | cut -d'=' -f2)
echo "result=$RESULT" >> $GITHUB_OUTPUT
- name: Commit fixes
id: commit_fixes
if: steps.validate.outputs.result == 'fixed'
run: |
echo "Committing automatic fixes..."
git config --local user.email "action@github.com"
git config --local user.name "GitHub Action"
# Check only the changelog file for changes
if git diff --quiet docs/src/content/docs/changelog.mdx; then
echo "No changes to commit"
echo "committed=false" >> $GITHUB_OUTPUT
else
# Ensure validation script doesn't get committed
echo "v3/scripts/validate-changelog.go" >> .git/info/exclude
# Get the correct branch name to push to
REPO_OWNER="wailsapp" # Always wailsapp for this repo
if [ "${{ github.event_name }}" = "pull_request" ]; then
BRANCH_NAME="${{ github.event.pull_request.head.ref }}"
else
# For manual workflow dispatch, get PR info
PR_INFO=$(gh pr view ${{ steps.pr_info.outputs.pr_number }} --json headRefName,headRepository)
BRANCH_NAME=$(echo "$PR_INFO" | jq -r '.headRefName')
HEAD_REPO=$(echo "$PR_INFO" | jq -r '.headRepository.name')
echo "🔍 PR source branch: $BRANCH_NAME"
echo "🔍 Head repository: $HEAD_REPO"
# Don't push if this is from a fork or if branch is v3-alpha (main branch)
if [ "$HEAD_REPO" != "wails" ] || [ "$BRANCH_NAME" = "v3-alpha" ]; then
echo "⚠️ Cannot push - either fork or direct v3-alpha branch. Manual fix required."
echo "committed=false" >> $GITHUB_OUTPUT
exit 0
fi
fi
echo "Pushing to branch: $BRANCH_NAME in repo: $REPO_OWNER"
# Only commit the changelog changes, not the validation script
git add docs/src/content/docs/changelog.mdx
git commit -m "🤖 Fix changelog: move entries to Unreleased section"
# Only push if running on the main wailsapp repository
if [ "${{ github.repository }}" = "wailsapp/wails" ]; then
# Pull latest changes and rebase our commit
git fetch origin $BRANCH_NAME
git rebase origin/$BRANCH_NAME
git push origin HEAD:$BRANCH_NAME
else
echo "⚠️ Running on fork (${{ github.repository }}). Skipping push - manual fix required."
echo "committed=false" >> $GITHUB_OUTPUT
exit 0
fi
echo "committed=true" >> $GITHUB_OUTPUT
echo "✅ Changes committed and pushed"
fi
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Get PR author for tagging
id: pr_author
if: steps.validate.outputs.result && github.event.inputs.pr_number
run: |
PR_AUTHOR=$(gh pr view ${{ steps.pr_info.outputs.pr_number }} --json author --jq '.author.login')
echo "author=$PR_AUTHOR" >> $GITHUB_OUTPUT
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Comment on PR
if: steps.validate.outputs.result && github.event.inputs.pr_number
uses: actions/github-script@v7
with:
script: |
const result = '${{ steps.validate.outputs.result }}';
const committed = '${{ steps.commit_fixes.outputs.committed }}';
const author = '${{ steps.pr_author.outputs.author }}';
let message;
if (result === 'success') {
message = '## ✅ Changelog Validation Passed\n\nNo misplaced changelog entries detected.';
} else if (result === 'fixed' && committed === 'true') {
message = '## 🔧 Changelog Updated\n\nMisplaced entries were automatically moved to the `[Unreleased]` section. The changes have been committed to this PR.';
} else if (result === 'fixed' || result === 'cannot_fix' || result === 'error') {
// Read the fixed changelog content
const fs = require('fs');
let fixedContent = '';
try {
fixedContent = fs.readFileSync('docs/src/content/docs/changelog.mdx', 'utf8');
} catch (error) {
fixedContent = 'Error reading fixed changelog content';
}
message = '## ⚠️ Changelog Validation Issue\\n\\n' +
'@' + author + ' Your PR contains changelog entries that were added to already-released versions. These need to be moved to the `[Unreleased]` section.\\n\\n' +
(committed === 'true' ?
'✅ **Auto-fix applied**: The changes have been automatically committed to this PR.' :
'❌ **Manual fix required**: Please apply the changes shown below manually.') + '\\n\\n' +
'<details>\\n' +
'<summary>📝 Click to see the corrected changelog content</summary>\\n\\n' +
'```mdx\\n' +
fixedContent +
'\\n```\\n\\n' +
'</details>\\n\\n' +
'**What happened?** \\n' +
'The validation script detected that you added changelog entries to a version section that has already been released (like `v3.0.0-alpha.10`). All new entries should go in the `[Unreleased]` section under the appropriate category (`### Added`, `### Fixed`, etc.).\\n\\n' +
(committed !== 'true' ? '**Action needed:** Please copy the corrected content from above and replace your changelog file.' : '');
}
if (message) {
await github.rest.issues.createComment({
issue_number: ${{ steps.pr_info.outputs.pr_number }},
owner: context.repo.owner,
repo: context.repo.repo,
body: message
});
}
- name: Fail if validation failed
if: steps.validate.outputs.result == 'cannot_fix' || steps.validate.outputs.result == 'error'
run: |
echo "❌ Changelog validation failed"
exit 1

View file

@ -1,74 +0,0 @@
name: Changelog Validation (v3)
on:
pull_request:
branches: [ v3-alpha ]
workflow_dispatch:
inputs:
pr_number:
description: 'PR number to validate (for manual testing)'
required: true
type: string
jobs:
validate-changelog:
runs-on: ubuntu-latest
if: github.event_name == 'pull_request' || github.event.inputs.pr_number
permissions:
contents: write
pull-requests: write
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.event.pull_request.head.sha || format('refs/pull/{0}/head', github.event.inputs.pr_number) }}
fetch-depth: 0
token: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Go
uses: actions/setup-go@v4
with:
go-version: '1.23'
- name: Get PR information
id: pr_info
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
echo "pr_number=${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT
echo "base_ref=${{ github.event.pull_request.base.ref }}" >> $GITHUB_OUTPUT
else
echo "pr_number=${{ github.event.inputs.pr_number }}" >> $GITHUB_OUTPUT
echo "base_ref=v3-alpha" >> $GITHUB_OUTPUT
fi
- name: Check if changelog was modified
id: changelog_check
run: |
git fetch origin ${{ steps.pr_info.outputs.base_ref }}
if git diff --name-only origin/${{ steps.pr_info.outputs.base_ref }}..HEAD | grep -q "v3/UNRELEASED_CHANGELOG.md"; then
echo "changelog_modified=true" >> $GITHUB_OUTPUT
echo "✅ UNRELEASED_CHANGELOG.md was modified in this PR"
else
echo "changelog_modified=false" >> $GITHUB_OUTPUT
echo "⚠️ UNRELEASED_CHANGELOG.md was not modified"
fi
- name: Comment on PR about missing changelog
if: steps.changelog_check.outputs.changelog_modified == 'false' && github.event_name == 'pull_request'
uses: actions/github-script@v7
with:
script: |
const author = context.payload.pull_request.user.login;
const message = '## ⚠️ Missing Changelog Update\n\n' +
`Hi @${author}, please update \`v3/UNRELEASED_CHANGELOG.md\` with a description of your changes.\n\n` +
'This helps us keep track of changes for the next release.';
await github.rest.issues.createComment({
issue_number: ${{ steps.pr_info.outputs.pr_number }},
owner: context.repo.owner,
repo: context.repo.repo,
body: message
});

View file

@ -0,0 +1,44 @@
name: Claude Code Review
on:
pull_request:
types: [opened, synchronize, ready_for_review, reopened]
# Optional: Only run on specific file changes
# paths:
# - "src/**/*.ts"
# - "src/**/*.tsx"
# - "src/**/*.js"
# - "src/**/*.jsx"
jobs:
claude-review:
# Optional: Filter by PR author
# if: |
# github.event.pull_request.user.login == 'external-contributor' ||
# github.event.pull_request.user.login == 'new-developer' ||
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Run Claude Code Review
id: claude-review
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
plugins: 'code-review@claude-code-plugins'
prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://code.claude.com/docs/en/cli-reference for available options

50
.github/workflows/claude.yml vendored Normal file
View file

@ -0,0 +1,50 @@
name: Claude Code
on:
issue_comment:
types: [created]
pull_request_review_comment:
types: [created]
issues:
types: [opened, assigned]
pull_request_review:
types: [submitted]
jobs:
claude:
if: |
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
issues: read
id-token: write
actions: read # Required for Claude to read CI results on PRs
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
# This is an optional setting that allows Claude to read CI results on PRs
additional_permissions: |
actions: read
# Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
# prompt: 'Update the pull request description to include a summary of changes.'
# Optional: Add claude_args to customize behavior and configuration
# See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
# or https://code.claude.com/docs/en/cli-reference for available options
# claude_args: '--allowed-tools Bash(gh pr:*)'

View file

@ -1,135 +0,0 @@
name: Cross-Compile Test v3
on:
pull_request_review:
types: [submitted]
branches:
- v3-alpha
workflow_dispatch:
inputs:
pr_number:
description: 'PR number to test (optional, uses current branch if not specified)'
required: false
type: string
jobs:
check_approval:
name: Check PR Approval
runs-on: ubuntu-latest
if: github.event_name == 'workflow_dispatch' || github.event.review.state == 'approved'
outputs:
approved: ${{ steps.check.outputs.approved }}
steps:
- name: Check if PR is approved or manual dispatch
id: check
run: |
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
echo "Manual dispatch, proceeding with cross-compile tests"
else
echo "PR approved, proceeding with cross-compile tests"
fi
echo "approved=true" >> $GITHUB_OUTPUT
cross_compile:
name: Cross-Compile (${{ matrix.target_os }}/${{ matrix.target_arch }})
needs: check_approval
runs-on: ${{ matrix.runner }}
if: needs.check_approval.outputs.approved == 'true'
strategy:
fail-fast: false
matrix:
include:
- target_os: darwin
target_arch: arm64
runner: ubuntu-latest
- target_os: darwin
target_arch: amd64
runner: ubuntu-latest
- target_os: linux
target_arch: arm64
runner: ubuntu-24.04-arm # Native ARM64 runner - much faster than QEMU
- target_os: linux
target_arch: amd64
runner: ubuntu-latest
- target_os: windows
target_arch: arm64
runner: ubuntu-latest
- target_os: windows
target_arch: amd64
runner: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Checkout PR (if specified)
if: github.event_name == 'workflow_dispatch' && inputs.pr_number != ''
run: gh pr checkout ${{ inputs.pr_number }}
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Setup Go
uses: actions/setup-go@v5
with:
go-version: '1.25'
cache: true
cache-dependency-path: "v3/go.sum"
- name: Install Task
uses: arduino/setup-task@v2
with:
version: 3.x
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Install Linux dependencies
uses: awalsh128/cache-apt-pkgs-action@latest
with:
packages: libgtk-3-dev libwebkit2gtk-4.1-dev build-essential pkg-config
version: 1.0
- name: Install Wails3 CLI
working-directory: v3
run: |
go install ./cmd/wails3
wails3 version
- name: Create test project
run: |
mkdir -p test-cross-compile
cd test-cross-compile
wails3 init -n crosstest -t vanilla
- name: Setup Docker cross-compile image
working-directory: test-cross-compile/crosstest
run: task common:setup:docker
- name: Fix replace directive for Docker build
working-directory: test-cross-compile/crosstest
run: |
# Change the replace directive to use absolute path that matches Docker mount
go mod edit -dropreplace github.com/wailsapp/wails/v3
go mod edit -replace github.com/wailsapp/wails/v3=${{ github.workspace }}/v3
- name: Cross-compile for ${{ matrix.target_os }}/${{ matrix.target_arch }}
working-directory: test-cross-compile/crosstest
run: |
echo "Cross-compiling for ${{ matrix.target_os }}/${{ matrix.target_arch }}..."
task ${{ matrix.target_os }}:build ARCH=${{ matrix.target_arch }}
echo "Cross-compilation successful!"
ls -la bin/
cross_compile_results:
if: ${{ always() }}
runs-on: ubuntu-latest
name: Cross-Compile Results
needs: [cross_compile]
steps:
- run: |
result="${{ needs.cross_compile.result }}"
echo "Cross-compile result: $result"
if [[ $result == "success" ]]; then
echo "All cross-compile tests passed!"
exit 0
else
echo "One or more cross-compile tests failed"
exit 1
fi

View file

@ -25,7 +25,7 @@ jobs:
SPONSORKIT_GITHUB_LOGIN: wailsapp
- name: Create Pull Request
uses: peter-evans/create-pull-request@v4
uses: peter-evans/create-pull-request@v6
with:
commit-message: "chore: update sponsors.svg"
add-paths: "website/static/img/sponsors.svg"

View file

@ -2,7 +2,7 @@ name: Issue Triage Automation
on:
issues:
types: [opened, reopened, labeled, unlabeled]
types: [opened]
jobs:
triage:

View file

@ -1,17 +1,26 @@
name: PR Checks (master)
# Updated to ensure "Run Go Tests" runs for pull requests as expected.
# Key fix: the test_go job previously required github.event.review.state == 'approved'
# which only exists on pull_request_review events. That prevented the job from
# running for regular pull_request events (opened / synchronize / reopened).
# New logic: run tests for pull_request events, and also allow running when a
# pull_request_review is submitted with state == 'approved'.
on:
pull_request:
types: [opened, synchronize, reopened]
branches:
- master
pull_request_review:
types: [submitted]
branches:
- master
workflow_dispatch: {}
name: PR Checks (master)
jobs:
check_docs:
name: Check Docs
if: ${{github.repository == 'wailsapp/wails' && github.base_ref == 'master'}}
if: ${{ github.repository == 'wailsapp/wails' && github.base_ref == 'master' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
@ -23,7 +32,6 @@ jobs:
files: |
website/**/*.mdx
website/**/*.md
- name: Run step only when files change.
if: steps.verify-changed-files.outputs.files_changed != 'true'
run: |
@ -32,11 +40,18 @@ jobs:
test_go:
name: Run Go Tests
runs-on: ${{ matrix.os }}
# Run when:
# - the event is a pull_request (opened/synchronize/reopened) OR
# - the event is a pull_request_review AND the review state is 'approved'
# plus other existing filters (not the update-sponsors branch, repo and base_ref)
if: >
github.event.review.state == 'approved' &&
github.repository == 'wailsapp/wails' &&
github.repository == 'wailsapp/wails' &&
github.base_ref == 'master' &&
github.event.pull_request.head.ref != 'update-sponsors'
github.event.pull_request.head.ref != 'update-sponsors' &&
(
github.event_name == 'pull_request' ||
(github.event_name == 'pull_request_review' && github.event.review.state == 'approved')
)
strategy:
matrix:
os: [ubuntu-22.04, windows-latest, macos-latest, ubuntu-24.04]
@ -75,3 +90,15 @@ jobs:
if: matrix.os == 'ubuntu-24.04'
working-directory: ./v2
run: go test -v -tags webkit2_41 ./...
# This job will run instead of test_go for the update-sponsors branch
skip_tests:
name: Skip Tests (Sponsor Update)
if: github.event.pull_request.head.ref == 'update-sponsors'
runs-on: ubuntu-latest
steps:
- name: Skip tests for sponsor updates
run: |
echo "Skipping tests for sponsor update branch"
echo "This is an automated update of the sponsors image."
continue-on-error: true

View file

@ -1,119 +0,0 @@
on:
push:
branches: ['v3-alpha']
workflow_dispatch:
concurrency:
group: publish-npm-v3
cancel-in-progress: true
jobs:
detect:
name: Detect committed changes
if: github.event_name != 'workflow_dispatch'
outputs:
changed: ${{ steps.package-json-changes.outputs.any_modified == 'true' || steps.source-changes.outputs.any_modified == 'true' }}
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
ref: ${{ github.sha }}
persist-credentials: 'true'
- name: Detect committed package.json changes
id: package-json-changes
uses: step-security/changed-files@3dbe17c78367e7d60f00d78ae6781a35be47b4a1 # v45.0.1
with:
files: |
v3/internal/runtime/desktop/@wailsio/runtime/package.json
v3/internal/runtime/desktop/@wailsio/runtime/package-lock.json
- name: Detect committed source changes
if: >-
steps.package-json-changes.outputs.any_modified != 'true'
id: source-changes
uses: step-security/changed-files@3dbe17c78367e7d60f00d78ae6781a35be47b4a1 # v45.0.1
with:
files: |
v3/internal/runtime/Taskfile.yaml
v3/internal/runtime/desktop/@wailsio/compiled/main.js
v3/internal/runtime/desktop/@wailsio/runtime/tsconfig.json
v3/internal/runtime/desktop/@wailsio/runtime/src/**
v3/pkg/events/events.txt
v3/tasks/events/**
rebuild_and_publish:
name: Rebuild and publish
needs: [detect]
if: >-
!failure() && !cancelled()
&& (github.event_name == 'workflow_dispatch' || needs.detect.outputs.changed == 'true')
runs-on: ubuntu-latest
permissions:
contents: write
actions: read
pull-requests: read
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: 'v3-alpha'
token: ${{ secrets.WAILS_REPO_TOKEN || github.token }}
- name: Configure git
run: |
git config --global user.email "github-actions@github.com"
git config --global user.name "GitHub Actions"
git config --global url."https://x-access-token:${{ secrets.WAILS_REPO_TOKEN || github.token }}@github.com/".insteadOf "https://github.com/"
- name: Install Task
uses: arduino/setup-task@v2
with:
version: 3.x
repo-token: ${{ secrets.GITHUB_TOKEN }}
- name: Use Node.js 20
uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install dependencies
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
run: |
npm ci
npx --yes esbuild@latest --version
- name: Clean build artifacts
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
run: npm run clean
- name: Build bundled runtime
working-directory: v3
run: task runtime:build
- name: Test+Build npm package
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
run: |
npm test
npm run build
- name: Bump version
id: bump-version
working-directory: v3/internal/runtime/desktop/@wailsio/runtime
run: |
echo "version=$(npm --no-git-tag-version --force version prerelease)" >> "$GITHUB_OUTPUT"
- name: Commit changes
run: |
git add .
git commit -m "[skip ci] Publish @wailsio/runtime ${{ steps.bump-version.outputs.version }}"
git push
- name: Publish npm package
uses: JS-DevTools/npm-publish@v3
with:
package: v3/internal/runtime/desktop/@wailsio/runtime
access: public
token: ${{ secrets.NPM_TOKEN }}

View file

@ -1,6 +1,4 @@
name: Test Nightly Releases (Dry Run)
permissions:
contents: read
on:
workflow_dispatch:

View file

@ -1,11 +0,0 @@
name: Test Simple
on:
workflow_dispatch:
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Test
run: echo "Hello World"

View file

@ -39,6 +39,7 @@ jobs:
name: Trigger v3-alpha Release
permissions:
contents: read
actions: write
runs-on: ubuntu-latest
needs: check-permissions
if: needs.check-permissions.outputs.authorized == 'true'

View file

@ -1,51 +0,0 @@
name: Deploy to GitHub Pages
on:
# Trigger the workflow every time you push to the `main` branch
# Using a different branch name? Replace `main` with your branch's name
push:
branches: [v3-alpha]
paths:
- 'docs/**'
- '.github/workflows/v3-docs.yml'
# Allows you to run this workflow manually from the Actions tab on GitHub.
workflow_dispatch:
# Allow this job to clone the repo and create a page deployment
permissions:
contents: read
pages: write
id-token: write
jobs:
build:
runs-on: ubuntu-latest
if: github.event.repository.fork == false
steps:
- name: Checkout your repository using git
uses: actions/checkout@v4
- name: Install D2
run: |
curl -fsSL https://d2lang.com/install.sh > install.sh
chmod +x install.sh
./install.sh
sudo cp ~/.local/bin/d2 /usr/local/bin/d2
d2 --version
rm install.sh
- name: Install, build, and upload your site output
uses: withastro/action@v2
with:
path: docs
node-version: 20 # The specific version of Node that should be used to build your site. Defaults to 18. (optional)
# package-manager: pnpm@latest # The Node package manager that should be used to install dependencies and build your site. Automatically detected based on your lockfile. (optional)
deploy:
needs: build
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

58
.gitignore vendored
View file

@ -37,61 +37,5 @@ v2/cmd/wails/internal/commands/initialise/templates/testtemplates/
/websitev3/site/
/v3/examples/plugins/bin/testapp
# V3 Example binaries - ignore executables that match directory names
/v3/examples/badge-custom/badge-custom
/v3/examples/badge/badge
/v3/examples/binding/binding
/v3/examples/cancel-async/cancel-async
/v3/examples/cancel-chaining/cancel-chaining
/v3/examples/clipboard/clipboard
/v3/examples/contextmenus/contextmenus
/v3/examples/dev/dev
/v3/examples/dialogs-basic/dialogs-basic
/v3/examples/dialogs/dialogs
/v3/examples/drag-n-drop/drag-n-drop
/v3/examples/environment/environment
/v3/examples/events-bug/events-bug
/v3/examples/events/events
/v3/examples/file-association/file-association
/v3/examples/frameless/frameless
/v3/examples/gin-example/gin-example
/v3/examples/gin-routing/gin-routing
/v3/examples/gin-service/gin-service
/v3/examples/hide-window/hide-window
/v3/examples/html-dnd-api/html-dnd-api
/v3/examples/ignore-mouse/ignore-mouse
/v3/examples/keybindings/keybindings
/v3/examples/menu/menu
/v3/examples/notifications/notifications
/v3/examples/panic-handling/panic-handling
/v3/examples/plain/plain
/v3/examples/raw-message/raw-message
/v3/examples/screen/screen
/v3/examples/services/services
/v3/examples/show-macos-toolbar/show-macos-toolbar
/v3/examples/single-instance/single-instance
/v3/examples/systray-basic/systray-basic
/v3/examples/systray-custom/systray-custom
/v3/examples/systray-menu/systray-menu
/v3/examples/video/video
/v3/examples/window-api/window-api
/v3/examples/window-call/window-call
/v3/examples/window-menu/window-menu
/v3/examples/window/window
/v3/examples/wml/wml
# Common binary names in examples
/v3/examples/*/main
/v3/examples/*/app
/v3/examples/*/changeme
/v3/examples/*/testbuild-*
# Temporary called mkdocs, should be renamed to more standard -website or similar
/docs/site
.aider*
.aider*
.cache
.local
# Ignore local iOS test app
/v3/testiosapp/
/mkdocs-website/site

View file

@ -1,7 +1,6 @@
overrides:
- files:
- "**/*.md"
- "**/*.mdx"
options:
printWidth: 80
proseWrap: always

8
.replit Normal file
View file

@ -0,0 +1,8 @@
modules = ["go-1.21", "web", "nodejs-20"]
run = "go run v2/cmd/wails/main.go"
[nix]
channel = "stable-24_05"
[deployment]
run = ["sh", "-c", "go run v2/cmd/wails/main.go"]

144
AGENTS.md
View file

@ -1,144 +0,0 @@
# AI Agent Instructions for Wails v3
## Issue Tracking with bd (beads)
**IMPORTANT**: This project uses **bd (beads)** for ALL issue tracking. Do NOT use markdown TODOs, task lists, or other tracking methods.
### Why bd?
- Dependency-aware: Track blockers and relationships between issues
- Git-friendly: Auto-syncs to JSONL for version control
- Agent-optimized: JSON output, ready work detection, discovered-from links
- Prevents duplicate tracking systems and confusion
### Quick Start
**Check for ready work:**
```bash
bd ready --json
```
**Create new issues:**
```bash
bd create "Issue title" -t bug|feature|task -p 0-4 --json
bd create "Issue title" -p 1 --deps discovered-from:bd-123 --json
bd create "Subtask" --parent <epic-id> --json # Hierarchical subtask (gets ID like epic-id.1)
```
**Claim and update:**
```bash
bd update bd-42 --status in_progress --json
bd update bd-42 --priority 1 --json
```
**Complete work:**
```bash
bd close bd-42 --reason "Completed" --json
```
### Issue Types
- `bug` - Something broken
- `feature` - New functionality
- `task` - Work item (tests, docs, refactoring)
- `epic` - Large feature with subtasks
- `chore` - Maintenance (dependencies, tooling)
### Priorities
- `0` - Critical (security, data loss, broken builds)
- `1` - High (major features, important bugs)
- `2` - Medium (default, nice-to-have)
- `3` - Low (polish, optimization)
- `4` - Backlog (future ideas)
### Workflow for AI Agents
1. **Check ready work**: `bd ready` shows unblocked issues
2. **Claim your task**: `bd update <id> --status in_progress`
3. **Work on it**: Implement, test, document
4. **Discover new work?** Create linked issue:
- `bd create "Found bug" -p 1 --deps discovered-from:<parent-id>`
5. **Complete**: `bd close <id> --reason "Done"`
6. **Commit together**: Always commit the `.beads/issues.jsonl` file together with the code changes so issue state stays in sync with code state
### Auto-Sync
bd automatically syncs with git:
- Exports to `.beads/issues.jsonl` after changes (5s debounce)
- Imports from JSONL when newer (e.g., after `git pull`)
- No manual export/import needed!
### GitHub Copilot Integration
If using GitHub Copilot, also create `.github/copilot-instructions.md` for automatic instruction loading.
Run `bd onboard` to get the content, or see step 2 of the onboard instructions.
### MCP Server (Recommended)
If using Claude or MCP-compatible clients, install the beads MCP server:
```bash
pip install beads-mcp
```
Add to MCP config (e.g., `~/.config/claude/config.json`):
```json
{
"beads": {
"command": "beads-mcp",
"args": []
}
}
```
Then use `mcp__beads__*` functions instead of CLI commands.
### Managing AI-Generated Planning Documents
AI assistants often create planning and design documents during development:
- PLAN.md, IMPLEMENTATION.md, ARCHITECTURE.md
- DESIGN.md, CODEBASE_SUMMARY.md, INTEGRATION_PLAN.md
- TESTING_GUIDE.md, TECHNICAL_DESIGN.md, and similar files
**Best Practice: Use a dedicated directory for these ephemeral files**
**Recommended approach:**
- Create a `history/` directory in the project root
- Store ALL AI-generated planning/design docs in `history/`
- Keep the repository root clean and focused on permanent project files
- Only access `history/` when explicitly asked to review past planning
**Example .gitignore entry (optional):**
```
# AI planning documents (ephemeral)
history/
```
**Benefits:**
- Clean repository root
- Clear separation between ephemeral and permanent documentation
- Easy to exclude from version control if desired
- Preserves planning history for archeological research
- Reduces noise when browsing the project
### CLI Help
Run `bd <command> --help` to see all available flags for any command.
For example: `bd create --help` shows `--parent`, `--deps`, `--assignee`, etc.
### Important Rules
- Use bd for ALL task tracking
- Always use `--json` flag for programmatic use
- Link discovered work with `discovered-from` dependencies
- Check `bd ready` before asking "what should I work on?"
- Store AI planning docs in `history/` directory
- Run `bd <cmd> --help` to discover available flags
- **ALWAYS run `coderabbit --plain` before committing** to get code analysis and catch issues early
- Do NOT create markdown TODO lists
- Do NOT use external issue trackers
- Do NOT duplicate tracking systems
- Do NOT clutter repo root with planning documents
For more details, see README.md and QUICKSTART.md.

1
CNAME
View file

@ -1 +0,0 @@
v3alpha.wails.io

View file

@ -1,419 +0,0 @@
# Wails v3 iOS Architecture
## Executive Summary
This document provides a comprehensive technical architecture for iOS support in Wails v3. The implementation enables Go applications to run natively on iOS with a WKWebView frontend, maintaining the Wails philosophy of using web technologies for UI while leveraging Go for business logic.
## Table of Contents
1. [Architecture Overview](#architecture-overview)
2. [Core Components](#core-components)
3. [Layer Architecture](#layer-architecture)
4. [Implementation Details](#implementation-details)
5. [Battery Optimization](#battery-optimization)
6. [Build System](#build-system)
7. [Security Considerations](#security-considerations)
8. [API Reference](#api-reference)
## Architecture Overview
### Design Principles
1. **Battery Efficiency First**: All architectural decisions prioritize battery life
2. **No Network Ports**: Asset serving happens in-process via native APIs
3. **Minimal WebView Instances**: Maximum 2 concurrent WebViews (1 primary, 1 for transitions)
4. **Native Integration**: Deep iOS integration using Objective-C runtime
5. **Wails v3 Compatibility**: Maintain API compatibility with existing Wails v3 applications
### High-Level Architecture
```
┌─────────────────────────────────────────────────────────────┐
│ iOS Application │
├─────────────────────────────────────────────────────────────┤
│ UIKit Framework │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ WailsViewController │ │
│ │ ┌───────────────────────────────────────────────┐ │ │
│ │ │ WKWebView Instance │ │ │
│ │ │ ┌─────────────────────────────────────────┐ │ │ │
│ │ │ │ Web Application (HTML/JS) │ │ │ │
│ │ │ └─────────────────────────────────────────┘ │ │ │
│ │ └───────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Bridge Layer (CGO) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
│ │URL Handler │ │JS Bridge │ │Message Handler│ │
│ └──────────────┘ └──────────────┘ └──────────────┘ │
├─────────────────────────────────────────────────────────────┤
│ Go Runtime │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ Wails Application │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │ │
│ │ │App Logic │ │Services │ │Asset Server │ │ │
│ │ └──────────┘ └──────────┘ └──────────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## Core Components
### 1. Platform Layer (`application_ios.go`)
**Purpose**: Go interface for iOS platform operations
**Key Functions**:
- `platformRun()`: Initialize and run the iOS application
- `platformQuit()`: Gracefully shutdown the application
- `isDarkMode()`: Detect iOS dark mode state
- `ExecuteJavaScript(windowID uint, js string)`: Execute JS in WebView
**Exported Go Functions (Called from Objective-C)**:
- `ServeAssetRequest(windowID C.uint, urlStr *C.char, callbackID C.uint)`
- `HandleJSMessage(windowID C.uint, message *C.char)`
### 2. Native iOS Layer (`application_ios.m`)
**Components**:
#### WailsSchemeHandler
```objc
@interface WailsSchemeHandler : NSObject <WKURLSchemeHandler>
```
- Implements `WKURLSchemeHandler` protocol
- Intercepts `wails://` URL requests
- Bridges to Go for asset serving
- Manages pending requests with callback IDs
**Methods**:
- `startURLSchemeTask:`: Intercept request, call Go handler
- `stopURLSchemeTask:`: Cancel pending request
- `completeRequest:withData:mimeType:`: Complete request with data from Go
#### WailsMessageHandler
```objc
@interface WailsMessageHandler : NSObject <WKScriptMessageHandler>
```
- Implements JavaScript to Go communication
- Handles `window.webkit.messageHandlers.external.postMessage()`
- Serializes messages to JSON for Go processing
**Methods**:
- `userContentController:didReceiveScriptMessage:`: Process JS messages
#### WailsViewController
```objc
@interface WailsViewController : UIViewController
```
- Main view controller containing WKWebView
- Manages WebView lifecycle
- Handles JavaScript execution requests
**Properties**:
- `webView`: WKWebView instance
- `schemeHandler`: Custom URL scheme handler
- `messageHandler`: JS message handler
- `windowID`: Unique window identifier
**Methods**:
- `viewDidLoad`: Initialize WebView with configuration
- `executeJavaScript:`: Run JS code in WebView
### 3. Bridge Layer (CGO)
**C Interface Functions**:
```c
void ios_app_init(void); // Initialize iOS app
void ios_app_run(void); // Run main loop
void ios_app_quit(void); // Quit application
bool ios_is_dark_mode(void); // Check dark mode
unsigned int ios_create_webview(void); // Create WebView
void ios_execute_javascript(unsigned int windowID, const char* js);
void ios_complete_request(unsigned int callbackID, const char* data, const char* mimeType);
```
## Layer Architecture
### Layer 1: Presentation Layer (WebView)
**Responsibilities**:
- Render HTML/CSS/JavaScript UI
- Handle user interactions
- Communicate with native layer
**Key Features**:
- WKWebView for modern web standards
- Hardware-accelerated rendering
- Efficient memory management
### Layer 2: Communication Layer
**Request Interception**:
```
WebView Request → WKURLSchemeHandler → Go ServeAssetRequest → AssetServer → Response
```
**JavaScript Bridge**:
```
JS postMessage → WKScriptMessageHandler → Go HandleJSMessage → Process → ExecuteJavaScript
```
### Layer 3: Application Layer (Go)
**Components**:
- Application lifecycle management
- Service binding and method calls
- Asset serving from embedded fs.FS
- Business logic execution
### Layer 4: Platform Integration Layer
**iOS-Specific Features**:
- Dark mode detection
- System appearance integration
- iOS-specific optimizations
## Implementation Details
### Request Handling Flow
1. **WebView makes request** to `wails://localhost/path`
2. **WKURLSchemeHandler intercepts** request
3. **Creates callback ID** and stores `WKURLSchemeTask`
4. **Calls Go function** `ServeAssetRequest` with URL and callback ID
5. **Go processes request** through AssetServer
6. **Go calls** `ios_complete_request` with response data
7. **Objective-C completes** the `WKURLSchemeTask` with response
### JavaScript Execution Flow
1. **Go calls** `ios_execute_javascript` with JS code
2. **Bridge dispatches** to main thread
3. **WKWebView evaluates** JavaScript
4. **Completion handler** logs any errors
### Message Passing Flow
1. **JavaScript calls** `window.webkit.messageHandlers.wails.postMessage(data)`
2. **WKScriptMessageHandler receives** message
3. **Serializes to JSON** and passes to Go
4. **Go processes** message in `HandleJSMessage`
5. **Go can respond** via `ExecuteJavaScript`
## Battery Optimization
### WebView Configuration
```objc
// Disable unnecessary features
config.suppressesIncrementalRendering = NO;
config.allowsInlineMediaPlayback = YES;
config.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;
```
### Memory Management
1. **Single WebView Instance**: Reuse instead of creating new instances
2. **Automatic Reference Counting**: Use ARC for Objective-C objects
3. **Lazy Loading**: Initialize components only when needed
4. **Resource Cleanup**: Properly release resources when done
### Request Optimization
1. **In-Process Serving**: No network overhead
2. **Direct Memory Transfer**: Pass data directly without serialization
3. **Efficient Caching**: Leverage WKWebView's built-in cache
4. **Minimal Wake Locks**: No background network activity
## Build System
### Build Tags
```go
//go:build ios
```
### CGO Configuration
```go
#cgo CFLAGS: -x objective-c -fobjc-arc
#cgo LDFLAGS: -framework Foundation -framework UIKit -framework WebKit
```
### Build Script (`build_ios.sh`)
**Steps**:
1. Check dependencies (go, xcodebuild, xcrun)
2. Set up iOS cross-compilation environment
3. Build Go binary with iOS tags
4. Create app bundle structure
5. Generate Info.plist
6. Sign for simulator
7. Create launch script
**Environment Variables**:
```bash
export CGO_ENABLED=1
export GOOS=ios
export GOARCH=arm64
export SDK_PATH=$(xcrun --sdk iphonesimulator --show-sdk-path)
```
### Simulator Deployment
```bash
xcrun simctl install "$DEVICE_ID" "WailsIOSDemo.app"
xcrun simctl launch "$DEVICE_ID" "com.wails.iosdemo"
```
## Security Considerations
### URL Scheme Security
1. **Custom Scheme**: Use `wails://` to avoid conflicts
2. **Origin Validation**: Only serve to authorized WebViews
3. **No External Access**: Scheme handler only responds to app's WebView
### JavaScript Execution
1. **Input Validation**: Sanitize JS code before execution
2. **Sandboxed Execution**: WKWebView provides isolation
3. **No eval()**: Avoid dynamic code evaluation
### Data Protection
1. **In-Memory Only**: No temporary files on disk
2. **ATS Compliance**: App Transport Security enabled
3. **Secure Communication**: All data stays within app process
## API Reference
### Go API
#### Application Functions
```go
// Create new iOS application
app := application.New(application.Options{
Name: "App Name",
Description: "App Description",
})
// Run the application
app.Run()
// Execute JavaScript
app.ExecuteJavaScript(windowID, "console.log('Hello')")
```
#### Service Binding
```go
type MyService struct{}
func (s *MyService) Greet(name string) string {
return fmt.Sprintf("Hello, %s!", name)
}
app := application.New(application.Options{
Services: []application.Service{
application.NewService(&MyService{}),
},
})
```
### JavaScript API
#### Send Message to Go
```javascript
window.webkit.messageHandlers.wails.postMessage({
type: 'methodCall',
service: 'MyService',
method: 'Greet',
args: ['World']
});
```
#### Receive from Go
```javascript
window.wailsCallback = function(data) {
console.log('Received:', data);
};
```
### Objective-C Bridge API
#### From Go to Objective-C
```c
// Execute JavaScript
ios_execute_javascript(windowID, "alert('Hello')");
// Complete asset request
ios_complete_request(callbackID, htmlData, "text/html");
```
#### From Objective-C to Go
```c
// Serve asset request
ServeAssetRequest(windowID, urlString, callbackID);
// Handle JavaScript message
HandleJSMessage(windowID, jsonMessage);
```
## Performance Metrics
### Target Metrics
- **WebView Creation**: < 100ms
- **Asset Request**: < 10ms for cached, < 50ms for first load
- **JS Execution**: < 5ms for simple scripts
- **Message Passing**: < 2ms round trip
- **Memory Usage**: < 50MB baseline
- **Battery Impact**: < 2% per hour active use
### Monitoring
1. **Xcode Instruments**: CPU, Memory, Energy profiling
2. **WebView Inspector**: JavaScript performance
3. **Go Profiling**: pprof for Go code analysis
## Future Enhancements
### Phase 1: Core Stability
- [ ] Production-ready error handling
- [ ] Comprehensive test suite
- [ ] Performance optimization
### Phase 2: Feature Parity
- [ ] Multiple window support
- [ ] System tray integration
- [ ] Native menu implementation
### Phase 3: iOS-Specific Features
- [ ] Widget extension support
- [ ] App Clip support
- [ ] ShareSheet integration
- [ ] Siri Shortcuts
### Phase 4: Advanced Features
- [ ] Background task support
- [ ] Push notifications
- [ ] CloudKit integration
- [ ] Apple Watch companion app
## Conclusion
This architecture provides a solid foundation for iOS support in Wails v3. The design prioritizes battery efficiency, native performance, and seamless integration with the existing Wails ecosystem. The proof of concept demonstrates all four required capabilities:
1. ✅ **WebView Creation**: Native WKWebView with optimized configuration
2. ✅ **Request Interception**: Custom scheme handler without network ports
3. ✅ **JavaScript Execution**: Bidirectional communication bridge
4. ✅ **iOS Simulator Support**: Complete build and deployment pipeline
The architecture is designed to scale from this proof of concept to a full production implementation while maintaining the simplicity and elegance that Wails developers expect.

View file

@ -25,7 +25,7 @@ Erschaffe Desktop Anwendungen mit Go & Web Technologien.
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
</a>
<a href="https://discord.gg/BrRSWTaxVK">
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
</a>
<br/>
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">

View file

@ -25,7 +25,7 @@
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
</a>
<a href="https://discord.gg/BrRSWTaxVK">
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
</a>
<br/>
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">

View file

@ -25,7 +25,7 @@
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
</a>
<a href="https://discord.gg/BrRSWTaxVK">
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
</a>
<br/>
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">

View file

@ -27,7 +27,7 @@
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
</a>
<a href="https://discord.gg/BrRSWTaxVK">
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
</a>
<br/>
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">

View file

@ -27,7 +27,7 @@
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
</a>
<a href="https://discord.gg/BrRSWTaxVK">
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
</a>
<br/>
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">

View file

@ -25,7 +25,7 @@
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
</a>
<a href="https://discord.gg/BrRSWTaxVK">
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
</a>
<br/>
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">
@ -98,9 +98,9 @@ The installation instructions are on the [official website](https://wails.io/doc
This project is supported by these kind people / companies:
<img src="website/static/img/sponsors.svg" style="width:100%;max-width:800px;"/>
<p align="center">
<img src="https://wails.io/img/sponsor/jetbrains-grayscale.webp" style="width: 100px"/>
</p>
## Powered By
[![JetBrains logo.](https://resources.jetbrains.com/storage/products/company/brand/logos/jetbrains.svg)](https://jb.gg/OpenSource)
## FAQ

View file

@ -25,7 +25,7 @@
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
</a>
<a href="https://discord.gg/BrRSWTaxVK">
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
</a>
<br/>
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">

View file

@ -25,7 +25,7 @@
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
</a>
<a href="https://discord.gg/BrRSWTaxVK">
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
</a>
<br/>
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">

View file

@ -25,7 +25,7 @@
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
</a>
<a href="https://discord.gg/BrRSWTaxVK">
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
</a>
<br/>
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">

View file

@ -25,7 +25,7 @@
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
</a>
<a href="https://discord.gg/BrRSWTaxVK">
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
</a>
<br/>
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">

View file

@ -27,7 +27,7 @@
<img src="https://cdn.rawgit.com/sindresorhus/awesome/d7305f38d29fed78fa85652e3a63e154dd8e8829/media/badge.svg" alt="Awesome" />
</a>
<a href="https://discord.gg/BrRSWTaxVK">
<img alt="Discord" src="https://dcbadge.vercel.app/api/server/BrRSWTaxVK?style=flat"/>
<img alt="Discord" src="https://img.shields.io/discord/1042734330029547630?logo=discord"/>
</a>
<br/>
<a href="https://github.com/wailsapp/wails/actions/workflows/build-and-test.yml" rel="nofollow">

View file

@ -16,11 +16,6 @@ includes:
dir: v3
optional: true
docs:
taskfile: docs
dir: docs
optional: true
tasks:
contributors:check:
cmds:

21
docs/.gitignore vendored
View file

@ -1,21 +0,0 @@
# build output
dist/
# generated types
.astro/
# dependencies
node_modules/
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# environment variables
.env
.env.production
# macOS-specific files
.DS_Store

View file

@ -1 +0,0 @@
save-exact=true

View file

@ -1,4 +0,0 @@
{
"recommendations": ["astro-build.astro-vscode"],
"unwantedRecommendations": []
}

View file

@ -1,11 +0,0 @@
{
"version": "0.2.0",
"configurations": [
{
"command": "./node_modules/.bin/astro dev",
"name": "Development server",
"request": "launch",
"type": "node-terminal"
}
]
}

View file

@ -1 +0,0 @@
v3alpha.wails.io

View file

@ -1,65 +0,0 @@
# Wails v3 Documentation
[![Built with Starlight](https://astro.badg.es/v2/built-with-starlight/tiny.svg)](https://starlight.astro.build)
World-class documentation for Wails v3, redesigned following Netflix documentation principles.
## 📚 Documentation Redesign (2025-10-01)
This documentation has been completely redesigned to follow the **Netflix approach** to developer documentation:
- **Problem-first framing** - Start with why, not what
- **Progressive disclosure** - Multiple entry points for different skill levels
- **Real production examples** - No toy code
- **Story-Code-Context pattern** - Why → How → When
- **Scannable content** - Clear structure, visual aids
**Status:** Foundation complete (~20%), ready for content migration
See [IMPLEMENTATION_SUMMARY.md](./IMPLEMENTATION_SUMMARY.md) for full details.
## 🚀 Project Structure
Inside of your Astro + Starlight project, you'll see the following folders and
files:
```sh
.
├── public/
├── src/
│ ├── assets/
│ ├── content/
│ │ ├── docs/
│ │ └── config.ts
│ └── env.d.ts
├── astro.config.mjs
├── package.json
└── tsconfig.json
```
Starlight looks for `.md` or `.mdx` files in the `src/content/docs/` directory.
Each file is exposed as a route based on its file name.
Images can be added to `src/assets/` and embedded in Markdown with a relative
link.
Static assets, like favicons, can be placed in the `public/` directory.
## 🧞 Commands
All commands are run from the root of the project, from a terminal:
| Command | Action |
| :------------------------ | :----------------------------------------------- |
| `npm install` | Installs dependencies |
| `npm run dev` | Starts local dev server at `localhost:4321` |
| `npm run build` | Build your production site to `./dist/` |
| `npm run preview` | Preview your build locally, before deploying |
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
| `npm run astro -- --help` | Get help using the Astro CLI |
## 👀 Want to learn more?
Check out [Starlights docs](https://starlight.astro.build/), read
[the Astro documentation](https://docs.astro.build), or jump into the
[Astro Discord server](https://astro.build/chat).

View file

@ -1,36 +0,0 @@
# https://taskfile.dev
version: '3'
vars:
# Change this to switch package managers: bun, npm, pnpm, yarn
PKG_MANAGER: npm
tasks:
setup:
summary: Setup the project (including D2 diagram tool)
preconditions:
- sh: '{{.PKG_MANAGER}} --version'
msg: "Looks like {{.PKG_MANAGER}} isn't installed."
- sh: 'go version'
msg: "Go is not installed. Install from https://go.dev/dl/"
cmds:
- '{{.PKG_MANAGER}} install'
- go install oss.terrastruct.com/d2@latest
- echo "✓ Setup complete. D2 installed to $(go env GOPATH)/bin/d2"
dev:
summary: Run the dev server
deps: [setup]
cmds:
- '{{.PKG_MANAGER}} run dev'
build:
summary: Build the docs
preconditions:
- sh: '{{.PKG_MANAGER}} --version'
msg: "Looks like {{.PKG_MANAGER}} isn't installed."
cmds:
- '{{.PKG_MANAGER}} run build'

View file

@ -1,349 +0,0 @@
// @ts-check
import { defineConfig } from "astro/config";
import starlight from "@astrojs/starlight";
import sitemap from "@astrojs/sitemap";
import starlightLinksValidator from "starlight-links-validator";
import starlightImageZoom from "starlight-image-zoom";
import starlightBlog from "starlight-blog";
import { authors } from "./src/content/authors";
import d2 from 'astro-d2';
import react from '@astrojs/react';
// https://astro.build/config
export default defineConfig({
site: "https://wails.io",
trailingSlash: "ignore",
compressHTML: true,
output: "static",
build: { format: "directory" },
devToolbar: { enabled: true },
integrations: [
react(),
d2(),
sitemap(),
starlight({
title: "",
titleDelimiter: "",
logo: {
dark: "./src/assets/wails-logo-horizontal-dark.svg",
light: "./src/assets/wails-logo-horizontal-light.svg",
},
favicon: "./public/favicon.svg",
description: "Build beautiful desktop applications using Go and modern web technologies.",
pagefind: true,
customCss: ["./src/stylesheets/extra.css"],
lastUpdated: true,
pagination: true,
editLink: {
baseUrl: "https://github.com/wailsapp/wails/edit/v3-alpha/docs",
},
social: [
{ icon: 'github', label: 'GitHub', href: 'https://github.com/wailsapp/wails' },
{ icon: 'discord', label: 'Discord', href: 'https://discord.gg/JDdSxwjhGf' },
{ icon: 'x.com', label: 'X', href: 'https://x.com/wailsapp' },
],
head: [
{
tag: 'script',
content: `
document.addEventListener('DOMContentLoaded', () => {
const socialLinks = document.querySelector('.social-icons');
if (socialLinks) {
const sponsorLink = document.createElement('a');
sponsorLink.href = 'https://github.com/sponsors/leaanthony';
sponsorLink.className = 'sl-flex';
sponsorLink.title = 'Sponsor';
sponsorLink.innerHTML = '<span class="sr-only">Sponsor</span><svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="#ef4444" stroke="none"><path d="M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z"/></svg>';
socialLinks.appendChild(sponsorLink);
}
});
`,
},
],
defaultLocale: "root",
locales: {
root: { label: "English", lang: "en", dir: "ltr" },
},
plugins: [
starlightImageZoom(),
starlightBlog({
title: "Wails Blog",
authors: authors,
}),
],
sidebar: [
{ label: "Home", link: "/" },
// Progressive Onboarding - Netflix Principle: Start with the problem
{ label: "Why Wails?", link: "/quick-start/why-wails" },
{
label: "Quick Start",
collapsed: false,
items: [
{ label: "Installation", link: "/quick-start/installation" },
{ label: "Your First App", link: "/quick-start/first-app" },
{ label: "Next Steps", link: "/quick-start/next-steps" },
],
},
// Tutorials
{
label: "Tutorials",
collapsed: true,
autogenerate: { directory: "tutorials" },
},
// Core Concepts
{
label: "Core Concepts",
collapsed: true,
items: [
{ label: "How Wails Works", link: "/concepts/architecture" },
{ label: "Manager API", link: "/concepts/manager-api" },
{ label: "Application Lifecycle", link: "/concepts/lifecycle" },
{ label: "Go-Frontend Bridge", link: "/concepts/bridge" },
{ label: "Build System", link: "/concepts/build-system" },
],
},
{
label: "Features",
collapsed: true,
items: [
{
label: "Windows",
collapsed: true,
items: [
{ label: "Window Basics", link: "/features/windows/basics" },
{ label: "Window Options", link: "/features/windows/options" },
{ label: "Multiple Windows", link: "/features/windows/multiple" },
{ label: "Frameless Windows", link: "/features/windows/frameless" },
{ label: "Window Events", link: "/features/windows/events" },
],
},
{
label: "Menus",
collapsed: true,
items: [
{ label: "Application Menus", link: "/features/menus/application" },
{ label: "Context Menus", link: "/features/menus/context" },
{ label: "System Tray Menus", link: "/features/menus/systray" },
{ label: "Menu Reference", link: "/features/menus/reference" },
],
},
{
label: "Bindings & Services",
collapsed: true,
items: [
{ label: "Method Binding", link: "/features/bindings/methods" },
{ label: "Services", link: "/features/bindings/services" },
{ label: "Advanced Binding", link: "/features/bindings/advanced" },
{ label: "Best Practices", link: "/features/bindings/best-practices" },
],
},
{
label: "Events",
collapsed: true,
items: [
{ label: "Event System", link: "/features/events/system" },
{ label: "Application Events", link: "/features/events/application" },
{ label: "Window Events", link: "/features/events/window" },
{ label: "Custom Events", link: "/features/events/custom" },
],
},
{
label: "Dialogs",
collapsed: true,
items: [
{ label: "File Dialogs", link: "/features/dialogs/file" },
{ label: "Message Dialogs", link: "/features/dialogs/message" },
{ label: "Custom Dialogs", link: "/features/dialogs/custom" },
],
},
{
label: "Clipboard",
collapsed: true,
autogenerate: { directory: "features/clipboard" },
},
{
label: "Browser",
collapsed: true,
autogenerate: { directory: "features/browser" },
},
{
label: "Drag & Drop",
collapsed: true,
autogenerate: { directory: "features/drag-and-drop" },
},
{
label: "Keyboard",
collapsed: true,
autogenerate: { directory: "features/keyboard" },
},
{
label: "Notifications",
collapsed: true,
autogenerate: { directory: "features/notifications" },
},
{
label: "Screens",
collapsed: true,
autogenerate: { directory: "features/screens" },
},
{
label: "Environment",
collapsed: true,
autogenerate: { directory: "features/environment" },
},
{
label: "Platform-Specific",
collapsed: true,
autogenerate: { directory: "features/platform" },
},
],
},
// Guides - Task-oriented patterns (Netflix: When to use it, when not to use it)
{
label: "Guides",
collapsed: true,
items: [
{
label: "Development",
collapsed: true,
items: [
{ label: "Project Structure", link: "/guides/dev/project-structure" },
{ label: "Development Workflow", link: "/guides/dev/workflow" },
{ label: "Debugging", link: "/guides/dev/debugging" },
{ label: "Testing", link: "/guides/dev/testing" },
],
},
{
label: "Building & Packaging",
collapsed: true,
items: [
{ label: "Building Applications", link: "/guides/build/building" },
{ label: "Build Customization", link: "/guides/build/customization" },
{ label: "Cross-Platform Builds", link: "/guides/build/cross-platform" },
{ label: "Code Signing", link: "/guides/build/signing" },
{ label: "Windows Packaging", link: "/guides/build/windows" },
{ label: "macOS Packaging", link: "/guides/build/macos" },
{ label: "Linux Packaging", link: "/guides/build/linux" },
{ label: "MSIX Packaging", link: "/guides/build/msix" },
],
},
{
label: "Distribution",
collapsed: true,
items: [
{ label: "Auto-Updates", link: "/guides/distribution/auto-updates" },
{ label: "File Associations", link: "/guides/distribution/file-associations" },
{ label: "Custom Protocols", link: "/guides/distribution/custom-protocols" },
{ label: "Single Instance", link: "/guides/distribution/single-instance" },
],
},
{
label: "Integration Patterns",
collapsed: true,
items: [
{ label: "Using Gin Router", link: "/guides/patterns/gin-routing" },
{ label: "Gin Services", link: "/guides/patterns/gin-services" },
{ label: "Database Integration", link: "/guides/patterns/database" },
{ label: "REST APIs", link: "/guides/patterns/rest-api" },
],
},
{
label: "Advanced Topics",
collapsed: true,
items: [
{ label: "Server Build", link: "/guides/server-build", badge: { text: "Experimental", variant: "caution" } },
{ label: "Custom Templates", link: "/guides/advanced/custom-templates" },
{ label: "WML (Wails Markup)", link: "/guides/advanced/wml" },
{ label: "Panic Handling", link: "/guides/advanced/panic-handling" },
{ label: "Security Best Practices", link: "/guides/advanced/security" },
],
},
],
},
// Reference - Comprehensive API docs (Netflix: Complete technical reference)
{
label: "API Reference",
collapsed: true,
items: [
{ label: "Overview", link: "/reference/overview" },
{ label: "Application", link: "/reference/application" },
{ label: "Window", link: "/reference/window" },
{ label: "Menu", link: "/reference/menu" },
{ label: "Events", link: "/reference/events" },
{ label: "Dialogs", link: "/reference/dialogs" },
{ label: "Frontend Runtime", link: "/reference/frontend-runtime" },
{ label: "CLI", link: "/reference/cli" },
],
},
// Contributing
{
label: "Contributing",
collapsed: true,
items: [
{ label: "Getting Started", link: "/contributing/getting-started" },
{ label: "Development Setup", link: "/contributing/setup" },
{ label: "Coding Standards", link: "/contributing/standards" },
],
},
// Migration & Troubleshooting
{
label: "Migration",
collapsed: true,
items: [
{ label: "From v2 to v3", link: "/migration/v2-to-v3" },
{ label: "From Electron", link: "/migration/from-electron" },
],
},
{
label: "Troubleshooting",
collapsed: true,
autogenerate: { directory: "troubleshooting" },
},
// Community & Resources
{
label: "Community",
collapsed: true,
items: [
{ label: "Links", link: "/community/links" },
{ label: "Templates", link: "/community/templates" },
{
label: "Showcase",
collapsed: true,
items: [
{ label: "Overview", link: "/community/showcase" },
{
label: "Applications",
autogenerate: {
directory: "community/showcase",
collapsed: true,
},
},
],
},
],
},
{ label: "What's New", link: "/whats-new" },
{ label: "Status", link: "/status" },
{ label: "Changelog", link: "/changelog" },
{
label: "Sponsor",
link: "https://github.com/sponsors/leaanthony",
badge: { text: "❤️" },
},
{ label: "Credits", link: "/credits" },
],
}),
],
});

9082
docs/package-lock.json generated

File diff suppressed because it is too large Load diff

View file

@ -1,31 +0,0 @@
{
"name": "wails-docs",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro check && astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"@astrojs/check": "^0.9.4",
"@astrojs/react": "^4.1.0",
"@astrojs/starlight": "0.36.2",
"@types/react": "^19.0.1",
"@types/react-dom": "^19.0.2",
"astro": "^5.0.0",
"astro-d2": "^0.5.0",
"framer-motion": "^11.14.4",
"motion": "^11.14.4",
"react": "^19.0.0",
"react-dom": "^19.0.0",
"sharp": "^0.33.5",
"starlight-blog": "0.25.1",
"starlight-image-zoom": "^0.9.0",
"starlight-links-validator": "^0.13.4",
"starlight-showcases": "^0.2.0",
"typescript": "^5.7.2"
}
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 38 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 33 KiB

View file

@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="100%" height="100%" version="1.1" viewBox="0 0 550 310" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2"><g><path d="M0.883,-0.081L0.121,0.081L0.256,-0.063L0.883,-0.081Z" transform="matrix(-166.599,4.57132,4.57132,166.599,147.403,167.648)" style="fill:url(#_Linear1);fill-rule:nonzero"/></g><g><path d="M0.878,-0.285L-0.073,0.71L-1.186,0.542L0.015,0.207L-0.846,0.077L0.355,-0.258L-0.505,-0.388L0.649,-0.71L0.878,-0.285Z" transform="matrix(-106.443,-16.0669,-16.0669,106.443,428.19,188.033)" style="fill:url(#_Linear2);fill-rule:nonzero"/></g><g><path d="M0.44,-0.04L0.265,-0.056L0.177,0.437L-0.311,-0.255L0.262,-0.437L0.568,-0.437L0.44,-0.04Z" transform="matrix(-114.484,-162.408,-162.408,114.484,333.291,285.804)" style="fill:url(#_Linear3);fill-rule:nonzero"/></g><g><path d="M0.622,-0.115L0.761,-0.115L0.806,-0.013L0.826,0.182L0.622,-0.115Z" transform="matrix(238.126,298.893,298.893,-238.126,113.516,-150.536)" style="fill:url(#_Linear4);fill-rule:nonzero"/></g><g><path d="M0.467,0.005L0.49,0.062L0.271,-0.062L0.467,0.005Z" transform="matrix(-369.529,-97.4118,-97.4118,369.529,582.38,94.027)" style="fill:url(#_Linear5);fill-rule:nonzero"/></g><g><path d="M0.2,0.001L0.219,-0.018L0.614,0.012L0.519,0.089L0.282,0.068L0.2,0.135L0.463,0.194L0.374,0.266L0.138,0.186L0.047,0.033L-0.131,-0.266L0.2,0.001Z" transform="matrix(-496.156,-53.9751,-53.9751,496.156,367.888,125.085)" style="fill:url(#_Linear6);fill-rule:nonzero"/></g><g><path d="M269.095,104.527L287.764,111.419L263.632,106.75L269.095,104.527Z" transform="matrix(0.436503,-1.22916,4.88651,1.73532,-368.043,253.619)" style="fill:#fff"/></g><defs><linearGradient id="_Linear1" x1="0" x2="1" y1="0" y2="0" gradientTransform="matrix(1,-3.46945e-18,3.46945e-18,1,0,-3.05761e-06)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#e33232;stop-opacity:1"/><stop offset="1" style="stop-color:#6b000d;stop-opacity:1"/></linearGradient><linearGradient id="_Linear2" x1="0" x2="1" y1="0" y2="0" gradientTransform="matrix(1,0,0,1,0,-2.75467e-06)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#e33232;stop-opacity:1"/><stop offset="1" style="stop-color:#6b000d;stop-opacity:1"/></linearGradient><linearGradient id="_Linear3" x1="0" x2="1" y1="0" y2="0" gradientTransform="matrix(1,-1.11022e-16,1.11022e-16,1,0,-2.61861e-06)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#e33232;stop-opacity:1"/><stop offset="1" style="stop-color:#6b000d;stop-opacity:1"/></linearGradient><linearGradient id="_Linear4" x1="0" x2="1" y1="0" y2="0" gradientTransform="matrix(-0.801899,-0.59746,0.59746,-0.801899,1.3495,0.447457)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#e33232;stop-opacity:1"/><stop offset="1" style="stop-color:#6b000d;stop-opacity:1"/></linearGradient><linearGradient id="_Linear5" x1="0" x2="1" y1="0" y2="0" gradientTransform="matrix(1,-2.77556e-17,2.77556e-17,1,0,-1.92826e-06)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#e33232;stop-opacity:1"/><stop offset="1" style="stop-color:#6b000d;stop-opacity:1"/></linearGradient><linearGradient id="_Linear6" x1="0" x2="1" y1="0" y2="0" gradientTransform="matrix(1,0,0,1,0,9.68429e-07)" gradientUnits="userSpaceOnUse"><stop offset="0" style="stop-color:#e33232;stop-opacity:1"/><stop offset="1" style="stop-color:#6b000d;stop-opacity:1"/></linearGradient></defs></svg>

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 498 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 190 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 503 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 269 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Some files were not shown because too many files have changed in this diff Show more