Version 2.13.5 Bug Fix Release
This release addresses a problem with keypad keys in certain terminal emulators.
Full Changelog: https://github.com/gdamore/tcell/compare/v2.13.5...v2.13.6
Version 3.1.0 Feature Release
The main new feature here is improved support for mouse chords and additional mouse button reporting. It is now possible for multiple mouse buttons to be pressed together, and reported together.
A great deal of additional work was done on the emulator subsystem and in the mocks, yielding over 80% test coverage, with a number of associated bug fixes as a result.
- fix(emulator): implement proper deferred (pending) auto wrap by @gdamore in https://github.com/gdamore/tcell/pull/959
- feat(emulator): Implement the rest of soft reset by @gdamore in https://github.com/gdamore/tcell/pull/960
- refactor(emulator): Refactoring of the emulator in anticipation of gr… by @gdamore in https://github.com/gdamore/tcell/pull/961
- refactor(emulator): Fold mock terminal into vt package. by @gdamore in https://github.com/gdamore/tcell/pull/962
- test(emulator): Add remaining erase test cases. by @gdamore in https://github.com/gdamore/tcell/pull/963
- Refactor style handling in emulator by @gdamore in https://github.com/gdamore/tcell/pull/964
- tests: Add some extra test validations for TTYs by @gdamore in https://github.com/gdamore/tcell/pull/965
- feat(emulator): Add support for full 256 and 24-bit color, and also u… by @gdamore in https://github.com/gdamore/tcell/pull/966
- chore: update the boxes demo to run in CI/CD by @gdamore in https://github.com/gdamore/tcell/pull/968
- Mouse support improvements and tests by @gdamore in https://github.com/gdamore/tcell/pull/969
- chore: rename KbdEvent to KeyEvent by @gdamore in https://github.com/gdamore/tcell/pull/970
- fix: Fix for incorrect strings sent for non-rune keys in Kitty and Wi… by @gdamore in https://github.com/gdamore/tcell/pull/971
- Fix edge cases for input entry by @gdamore in https://github.com/gdamore/tcell/pull/972
- feat(emulator): Add focus reporting by @gdamore in https://github.com/gdamore/tcell/pull/973
- feat(emulator): Add vertical scrolling (both directions) by @gdamore in https://github.com/gdamore/tcell/pull/974
- feat(emulator): Implement horizontal scroll regions. by @gdamore in https://github.com/gdamore/tcell/pull/975
- chore: Add definitions for more private modes, and ANSI modes by @gdamore in https://github.com/gdamore/tcell/pull/977
- Fixes for newline/LF handling, including ANSI mode 20 support by @gdamore in https://github.com/gdamore/tcell/pull/978
- tests(emulator): Add CUU, CNL, and CPL tests, and move emulator speci… by @gdamore in https://github.com/gdamore/tcell/pull/979
- feat(emulator): This is the start of support for left and right margins. by @gdamore in https://github.com/gdamore/tcell/pull/980
- fix: Convert text keypad keys from their CSI-u codes to their text va… by @gdamore in https://github.com/gdamore/tcell/pull/982
Full Changelog: https://github.com/gdamore/tcell/compare/v3.0.6...v3.1.0
Wails v3.0.0-alpha.58
- Fix outdated Manager API references in documentation (31 files updated to use new pattern like
app.Window.New(),app.Event.Emit(), etc.) by @leaanthony - Fix Linux crash on panic in JS-bound Go methods due to WebKit overriding signal handlers (#3965) by @leaanthony
🤖 This is an automated nightly release generated from the latest changes in the v3-alpha branch.
Installation:
go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-alpha.58
v4.31.0
lego is an independent, free, and open-source project, if you value it, consider supporting it! ❤️
Everybody thinks that the others will donate, but in the end, nobody does.
So if you think that lego is worth it, please consider donating.
For key updates, see the changelog.
- 8b327005b3105a5a70c8ace5cfe7e1f83e148f7c Add DNS Provider for ISPConfig (DDNS Module) (#2760)
- c5a259564fe8e0b183fe12fb926f5b3634497967 Add DNS provider for 35.com/三五互联 (#2779)
- a6a73754af31fb65963f53845bb9ce55d09466a1 Add DNS provider for Alwaysdata (#2770)
- 96168f78ded8a0db96b80d083834bf05d2bde313 Add DNS provider for ISPConfig (#2762)
- dd6ab7ca95c90bde76719e9c8121ec8274f3aff8 Add DNS provider for JDCloud (#2782)
- 1b634097c13285c9829dc9c16b74a9c86c4ff81e docs: remove email from examples (#2773)
- ee616417a181239b0b77f6fe00acff3a22ae35b9 f5xc: add an option to configure the domain of the server (#2767)
- a5cc0e155518e825ec2ec017610822f06aebb767 feat: improve ACME error types (#2761)
- ff885d99c2e45f166a0c9592ea047d8c938604d3 gandiv5: fix API Key header (#2769)
- 2eede6d6206a06e0b16fb3de45b8fa7aa0807de3 hetzner: fix compatibility with _FILE suffix (#2775)
- b77b8709b6802da29a702b44bb0a5279c35eb337 namedotcom: follow CNAME (#2390)
v1.69.0
- Add sortkeys by @pjebs in https://github.com/valyala/fasthttp/pull/2118
- Expose header parsing error variables by @ReneWerner87 in https://github.com/valyala/fasthttp/pull/2096
- Add documentation that modifying during iteration can panic by @erikdubbelboer in https://github.com/valyala/fasthttp/pull/2122
- update readme by @pjebs in https://github.com/valyala/fasthttp/pull/2114
- chore(deps): bump actions/upload-artifact from 4 to 5 by @dependabot[bot] in https://github.com/valyala/fasthttp/pull/2092
- chore(deps): bump golangci/golangci-lint-action from 8 to 9 by @dependabot[bot] in https://github.com/valyala/fasthttp/pull/2095
- chore(deps): bump golang.org/x/sys from 0.37.0 to 0.38.0 by @dependabot[bot] in https://github.com/valyala/fasthttp/pull/2094
- chore(deps): bump golang.org/x/crypto from 0.43.0 to 0.44.0 by @dependabot[bot] in https://github.com/valyala/fasthttp/pull/2098
- chore(deps): bump golang.org/x/net from 0.46.0 to 0.47.0 by @dependabot[bot] in https://github.com/valyala/fasthttp/pull/2097
- chore(deps): bump golang.org/x/crypto from 0.44.0 to 0.45.0 by @dependabot[bot] in https://github.com/valyala/fasthttp/pull/2099
- chore(deps): bump actions/checkout from 5 to 6 by @dependabot[bot] in https://github.com/valyala/fasthttp/pull/2101
- chore(deps): bump github.com/klauspost/compress from 1.18.1 to 1.18.2 by @dependabot[bot] in https://github.com/valyala/fasthttp/pull/2103
- chore(deps): bump golang.org/x/net from 0.47.0 to 0.48.0 by @dependabot[bot] in https://github.com/valyala/fasthttp/pull/2109
- chore(deps): bump actions/upload-artifact from 5 to 6 by @dependabot[bot] in https://github.com/valyala/fasthttp/pull/2111
- chore(deps): bump securego/gosec from 2.22.10 to 2.22.11 by @dependabot[bot] in https://github.com/valyala/fasthttp/pull/2110
Full Changelog: https://github.com/valyala/fasthttp/compare/v1.68.0...v1.69.0
Wails v3.0.0-alpha.57
- Replace various debug logs from Info to Debug (by @mbaklor)
- Fix SaveFileDialog.SetFilename() having no effect on Linux (#4841) by @samstanier
- Fix drop coordinates showing as undefined in drag-n-drop example
- Fix macOS app bundle creation failing when APP_NAME contains spaces (brace expansion issue)
- Fix index out of bounds panic on Windows when calling service methods (revert goccy/go-json)
🤖 This is an automated nightly release generated from the latest changes in the v3-alpha branch.
Installation:
go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-alpha.57
Wails v3.0.0-alpha.56
- Add
internal/libpathpackage for finding native library paths on Linux with parallel search, caching, and support for Flatpak/Snap/Nix
- BREAKING: Rename
EnableDragAndDroptoEnableFileDropin window options - BREAKING: Rename
DropZoneDetailstoDropTargetDetailsin event context - BREAKING: Rename
DropZoneDetails()method toDropTargetDetails()onWindowEventContext - BREAKING: Remove
WindowDropZoneFilesDroppedevent, useWindowFilesDroppedinstead - BREAKING: Change HTML attribute from
data-wails-dropzonetodata-file-drop-target - BREAKING: Change CSS hover class from
wails-dropzone-hovertofile-drop-target-active - BREAKING: Remove
DragEffect,OnEnterEffect,OnOverEffectoptions from Windows (were part of removed IDropTarget)
- Fix file drag-and-drop on Windows not working at non-100% display scaling
- Fix HTML5 internal drag-and-drop being broken when file drop was enabled on Windows
- Fix file drop coordinates being in wrong pixel space on Windows (physical vs CSS pixels)
- Fix file drag-and-drop on Linux not working reliably with hover effects
- Fix HTML5 internal drag-and-drop being broken when file drop was enabled on Linux
- Remove native
IDropTargetimplementation on Windows in favor of JavaScript-based approach (matches v2 behavior)
🤖 This is an automated nightly release generated from the latest changes in the v3-alpha branch.
Installation:
go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-alpha.56
New Year new Fyne release :) - lots of bug fixes
- Added Japanese translation
- Crash in accordion (#3966)
- Extended list does not focus correctly when tapped (#5997)
- TextGrid: Ensure we are refreshing the correct row (#6023)
- Entry doesn't lose focus when clicking on button elsewhere (#5107)
- Mouse clicks missed (#4672)
- Possible crash when form is truncated when an Entry is focused
- Alt-Tab'ing should not open MainMenu (#2998)
- Wayland: ALT key steals focus to the menubar if it exists (#5960)
- Extending the build-In theme only works fully when theme is set after app has started (#6056)
- Multi-segment RichText not right aligning correctly (#6060)
Wails v3.0.0-alpha.55
- Switch to goccy/go-json for all runtime JSON processing (method bindings, events, webview requests, notifications, kvstore), improving performance by 21-63% and reducing memory allocations by 40-60%
- Optimize BoundMethod struct layout and cache isVariadic flag to reduce per-call overhead
- Use stack-allocated argument buffer for methods with <=8 arguments to avoid heap allocations
- Optimize result collection in method calls to avoid slice allocation for single return values
- Use sync.Map for MIME type cache to improve concurrent performance
- Use buffer pool for HTTP transport request body reading
- Lazily allocate CloseNotify channel in content type sniffer to reduce per-request allocations
- Remove debug CSS logging from asset server
- Expand MIME type extension map to cover 50+ common web formats (fonts, audio, video, etc.)
- Update all commands in Taskfile.yml files for all operating systems to accommodate spaces in variables such as
APP_NAMEby @ndianabasi
- Remove github.com/wailsapp/mimetype dependency in favor of expanded extension map + stdlib http.DetectContentType, reducing binary size by ~1.2MB
- Remove gopkg.in/ini.v1 dependency by implementing minimal .desktop file parser for Linux file explorer, saving ~45KB
- Remove samber/lo from runtime code by using Go 1.21+ stdlib slices package and minimal internal helpers, saving ~310KB
🤖 This is an automated nightly release generated from the latest changes in the v3-alpha branch.
Installation:
go install github.com/wailsapp/wails/v3/cmd/wails3@v3.0.0-alpha.55
v4.15.0
Security
WARNING: If your application relies on cross-origin or same-site (same subdomain) requests do not blindly push this version to production
The CSRF middleware now supports the Sec-Fetch-Site header as a modern, defense-in-depth approach to CSRF protection, implementing the OWASP-recommended Fetch Metadata API alongside the traditional token-based mechanism.
How it works:
Modern browsers automatically send the Sec-Fetch-Site header with all requests, indicating the relationship between the request origin and the target. The middleware uses this to make security decisions:
same-originornone: Requests are allowed (exact origin match or direct user navigation)same-site: Falls back to token validation (e.g., subdomain to main domain)cross-site: Blocked by default with 403 error for unsafe methods (POST, PUT, DELETE, PATCH)
For browsers that don't send this header (older browsers), the middleware seamlessly falls back to traditional token-based CSRF protection.
New Configuration Options:
TrustedOrigins []string: Allowlist specific origins for cross-site requests (useful for OAuth callbacks, webhooks)AllowSecFetchSiteFunc func(echo.Context) (bool, error): Custom logic for same-site/cross-site request validation
Example:
e.Use(middleware.CSRFWithConfig(middleware.CSRFConfig{
// Allow OAuth callbacks from trusted provider
TrustedOrigins: []string{"https://oauth-provider.com"},
// Custom validation for same-site requests
AllowSecFetchSiteFunc: func(c echo.Context) (bool, error) {
// Your custom authorization logic here
return validateCustomAuth(c), nil
// return true, err // blocks request with error
// return true, nil // allows CSRF request through
// return false, nil // falls back to legacy token logic
},
}))
PR: https://github.com/labstack/echo/pull/2858
Type-Safe Generic Parameter Binding
-
Added generic functions for type-safe parameter extraction and context access by @aldas in https://github.com/labstack/echo/pull/2856
Echo now provides generic functions for extracting path, query, and form parameters with automatic type conversion, eliminating manual string parsing and type assertions.
New Functions:
- Path parameters:
PathParam[T],PathParamOr[T] - Query parameters:
QueryParam[T],QueryParamOr[T],QueryParams[T],QueryParamsOr[T] - Form values:
FormParam[T],FormParamOr[T],FormParams[T],FormParamsOr[T] - Context store:
ContextGet[T],ContextGetOr[T]
Supported Types: Primitives (
bool,string,int/uintvariants,float32/float64),time.Duration,time.Time(with custom layouts and Unix timestamp support), and custom types implementingBindUnmarshaler,TextUnmarshaler, orJSONUnmarshaler.Example:
// Before: Manual parsing idStr := c.Param("id") id, err := strconv.Atoi(idStr) // After: Type-safe with automatic parsing id, err := echo.PathParam[int](c, "id") // With default values page, err := echo.QueryParamOr[int](c, "page", 1) limit, err := echo.QueryParamOr[int](c, "limit", 20) // Type-safe context access (no more panics from type assertions) user, err := echo.ContextGet[*User](c, "user")
- Path parameters:
PR: https://github.com/labstack/echo/pull/2856
DEPRECATION NOTICE Timeout Middleware Deprecated - Use ContextTimeout Instead
The middleware.Timeout middleware has been deprecated due to fundamental architectural issues that cause data races. Use middleware.ContextTimeout or middleware.ContextTimeoutWithConfig instead.
Why is this being deprecated?
The Timeout middleware manipulates response writers across goroutine boundaries, which causes data races that cannot be reliably fixed without a complete architectural redesign. The middleware:
- Swaps the response writer using
http.TimeoutHandler - Must be the first middleware in the chain (fragile constraint)
- Can cause races with other middleware (Logger, metrics, custom middleware)
- Has been the source of multiple race condition fixes over the years
What should you use instead?
The ContextTimeout middleware (available since v4.12.0) provides timeout functionality using Go's standard context mechanism. It is:
- Race-free by design
- Can be placed anywhere in the middleware chain
- Simpler and more maintainable
- Compatible with all other middleware
Migration Guide:
// Before (deprecated):
e.Use(middleware.Timeout())
// After (recommended):
e.Use(middleware.ContextTimeout(30 * time.Second))
Important Behavioral Differences:
-
Handler cooperation required: With ContextTimeout, your handlers must check
context.Done()for cooperative cancellation. The old Timeout middleware would send a 503 response regardless of handler cooperation, but had data race issues. -
Error handling: ContextTimeout returns errors through the standard error handling flow. Handlers that receive
context.DeadlineExceededshould handle it appropriately:
e.GET("/long-task", func(c echo.Context) error {
ctx := c.Request().Context()
// Example: database query with context
result, err := db.QueryContext(ctx, "SELECT * FROM large_table")
if err != nil {
if errors.Is(err, context.DeadlineExceeded) {
// Handle timeout
return echo.NewHTTPError(http.StatusServiceUnavailable, "Request timeout")
}
return err
}
return c.JSON(http.StatusOK, result)
})
- Background tasks: For long-running background tasks, use goroutines with context:
e.GET("/async-task", func(c echo.Context) error {
ctx := c.Request().Context()
resultCh := make(chan Result, 1)
errCh := make(chan error, 1)
go func() {
result, err := performLongTask(ctx)
if err != nil {
errCh <- err
return
}
resultCh <- result
}()
select {
case result := <-resultCh:
return c.JSON(http.StatusOK, result)
case err := <-errCh:
return err
case <-ctx.Done():
return echo.NewHTTPError(http.StatusServiceUnavailable, "Request timeout")
}
})
Full Changelog: https://github.com/labstack/echo/compare/v4.14.0...v4.15.0