EGlist - Velocity & BungeeCord

Version of EnhancedGlist compatible with Velocity and BungeeCord

Installation

This documentation is for v2 version, unfortunately v1 is no longer maintained.

Download the latest release from SpigotMC or from our CI Server, also you can download an unstable build if you want to contribute to this project! By testing an unstable build and reporting any bug you can help us a lot.

If you are interested to contribute by testing unstable builds, download the latest unstable build from our CI Server.

Prerequisites

BungeeCord

  1. First of all, we need to remove the built-in BungeeCord /glist command to remove conflicts with the /glist command registered by EnhancedGlist:
    • Edit modules.yml file located at the root of your BungeeCord folder and remove line jenkins://cmd_list from file. After removing this line, file should look something to:
      version: 2
      modules:
      - jenkins://cmd_alert
      - jenkins://cmd_find
      - jenkins://cmd_send
      - jenkins://cmd_server
      - jenkins://reconnect_yaml
    • Go to /modules folder located at the root of your BungeeCord folder and remove cmd_list.jar file if exists.
  2. Download latest stable or unstable build from our CI Server or from SpigotMC.
  3. Put downloaded file (EnhancedGlist-BungeeCord-X.X.X.jar) inside /plugins folder.
  4. Load plugin using a plugin manager, or start/restart your BungeeCord server.
  5. Go to /plugins/EnhancedGlist folder and edit configuration files to configure EnhancedGlist.
  6. If you have made changes, use /egl reload command to reload plugin.
    • Note: plugin manager is not required to reload EnhancedGlist because EnhancedGlist already does a full reload by using /egl reload command. We recommend you to use /egl reload to do a safe reload.
  7. Congragulations! EnhancedGlist is installed on your BungeeCord server.
  8. Install the Spigot version of EnhancedGlist to unlock additional features, see this page for more information: https://docs.wirlie.net/books/eglist-spigot-bridge/page/installation

Velocity

  1. Download latest stable or unstable build from our CI Server or from SpigotMC.
  2. Put downloaded file (EnhancedGlist-Velocity-X.X.X.jar) inside /plugins folder.
  3. Load plugin using a plugin manager, or start/restart your Velocity server.
  4. Go to /plugins/enhanced-glist-velocity folder and edit configuration files to configure EnhancedGlist.
  5. If you have made changes, use /egl reload command to reload plugin.
    • Note: plugin manager is not required to reload EnhancedGlist because EnhancedGlist already does a full reload by using /egl reload command. We recommend you to use /egl reload to do a safe reload.
  6. Congragulations! EnhancedGlist is installed on your Velocity server.
  7. Install the Spigot version of EnhancedGlist to unlock additional features, see this page for more information: https://docs.wirlie.net/books/eglist-spigot-bridge/page/installation

GUI System

EnhancedGlist uses Protocolize as an additional dependency for making visual menus using the classic Chest inventories from game. To enable this feature you must add Protocolize to your BungeeCord or Velocity server, to download the latest version of Protocolize go to: https://www.spigotmc.org/resources/protocolize-protocollib-for-bungeecord-waterfall-velocity.63778/.

If you have Protocolize installed and you want to disable GUI System from EnhancedGlist, edit config.conf file located inside of the data folder of EnhancedGlist and set use-gui-menu property to false, then use /egl reload command to apply changes.

Compatible Plugins

This documentation is for v2 version, unfortunately v1 is no longer maintained.

List of all compatible plugins which EnhancedGlist will hook to unlock additional features, all plugins are optional and are not required by EnhancedGlist to work.

Your plugin is not listed here? Don't worry! Feel free to make a suggestion and we will check if your suggested plugin can be added to EnhancedGlist.

Plugin Platform Additional feature if plugin is present
Protocolize BungeeCord
Velocity
Enables GUI System for visual menus instead of displaying information through chat messages.
LuckPerms BungeeCord
Velocity
Enables Prefixes handling using LuckPerms.
EssentialsX Spigot
Enables AFK and Vanish handling from EssentialsX.
Note: Spigot bridge must be installed.
JetsAntiAFKPro Spigot Enables AFK handling from JetsAntiAFKPro
Note: Spigot bridge must be installed.
SuperVanish Spigot Enables Vanish handling from SuperVanish
Note: Spigot bridge must be installed.
PremiumVanish BungeeCord
Spigot
Enables Vanish handling from PremiumVanish

Velocity is not supported by PremiumVanish but you can add PremiumVanish on all Spigot servers and connect them using a database.

Note: Spigot bridge must be installed if you are using Velocity as proxy.
VanishNoPacket Spigot Enables Vanish handling from VanishNoPacket
Note: Spigot bridge must be installed.
StaffFacilities Spigot Enables Vanish handling from StaffFacilities
Note: Spigot bridge must be installed.
CMI Spigot

Enables AFK and Vanish handling from CMI plugin.

Note: Spigot bridge must be installed.


Configuration files

All related to configuration files (*.conf) from EnhancedGlist

Configuration files

Main configuration file

This documentation is for v2 version, unfortunately v1 is no longer maintained.

Main configuration file contains most of the features of EnhancedGlist and you can edit this by editing config.conf file located inside of the data folder of EnhancedGlist.

Default configuration file should look something similar to this:

Content of default config.conf file
do-not-edit-this {
  # Do not edit this
  config-version="BUILD_COMMIT_HASH"
}

commands {
  glist {
    # Label to use for /glist command
    label="glist"
    # Permission required to execute /glist command
    permission="egl.commands.glist"
    # Optional, define aliases for /glist command
    aliases=["globalist"]
    # If enabled, a GUI will be displayed when a player executes this command
    # If disabled, data will be displayed in chat
    # To use this feature you must add Protocolize to your proxy:
    # https://www.spigotmc.org/resources/protocolize-protocollib-for-bungeecord-waterfall-velocity.63778/
    use-gui-menu=true
  }

  slist {
    # Label to use for /slist command
    label="slist"
    # Permission required to execute /slist command
    permission="egl.commands.slist"
    # Optional, define aliases for /slist command
    aliases=["serverlist"]
    # If enabled, a GUI will be displayed when a player executes this command
    # If disabled, data will be displayed in chat
    # To use this feature you must add Protocolize to your proxy:
    # https://www.spigotmc.org/resources/protocolize-protocollib-for-bungeecord-waterfall-velocity.63778/
    use-gui-menu=true
  }

  egl {
    # Label to use for /egl command
    label="egl"
    # Permission required to execute /egl command
    # Warning!!! This is a privileged command, only give this permission to administrators.
    permission="egl.commands.egl"
    # Optional, define aliases for /egl command
    aliases=["serverlist"]
  }
}

general {
  # Prefix for chat messages
  prefix="<bold><aqua>EGlist ></aqua></bold><reset>"
  # Supported languages: en (english), es (spanish)
  language="en"
  # Players per row (/slist)
  players-per-row=2
  # Players to display per page (/slist)
  players-per-page=16
  # Cache configuration
  cache {
    # Cache players that are connected in a certain server (/slist)
    server-players {
      # Set true to enable this cache
      enable=true
      # Number of seconds to keep the cache, after this period cache will be refreshed
      time=20
    }
  }
  # If empty servers should be hidden (when server has no players connected)
  hide-empty-servers=true
  # Number of servers to display on each page (/glist)
  servers-per-page=8
  # The number of players required to display a server (/glist), set 0 to always display empty servers.
  min-players-required-to-display-server=0
  # If server names should be displayed as uppercase (/glist and /slist)
  display-server-name-uppercase=false
}

behavior {
  # Related to vanish
  vanish {
    # If vanish should be handled by plugin
    enable=true
    # If vanished players should be hidden, useful if you want /glist to be used by players.
    hide-vanished-users=true
    # Permission to allow a player to see vanished players in /glist
    hide-bypass-permission="egl.bypass.vanish.hide"
  }

  # Related to AFK state
  afk {
    # If AFK state should be handled by plugin
    enable=true
  }
}

# Updater configuration
updates {
  # If plugin should check for new updates
  check-for-updates=true
  # Period to check for updates in seconds
  check-interval=300
  # Notifications
  notify {
    # Notify when a player joins to proxy
    on-join {
      # Enable this notification
      enable=true
      # Milliseconds to delay update message sent in chat (if an update is available)
      delay=2500
      # Only players with this permission can see the update message (if an update is available)
      permission="ebcl.update.notify"
    }

    # Console notification
    console {
      # Enable this notification
      enable=true
      # Notification interval in seconds
      notification-interval=1800
    }
  }
}

# Servers to ignore, all servers in this list will be hidden from /glist
# Also ignored servers will not be taken in account for server groups.
ignore-servers {
  # Ignore servers by exact name
  by-name=[
    "login1",
    "login2",
    "login3"
  ]
  # Ignore servers that match RegEx pattern
  # You can use this tool to test a RegEx expression: https://regexr.com/
  by-pattern=[
    "login.*"
  ]
}

# Group servers, useful if you have multiple instances of a same server
group-servers {
  # Example: lobby1, lobby2, lobby3 and lobby4 servers will be grouped as one server named "lobby"
  lobby=[
    "lobby1",
    "lobby2",
    "lobby3",
    "lobby4"
  ]
  # Example: all servers that start with "bedwars-lobby" and "bedwars-game" will be grouped as one server named "bedwars"
  bedwars {
    # RegEx pattern.
    # You can use this tool to test a RegEx expression: https://regexr.com/
    patterns=[
      "bedwars-game.*",
      "bedwars-lobby.*"
    ]
  }
}

Configuration properties

do-not-edit-this

This section is used by EnhancedGlist to know the current state of configuration and apply updates if needed, you should never edit this.

commands
glist

Settings related to /glist command.

Property Default Value Description
label glist Label to use for /glist command.
permission egl.commands.glist Required permission to execute /glist command
aliases ["globalist"] Aliases to use for /glist command.
use-gui-menu true If /glist should use a GUI menu instead of chat messages to display information. This is only applied when Protocolize is available in your server, see Installation page for more information.
slist

Settings  related to /slist command.

Property Default Value Description
label slist Label to use for /slist command.
permission egl.commands.slist Required permission to execute /slist command
aliases ["serverlist"] Aliases to use for /slist command.
use-gui-menu true If /slist should use a GUI menu instead of chat messages to display information. This is only applied when Protocolize is available in your server, see Installation page for more information.
egl

Settings  related to /egl command.

Property Default Value Description
label slist Label to use for /slist command.
permission egl.commands.slist Required permission to execute /slist command
aliases ["serverlist"] Aliases to use for /slist command.
general
Property Default Value Description
prefix <bold><aqua>EGlist ></aqua></bold><reset> Prefix to use to identify plugin in chat messages.
language en Language to use for messages, see Available translations.
players-per-row 2

Number of players to display on each line of chat when player list is displayed using /slist command.


Note that this setting is not applicable for GUI, this is only applicable if you are not using the GUI System or if you uses /slist command from console, since console cannot render GUI.

players-per-page
16

Number of players to display on each page for /slist command.


Note that this setting is not applicable for GUI, this is only applicable if you are not using the GUI System or if you uses /slist command from console, since console cannot render GUI.

hide-empty-servers
true

Enable this to hide empty servers if server does not have the minimum amount of players required to be displayed
(min-players-required-to-display-server).

Note that this setting is not applicable for GUI, this is only applicable if you are not using the GUI System or if you uses /slist command from console, since console cannot render GUI.

min-players-required-to-display-server
0

Min players required to display a server in the servers list for /glist command.

Note that this setting is not applicable for GUI, this is only applicable if you are not using the GUI System or if you uses /glist command from console, since console cannot render GUI.

servers-per-page
8

Number of servers to display on each page for /glist command.

Note that this setting is not applicable for GUI, this is only applicable if you are not using the GUI System or if you uses /glist command from console, since console cannot render GUI.

display-server-name-uppercase
false

If server names should be displayed in uppercase.

cache
server-players

Cache to retain the player list of a server when /slist command is used. This cache is intended for an easy read of player list, especially when server has a high player concurrency.

Note that this setting is not applicable for GUI, this is only applicable if you are not using the GUI System or if you uses /slist command from console, since console cannot render GUI.

Property Default Value Description
enable true If cache should be used, if you disable this, every /slist command execution will use the real player list but this can be hard to read if server has a high concurrency of players.
time
20
Time in seconds to keep cache, after this time cache will be refreshed.
behavior
vanish
Property Default Value Description
enable true If enabled, EnhancedGlist will handle Vanish updates from players. Note that you must install the Spigot version of EnhancedGlist to handle updates from Spigot.
hide-vanished-users
true
If enabled, vanished players will be hidden from player list.
hide-bypass-permission
egl.bypass.vanish.hide
Give this permission to your staff. With this permission, a player will be able to view vanished players from player list.
afk
Property Default Value Description
enable true If enabled, EnhancedGlist will handle AFK updates from players. Note that you must install the Spigot version of EnhancedGlist to handle updates from Spigot.
updates
Property Default Value Description
check-for-updates true If EnhancedGlist should check for new updates.
check-interval
300
Time in seconds to perform a check for new updates.
notify
on-join
Property Default Value Description
enable true Enable notification on player join.
delay
2500
Time in milliseconds to delay the update notification message when player join.
permission
ebcl.update.notify Only players with this permission will receive update notification.
console
Property Default Value Description
enable true Enable notification on console.
notification-interval
1800
Time in seconds to send notification to console when a update is available.
ignore-servers

Define servers to be ignored from server list (i.e. list displayed when /glist command is executed)

Property Default Value Description
by-name ["login1","login2","login3"] Ignore servers by exact name.
by-pattern
["login.*"]
Ignore servers by name using regex expressions, you can use RegExr webpage to test regex expressions.
group-servers

Group multiple servers by name. You can define many groups as you want, there is no limit of groups.

Examples:

 


 

Group multiple lobbies using exact name, in this example, lobby1, lobby2, lobby3 and lobby4 will be grouped as "lobby".

group-servers {
  lobby=[
    "lobby1",
    "lobby2",
    "lobby3",
    "lobby4"
  ]
}

Also this can be done if you uses a Regex pattern to group all servers that starts with "lobby" word.

group-servers {
  lobby=[
    patterns=[
      "lobby.*"
    ]
  ]
}

 


 

In this example, lobby1, lobby2, lobby3 and lobby4 will be grouped as "lobby", and all servers that starts with "bedwars-game" and "bedwars-lobby" will be grouped as "bedwars".

group-servers {
  lobby=[
    "lobby1",
    "lobby2",
    "lobby3",
    "lobby4"
  ]
  bedwars {
    patterns=[
      "bedwars-game.*",
      "bedwars-lobby.*"
    ]
  }
}


Configuration files

GUI configuration file

This documentation is for v2 version, unfortunately v1 is no longer maintained.

This configuration provides you all configurations related to GUI used by /glist and /slist command. For /glist command you must edit gui-glist-menu.conf file and for /slist command you must edit gui-slist-menu.conf file.

Take note that some configurations are common between both configurations. Also, due to technical limitations, console is not capable of view inventories, so in such case, console will always render chat messages for /glist and /slist commands.

Follow Installation steps to enable GUI feature, otherwise these configurations will not have any effect.

Common configuration between /glist and /slist

Property Description
title Title of menu.
rows
Number of rows to use (between 2 and 6 rows). You can set it to -1 to automatically calculate the number of rows depending of the data.
do-not-edit-this

This section is used by EnhancedGlist to know the current state of configuration and apply updates if needed, you should never edit this.

data-format

Configurations related to items used by the menu to display data.

general-item

Base item to use for data display.

Property Description
material

Item material. Use official Spigot material names (MC 1.13+): Click here

amount

Item amount.

display-name

Item display name.

lore

Item lore.

player-head

Only available if material is set to PLAYER_HEAD. With this configuration you can change the skin of head or the head owner (nick).

Only skull-owner or skin-hash should be set, not both.

Property Description
skull-owner

Player name, skull will have the skin of this player.

skin-hash

A string containing skin texture. You can use some tools like Minecraft Heads to get this value:

Sin título.png

empty-slot-item

Item to display on empty slots.

Property Description
material

Item material. Use official Spigot material names (MC 1.13+): Click here

amount

Item amount.

display-name

Item display name.

lore

Item lore.

player-head

Only available if material is set to PLAYER_HEAD. With this configuration you can change the skin of head or the head owner (nick).

Only skull-owner or skin-hash should be set, not both.

Property Description
skull-owner

Player name, skull will have the skin of this player.

skin-hash

A string containing skin texture. You can use some tools like Minecraft Heads to get this value:

Sin título.png

toolbar
previous-page-item

Item to set for previous page "button".

Property Description
material

Item material. Use official Spigot material names (MC 1.13+): Click here

amount

Item amount.

display-name

Item display name.

lore

Item lore.

player-head

Only available if material is set to PLAYER_HEAD. With this configuration you can change the skin of head or the head owner (nick).

Only skull-owner or skin-hash should be set, not both.

Property Description
skull-owner

Player name, skull will have the skin of this player.

skin-hash

A string containing skin texture. You can use some tools like Minecraft Heads to get this value:

Sin título.png

next-page-item

Item to set for next page "button".

Property Description
material

Item material. Use official Spigot material names (MC 1.13+): Click here

amount

Item amount.

display-name

Item display name.

lore

Item lore.

player-head

Only available if material is set to PLAYER_HEAD. With this configuration you can change the skin of head or the head owner (nick).

Only skull-owner or skin-hash should be set, not both.

Property Description
skull-owner

Player name, skull will have the skin of this player.

skin-hash

A string containing skin texture. You can use some tools like Minecraft Heads to get this value:

Sin título.png

background
Property Description
pattern

Pattern to set background, representating the nine slots of an inventory row.

image.png

Expected string to represent nine slots of an inventory row:

pattern="1 2 3 4 5 6 7 8 9"

Declare definitions

You must define all items used by pattern, for example, if you set "A B C B A B C B A" as pattern you must declare definitions for "A", "B" and "C". Note that you can use any letter or number to define a pattern.

Item definition

background {
  pattern="1 B 1 2 S 2 1 N 1"
  definitions {
    i1 {
      material="LIME_STAINED_GLASS_PANE"
      display-name=" "
    }
    ...
  }
}

A definition key is conformed with: "XY" where X is the definition type and Y the letter to define, for example, iA defines an item for letter A.

As you have seen, i is used to define an item.

Properties for item idefinition
Property Description
material

Item material. Use official Spigot material names (MC 1.13+): Click here

amount

Item amount.

display-name

Item display name.

lore

Item lore.

player-head

Only available if material is set to PLAYER_HEAD. With this configuration you can change the skin of head or the head owner (nick).

Only skull-owner or skin-hash should be set, not both.

Property Description
skull-owner

Player name, skull will have the skin of this player.

skin-hash

A string containing skin texture. You can use some tools like Minecraft Heads to get this value:

Sin título.png

Menu item definition

background {
  pattern="1 B 1 2 S 2 1 N 1"
  definitions {
    mB="previous-page-item
    mN="next-page-item"
    ...
  }
}

This type of definition is used by menu to know how put some menu items, such "back page" and "next page" items.

Also menu items are not directly configurable like item definition, you should look for previous-page-item and next-page-item configurations instead.

Available menu items:
  • previous-page-item
  • next-page-item

Remember that a definition key is conformed with: "XY" where X is the definition type and Y the letter to define, for menu items, definition type corresponds to the letter m.

Full example:

Example
  background {
    pattern="1 B 1 2 S 2 1 N 1"
    definitions {
      i1 {
        material="LIME_STAINED_GLASS_PANE"
        display-name=" "
      }
      i2 {
        material="YELLOW_STAINED_GLASS_PANE"
        display-name=" "
      }
      iS {
        material="PLAYER_HEAD"
        display-name="<aqua>Ver todos los servidores"
        player-head {
          skin-hash="eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZGZjM2MyNDNmYzA4OTRhYTQwMjhkMzJiMTlhODMwYTJmY2FkYzI5MzI3MGI0Y2IzMmMxYmFlNDJjNzhjMDhiZSJ9fX0="
        }
        on-click {
          run-command = "glist"
        }
      }
      mB="previous-page-item"
      mN="next-page-item"
      iE {
        material="YELLOW_STAINED_GLASS_PANE"
        amount=1
        display-name="<red>¡Ítem de ejemplo!"
        lore=[
          "<gray>lore línea 1",
          "<aqua>lore línea 2",
          "<green>lore línea 3"
        ]
        on-click {
          send-chat="<yellow>¡Hola <player>!"
          run-command="glist"
          close-menu=true
        }
        player-head {
          skull-owner="Wirlie"
          skin-hash="ewogICJ0aW1lc3RhbXAiIDogMTY1OTA0NzQ3MDM5OSwKICAicHJvZmlsZUlkIiA6ICI4N2RlZmVhMTQwMWQ0MzYxODFhNmNhOWI3ZGQ2ODg0MyIsCiAgInByb2ZpbGVOYW1lIiA6ICJTcGh5bnhpdHMiLAogICJzaWduYXR1cmVSZXF1aXJlZCIgOiB0cnVlLAogICJ0ZXh0dXJlcyIgOiB7CiAgICAiU0tJTiIgOiB7CiAgICAgICJ1cmwiIDogImh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjg0MThjZGExM2Y1OTAxMmM4MTVkNmRiYTNlZDgzODUyZGExNzU5YzdiOTVjYTczYTFlNmM0YmNiMzI2MTg1MyIKICAgIH0KICB9Cn0="
        }
      }
    }
  }

/glist configuration (gui-glist-menu.conf)

data-format
custom-items

Set custom items to display depending of the server name, you can add unlimited custom items. If no custom item is defined for a server, then the general item will be used.

Properties:
Property Description
by-name

Match servers by exact name, all matched servers will use this custom item.

by-regex

Match servers by name using regex expressions, all matched servers will use this custom item.

material

Item material. Use official Spigot material names (MC 1.13+): Click here

amount

Item amount. Set to -1 to automatically set amount based on the number of players connected to the server.

display-name

Item display name.

lore

Item lore.

player-head

Only available if material is set to PLAYER_HEAD. With this configuration you can change the skin of head or the head owner (nick).

Only skull-owner or skin-hash should be set, not both.

Property Description
skull-owner

Player name, skull will have the skin of this player.

skin-hash

A string containing skin texture. You can use some tools like Minecraft Heads to get this value:

Sin título.png

Example:

In this example, a custom item named "lobby-servers" is defined, and all servers that starts with "lobby" will use this custom item. Note that you can name custom items as you want.

data-format {
  custom-items {
    lobby-servers {
      by-regex="lobby.*"
      material="PLAYER_HEAD"
      amount=-1
      display-name="<yellow>Lobby Server"
      lore=[
        "<white><player-count></white> <aqua>online players</aqua>",
        " ",
        "<yellow>Click to view player list."
      ]
      player-head {
        skin-hash="eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZDY3ZGYzNWI3YTgwMjdkZGM4M2M5MTlkNzNmMGEzOTk4YWQ1NGViMGQ5NzNlZjcxNmFlNTA1YzY3NTU4MTBmNyJ9fX0="
      }
  }
}

/slist configuration (gui-slist-menu.conf)

format
Property Description
afk-status

Prefix/Suffix to use for AFK status.

vanish-status

Prefix/Suffix to use for Vanish status.

Configuration files

Available translations

This documentation is for v2 version, unfortunately v1 is no longer maintained.

Currently available languages:

Code Language
en English
es Spanish

To change language of EnhancedGlist see: Main configuration file

To contribute with an additional translation, contact me via Discord: Wirlie#0001

Configuration files

Make your own translation file

This documentation is for v2 version, unfortunately v1 is no longer maintained.

To make your own translation edit language configuration from main configuration and set it to anything else except already existing languages codes.

For example, you can make your own portuguese translation by setting the language configuration to pt, then reload EnhancedGlist by using /egl reload command . This will generate a new file called pt.conf containing all translations from English language. Edit this new file with your own translations and use /egl reload to apply changes.

Commands

This documentation is for v2 version, unfortunately v1 is no longer maintained.

List of default commands, note that you can configure all commands from the main configuration.

Command Permission Description Privileged command
/glist egl.commands.glist Command to display information from all servers registered on the Proxy. No, you can grant this command to your players.
/slist egl.commands.slist Command to display player list from a certain server. No, you can grant this command to your players.
/egl egl.commands.egl Main EnhancedGlist command. Yes, should only be used by administrators.


Buy Me a Coffee

Hello! 👋 My main focus is to make software with high quality and innovation 💡. I love my work and I hope that you enjoy my work 🤗.

Your collaboration is very appreciated, if you want to help my work you can do it becoming a sponsor of my projects.

I am satisfied if you enjoy my work, but if you want to help me to improve my tools for making better software 💻, then you should definitively become a sponsor 🙂.

To become a sponsor, visit: https://github.com/sponsors/Wirlie