User programmable screen overlay using web technologies

Overview

Topframe

Topframe

User programmable screen overlay using web technologies

@progriumHQ on Twitter Project Forum Sponsor Project


  • Display information and always-on-top widgets
  • Use HTML/JS/CSS to draw on your screen
  • Edit source, hit save, screen will update
  • Extensible with shell scripts in any language
  • Less than 400 lines of Go code, minimal deps
  • Currently alpha, macOS only ...

Getting Started

First, download Go 1.16+ or brew install go. If already installed, make sure it is version 1.16 or greater:

$ go version
go version go1.16.2 darwin/amd64

Then use go get to download, build, and install the topframe binary into a directory in your PATH by setting GOBIN:

$ GOBIN=/usr/local/bin go get github.com/progrium/topframe

Currently, this is the preferred way to install as anything else requires a much more elaborate release process with Apple code signing, etc. Specifying GOBIN is optional, but lets you specify where to install the binary, ensuring it is put in your PATH.

$ topframe
Usage: topframe <flags> <subcommand> <subcommand args>

Subcommands:
        agent            fullscreen webview overlay agent
        docs             open documentation in browser
        help             describe subcommands and their syntax
        version          show version

Running topframe agent will create a ~/.topframe directory with a default index.html used for the overlay. A new menu bar extra will let you enable or disable the overlay, make it interactive for debugging and bringing up devtools, and quickly open the ~/.topframe directory to edit source. Files changed in the directory will trigger a reload, so if you edit index.html and hit save, changes will reflect immediately.

Launching on Startup

Topframe works with launchd to run as an agent on startup. You can generate an agent plist file with topframe agent -plist, which you can write to a file in ~/Library/LaunchAgents:

$ topframe agent -plist > ~/Library/LaunchAgents/com.progrium.Topframe.plist

It's a good idea to view the output before writing to the file, just to make sure paths are correct. If you don't know what is correct, it's probably fine!

Documentation

There is not a whole lot to Topframe! I recommend reading the source as its only a few hundred lines, but otherwise there is a wiki ready to document anything else.

Getting Help

If you're having trouble, be sure to check issues to see if its a known issue. Otherwise, feel free to drop a question into the discussion forum.

Contributing

Ideally, Topframe is kept small. Bug fixes and other small PRs are welcome and should be merged quickly. If you happen to have a large PR that we haven't discussed, you should talk about it in the forum first. In order to keep the project small, some features suggestions may be held back in favor of determining a good extension point to expose instead.

About

Topframe started as a 130 line example for progrium/macdriver.

MIT Licensed

Issues
  • not able to launch on startup

    not able to launch on startup

    i cant seem to run the launch on startup plist command it says that 'topframe' isnt a command

    do i need to install launchd or something? i tried searching for a way to download launchd but i only found a python version. help pls

    opened by phoebe-leong 3
  • setup homebrew tap for `brew install progrium/tap/topframe`

    setup homebrew tap for `brew install progrium/tap/topframe`

    Once we have release builds (signed and notarized [#6]), I can set up a Homebrew tap and formulae for topframe to make installation with Homebrew as easy as:

    $ brew tap progrium/tap
    $ brew install progrium/tap/topframe
    
    enhancement 
    opened by progrium 0
  • sign and notarize using gon

    sign and notarize using gon

    Right now installation is done via go get because it circumvents the security of new binaries by building from source. However, we want to make it easier to install, so we must sign and notarize binaries before we can even build and release them usefully here. Luckily, we have gon to provide a workflow for this. It just needs to be set up.

    enhancement good first issue 
    opened by progrium 0
  • cross-platform support

    cross-platform support

    This is an issue for people interested in tracking cross-platform support. Topframe currently uses progrium/macdriver for its UI. Once that project is on its way to 1.0, I will start equivalent tuxdriver and windriver projects, but let me know which is higher priority.

    enhancement 
    opened by progrium 6
  • global shortcut to enable/disable

    global shortcut to enable/disable

    It would be nice to have a keyboard shortcut to enable/disable topframe. Since the app doesn't let you switch focus to it (and that would be annoying anyway), it would have to be a global shortcut. Open to suggestions on what it should be. I'd rather hardcode it than make it configurable, though I'd be open to environment variable configuration.

    enhancement good first issue 
    opened by progrium 3
  • manage LaunchAgent plist file in app via menu item

    manage LaunchAgent plist file in app via menu item

    I'm not sure why I avoided it, but instead of generating a plist file for the user to place at ~/Library/LaunchAgents/com.progrium.Topframe.plist via command line, there should just be a menu item for "Start at login". We'd check if that plist file exists to "checkmark" that menu item. On click, if not checked, it would write that file. If checked, it would delete the file. I know that would remove any edits made to the file, but I don't know of another simple way to do this. Maybe that's why I wanted the user to manage it in the first place. However, I think the convenience for the common case is worth it.

    enhancement good first issue 
    opened by progrium 0
Releases(v0.2.0)
  • v0.2.0(Apr 15, 2021)

    Changelog

    fac6f06 add release automation 53261d5 fix redundant description 209e910 make minor tweak to readme bullets a7bfb55 add demo gif to readme and update usage instructions 7348841 drop subcommands in favor of simpler flags dcf0e51 add docs to stocks script 6e4939a add minor fixes to readme 30aeb4c add minor fixes to readme 97a53bc update install instructions fce390d add final demo index.html, and made demo files serve from binary 9450b9a final touches 55212e4 hide go report card for now 752ceee near complete 0.2.0 with subcommands and scripting support bf220a4 more docs 07a9b5f improved default index, more readme 9eafa0d embedding in package level variables since function level embeds were removed 13ceb65 initial goreleaser config f569dd2 Create FUNDING.yml 8a492a5 initial working 0.2.0 version 23003b7 readme progress 27d545a initial readme draft 36341e3 Initial commit

    Source code(tar.gz)
    Source code(zip)
    topframe_0.2.0.zip(8.28 MB)
Owner
Jeff Lindsay
Jeff Lindsay
A simple javascript website that takes user input, queries a Go based backend which then creates ascii art and sends it back to the frontend

A simple javascript website that takes user input, queries a Go based backend which then creates ascii art and sends it back to the frontend. Finally the site displays the ascii art and offers the option to download as multiple file types.

null 0 Jan 7, 2022
🔍 gowitness - a golang, web screenshot utility using Chrome Headless

?? gowitness A golang, web screenshot utility using Chrome Headless. introduction gowitness is a website screenshot utility written in Golang, that us

SensePost 1.5k Jun 22, 2022
📸 Clean your image folder using perceptual hashing and BK-trees using Go!

Image Cleaner ?? ?? ➡ ?? This tool can take your image gallery and create a new folder with image-alike-cluster folders. It uses a perceptual image ha

lord_santanna 7 Jun 15, 2022
HTML Canvas 2D Context API for mobile, desktop and web

canvas HTML Canvas 2D Context API for mobile, desktop and web Context2D API https://www.w3.org/TR/2dcontext/ native code implement https://github.com/

GoPlus 2 Apr 22, 2022
Ascii-art-web

ASCII-ART-WEB Author: Alika96 How to run Run the following commands: For building an image: docker image build -t ascii-art-web-docker . For showing i

null 0 Dec 13, 2021
Go package for computer vision using OpenCV 4 and beyond.

GoCV The GoCV package provides Go language bindings for the OpenCV 4 computer vision library. The GoCV package supports the latest releases of Go and

The Hybrid Group 4.9k Jun 26, 2022
go-pix is a Go library for generating Pix transactions using Copy and Paste or QR codes. 💳 💰

go-pix go-pix is a Go library for generating Pix transactions using Copy and Paste or QR codes.

Jonnas Fonini 61 Jun 15, 2022
Canvas is a Go drawing library based on OpenGL or using software rendering that is very similar to the HTML5 canvas API

Go canvas Canvas is a pure Go library that provides drawing functionality as similar as possible to the HTML5 canvas API. It has nothing to do with HT

Thomas Friedel 426 Jun 19, 2022
Convert images to computer generated art using delaunay triangulation.

▲ Triangle is a tool for generating triangulated image using delaunay triangulation. It takes a source image and converts it to an abstract image comp

Endre Simo 2k Jun 29, 2022
Create a cool glass-like pattern using Voronoi cells

voronoi-glass Have you ever looked through a shower door made of intentionally uneven glass? Everything looks distorted, but maybe also beautiful. Now

Alex Nichol 7 Jun 1, 2021
Simple image compression using SVD

SVD image compression An implementation image compression using SVD decomposition on Go Built With Go 1.17 Gonum Compression examples Header Image Ori

null 4 Mar 30, 2022
A Pong clone made from scratch with Go and C using OpenGL 3.3

Go-Pong A Pong video game clone made with Go lang and OpenGL 3.3 using C. Gameplay Offline Key bindings are 'w' and 's' for the left player and 'up ar

Mohammad Issawi 33 Feb 10, 2022
Cryptseaside generates seaside images using Unix nanoseconds as the seed value.

Cryptseaside Welcome to the Cryptseaside project. Cryptseaside generates seaside images using Unix nanoseconds as the seed value.

Rhymof 1 Nov 12, 2021
A pair programming service using operational transforms

Leaps is a service for collaboratively editing your local files over a web UI, using operational transforms to ensure zero-collision synchronization a

Ashley Jeffs 723 Jun 18, 2022
Radius parsing in golang using gopacket. You can parse from either live traffic or from pcap of your choice.

go-radius Radius parsing in golang using gopacket. You can parse from either live traffic or from pcap of your choice. RADIUS RADIUS is an AAA (authen

Adeel Khan 4 Dec 27, 2021
A festive Christmas tree GIF generator implemented using only Golang standard library code

Christmas Tree GIF Generator A festive Christmas tree GIF generator implemented

Golang Dorset 0 Feb 4, 2022
Human-friendly Go module that builds and prints directory trees using ASCII art

Human-friendly Go module that builds and prints directory trees using ASCII art.

Vadym Borodin 4 May 23, 2022
Very simple SVG to PNG converter library using the Inkscape.

svg2png Description Very simple SVG to PNG converter library using the Inkscape.

null 0 Jan 11, 2022
chkb turns a regular keyboard into a fully programmable keyboard. It is a cheap programmable keyboard

chkb chkb turns a regular keyboard intro a fully programmable keyboard. So you basically get a cheap programmable keyboard. It has been inspired by QM

Victor 31 Dec 30, 2021
Create desktop apps using Go and Web Technologies.

Build desktop applications using Go & Web Technologies. The traditional method of providing web interfaces to Go programs is via a built-in web server

Wails 7.7k Jun 26, 2022
A programmable, observable and distributed job orchestration system.

?? Overview Odin is a programmable, observable and distributed job orchestration system which allows for the scheduling, management and unattended bac

James McDermott 439 Jun 23, 2022
Mmpxmas-go - ModMyPi Programmable Christmas Tree examples written in Go with go-rpio

ModMyPi Programmable Christmas Tree examples in Go This small program contains examples similar to the examples provided by ModMyPi for interacting wi

Tyler Darnell 0 Jan 4, 2022
Deskreen turns any device with a web browser into a secondary screen for your computer

Deskreen Website: https://deskreen.com ▶️ Deskreen Youtube channel (video tutorials, demos, use cases for Deskreen day to day usage) Deskreen turns an

Paul Pavlo Buidenkov 13.1k Jun 27, 2022
Display a message in morse code on your capslock LED, keyboard backlight or using your screen brightness!

halp halp is a command line utility that lets you display messages in morse code on your capslock LED, keyboard backlight (if you have it) or using yo

Madhav Jivrajani 25 Jan 26, 2022
a Framework for creating mesh networks using technologies and design patterns of Erlang/OTP in Golang

Ergo Framework Implementation of Erlang/OTP in Golang. Up to x5 times faster than original Erlang/OTP. The easiest drop-in replacement for your hot no

Taras Halturin 1.6k Jun 21, 2022
a Framework for creating microservices using technologies and design patterns of Erlang/OTP in Golang

Technologies and design patterns of Erlang/OTP have been proven over the years. Now in Golang. Up to x5 times faster than original Erlang/OTP in terms

Taras Halturin 1.7k Jun 25, 2022
A scalable overlay networking tool with a focus on performance, simplicity and security

What is Nebula? Nebula is a scalable overlay networking tool with a focus on performance, simplicity and security. It lets you seamlessly connect comp

Slack 10k Jun 20, 2022
Kilo is a multi-cloud network overlay built on WireGuard and designed for Kubernetes (k8s + wg = kg)

Kilo Kilo is a multi-cloud network overlay built on WireGuard and designed for Kubernetes. Overview Kilo connects nodes in a cluster by providing an e

Lucas Servén Marín 1.4k Jun 25, 2022
Encrypted overlay filesystem written in Go

An encrypted overlay filesystem written in Go. Official website: https://nuetzlich.net/gocryptfs (markdown source). gocryptfs is built on top the exce

null 2.3k Jun 22, 2022