A fully-featured window manager written in Go.

Overview

NOTE: This repository is in maintenance mode. Wingo is still used every day, but because there are no tests, it is impossible to add new functionality. Therefore, I will only be doing work on Wingo required to make it work.

Wingo is an X window manager written in pure Go. All of its dependencies, from communicating with X up to drawing text on windows, are also in Go. Wingo is mostly ICCCM and EWMH compliant (see COMPLIANCE).

If you have Go installed and configured on your machine, all you need to do is: (For Archlinux users, Wingo is in the AUR.)

go get github.com/BurntSushi/wingo

And in your $HOME/.xinitrc:

exec wingo

Or if you're brave and are using a desktop environment, just run this to replace your current window manager: (Seriously though, save you work. Wingo is still very alpha.)

wingo --replace

Help

You can find me in the #wingo IRC channel on FreeNode.

My triple head setup

Triple head with Wingo

Dude... why?

Wingo has two features which, when combined, set it apart from other window managers (maybe):

  1. Support for both floating and tiling placement policies. Wingo can be used as a regular floating (stacking) window manager, complete with decorations, maximization, sticky windows, and most other things you might find in a window manager. Wingo can also be switched into a tiling mode where window decorations disappear, and windows are automatically managed via tiling.

  2. Workspaces per monitor. In a multi-head setup, each monitor can display its own workspace---independent of the other monitors. This makes changing your view of windows in multi-head setups much easier than in most other window managers, which will only allow you to see one workspace stretched across all of your monitors. Also, since placement policies like floating and tiling affect workspaces, this makes it possible for one monitor to be tiling while another is floating!

WARNING: The major drawback of using a workspaces per monitor model is that it violates an implicit assumption made by EWMH: that one and only one workspace may be viewable at any point in time. As a result, in multi-head setups, pagers and taskbars may operate in confusing ways. In a single head setup, they should continue to operate normally. Wingo provides prompts that allow you to add/remove workspaces and select clients that may alleviate the need for pagers or taskbars.

Configuration

Wingo is extremely configurable. This includes binding any of a vast number of commands to key or mouse presses, theming your window decorations and setting up hooks that will fire depending upon a set of match conditions.

All configuration is done using an INI like file format with support for simple variable substitution (which makes theming a bit simpler). No XML. No recompiling. No scripting.

A fresh set of configuration files can be added to $HOME/.config/wingo with

wingo --write-config

Each configuration file is heavily documented.

Configuring key/mouse bindings and hooks uses a central command system called Gribble. For example, one can add a workspace named "cromulent" with this command:

AddWorkspace "cromulent"

But that's not very flexible, right? It'd be nice if you could specify the name of workspace on the fly... For this, simply use the "Input" command as an argument to AddWorkspace, which shows a graphical prompt and allows you to type in a name:

AddWorkspace (Input "Enter your workspace name:")

The text entered into the input box will be passed to the AddWorkspace command.

Please see the HOWTO-COMMANDS file for more info. We've barely scratched the surface.

Scripting Wingo

So I lied earlier. You can kind of script Wingo by using its IPC mechanism. You'll need to make sure that wingo-cmd is installed:

go get github.com/BurntSushi/wingo/wingo-cmd

While Wingo is running, you can send any command you like:

wingo-cmd 'AddWorkspace "embiggen"'

Or perhaps you can't remember how to use the AddWorkspace command:

wingo-cmd --usage AddWorkspace

Which will print the parameters, their types and a description of the command.

Want to pipe some information to another program? No problem, since commands can return stuff!

wingo-cmd GetWorkspace

And you can even make commands repeat themselves every X milliseconds, which is ideal for use with something like dzen to show the name of the currently active window:

wingo-cmd --poll 500 'GetClientName (GetActive)' | dzen2

Finally, you can see a list of all commands, their parameters and their usage: (even if Wingo isn't running)

wingo-cmd --list-usage

(Wingo actually can provide enough information for ambitious hackers to script their own layouts in whatever programming language they like without ever having to deal with X at all. Assuming it has support for connecting to unix domain sockets. Or you could just use a shell with 'wingo-cmd' if you're into that kind of tomfoolery.)

Workspaces

Having some set number of workspaces labeled 1, 2, 3, 4, ... is a thing of the past. While Wingo won't stop you from using such a simplistic model, it will egg you on to try something else: dynamic workspaces.

Dynamic workspaces takes advantage of two things: workspace names and adding/removing workspaces as you need them.

This is something that I find useful since I'm typically working on multiple projects, and my needs change as I work on them. For example, when working on Wingo, I might add the "wingo" workspace, along with the "xephyr" workspace and the "gribble" workspace. When I'm done, I can remove those and add other workspaces for my next project. Or I can leave those workspaces intact for when I come back to them later.

With Wingo, such a workflow is natural because you're no longer confined to "removing only the last workspace" or some other such nonsense. Plus, adding a workspace requires that you name it---so workspaces always carry some semantic meaning.

(N.B. I don't mean to imply that this model is new, just uncommon; particularly among floating window managers. I've personally taken the model from xmonad-contrib's DynamicWorkspaces module.)

Tiling layouts

Right now, only simple tiling layouts are available. (Vertical and Horizontal.) Mostly because those are the layouts that I primarily use. I'll be adding more as they are demanded.

Ummm... manual tiling?

I'd actually love to add this to Wingo. It's slightly more complex than automatic tiling layouts, because it introduces the concept of containers, which is something that Wingo knows nothing about. Namely, a container can hold zero or more windows and an empty container may have focus.

Why doesn't Wingo have..?

Tags

Another popular workspace model (particularly among tiling window managers) is tagging a window with one or more workspaces.

Not only do I find this needlessly complex, but it doesn't really make sense in a model where more than one workspace can be visible in multi-head setups.

Shaded windows

This is in Openbox, but not Wingo. Honestly, I just never use it. I'm not really opposed to them, though.

Tabbed windows

The thought of programming the decorations for this scares me. This, like manual tiling, would also require that Wingo have a notion of containers (which it doesn't).

Compositing

Bandwidth allotment exceeded. Seriously.

If an ambitious person wanted to run with it, that's fine, but there are serious hurdles. The most pertinent one is mixing OpenGL with the pure X Go Binding. I am not sure how to do it.

One could use the X RENDER extension, but I think everyone hates that.

Wayland

I have done a non-trivial amount of research into Wayland (but not a big amount) and there are serious hurdles to overcome before Go can work with the Wayland protocol in a practical way. Namely, while a pure Go binding could be written easily enough, it would be forced into software compositing---which could be too slow. In order to do hardware compositing, I think you need OpenGL (specifically, EGL), which links against the libwayland libraries. (Yeah, that's a recursive dependency. Wooho.)

Plus, in order to use Wayland, Wingo would need a compositing backend (along with every other non-compositing X11 window manager). This is also not an easy task.

Supposedly there are some ideas for plans floating around that would let non-compositing X window managers to "plug into" the Wayland reference compositor (Weston). When this will be possible (or even if it will be possible with a window manager written in Go) remains to be seen.

If I am in err (and this is quite likely; my OpenGL knowledge is limited), please ping me.

Dependencies

You really should be using the 'go' tool to install Wingo, and therefore shouldn't care about dependencies. But I'll list them anyway---with many thanks to the authors (well, the ones that aren't me anyway).

Inspiration

Wingo is heavily inspired by Openbox and Xmonad. Basically, Openbox's floating semantics (although most window managers are the same in this regard) and Xmonad's automatic tiling style plus its workspace model (workspaces per monitor). I've also adopted Xmonad's "greedy" workspace switching and embedded the concepts from the "DynamicWorkspaces" contrib library into the Gribble command system.

Go your own way

Wingo is actually split up into many sub-packages. It is possible (but not necessarily likely) that you could pick out some of these sub-packages and use them in your own window manager. The packages of particular interest are probably the ones that do the most nitty gritty X stuff---especially relating to drawing windows. Here's a quick run down of those:

cursors

Sets up some plain old X cursors. Not very interesting.

prompt

Provides several different kinds of prompt windows that can take user input. These should actually work in an existing window manager. (See the examples in the package directory.) Prompt requires both the 'render' and 'text' Wingo packages.

render

Renders some very basic shapes and gradients to X windows.

text

Renders text to windows. Also provides a special window type that can act as a text box for user input.

Others

The only other package worth mentioning is 'frame'. It's probably too monolithic to be used in another window manager (unless you really like Wingo's decorations), but it's possible that it could serve as a half-decent template for your own frames.

The rest of the sub-packages (excluding xclient and wm, since they are very Wingo specific) could also be used, particularly since only minimal Client interfaces are required. However, most of them aren't that complex and therefore probably aren't worth it. And the ones that do have some complexity (maybe 'heads' and 'workspace') aren't packages that I'm particularly proud of.

Also, if you're wanting to make a Go window manager, my xgbutil package (separate from Wingo) will be a big help. Feel free to ping me.

My past X work

There's too much. The highlights are pytyle and Openbox Multihead.

For more: http://burntsushi.net/x11/

Comments
  • Support small area on screen for system status info

    Support small area on screen for system status info

    In Xmonad, you can specify a command to be piped to a small area of the workspace for system status or other monitoring information. IMHO, this is a pretty nice feature in any WM since its not very obtrusive and can convey a lot of information. I currently use it to display a dzen2 bar with a bunch of conkey info. In Xmonad the feature is called a logHook

    opened by dcolish 12
  • High CPU load produced by wingo when open several pages in google-chrome

    High CPU load produced by wingo when open several pages in google-chrome

    Hi

    I noticed following strange behavior when I open several (ex. 4) pages in google-chrome wingo starts eating all CPU cores at 100% rate. And this is happening while chrome is loading pages. Once pages loaded - wingo releases CPU. Even when I just reload page in chrome wingo starts consuming whole CPU.

    I have following hook for chrome: [MoveChrome] match := MatchClientClass ":client:" "Chrome" managed := WorkspaceSendClient "web" ":client:"

    May be this hook affects WM. I'll test without it and report later

    opened by alxzh 11
  • Window manager stuck in loop cycling through spaces

    Window manager stuck in loop cycling through spaces

    If I use WorkspaceWithClient or WorkspaceGreedyWithClient to move a window from a workspace with more than one window from at least two distinct applications, wingo will begin to cycle through the workspaces endlessly. If I have two xterm windows and move one, I do not see the same issue. A single window will also not reproduce it. I've pasted a snippet from my xsession-error.log below.

    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'Google - Conkeror' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'Google - Conkeror' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'Google - Conkeror' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'Google - Conkeror' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'Google - Conkeror' is trying to map itself, but Wingo doesn't think it was iconified.
    [xgbutil] xgbutil.go:218: BadWindow {NiceName: Window, Sequence: 28952, BadValue: 18874482, MinorOpcode: 0, MajorOpcode: 10}
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    [xgbutil] xgbutil.go:218: BadWindow {NiceName: Window, Sequence: 29081, BadValue: 18874482, MinorOpcode: 0, MajorOpcode: 12}
    [xgbutil] xgbutil.go:218: BadWindow {NiceName: Window, Sequence: 29094, BadValue: 18874482, MinorOpcode: 0, MajorOpcode: 8}
    [xgbutil] xgbutil.go:218: BadWindow {NiceName: Window, Sequence: 29123, BadValue: 18874482, MinorOpcode: 0, MajorOpcode: 42}
    [xgbutil] xgbutil.go:218: BadWindow {NiceName: Window, Sequence: 29124, BadValue: 18874482, MinorOpcode: 0, MajorOpcode: 25}
    [xgbutil] xgbutil.go:218: BadWindow {NiceName: Window, Sequence: 29202, BadValue: 18874482, MinorOpcode: 0, MajorOpcode: 42}
    [xgbutil] xgbutil.go:218: BadWindow {NiceName: Window, Sequence: 29203, BadValue: 18874482, MinorOpcode: 0, MajorOpcode: 25}
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client '[email protected]' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client '[email protected]' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client '[email protected]' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client '[email protected]' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client '[email protected]' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client '[email protected]' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client '[email protected]' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client '[email protected]' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client '[email protected]' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client '[email protected]' is trying to map itself, but Wingo doesn't think it was iconified.
    WINGO WARNING: event.go:62: POSSIBLE BUG: Client 'xterm' is trying to map itself, but Wingo doesn't think it was iconified.
    
    opened by dcolish 11
  • `Shell` command does not really uses shell

    `Shell` command does not really uses shell

    As far as I understood from comments in config files and actual behavior of wingo, Shell command does not really starts system shell (e.g. bash) and supplies command to it; instead it uses native Go functions to start programs. This is somewhat inconvenient, for example, it does not understand ~ in arguments and supplies the tilde as is to the program. It also didn't work for me when I tried to launch a command with argument containing spaces with them, surrounding these arguments with single quotes didn't work. Slightly related question: I didn't find any notice of escapes in strings. Is it possible at all to supply a string containing double quote to some command?

    opened by netvl 8
  • Urgency event Skype

    Urgency event Skype

    Hi,

    When skype informs about urgency even border a round window starts pulsing. But in tail mode if I switch from other virtual desktop and skype gets focus border still pulse even if I click in its window. Same thing happens when I have a conversation with one person and somebody other writes to me border starts pulsing and remain in such state even after selecting char with this person. Pulsing finishes only if I change focus to some other window on same virtual desktop and then switch back. Oh, forgot to mention, I see such effect with tailing mode.

    Regards, Alex

    opened by alxzh 8
  • fix IPC to work with multiple instances of wingo

    fix IPC to work with multiple instances of wingo

    As it stands now, IPC will only work if there is one instance of Wingo. This precludes IPC for users that run multiple X screens (yes, they still exist) or users that run multiple X servers.

    Basically, this amounts to choosing a better name for the socket.

    opened by BurntSushi 7
  • Fallback command parser

    Fallback command parser

    Added fallback command parser in case shell is not set (or installed on the system). In such case, github.com/mattn/go-shellwords is used for parsing the arguments.

    Btw, looks like there is a bug in gribble. It trims quotes from string token strings.Trim(p.TokenText(), "\"`"), so <"\""> input will produce <\>.

    opened by tie 6
  • Mouse cursor on desktop ugly X

    Mouse cursor on desktop ugly X

    Wingo does not seem to set a proper mouse type. When hovering over the desktop background or over programs that do not set the mouse cursor to a specific type, the cursor becomes an X instead of the default pointed arrow.

    See this screenshot:

    wingo

    The black X should be the default mouse arrow.

    opened by onli 6
  • Wingo hangs when trying to quit

    Wingo hangs when trying to quit

    Steps to reproduce:

    1. Press Key combo 'Mod3-Shift-q'

    The key bind above is bound in this manner.. Mod3-Shift-q := Quit

    Mod3 is my capslock key rebound within my .xinitrc xmodmap -e 'remove lock = Caps_Lock' xmodmap -e 'keysym Caps_Lock = ISO_Level5_Shift' xmodmap -e 'add mod3 = ISO_Level5_Shift'

    This did not always occur...it seems to have started randomly.

    opened by r4-xx 6
  • Signal 9 when tring to build

    Signal 9 when tring to build

    I am tring to build wingo on my Arch Linux 64bit machine running Go 1.0.3. When I run go get I get a signal 9 from bindata.

    [email protected] ~  
    ???  go get -x github.com/BurntSushi/wingo 
    WORK=/tmp/go-build532972124
    mkdir -p $WORK/github.com/BurntSushi/wingo/bindata/_obj/
    cd /home/vendion/go/src/github.com/BurntSushi/wingo/bindata
    /usr/local/go/pkg/tool/linux_amd64/6g -o $WORK/github.com/BurntSushi/wingo/bindata/_obj/_go_.6 -p github.com/BurntSushi/wingo/bindata -D _/home/vendion/go/src/github.com/BurntSushi/wingo/bindata -I $WORK ./DejaVuSans.ttf.go ./FreeMono.ttf.go ./close.png.go ./maximize.png.go ./minimize.png.go ./wingo.png.go ./wingo.wav.go
    go build github.com/BurntSushi/wingo/bindata: signal 9
    

    I know that is not a lot to go off of, let me know if there is something else I can go that may provide more details.

    opened by vendion 6
  • Some command to move workspace to specific output

    Some command to move workspace to specific output

    It would be great to have some command which will move some workspace to some output. By output I mean one monitor in multiheaded system. Use case is obvious: some programs (e.g. music player, information windows etc) should appear on auxiliary, lesser monitor on their specific workspace. Somewhat related: it would also be great to have a command which will tell which workspace is located on which output. If such command was present, it would be possible to write a config to some versatile panel (e.g. dzen2) with which it would be possible to launch two such panels on both outputs, each with its active workspace.

    opened by netvl 5
  • Move window controls to the left

    Move window controls to the left

    This is something I've been struggling with for a while now. I'd like to move the window controls (minimize, maximize, close) to the left and display the title text to the right of them.

    What changes in code are necessary to achieve that? I don't quite understand the way frame/full.go is supposed to work.

    opened by Happy-Ferret 4
  • Can't type

    Can't type "@" in input example

    Hi, i try your input text example, i try to type : [email protected] and output is :

    $ ./main 
    2017/09/08 15:10:42 Return has been pressed.
    2017/09/08 15:10:42 The current text is: foogoogle.com
    2017/09/08 15:10:42 Quitting...
    
    opened by nlamirault 0
  • In tiled mode, client is displaced after returning from fullscreen

    In tiled mode, client is displaced after returning from fullscreen

    Take a small setup like

    ____________
    |     | ff2 |
    | ff1 |_____|
    |     | ff3 |
    |_____|_____|
    

    If one of the Firefox windows ff1 or ff2 is made fullscreen (F11) and then is taken back (F11 again), it appears as if wingo thinks it is a brand new client, and places it in bottom right corner:

    ____________
    |     | ff3 |
    |ff2/1|_____|
    |     |ff1/2|
    |_____|_____|
    

    It seems like wingo changes the tiled layout to accommodate the window that has disappeared, gone fullscreen. And new clients are by default added at the bottom right position (at least in this layout), and that's where the window coming back ends up.

    How can this be addressed?

    I have tried this with Firefox, chromium and the mpv media player -- same effect.

    (This also leads me to wonder if it is possible to have new clients appear in the "master" part of the tiled layout? -- not that it will solve this problem (except in the specific case when it is the master window that goes fullscreen...))

    opened by quite 1
  • Remove decoration when using Maximized layout

    Remove decoration when using Maximized layout

    For me, there is no need for any window decoration when using the Maximized layout. To identify the responsible code for doing this, I changed c.FrameBorders() to c.FrameNada() in xclient/layout.go:72, but nothing changed. Any hints?

    opened by sgelb 2
Owner
Andrew Gallant
I love to code.
Andrew Gallant
Mouse-driven Tiling Window Manager

I like tiling window management, but all tiling window managers known to me force to use keyboard for dozen of things. So this is my attempt to write

Michał Derkacz 61 Nov 7, 2022
A Rolling Window Demo

模仿Hystrix实现一个滑动窗口计数器 需求 参考 Hystrix 实现一个滑动窗口计数器 实现思路 实习滑动窗口的核心代码位置是 /pkg/hystrix 定义一个放置请求结果的对象Bucket(/pkg/hystrix/bucket.go) 定义一个滑动窗口对象RollingWindown(/

Yuki Chen 1 Jun 8, 2022
Calculate slope and r2 in your dataset for a defined rolling window

Hit The Slopes Calculate slope and r2 in your dataset for a defined rolling window. This is useful if you want to see the evolution of trends in your

Tom Larsen 0 Feb 9, 2022
Wuzzel turns fuzzel into a window picker

wuzzel wuzzel turns fuzzel into a window picker. Description fuzzel is an applic

Justin Speers 4 Oct 13, 2022
Proof-of-concept Windows-like clipboard manager for Linux in Go

Goclip Simple Windows-like clipboard manager for linux. This application is just a proof-of-concept and might be highly unstable. Features Clipboard t

null 2 Jan 28, 2022
Neovim GUI written in Golang

Neovim GUI written in Golang, using a Golang qt backend (https://github.com/ther

Asa Katida 0 Dec 29, 2021
A fully-featured window manager written in Go.

NOTE: This repository is in maintenance mode. Wingo is still used every day, but because there are no tests, it is impossible to add new functionality

Andrew Gallant 948 Nov 19, 2022
Fancy, fully-featured, easy to use Telegram CAPTCHA bot written in Go

Go Telegram Captcha Bot Fancy, fully-featured, easy to use, scalable Telegram CAPTCHA bot written in Go based on tucnak's telebot this robot only has

GNU/Weeb 15 Jul 18, 2022
Fully featured Go (golang) command line option parser with built-in auto-completion support.

go-getoptions Go option parser inspired on the flexibility of Perl’s GetOpt::Long. Table of Contents Quick overview Examples Simple script Program wit

David Gamba 46 Sep 26, 2022
Fully featured Go (golang) command line option parser with built-in auto-completion support.

go-getoptions Go option parser inspired on the flexibility of Perl’s GetOpt::Long. Table of Contents Quick overview Examples Simple script Program wit

David Gamba 46 Sep 26, 2022
Fully featured and highly configurable SFTP server with optional FTP/S and WebDAV support - S3, Google Cloud Storage, Azure Blob

SFTPGo Fully featured and highly configurable SFTP server with optional FTP/S and WebDAV support, written in Go. Several storage backends are supporte

Nicola Murino 5.1k Nov 23, 2022
A fully-featured AWS Athena database driver (+ athenareader https://github.com/uber/athenadriver/tree/master/athenareader)

?? athenadriver - A fully-featured AWS Athena database driver for Go ?? athenareader - A moneywise command line utililty to query athena in command li

Uber Open Source 116 Oct 23, 2022
dqlx is a fully featured DGraph Schema and Query Builder for Go.

dqlx is a fully featured DGraph Schema and Query Builder for Go. It aims to simplify the interaction with the awesome Dgraph database allowing you to fluently compose any queries and mutations of any complexity. It also comes with a rich Schema builder to easily develop and maintain your Dgraph schema.

Fabrizio 52 Nov 11, 2022
gqlgenc is a fully featured go gql client, powered by codegen

gqlgenc Note: ⚠️ This is a WIP, backward-compatibility cannot be guaranteed yet, use at your own risk gqlgenc is a fully featured go gql client, power

Infiot Inc 29 Sep 17, 2022
Focus is a fully featured productivity timer for the command line, based on the Pomodoro Technique. Supports Linux, Windows, and macOS.

Focus is a cross-platform productivity timer for the command line. It is based on the Pomodoro Technique, a time management method developed by Francesco Cirillo in the late 1980s.

Ayooluwa 214 Nov 23, 2022
Fully featured, spec-compliant HTML5 server-sent events library

go-sse Lightweight, fully spec-compliant HTML5 server-sent events library. Table of contents go-sse Table of contents Installation and usage Implement

Teodor Maxim 163 Nov 2, 2022
SFTPGo - Fully featured and highly configurable SFTP server with optional FTP/S and WebDAV support - S3, Google Cloud Storage, Azure Blob

SFTPGo - Fully featured and highly configurable SFTP server with optional FTP/S and WebDAV support - S3, Google Cloud Storage, Azure Blob

Nicola Murino 5.1k Nov 23, 2022
A fully-featured REST API developed in Golang for an online book store.

A fully-featured REST API developed in Golang for an online book store.

Raphael Collin 15 Oct 20, 2022
A fully-featured REST API developed in Golang for an online book store.

E-book Store A fully-featured REST API developed in Golang for an online book store. API Documentation Features Authentication (Sign up, Login and Res

Raphael Collin 15 Oct 20, 2022
A fully-featured OpenAPI generated HubSpot client for Go

This is a HubSpot Go client generated using openapi-generator. It includes packages for every OpenAPI spec listed in HubSpot's API directory. Installi

Clark McCauley 14 Oct 7, 2022