When creating a server there are multiple different names you will come across. Each server software has its own uses.
Server Software is very often referred to as "Server Jar(s)".
A "Fork" is a modified version of server software. These often share the same codebase and will sometimes patch in their own changes on top of the previous projects' code. An example of "forks" is something such as "Bukkit > CraftBukkit > Spigot > Paper > Purpur".
There are hundreds (if not thousands) of different forks. This document will only include the recommended, stable, widely-used ones.
As the name suggests, it is a completely Vanilla server from Mojang itself without any modifications. Great for those who want to host a small server for a couple of friends without altering any mechanics, but definitely not good for large servers. It uses datapacks instead of plugins.
Paper is the most widely-used Server Jar nowadays. A fork of Spigot with its own API, numerous optimizations alongside tons of glitch/dupe fixes make Paper the main choice for most server owners.
A fork of Paper which provides numerous gameplay-enhancing features without having to download/create plugins. These include being able to adjust gameplay behaviors not seen in Paper, mob health, and more. Only has a couple of optimization options, but it does allow you to toggle some dupes.
A fork of Paper which groups nearby loaded chunks to form an "independent region." Each independent region has its own tick loop, which is ticked at the regular Minecraft tickrate (20TPS). The tick loops are executed on a thread pool in parallel. There is no main thread anymore, as each region effectively has its own "main thread" that executes the entire tick loop.
Yes, Folia is relatively usable.
Do you need to use it? Highly unlikely. Can you use it? Probably. Will a good chunk of your plugins break? Definitely. It's currently only recommended for very large servers that are vanilla/semi-vanilla, have a beefy enough CPU and enough threads as well. If you do end up using it, make sure to test it thoroughly. If you can, consider implementing some patches from Pufferfish and other jars as well.
Every command and feature should be tested.
Legacy 1.8 Jars
It is highly recommended that you do not use 1.8 or any of its other releases. However, if it's a requirement for whatever reason these are the better jars to use.
Forge is a modding API and server jar. It is most commonly used for servers with large modpacks. However, it is not very optimized and suffers from poor performance.
Fabric is similar to Forge (but not a fork) in the sense that it also supports mods. These mods can change practically any mechanic of the game. Fabric also has a great amount of optimization mods such as Lithium, Starlight, Phosphor etc. Take a look at this list
Any Jar that combines Plugins & Mods
Do not use any server software such as Magma or Mohist. These are generally unstable. Mohist also replaces EssentialsX jars with modified jars, which might not be safe.
Proxies are used to connect multiple regular servers (such as Paper servers) together. These are what power "networks" and are used by servers which have multiple gamemodes separated in their own subservers. I.E. Survival, Minigames, Prison, etc. all in one "server".
A more recent project, now run by the Paper developers. Velocity uses its own API, meaning it does not work with Bungeecord / Waterfall (Unless you use SNAP!, which allows you to use Bungeecord plugins on Velocity. Not recommended, though.)
Velocity is practically superior to Bungeecord / Waterfall unless you're hosting older than 1.13 servers. However, many developers haven't added Velocity support to their plugins.
A fork of Bungeecord run by the Paper developers, Waterfall supports most if not all Bungeecord plugins. It also comes with a couple of networking optimizations.
Functioning almost exactly like the Geyser plugin, Geyser Standalone allows you to take load off of your main proxy/backend instance. It also supports auto-updating on Pterodactyl (assuming that you're using the Geyser Standalone egg). Recommended for servers that have higher player counts.
If you're using Pterodactyl, consider using the Geyser Standalone Egg. After installation, simply set "remote" in the config.yml of Geyser Standalone to the IP of the proxy/backend server & add Floodgate-Spigot & Floodgate-Velocity/Bungeecord to the spigot and proxy instances respectively.
Geyser Standalone also allows you to connect to servers that you do not own. However, this is not recommended as it will more than likely lead to a swift ban from the anti-cheat.
There are sometimes cool spin-offs that we feel are worthy of mentioning their existance, please note they may no longer be in active development at the time you're viewing this article.