The management of multiple apps running over different ports made easy

Ergo GoDoc Go Report Card unix build win build codecov

Ergo Proxy - The reverse proxy agent for local domain management.

The management of multiple apps running over different ports made easy through custom local domains.

Demo

See more on examples

Summary

Philosophy

Ergo's goal is to be a simple reverse proxy that follows the Unix philosophy of doing only one thing and doing it well. Simplicity means no magic involved. Just a flexible reverse proxy which extends the well-known /etc/hosts declaration.

Feedback

This project is constantly undergoing development, however, it's ready to use. Feel free to provide feedback as well as open issues. All suggestions and contributions are welcome. :)

For help and feedback you can find us at #ergo-proxy channel on https://gopher.slack.com

Why?

Dealing with multiple apps locally, and having to remember each port representing each microservice is frustrating. I wanted a simple way to assign each service a proper local domain. Ergo solves this problem.

Installation

Important These are the only official ways to install ergo.

OSX

brew tap cristianoliveira/tap
brew install ergo

Linux

curl -s https://raw.githubusercontent.com/cristianoliveira/ergo/master/install.sh | sh

Windows

From powershell run:

Invoke-WebRequest https://raw.githubusercontent.com/cristianoliveira/ergo/master/install.ps1 -out ./install.ps1; ./install.ps1

You can also find the Windows executables in release.

Disclaimer: I use Unix-based systems on a daily basis, so I am not able to test each build alone. :(

Go

go install github.com/cristianoliveira/ergo

Make sure you have $GOPATH/bin in your path: export PATH=$PATH:$GOPATH/bin

Usage

Ergo looks for a .ergo file inside the current directory. It must contain the names and URL of the services following the same format as /etc/hosts (domain+space+url). The main difference is it also considers the specified port.

Simplest Setup

You need to set the http://127.0.0.1:2000/proxy.pac configuration on your system network config.

Ergo comes with a setup command that can configure it for you. The current systems supported are:

  • osx
  • linux-gnome
  • windows
ergo setup <operation-system>

In case of errors / it doesn't work, please look at the detailed config session below.

Adding Services and Running

echo "ergoproxy http://localhost:3000" > .ergo
ergo run

Now you should be able to access: http://ergoproxy.dev. Ergo redirects anything ending with .dev to the configured url.

Simple, right? No magic involved.

Do you want to add more services? It's easy, just add more lines in .ergo:

echo "otherservice http://localhost:5000" >> .ergo
ergo list
ergo run

Restart the ergo server and access: http://otherservice.dev

ergo add otherservice http://localhost:5000 is a shorthand for appending lines to ./.ergo

Ergo's configuration

Ergo accepts different configurations like run in different port (default: 2000) and change domain (default: dev). You can find all this configs on ergo's help running ergo -h.

Configuration

In order to use Ergo domains you need to set it as a proxy. Set the http://127.0.0.1:2000/proxy.pac on:

Networking Web Proxy

OS X

Network Preferences > Advanced > Proxies > Automatic Proxy Configuration

Windows

Settings > Network and Internet > Proxy > Use setup script

Linux

On Ubuntu

System Settings > Network > Network Proxy > Automatic

For other distributions, check your network manager and look for proxy configuration. Use browser configuration as an alternative.

Browser configuration

Browsers can be configured to use a specific proxy. Use this method as an alternative to system-wide configuration.

Keep in mind that if you requested the site before setting the proxy properly, you have to reset the cache of the browser or change the name of the service. In incognito windows cache is disabled by default, so you can use them if you don't wish to delete the cache

Also you should not use the default .dev domain, we suggest .test instead (see #58) unless your service supports https out of the box and you have already a certificate

Chrome

Exit Chrome and start it using the following option:

# Linux
$ google-chrome --proxy-pac-url=http://localhost:2000/proxy.pac

# OS X
$ open -a "Google Chrome" --args --proxy-pac-url=http://localhost:2000/proxy.pac

Firefox

through menus and mouse
  1. Click the hamburger button otherwise click on "Edit" Menu
  2. then "Preferences"
  3. then "Settings" button at the bottom of the page ("General" active in sidebar) with title "Network Settings"
  4. check Automatic Proxy configuration URL and enter value http://localhost:2000/proxy.pac below
  5. hit "ok"
from about:config

network.proxy.autoconfig_url -> http://localhost:2000/proxy.pac

Using on terminal

In order to use ergo as your web proxy on terminal you must set the http_proxy variable. (Only for linux/osx)

export http_proxy="http://localhost:2000"

Ephemeral Setup

As an alternative you can see the scripts inside /resources for running an ephemeral setup. Those scripts set the proxy only while ergo is running.

Contributing

  • Fork it!
  • Create your feature branch: git checkout -b my-new-feature
  • Commit your changes: git commit -am 'Add some feature'
  • Push to the branch: git push origin my-new-feature
  • Submit a pull request, they are welcome!
  • Please include unit tests in your pull requests

Building

Minimal required golang version 1.10

  make all

Testing

  make test
  make test-integration

License

MIT

Owner
Cristian Oliveira
I've contributed to important open source projects, nothing was merged tho. Author of @ClubVim on twitter.
Cristian Oliveira
Comments
  • Issues on ubuntu 16.04

    Issues on ubuntu 16.04

    Installed as curl -s https://raw.githubusercontent.com/cristianoliveira/ergo/master/install.sh | sh

    configure did not work

    ergo setup linux-gnome Current detected system: linux Setup failed cause exit status 2

    Also set Network Proxy to Automatic in Settings.

    Added service as echo "sabnzb https://localhost:9090" > .ergo

    ergo list Ergo Proxy current list: http://sabnzb.dev -> https://localhost:9090 (how do I change http to https ^ ?)

    Of cause, this does not work :(

    What am I doing wrong ?

  • Feature: subdomains?

    Feature: subdomains?

    Hey, I just came across this via an answer on stackoverflow. I'd love to be able to use this, but I have a few local servers across subdomains, and I do need them to be subdomains, I can't just use different domains for them because they share cookies.

    Thanks for the project, and I'm a big Ergo Proxy fan too :)

  • Ergo setup fails on Windows

    Ergo setup fails on Windows

    I installed Ergo via PowerShell per the documentation:

    Invoke-WebRequest https://raw.githubusercontent.com/cristianoliveira/ergo/master/install.ps1 -out ./install.ps1; ./install.ps1
    

    and that seemed to work. I then added some configuration:

    ergo add nbsalesapigateway-local http://localhost:27362
    

    Executing ergo list provides me with the list I'd expect:

    Ergo Proxy current list:
     - http://nbsalesapigateway-local.dev -> http://localhost:27362
    

    However, ergo setup windows fails:

    PS C:\Users\Michael Perrenoud\Ergo> ergo setup windows
    Current detected system: windows
    Setup failed cause exit status 1
    

    and I've noticed that ergo run fails with an interesting error (maybe related to the fact that setup has never succeeded):

    PS C:\Users\Michael Perrenoud\Ergo> ergo run
    Ergo Proxy listening on port 2000 for domains .dev
    listen tcp :2000: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
    
  • BUG: proxy not working on ubunt 18.04

    BUG: proxy not working on ubunt 18.04

    i installed the program like mentioned in the README and tried ergo setup linux-gnome but i am getting

     Current detected system: linux
     Setup failed cause exit status 2
    

    i tried then to do the configuration manually and added http://127.0.0.1:2000/proxy.pac to System Settings > Network > Network Proxy > Automatic but when i add a service echo "example http://localhost:8080" > .ergo and do ergo run i can't reach it through http://example.dev though i can reach localhost:8080

    ergo version: v0.2.2

  • feature: Install script for Windows

    feature: Install script for Windows

    The issue #54 brought a good idea. In order to make easy installing ergo for Windows I think we can have a script like install.sh that we have for linux.

  • Separate unit and integration tests

    Separate unit and integration tests

    This is just a suggestion. I was thinking that maybe it is better to separate the unit tests from the integration tests (which seem to be more end-to-end tests - see what a Google blog says). This is in the Makefile of course. This way we can test the code with the unit tests without compiling the binary and then run the integration/end-to-end tests only after the build. I say that these could be end-to-end tests especially when we add the tests for the setup and for the run . As the setup and run part especially should test if the proxy is being used, and also if an outside page will be accessible while running the proxy. The new flow would be:

    1. Run the unit tests
    2. Run the build
    3. Run the end-to-end tests
    4. Create the releases (if it is the case). This would solve the problem with the tests depending on the executable.
  • firefox support?

    firefox support?

    Hello, From my terminal after http_proxy is set if I do a curl request I get it on the ergo run log and I get the right response. I've set Automatic proxy configuration URL in firefox, when I open .dev domain what happens is weird: the scheme is changed to https and no log is provided, I get a 404 response.

  • On Linux Kubuntu 16.04 I get DNS_PROBE_FINISHED_NXDOMAIN

    On Linux Kubuntu 16.04 I get DNS_PROBE_FINISHED_NXDOMAIN

    Everything seems to be installed properly, but it gives me a DNS_PROBE_FINISHED_NXDOMAIN when I try to connect to my alias.

    My setup is:

    ╰─$ echo $http_proxy                                                                     
    http://localhost:2000
    ╰─$ ergo list
    Ergo Proxy current list:
     - http://portainer.dev -> http://127.0.0.1:9000
    

    Proxy config is: image and I can download http://127.0.0.1:2000/proxy.pac as

    		function FindProxyForURL (url, host) {
    			if (dnsDomainIs(host, '.dev')) {
    				return 'PROXY 127.0.0.1:2000';
    			}
    
    			return 'DIRECT';
    		}
    

    I then run Chrome alone or ╰─$ google-chrome --proxy-pac-url=http://localhost:2000/proxy.pac

    and all I get is:

    This site can’t be reached
    portainer.dev’s server IP address could not be found.
    DNS_PROBE_FINISHED_NXDOMAIN
    

    Any ideas?

  • Can't make it work

    Can't make it work

    in the folder start simple http server

    ➜ python3 -m  http.server 8080 
    

    then configure ergo per documentation

    ➜ echo "test http://localhost:8080" > .ergo
    ➜ ergo list
    Ergo Proxy current list:
     - http://test.dev -> http://localhost:8080 
    
    ➜ ergo run                    
    Ergo Proxy listening on port 2000 for domains .dev
    

    Using httpie

    ➜ http http://test.dev/ 
    
    http: error: ConnectionError: HTTPConnectionPool(host='test.dev', port=80): Max retries exceeded with url: / (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f519d5af490>: Failed to establish a new connection: [Errno 111] Connection refused',)) while doing GET request to URL: http://test.dev/
    

    However when I go through python's process, it works

    ➜ http http://localhost:8080/main.js
    HTTP/1.0 200 OK
    Content-Length: 189
    Content-type: application/javascript
    Date: Sat, 27 Jan 2018 19:56:30 GMT
    Last-Modified: Sat, 27 Jan 2018 03:34:43 GMT
    Server: SimpleHTTP/0.6 Python/3.6.4
    
    import Vue from "vue";
    import store from "./vuex/store";
    import App from "./components/App.vue";
    
    new Vue({
      store, // inject store to all children
      el: "body",
      components: { App }
    });
    
    ➜ ergo -v       
    v0.2.2
    
    ➜ uname -a
    Linux dmitry.io 4.14.14-300.fc27.x86_64 #1 SMP Fri Jan 19 13:19:54 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    
    
  • tests: Improve unit tests codecoverage

    tests: Improve unit tests codecoverage

    Thanks to @adiclepcea and his great work with the integration tests ergo is mostly covered by tests! 🥂

    Although we are mostly covered, it doesn't reflect on codecov.io cause it gets only test coverage by "unit tests" and on the integration tests we use a compiled ergo's binary.

    Today at codecov we have the follow report:

    folder/file | lines | lines hit| lines partially | lines missing | % -- | -- | -- | -- | -- | -- commands | 212 | 0 | 0 | 0 | 0% -- | -- | -- | -- | -- | -- proxy | 138 | 71 | 6 | 61 | 51.44% -- | -- | -- | -- | -- | -- main.go | 59 | 48 | 5 | 6 | 81.35%

    Would be nice to improve coverage in proxy folder and has at least some in commands 😅

  • Add fmt vet lint

    Add fmt vet lint

    This adds fmt, vet and lint checks for all the tests. This will make sure that no code that does not respect the Golang recomended code style will be submited. This should close #47

  • Bug:

    Bug: "The command is not recognized" when running "ergo setup osx"

    This is the output:

    > ergo setup osx
    Current detected system: darwin
    Command: networksetup -listnetworkserviceorder
    networksetup -listallnetworkservices
    networksetup -listallhardwareports
    networksetup -detectnewhardware
    networksetup -getmacaddress <hardwareport or device name>
    networksetup -getcomputername
    networksetup -setcomputername <name>
    networksetup -getinfo <networkservice>
    networksetup -setmanual <networkservice> <ip> <subnet> <router>
    networksetup -setdhcp <networkservice> [clientid]
    networksetup -setbootp <networkservice>
    networksetup -setmanualwithdhcprouter <networkservice> <ip>
    networksetup -getadditionalroutes <networkservice>
    networksetup -setadditionalroutes <networkservice> [ <dest> <mask> <gateway> ]*
    networksetup -setv4off <networkservice>
    networksetup -setv6off <networkservice>
    networksetup -setv6automatic <networkservice>
    networksetup -setv6LinkLocal <networkservice>
    networksetup -setv6manual <networkservice> <networkservice> <address> <prefixlength> <router>
    networksetup -getv6additionalroutes <networkservice>
    networksetup -setv6additionalroutes <networkservice> [ <dest> <prefixlength> <gateway> ]*
    networksetup -getdnsservers <networkservice>
    networksetup -setdnsservers <networkservice> <dns1> [dns2] [...]
    networksetup -getsearchdomains <networkservice>
    networksetup -setsearchdomains <networkservice> <domain1> [domain2] [...]
    networksetup -create6to4service <newnetworkservicename>
    networksetup -set6to4automatic <networkservice>
    networksetup -set6to4manual <networkservice> <relayaddress>
    networksetup -getftpproxy <networkservice>
    networksetup -setftpproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
    networksetup -setftpproxystate <networkservice> <on off>
    networksetup -getwebproxy <networkservice>
    networksetup -setwebproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
    networksetup -setwebproxystate <networkservice> <on off>
    networksetup -getsecurewebproxy <networkservice>
    networksetup -setsecurewebproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
    networksetup -setsecurewebproxystate <networkservice> <on off>
    networksetup -getstreamingproxy <networkservice>
    networksetup -setstreamingproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
    networksetup -setstreamingproxystate <networkservice> <on off>
    networksetup -getgopherproxy <networkservice>
    networksetup -setgopherproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
    networksetup -setgopherproxystate <networkservice> <on off>
    networksetup -getsocksfirewallproxy <networkservice>
    networksetup -setsocksfirewallproxy <networkservice> <domain> <port number> <authenticated> <username> <password>
    networksetup -setsocksfirewallproxystate <networkservice> <on off>
    networksetup -getproxybypassdomains <networkservice>
    networksetup -setproxybypassdomains <networkservice> <domain1> [domain2] [...]
    networksetup -getproxyautodiscovery <networkservice>
    networksetup -setproxyautodiscovery <networkservice> <on off>
    networksetup -getpassiveftp <networkservice>
    networksetup -setpassiveftp <networkservice> <on off>
    networksetup -getairportnetwork <device name>
    networksetup -setairportnetwork <device name> <network> [password]
    networksetup -getairportpower <device name>
    networksetup -setairportpower <device name> <on off>
    networksetup -listpreferredwirelessnetworks <device name>
    networksetup -addpreferredwirelessnetworkatindex <device name> <network> <index> <security type> [password]
    networksetup -removepreferredwirelessnetwork <device name> <network>
    networksetup -removeallpreferredwirelessnetworks <device name>
    networksetup -getnetworkserviceenabled <networkservice>
    networksetup -setnetworkserviceenabled <networkservice> <on off>
    networksetup -createnetworkservice <newnetworkservicename> <hardwareport>
    networksetup -renamenetworkservice <networkservice> <newnetworkservicename>
    networksetup -duplicatenetworkservice <networkservice> <newnetworkservicename>
    networksetup -removenetworkservice <networkservice>
    networksetup -ordernetworkservices <service1> <service2> <service3> <...>
    networksetup -getMTU <hardwareport or device name>
    networksetup -setMTU <hardwareport or device name> <value>
    networksetup -listvalidMTUrange <hardwareport or device name>
    networksetup -getmedia <hardwareport or device name>
    networksetup -setmedia <hardwareport or device name> <subtype> [option1] [option2] [...]
    networksetup -listvalidmedia <hardwareport or device name>
    networksetup -createVLAN <VLAN name> <parent device name> <tag>
    networksetup -deleteVLAN <VLAN name> <parent device name> <tag>
    networksetup -listVLANs
    networksetup -listdevicesthatsupportVLAN
    networksetup -isBondSupported <hardwareport>
    networksetup -createBond <bondname> <hardwareport1> <hardwareport2> <...>
    networksetup -deleteBond <bonddevicename>
    networksetup -addDeviceToBond <hardwareport> <bonddevicename>
    networksetup -removeDeviceFromBond <hardwareport> <bonddevicename>
    networksetup -listBonds
    networksetup -showBondStatus <bonddevicename>
    networksetup -listpppoeservices
    networksetup -showpppoestatus <service name ie., MyPPPoEService>
    networksetup -createpppoeservice <device name ie., en0> <service name> <account name> <password> [pppoe service name]
    networksetup -deletepppoeservice <service name>
    networksetup -setpppoeaccountname <service name> <account name>
    networksetup -setpppoepassword <service name> <password>
    networksetup -connectpppoeservice <service name>
    networksetup -disconnectpppoeservice <service name>
    networksetup -getcurrentlocation
    networksetup -listlocations
    networksetup -createlocation <location name> [populate]
    networksetup -deletelocation <location name>
    networksetup -switchtolocation <location name>
    networksetup -listalluserprofiles
    networksetup -listloginprofiles <service name>
    networksetup -enablesystemprofile <service name> <on off>
    networksetup -enableloginprofile <service name> <profile name> <on off>
    networksetup -enableuserprofile <profile name> <on off>
    networksetup -import8021xProfiles <service name> <file path>
    networksetup -export8021xProfiles <service name> <file path> <yes no>
    networksetup -export8021xUserProfiles <file path> <yes no>
    networksetup -export8021xLoginProfiles <service name> <file path> <yes no>
    networksetup -export8021xSystemProfile <service name> <file path> <yes no>
    networksetup -settlsidentityonsystemprofile <service name> <file path> <passphrase>
    >networksetup -settlsidentityonuserprofile <profile name> <file path> <passphrase>networksetup -deletesystemprofile <service name>
    networksetup -deleteloginprofile <service name> <profile name>
    networksetup -deleteuserprofile <profile name>
    networksetup -version
    networksetup -help
    networksetup -printcommands
    ** Error: The command is not recognized.
    
    Setup failed cause exit status 5
    
  • Feature: Wildcard subdomains?

    Feature: Wildcard subdomains?

    I can see there is a feature supporting subdomains with https://github.com/cristianoliveira/ergo/issues/11 and I'd like to ask if it would be possible to add wildcard subdomain support, something like the following format:

    *.mydomain http://localhost:8080
    

    will resolve to every subdomain automatically, like:

    test.mydomain.dev
    user10.mydomain.dev
    admin.mydomain.dev
    

    There are applications that have such features to generate subdomains and of course this is configurable in a DNS level and there are even wildcard SSL certificates and having such a feature for developement environment using Ergo would be awesome!

  • validation of configured addresses

    validation of configured addresses

    shoud block the user immediatly whit urls like

    http:/localhost:8080
    http:loalhost:8080
    http://localhost:
    http://localhost:asd
    
    http://localhost:8080/no   <- actually works but adds a leading `/` (needs a separate issue?)
    localhost:8080 <- should be guessed it's http?
    

    this should happen when services are added, and at ergo startup

  • Feature: Caching last responses

    Feature: Caching last responses

    Give the option to cache the last requests. For instance, when the service you are trying to reach is not answering would be nice to have the same last response

Go (Golang) encrypted deep learning library; Fully homomorphic encryption over neural network graphs

DC DarkLantern A lantern is a portable case that protects light, A dark lantern is one who's light can be hidden at will. DC DarkLantern is a golang i

Oct 31, 2022
Object detection on multiple datasets with an automatically learned unified label space.
Object detection on multiple datasets with an automatically learned unified label space.

An object detector trained on multiple large-scale datasets with a unified label space; Winning solution of ECCV 2020 Robust Vision Challenges.

Dec 30, 2022
A tool for building identical machine images for multiple platforms from a single source configuration
A tool for building identical machine images for multiple platforms from a single source configuration

Packer Packer is a tool for building identical machine images for multiple platforms from a single source configuration. Packer is lightweight, runs o

Oct 3, 2021
A simple OCR API server, seriously easy to be deployed by Docker, on Heroku as well
A simple OCR API server, seriously easy to be deployed by Docker, on Heroku as well

ocrserver Simple OCR server, as a small working sample for gosseract. Try now here https://ocr-example.herokuapp.com/, and deploy your own now. Deploy

Dec 28, 2022
P2P Forwarder - a tool for farwarding tcp/udp ports. Made using libp2p.
P2P Forwarder - a tool for farwarding tcp/udp ports. Made using libp2p.

P2P Forwarder A tool for farwarding ports. Made using libp2p. How it works A: opens desired ports ports inside P2P Forwarder A: shares it's id from P2

Nov 14, 2022
GoScan is a port-scanner made entirely in Go-lang. The purpose of the tool is to be fast, dynamic and simple so that a professional in the CyberSecurity area can make an optimized list of ports
GoScan is a port-scanner made entirely in Go-lang. The purpose of the tool is to be fast, dynamic and simple so that a professional in the CyberSecurity area can make an optimized list of ports

?? GoScan GoScan is a port-scanner made entirely in Go-lang. The purpose of the tool is to be fast, dynamic and simple so that a professional in the C

Jul 19, 2022
Access more HTTP ports over CDN with this application.
Access more HTTP ports over CDN with this application.

More-Ports More Ports is a proxy service to establish all web-based applications on different ports on the server-side over a well known TCP port. It

May 8, 2022
Docker image for setting up one or multiple TCP ports forwarding, using socat

Docker socat Port Forward Docker image for setting up one or multiple TCP ports forwarding, using socat. Getting started The ports mappings are set wi

Dec 20, 2022
Program to simultaneously listen and respond on multiple TCP/UDP ports

listen Program to simultaneously listen on multiple TCP/UDP ports and reply back to anything sent along with IP addresses and lengths of data received

Feb 20, 2022
PolarDB Cluster Manager is the cluster management component of PolarDB for PostgreSQL, responsible for topology management, high availability, configuration management, and plugin extensions.

What is PolarDB Cluster Manager PolarDB Cluster Manager is the cluster management component of PolarDB for PostgreSQL, responsible for topology manage

Nov 9, 2022
CSPFinder is a tool to compare ROI of selling Cash Secure Put options between different tickers for different expiry dates.

CSPFinder is a tool to compare ROI of selling Cash Secure Put options between different tickers for different expiry dates. It is intended to help open new cash secured put positions.

Dec 21, 2021
Plugs module to see different types of plug types needed in different countries, and a comparison tool between two countries plug socket types.

plugs Importing the module: go get github.com/matthewboyd/plugs "github.com/matthewboyd/plugs" How to use the module: There are two functions wi

Dec 28, 2021
Yet Another CLi Spinner; providing over 70 easy to use and customizable terminal spinners for multiple OSes
Yet Another CLi Spinner; providing over 70 easy to use and customizable terminal spinners for multiple OSes

Yet Another CLi Spinner (for Go) Package yacspin provides yet another CLi spinner for Go, taking inspiration (and some utility code) from the https://

Dec 25, 2022
May 11, 2023
Steam's protocol in Go to allow automation of different actions on the Steam network without running an actual Steam client

Steam's protocol in Go to allow automation of different actions on the Steam network without running an actual Steam client. Includes APIs for friends, chatting, trading, trade offers and TF2 crafting.

Jan 4, 2023
💨 A real time messaging system to build a scalable in-app notifications, multiplayer games, chat apps in web and mobile apps.
💨 A real time messaging system to build a scalable in-app notifications, multiplayer games, chat apps in web and mobile apps.

Beaver A Real Time Messaging Server. Beaver is a real-time messaging server. With beaver you can easily build scalable in-app notifications, realtime

Jan 1, 2023
This application provides different tools for multiple purposes
This application provides different tools for multiple purposes

Welcome to readme-md-generator ?? CLI that generates beautiful README.md files. readme-md-generator will suggest you default answers by reading your p

Dec 26, 2022
This application provides different tools for multiple purposes

Welcome to phoenix ?? A command line helper made to simplify your life. This application provides different tools for multiple purposes. Install curl

Dec 18, 2021
☔🎀 Translation made with simplicity, yet robust. ~ Backend portion of Arisu, made in Go.

☔ Tsubaki Website • Discord • Discussions Translation made with simplicity, yet robust. Made with ?? using TypeScript, React with Next.js. Tsubaki is

Jan 13, 2022
Take control over your live stream video by running it yourself. Streaming + chat out of the box.
Take control over your live stream video by running it yourself.  Streaming + chat out of the box.

Take control over your content and stream it yourself. Explore the docs » View Demo · Use Our Server for Testing · FAQ · Report Bug Table of Contents

Jan 1, 2023