Note: This document at present is for only code contributors. We should expand it so that it covers reporting bugs, filing issues, and writing docs.
We have a Discord server to discuss Libplanet. There are some channels for purposes:
- #libplanet-users: Chat with game programmers who use Libplanet. Ask questions to use Libplanet for your games.
- #libplanet-dev: Chat with maintainers and contributors of Libplanet. Ask questions to hack Libplanet and to make a patch for it.
- #libplanet-users-kr: The same purpose to #libplanet-users, except you can speak Korean instead English here.
You need .NET Core SDK 2.2+ which provides the latest C# compiler and .NET VM.
Read and follow the instruction to install .NET Core SDK on
the .NET Core downloads page.
FYI if you use macOS and Homebrew you can install it by
brew cask install dotnet-sdk command.
Make sure that your .NET Core SDK is 2.2 or higher. You could show
the version you are using by
dotnet --info command.
If it's Windows please check if the environment variable named
MSBuildSDKsPath refers to the proper version of .NET Core SDK.
If you use Visual Studio 2017 (not 2019) you can only use .NET Core 2.2.105
at the highest. .NET Core SDK higher than the version 2.2.105 is not
recognized Visual Studio 2017.
Unless you already have your favorite setup, we recommend you to use Visual Studio Code. It is free, open source, and made by Microsoft, which made .NET as well. So Visual Studio Code has a first-party C# extension which works well together.
The following command installs dependencies (required library packages) and builds the entire Libplanet solution:
We write as complete tests as possible to the corresponding implementation code. Going near to the code coverage 100% is one of our goals.
The Libplanet solution consists of 4 projects. Libplanet and Libplanet.Stun are actual implementations. These are built to Libplanet.dll and Libplanet.Stun.dll assemblies and packed into one NuGet package.
Libplanet.Tests is a test suite for the Libplanet.dll assembly, and Libplanet.Stun.Tests is a test suite for the Libplanet.Stun.dll assembly. Both depend on Xunit, and every namespace and class in these corresponds to one in Libplanet or Libplanet.Stun projects. If there's Libplanet.Foo.Bar class there also should be Libplanet.Tests.Foo.BarTest to test it.
To build and run unit tests at a time execute the below command:
Some tests depend on a TURN server. If
TURN_SERVER_URL environment variable
is set (the value looks like
these tests also run. Otherwise, these tests are skipped.
Please follow the existing coding convention. We are already using several
static analyzers. They are automatically executed together with
and will warn you if there are any style errors.
You should also register Git hooks we commonly use:
git config core.hooksPath hooks
We highly recommend you to install an extension for EditorConfig in your favorite editor. Some recent editors have built-in support for EditorConfig, e.g., Rider (IntelliJ IDEA), Visual Studio. Many editors have an extension to support EditorConfig, e.g., Atom, Emacs, Vim, VS Code.