HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
BurntSushi
wingo
Go2012–2023
BurntSushi / wingo

wingo

A fully-featured window manager written in Go.

6Distinct people
20Mentions
1Explicit recommenders
1KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A fully-featured window manager written in Go.

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

One possible problem with your experience with 3 monitors is that you have poor tools at your disposal to manage them. When I first switched from 2 monitors to 3 monitors (on…

burntsushi used a recommendation phrase. 3 indexed comments match. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year20 dated mentions

Observed mentions: 2012-10-22 21:17:13 UTC to 2023-11-15 18:24:19 UTC.

02462012-01-01 00:00:00 UTC to 2013-01-01 00:00:00 UTC (exclusive): 4 mentions; 1 submissions, 3 comments20122013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 7 mentions; 0 submissions, 7 comments2014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 2 mentions; 0 submissions, 2 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments20172018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 3 mentions; 0 submissions, 3 comments2023

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20122012-01-01 00:00:00 UTC2013-01-01 00:00:00 UTC413
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC707
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC202
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC202
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC000
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC101
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC000
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC000
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC000
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC101
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC000
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC303

What Hacker News says

20 sources
I've been using X11 on my Framework laptop for years. No desktop environment at all. Just my regular old school window manager[1]. No KDE or GNOME. But also no XFCE. The only thing I had to do to get scaling working for me was set two environment variables[2]. I was indeed worried about this when I bought the laptop. Prior to this, I avoided anything with resolutions higher than 1920x1200. But it turned out that everything mostly worked with a couple tweaks. I think the only real issue I've run into is `git gui`. As I understand it, the GUI toolkit it uses doesn't support scaling? Not sure. I ended up working around it by just increasing font sizes. I suppose this exposes the weakness that is probably impacting you: the scaling on my laptop is being done by the GUI toolkits, not the display server or compositor. (I don't always run a comp
Read the rest
ositor, but when I do, I use `picom`. Mostly just to avoid tearing.) [1]: https://github.com/BurntSushi/wingo [2]: https://github.com/BurntSushi/dotfiles/blob/ea3a88e6160f4244...
In Framework 13 with AMD Ryzen 7040 Series Makes for a Great Linux Laptop
burntsushi·Apr 6, 2015Recommendation phrase
One possible problem with your experience with 3 monitors is that you have poor tools at your disposal to manage them. When I first switched from 2 monitors to 3 monitors (on Linux), it was horrendous: - My workspaces were monolithic. If I changed my workspace, the windows on all my monitors went with it. - Alt-tab worked globally across all monitors. I wanted it to only list the windows that were on the currently focused monitor. - Moving windows from one monitor to the next in a predictable way was a chore. (I eventually resolved this with some key bindings, but it was a hack.) - No window manager I know of afforded me the option of using tiling or (GOOD) stacking layouts on a per-monitor basis. (Some tiling WMs exist that solve the monolithic workspace problem, but they are all tiling.) My first solution to this was to fork Openbox. It
Read the rest
worked well for a while, but it was subject to a lot of state transition bugs and my hack became hard to maintain. So I wrote my own. In Go. (Including a full X client stack.) https://github.com/BurntSushi/wingo I love working with three monitors now, because I can freely mix and match the windows on my screen. My workspaces are dynamic (add/remove/rename as I please), so everything is composable. On one monitor, I might have a bunch of terminals in tiling mode. On another, I might have GIMP in stacking mode. Interestingly, in order to achieve this, I had to break compatibility with existing standards (but support as many as possible). As a result, some existing WM tools (particularly pagers and possibly task bars) just can't work well with my WM without explicit support. Perhaps this is why so few of these WMs exist outside the tiling world!
In 3 monitors won't solve your problems
burntsushi·Feb 22, 2015Recommendation phrase
> But when I read stuff like this I remember why I love using Go every day. Me too! I wrote a window manager in Go[1] that I've been using for years now. I love that it takes <30 seconds to download and compile the whole thing. No C dependencies (compile or runtime) at all. With that said, doing it with Rust should be almost as easy. There's no `cargo install` command, but I think it's only a matter of time. :-) Your ideas seem cool, by the way! Sharing CSV data would be especially nice. [1] - https://github.com/BurntSushi/wingo
In XSV – A fast CSV toolkit in Rust
Not in the Go ecosystem. :-) We have a real, pure (concurrent) X client protocol implementation: https://github.com/BurntSushi/xgb (and of course, a WM: https://github.com/BurntSushi/wingo, which is hybrid tiling and stacking, kind of like Xmonad meets Openbox). /shameless plug Of course, it's not all moonpies and pennywhistles. XGB only supports basic extensions like RandR, Xinerama, Render and Composite. But it's missing Xinput and XKB (which are monstrous).
In A tiling window manager written in Rust
I used to navigate workspaces spatially too, but then I increased to three monitors and the traditional workspace model broke down big time. Namely, switching to a different workspace switched whatever was displayed on all of my monitors. I couldn't easily compose groups of windows onto my displays. The solution (for me) was to throw out a spatial representation of workspaces and adopt a more dynamic approach. Instead of being fixed to a set of N workspaces in a particular geometry, I switched to having a fluid list of named workspaces. What makes this work particularly well on multiple monitors is that each workspace can be viewed on any monitor. So for example, with three monitors, I have three workspaces visible at any point in time. And yes, I can flip the workspace on one monitor to the other monitor. This ends up being great for my
Read the rest
work flow, since I can maintain my work area for any particular project without cluttering up the rest of my desktop. For example, when I'm working on the window manager that implements this functionality, I might have a workspace called "wingo" for code. And when I want to switch back to working on the X client library for Go, I go to my workspace "xgb" and it has me right where I left off. And of course, I have workspaces like "browser", "mail", "irc", etc. I have some temporary workspaces too, which are used for scratch work. Any workspace can be removed. And I can add a new workspace with any name at any time. If you're interested, this is all implemented in my hybrid stacking/tiling window manager: https://github.com/BurntSushi/wingo (Similar features exist in i3 and xmonad, but both are emphatically tiling window managers.)
In Why I Stick with the Linux Desktop
> And if that package references another package on github understandably I need to pin it too Only if you want to. You don't have to. > but do I also need to modify all of the imports in the original third party package I wanted to reference the pinned dependency? Yes, but it's trivial: find ./ -name '*.go' -print0 | xargs -0 \ sed -i 's#github.com/BurntSushi/wingo#github.com/YourName/wingo#g'
In Go 1.1 is released
> I worked on GNOME for a summer, and can see Go being a viable option for DE's. Desktop applications are not very demanding. You can write them in scripting languages like Python or JavaScript, both has been done in Gnome. The libraries/toolkits are more demanding. > Haskell has proven gc language is fast enough for a WM (xmonad). https://github.com/BurntSushi/wingo > However my original statement defined systems as kernel code Rob Pike (one of the Go creators) seems to define it differently: "We designed it to be a systems level language because the problems we do at Google are systems level, right? Web servers and database systems, and storage systems and those are systems. Not operating systems, I don't know that Go would be a good operating system language but I am not sure it wouldn't be, what was interesting was because of the appr
Read the rest
oach we took in the design of the language, somewhat to our surprise it turned out to be a really nice general purpose language." http://www.infoq.com/interviews/pike-google-go
In What Python developers need to know before migrating to Go
burntsushi·Mar 3, 2013Recommendation phrase
> no, interfaces are not a replacement for templates, they are a replacement for abstract base classes Interfaces aren't a replacement for templates, but they aren't a replacement for abstract base classes either. Interfaces in Go provide polymorphism through structural sub-typing. My limited knowledge of abstract base classes says that these are very much not the same. > Someone who is familiar enough with Haskell, ML, or Scala, will dislike the fact that Go practically ignored (or rejected?) two or three decades of research an programming languages. From the perspective of PL research, Go is a weak language. I am a Haskell programmer, but that crowd is impossible to please unless you've provided every PL feature out of research in the last few decades. I've seen virtually no appreciation for simplicity of language design as an entire un
Read the rest
it. > If there is a new imperative language that does interest them, it is probably Rust. Yes. I can't wait for Rust to get a bit more love in the documentation department. Pattern matching? Algebraic data types? Thread local storage? Type classes? Yes please! Where do I sign up? > The question is, who does switch to Go? One would guess that these are mostly Python and Ruby programmers who have never written much C, C++, or Haskell, and are looking for something faster and compiled. Yes, this is a generalization, and there are plenty of exceptions. Not exactly the 'Python paradox', 'better than the rest', programmers. In my experience, most Go programmers are in fact coming from Python and Ruby. The premise of the "Go" or "Python" paradox is that skilled programmers tend to be the first ones to adopt new languages. Then the less-skilled programmers follow when there is sufficient buzz. I think that if one accepts that premise, it is applicable for Go. > one of my personal pet peeves are people claiming that 'Go interfaces are like Haskell typeclasses' That is annoying, but completely understandable. They are deceptively similar on the surface. But I don't think this kind of confusion is unique to Go. You'll see it everywhere. You know what else people confuse? That Go interfaces are just like abstract base classes! :P > But if you look at the language spec, there is not much interesting. That's kind of the point. If you don't accept the overall simplicity of the design Go as a feature, then I can't blame you if you dismiss Go. If all you want to judge a language by is whether it includes cool and exciting new features, then Go will never be a good choice for you a priori. > Go is just a very boring language (which isn't necessarily bad), pretty much like Java, without the good package management (no versioning) I am utterly baffled. Go's approach to packaging is literally the best tool of its class that I've ever used. The Go tool militates toward convention rather than providing a dizzying array of features. This makes it strictly less powerful than other packaging tools, but god dammit, it makes it dead simple to install packages. You want to try my window manager, which is roughly 30,000 LOC (including my X libraries)? If you have Go installed: `go get github.com/BurntSushi/wingo`. That's it. You're done. I just ran it on my system, and it downloaded, compiled and installed my window manager---along with all of its dependencies---in less than 30 seconds. You might say---other build tools can do this! But do you know how many lines of configuration I had to write for any of this to work? None. I didn't specify dependencies. No strange command line flags. Nothing. The common case Just Works. > Goroutines are nice, but they are just green threads. Channels have been done elsewhere. This is a vast understatement. Just green threads? And please, tell me, what other mainstream language supports green threads? I know Haskell and Erlang do. Rust will (yay). Anything else? No? (I know Java doesn't, but I can't remember if this is a limitation of the JVM or if Scala or Clojure have green threads). Go does. That's a pretty big deal. Go makes a solid concurrent style of programming in a C-like language virtually free. Sure, everything is still mutable, but there are powerful idioms that---in my experience---militate against race conditions. It's not as good as Haskell/Erlang/Rust in the compile time safety department, but I'll be damned if it isn't loads easier than my other choices: C, C++, Java, Python, Ruby, Lua, blah blah. > Boring languages attract more mediocre programmers than great programmers. And close minded folk think they have all the answers. It's possible for people to enjoy using more than one tool. I'm a hacker, and I love good tools. Go is a great tool. So is Haskell. I hope that Rust will be.
In Writing Web Applications in Go
I agree that Erlang is probably the best example of proven to be robust due to use in large telecommunication systems. I would also agree that Go and Node.js are still infants in the game, but I'd argue that there is enough software out there to judge Go's effective speeds. - Google is using it internally, where speed is an absolute requirement - Vitess, recently open sourced (and used internally by youtube) would definitely have to be fast for the task youtube is using it for. (http://code.google.com/p/vitess/) - Desktop window manager in Go that is very fast even on lower spec machines: https://github.com/BurntSushi/wingo Just my two cents. I would absolutely stay away from node.js if you are in an environment where people touching the code aren't easily accessible, since it's very easy to write javascript that only you understand. Th
Read the rest
e other languages seem to punish it a bit more, while at times it feels as if javascript embraces it.
In We switched to Node.js: the good and the not so good

Showing the 15 most recent of 20 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.