Skip to main content
Version: v2.8.0

Frameless Applications

Wails supports application that have no frames. This can be achieved by using the frameless field in Application Options.

Wails offers a simple solution for dragging the window: Any HTML element that has the CSS style --wails-draggable:drag will act as a "drag handle". This property applies to all child elements. If you need to indicate that a nested element should not drag, then use the attribute '--wails-draggable:no-drag' on that element.

<link rel="stylesheet" href="/main.css" />

<body style="--wails-draggable:drag">
<div id="logo"></div>
<div id="input" style="--wails-draggable:no-drag">
<input id="name" type="text" />
<button onclick="greet()">Greet</button>
<div id="result"></div>

<script src="/main.js"></script>

For some projects, using a CSS variable may not be possible due to dynamic styling. In this case, you can use the CSSDragProperty and CSSDragValue application options to define a property and value that will be used to indicate draggable regions:

package main

import (


//go:embed all:frontend/dist
var assets embed.FS

func main() {
// Create an instance of the app structure
app := NewApp()

// Create application with options
err := wails.Run(&options.App{
Title: "alwaysontop",
Width: 1024,
Height: 768,
AssetServer: &assetserver.Options{
Assets: assets,
Frameless: true,
CSSDragProperty: "widows",
CSSDragValue: "1",
Bind: []interface{}{

if err != nil {
println("Error:", err)
<!DOCTYPE html>
<html lang="en">
<meta charset="UTF-8" />
<meta content="width=device-width, initial-scale=1.0" name="viewport" />
<body style="widows: 1">
<div id="app"></div>
<script src="./src/main.js" type="module"></script>

If you allow your application to go fullscreen, this drag functionality will be disabled.