Giter VIP home page Giter VIP logo

skymp's Introduction

SkyMP

Discord Chat PR's Welcome Players Servers

SkyMP is an open-source multiplayer mod for Skyrim ⚡

SkyMP is built on top of the SkyrimPlatform - a tool to create Skyrim mods with TypeScript and Chromium. 🚀

This repo hosts all sources to ease local setup and contributing. See CONTRIBUTING for build instructions.

image

What's Synced

  • Player movement and animation sync
  • Appearance: race, headparts, tints, etc
  • PvP sync: melee damage, attributes, death
  • Inventory sync: equipment, containers, craft, etc
  • Limited scripts sync (WIP) - we have our own Papyrus engine
  • Who knows what comes next? We work on synchronizing all Skyrim game mechanics, see ROADMAP.

Multiplayer Features

  • Mostly server-controlled game state - you can't cheat everything
  • Store your world in plain files or MongoDB
  • Customize your server with TypeScript or Papyrus scripting
  • Use esp/esm mods, just ensure both client and server load order are the same

Terms of Use

See TERMS.md. TL;DR disclose the source code of your forks.

Third-party code licenses can be found in THIRD_PARTY_LICENSES.

skymp's People

Contributors

alekcey0211 avatar barkinlove avatar bogdasar1985 avatar carlosleyvaayala avatar cat0rama avatar darkwood9612 avatar davinchi59 avatar dependabot[bot] avatar dinakrab avatar gameruiner avatar github-actions[bot] avatar iceleon911 avatar justcaptcha avatar kkengine avatar korisss avatar mrowrpurr avatar nic11 avatar peterkmg avatar pospelove avatar purpleslayerfish avatar q1000treadz avatar remox112358 avatar russo-2025 avatar shevernitskiy avatar supaidmi avatar svyatoslavratov avatar vitaliymubarakov avatar vladdenisov avatar wedmer avatar zikkeyls avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

skymp's Issues

Problem with CEF installation

Аn error occurs when i starting configuring project.
No log file is created.

E:\SkyMP\skymp\build>cmake ..
-- Selecting Windows SDK version 10.0.19041.0 to target Windows 10.0.19043.
-- Unexpected CEF README hash
        Expected: dbaa71607debbba411f9ce4c8e28ca52ba98676ebf11db25d2ba0e47b686c7ec9b30bfc34bdd7ff665e3b79cb863c85639585bd6d945c86f1b28fee548452c47
        Actual:
-- Installing CEF
-- Downloading...
-- Extracting archive...
-- Found CEF:
CMake Error at vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package):
  By not providing "FindCEF.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "CEF", but
  CMake did not find one.

  Could not find a package configuration file provided by "CEF" with any of
  the following names:

    CEFConfig.cmake
    cef-config.cmake

  Add the installation prefix of "CEF" to CMAKE_PREFIX_PATH or set "CEF_DIR"
  to a directory containing one of the above files.  If "CEF" provides a
  separate development package or SDK, be sure it has been installed.
Call Stack (most recent call first):
  skyrim-platform/src/platform_se/CMakeLists.txt:21 (find_package)


-- Configuring incomplete, errors occurred!

E:\SkyMP\skymp\build>

CEF folder in build is empty.

Fix missing libChakraCore.so in Linux server dist

Workaround:

# copy to dist
cp vcpkg_installed/x64-linux/bin/libChakraCore.so dist/server/

# run server with LD_LIBRARY_PATH specified
LD_LIBRARY_PATH="$PWD:$LD_LIBRARY_PATH" node dist_back/index.js

BTW, bad news - debug build size is 371M (good news - release size is 19M):

-rw-r--r-- 1 roma roma 19M сен  4 13:31 vcpkg_installed/x64-linux/bin/libChakraCore.so
-rw-r--r-- 1 roma roma 371M сен  4 13:31 vcpkg_installed/x64-linux/debug/bin/libChakraCore.so

Awesome SkyMP 🚀

List of Open Source SkyMP-based or SkyMP-related projects.

Servers

Projects in the list should meet these requirements.

We would love to add your project to this list! Leave your comment here with your project's description and GitHub link.

Error Bad form ID when looting container

I went to qasmoke test location.
Here are its coordinates to move for testing.

"qasmoke": {
  "pos": [-751.9232177734375, 1747.129638671875, 6976.00048828125],
  "angle": [0, 0, 47],
  "worldOrCellDesc": "32ae7:Skyrim.esm"
}

When I try to loot one of the Dragonborn add-on chests, I see this error in the game console Bad form ID 20291f4
There are a lot of such errors, apparently for each item in the container.

Mods load order from server

"loadOrder": [
  "Skyrim.esm",
  "Update.esm",
  "Dawnguard.esm",
  "HearthFires.esm",
  "Dragonborn.esm"
]

Windows CI should test espm

Currently, it doesn't due to missing data files. But we could get these files the way Dockerfile does it.

espm library roadmap

Do a rework for different aspects of ESPM library for loading esm/esp files.

Planned changes:

  • More comments documenting internals, including links to UESP wiki
  • Unit tests for iterating GRUP children (#99)
  • Reworked structure of loaded file. Representing file as a tree consisting of GRUPs and entries
  • Bonus implied from previous item: getting rid of dirty hacks like changing unused record fields to store additional data
  • Better interface for working with file internals
  • Support memory mapping
  • Maybe something else...

Non-Skyrim.esm headparts do not work after relogging

"lookDump":{"hairColor":2565667,"headTextureSetId":853789,"headpartIds":[333359,333361,546143,916484,916418,843121,842621,815705,33582984],"isFemale":false,"name":"Ф","options":[-0.10000000149011612,-0.30000001192092896,0.8999999761581421,0.8999999761581421,-0.0,0.6000000238418579,-0.699999988079071,-0.699999988079071,-0.30000001192092896,0.20000000298023224,0.30000001192092896,0.4000000059604645,-1.0,0.5,-0.10000000149011612,0.4000000059604645,-0.2800000011920929,0.20000000298023224,3.4028234663852886e+38],"presets":[4.0,-1.0,5.0,19.0],"raceId":79686,"skinColor":10978938,"tints":[{"argb":-5798278,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\SkinTone.dds","type":6},{"argb":1621709906,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleUpperEyeSocket.dds","type":4},{"argb":1799554049,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleLowerEyeSocket.dds","type":5},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHead_Cheeks.dds","type":2},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHead_Cheeks2.dds","type":9},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHead_FrownLines.dds","type":8},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadNord_Lips.dds","type":1},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHead_Nose.dds","type":10},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadHuman_ForeHead.dds","type":13},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadHuman_Chin.dds","type":11},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadHuman_Neck.dds","type":12},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHead_Frekles_01.dds","type":0},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadWarPaint_01.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadWarPaint_02.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadWarPaint_03.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadWarPaint_04.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadWarPaint_05.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadWarPaint_06.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadWarPaint_07.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadWarPaint_08.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadWarPaint_09.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadWarPaint_10.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadNordWarPaint_01.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadNordWarPaint_02.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadNordWarPaint_03.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadNordWarPaint_04.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadNordWarPaint_05.dds","type":7},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadBothiahTattoo_01.dds","type":0},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadBlackBloodTattoo_01.dds","type":0},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadBlackBloodTattoo_02.dds","type":0},{"argb":-1828716544,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\RedGuardMaleEyeLinerStyle_01.dds","type":3},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadDirt_01.dds","type":14},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadDirt_02.dds","type":14},{"argb":16777215,"texturePath":"Actors\\Character\\Character Assets\\TintMasks\\MaleHeadDirt_03.dds","type":14}],"weight":39.999996185302734}

https://cdn.discordapp.com/attachments/700762513599627371/858654381721124874/image0.png

Originally reported by @Keidran

Linker errors related to napi.

I have assembled project step by step following guide in the test task and then
linker errors occur when I am trying to build skymp5-server.sln.

1>main.obj : error LNK2019: unresolved external symbol napi_get_last_error_info referenced in function "public: static class Napi::Error __cdecl Napi::Error::New(struct napi_env__ *)" (?New@Error@Napi@@SA?AV12@PEAUnapi_env__@@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_get_undefined referenced in function "public: class Napi::Value __cdecl Napi::Env::Undefined(void)const " (?Undefined@Env@Napi@@QEBA?AVValue@2@XZ)
1>main.obj : error LNK2019: unresolved external symbol napi_get_global referenced in function "public: class Napi::Object __cdecl Napi::Env::Global(void)const " (?Global@Env@Napi@@QEBA?AVObject@2@XZ)
1>main.obj : error LNK2019: unresolved external symbol napi_create_object referenced in function "public: static class Napi::Object __cdecl Napi::Object::New(struct napi_env__ *)" (?New@Object@Napi@@SA?AV12@PEAUnapi_env__@@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_create_array_with_length referenced in function "public: static class Napi::Array __cdecl Napi::Array::New(struct napi_env__ *,unsigned __int64)" (?New@Array@Napi@@SA?AV12@PEAUnapi_env__@@_K@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_create_double referenced in function "public: static class Napi::Number __cdecl Napi::Number::New(struct napi_env__ *,double)" (?New@Number@Napi@@SA?AV12@PEAUnapi_env__@@N@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_create_string_utf8 referenced in function "protected: static class Napi::Error __cdecl Napi::Error::New<class Napi::Error>(struct napi_env__ *,char const *,unsigned __int64,enum napi_status (__cdecl*)(struct napi_env__ *,struct napi_value__ *,struct napi_value__ *,struct napi_value__ * *))" (??$New@VError@Napi@@@Error@Napi@@KA?AV01@PEAUnapi_env__@@PEBD_KP6A?AW4napi_status@@0PEAUnapi_value__@@3PEAPEAU4@@Z@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_create_function referenced in function "enum napi_status __cdecl Napi::CreateFunction<struct Napi::details::CallbackData<class <lambda_582730f4d9b2082e23123b6987c65989>,class Napi::Value> >(struct napi_env__ *,char const *,struct napi_value__ * (__cdecl*)(struct napi_env__ *,struct napi_callback_info__ *),struct Napi::details::CallbackData<class <lambda_582730f4d9b2082e23123b6987c65989>,class Napi::Value> *,struct napi_value__ * *)" (??$CreateFunction@U?$CallbackData@V<lambda_582730f4d9b2082e23123b6987c65989>@@VValue@Napi@@@details@Napi@@@Napi@@YA?AW4napi_status@@PEAUnapi_env__@@PEBDP6APEAUnapi_value__@@0PEAUnapi_callback_info__@@@ZPEAU?$CallbackData@V<lambda_582730f4d9b2082e23123b6987c65989>@@VValue@Napi@@@details@0@PEAPEAU3@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_create_error referenced in function "public: static class Napi::Error __cdecl Napi::Error::New(struct napi_env__ *)" (?New@Error@Napi@@SA?AV12@PEAUnapi_env__@@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_create_type_error referenced in function "public: static class Napi::Error __cdecl Napi::Error::New(struct napi_env__ *)" (?New@Error@Napi@@SA?AV12@PEAUnapi_env__@@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_typeof referenced in function "public: enum napi_valuetype __cdecl Napi::Value::Type(void)const " (?Type@Value@Napi@@QEBA?AW4napi_valuetype@@XZ)
1>main.obj : error LNK2019: unresolved external symbol napi_get_value_double referenced in function "public: double __cdecl Napi::Number::DoubleValue(void)const " (?DoubleValue@Number@Napi@@QEBANXZ)
1>main.obj : error LNK2019: unresolved external symbol napi_get_value_int32 referenced in function "public: int __cdecl Napi::Number::Int32Value(void)const " (?Int32Value@Number@Napi@@QEBAHXZ)
1>main.obj : error LNK2019: unresolved external symbol napi_get_value_uint32 referenced in function "public: unsigned int __cdecl Napi::Number::Uint32Value(void)const " (?Uint32Value@Number@Napi@@QEBAIXZ)
1>main.obj : error LNK2019: unresolved external symbol napi_get_value_bool referenced in function "public: bool __cdecl Napi::Boolean::Value(void)const " (?Value@Boolean@Napi@@QEBA_NXZ)
1>main.obj : error LNK2019: unresolved external symbol napi_get_value_string_utf8 referenced in function "public: class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > __cdecl Napi::String::Utf8Value(void)const " (?Utf8Value@String@Napi@@QEBA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@XZ)
1>main.obj : error LNK2019: unresolved external symbol napi_set_named_property referenced in function "public: bool __cdecl Napi::Object::Set<class Napi::Function>(char const *,class Napi::Function const &)" (??$Set@VFunction@Napi@@@Object@Napi@@QEAA_NPEBDAEBVFunction@1@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_get_named_property referenced in function "public: class Napi::Value __cdecl Napi::Object::Get(char const *)const " (?Get@Object@Napi@@QEBA?AVValue@2@PEBD@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_set_element referenced in function "public: bool __cdecl Napi::Object::Set<unsigned int>(unsigned int,unsigned int const &)" (??$Set@I@Object@Napi@@QEAA_NIAEBI@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_get_element referenced in function "public: class Napi::Value __cdecl Napi::Object::Get(unsigned int)const " (?Get@Object@Napi@@QEBA?AVValue@2@I@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_get_array_length referenced in function "public: unsigned int __cdecl Napi::Array::Length(void)const " (?Length@Array@Napi@@QEBAIXZ)
1>main.obj : error LNK2019: unresolved external symbol napi_call_function referenced in function "public: class Napi::Value __cdecl Napi::Function::Call(struct napi_value__ *,unsigned __int64,struct napi_value__ * const *)const " (?Call@Function@Napi@@QEBA?AVValue@2@PEAUnapi_value__@@_KPEBQEAU4@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_get_cb_info referenced in function "public: __cdecl Napi::CallbackInfo::CallbackInfo(struct napi_env__ *,struct napi_callback_info__ *)" (??0CallbackInfo@Napi@@QEAA@PEAUnapi_env__@@PEAUnapi_callback_info__@@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_get_new_target referenced in function "private: static struct napi_value__ * __cdecl Napi::ObjectWrap<class ScampServer>::ConstructorCallbackWrapper(struct napi_env__ *,struct napi_callback_info__ *)" (?ConstructorCallbackWrapper@?$ObjectWrap@VScampServer@@@Napi@@CAPEAUnapi_value__@@PEAUnapi_env__@@PEAUnapi_callback_info__@@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_define_class referenced in function "private: static class Napi::Function __cdecl Napi::ObjectWrap<class ScampServer>::DefineClass(class Napi::Env,char const *,unsigned __int64,struct napi_property_descriptor const *,void *)" (?DefineClass@?$ObjectWrap@VScampServer@@@Napi@@CA?AVFunction@2@VEnv@2@PEBD_KPEBUnapi_property_descriptor@@PEAX@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_wrap referenced in function "public: __cdecl Napi::ObjectWrap<class ScampServer>::ObjectWrap<class ScampServer>(class Napi::CallbackInfo const &)" (??0?$ObjectWrap@VScampServer@@@Napi@@QEAA@AEBVCallbackInfo@1@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_unwrap referenced in function "public: static class ScampServer * __cdecl Napi::ObjectWrap<class ScampServer>::Unwrap(class Napi::Object)" (?Unwrap@?$ObjectWrap@VScampServer@@@Napi@@SAPEAVScampServer@@VObject@2@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_remove_wrap referenced in function "public: virtual __cdecl Napi::ObjectWrap<class ScampServer>::~ObjectWrap<class ScampServer>(void)" (??1?$ObjectWrap@VScampServer@@@Napi@@UEAA@XZ)
1>main.obj : error LNK2019: unresolved external symbol napi_create_reference referenced in function "protected: __cdecl Napi::Reference<class Napi::Object>::Reference<class Napi::Object>(class Napi::Reference<class Napi::Object> const &)" (??0?$Reference@VObject@Napi@@@Napi@@IEAA@AEBV01@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_delete_reference referenced in function "public: __cdecl Napi::Reference<class Napi::Function>::~Reference<class Napi::Function>(void)" (??1?$Reference@VFunction@Napi@@@Napi@@QEAA@XZ)
1>main.obj : error LNK2019: unresolved external symbol napi_get_reference_value referenced in function "public: class Napi::Function __cdecl Napi::Reference<class Napi::Function>::Value(void)const " (?Value@?$Reference@VFunction@Napi@@@Napi@@QEBA?AVFunction@2@XZ)
1>main.obj : error LNK2019: unresolved external symbol napi_open_handle_scope referenced in function "public: __cdecl Napi::HandleScope::HandleScope(class Napi::Env)" (??0HandleScope@Napi@@QEAA@VEnv@1@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_close_handle_scope referenced in function "public: __cdecl Napi::HandleScope::~HandleScope(void)" (??1HandleScope@Napi@@QEAA@XZ)
1>main.obj : error LNK2019: unresolved external symbol napi_open_escapable_handle_scope referenced in function "public: __cdecl Napi::EscapableHandleScope::EscapableHandleScope(class Napi::Env)" (??0EscapableHandleScope@Napi@@QEAA@VEnv@1@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_close_escapable_handle_scope referenced in function "public: __cdecl Napi::EscapableHandleScope::~EscapableHandleScope(void)" (??1EscapableHandleScope@Napi@@QEAA@XZ)
1>main.obj : error LNK2019: unresolved external symbol napi_escape_handle referenced in function "public: class Napi::Value __cdecl Napi::EscapableHandleScope::Escape(struct napi_value__ *)" (?Escape@EscapableHandleScope@Napi@@QEAA?AVValue@2@PEAUnapi_value__@@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_throw referenced in function "public: void __cdecl Napi::Error::ThrowAsJavaScriptException(void)const " (?ThrowAsJavaScriptException@Error@Napi@@QEBAXXZ)
1>main.obj : error LNK2019: unresolved external symbol napi_throw_type_error referenced in function "private: static struct napi_value__ * __cdecl Napi::ObjectWrap<class ScampServer>::ConstructorCallbackWrapper(struct napi_env__ *,struct napi_callback_info__ *)" (?ConstructorCallbackWrapper@?$ObjectWrap@VScampServer@@@Napi@@CAPEAUnapi_value__@@PEAUnapi_env__@@PEAUnapi_callback_info__@@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_is_exception_pending referenced in function "public: bool __cdecl Napi::Env::IsExceptionPending(void)const " (?IsExceptionPending@Env@Napi@@QEBA_NXZ)
1>main.obj : error LNK2019: unresolved external symbol napi_get_and_clear_last_exception referenced in function "public: static class Napi::Error __cdecl Napi::Error::New(struct napi_env__ *)" (?New@Error@Napi@@SA?AV12@PEAUnapi_env__@@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_run_script referenced in function "public: class Napi::Value __cdecl Napi::Env::RunScript(class Napi::String)" (?RunScript@Env@Napi@@QEAA?AVValue@2@VString@2@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_add_finalizer referenced in function "enum napi_status __cdecl Napi::details::AttachData<struct Napi::AccessorCallbackData<class ScampServer,class Napi::Value (__cdecl*)(class Napi::CallbackInfo const &),void (__cdecl*)(class Napi::CallbackInfo const &,class Napi::Value const &)> >(struct napi_env__ *,struct napi_value__ *,struct Napi::AccessorCallbackData<class ScampServer,class Napi::Value (__cdecl*)(class Napi::CallbackInfo const &),void (__cdecl*)(class Napi::CallbackInfo const &,class Napi::Value const &)> *,void (__cdecl*)(struct napi_env__ *,void *,void *),void *)" (??$AttachData@U?$AccessorCallbackData@VScampServer@@P6A?AVValue@Napi@@AEBVCallbackInfo@3@@ZP6AX0AEBV23@@Z@Napi@@@details@Napi@@YA?AW4napi_status@@PEAUnapi_env__@@PEAUnapi_value__@@PEAU?$AccessorCallbackData@VScampServer@@P6A?AVValue@Napi@@AEBVCallbackInfo@3@@ZP6AX0AEBV23@@Z@1@P6AX0PEAX3@Z3@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_module_register referenced in function "class Napi::Object __cdecl Init(class Napi::Env,class Napi::Object)" (?Init@@YA?AVObject@Napi@@VEnv@2@V12@@Z)
1>main.obj : error LNK2019: unresolved external symbol napi_fatal_error referenced in function "public: static void __cdecl Napi::Error::Fatal(char const *,char const *)" (?Fatal@Error@Napi@@SAXPEBD0@Z)

Check that game files match expected ones in tests

Tests should fail with some explainable message if game files don't match. This will also help troubleshooting errors in case if someone tries running tests with modded files.

And probably add a message explaining why tests were skipped (if SKYRIM_DIR wasn't specified)

We can use CRC32 hashes, they are already used in Skyrim-related tools and SkyMP in particular.

Check these files in SKYRIM_DIR: Skyrim.esm, Update.esm, Dawnguard.esm, HearthFires.esm and Dragonborn.esm

Update vcpkg once mongo-related warnings are fixed

Project files generation always emits warnings. Should fix them:

Update vcpkg submodule to latest once microsoft/vcpkg#18751 is merged

CMake Warning at build/vcpkg_installed/x64-windows-sp/share/libmongoc-1.0/libmongoc-1.0-config.cmake:15 (message):
  This CMake target is deprecated.  Use 'mongo::mongoc_static' instead.
  Consult the example projects for further details.
Call Stack (most recent call first):
  vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package)
  skymp5-server/cpp/CMakeLists.txt:173 (find_package)


CMake Warning at build/vcpkg_installed/x64-windows-sp/share/bson-1.0/bson-1.0-config.cmake:15 (message):
  This CMake target is deprecated.  Use 'mongo::bson_static' instead.
  Consult the example projects for further details.
Call Stack (most recent call first):
  vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package)
  build/vcpkg_installed/x64-windows-sp/share/libmongoc-1.0/libmongoc-1.0-config.cmake:22 (find_package)
  vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package)
  skymp5-server/cpp/CMakeLists.txt:173 (find_package)


CMake Warning at build/vcpkg_installed/x64-windows-sp/share/libmongoc-1.0/libmongoc-1.0-config.cmake:15 (message):
  This CMake target is deprecated.  Use 'mongo::mongoc_static' instead.
  Consult the example projects for further details.
Call Stack (most recent call first):
  vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package)
  skymp5-server/cpp/CMakeLists.txt:173 (find_package)


CMake Warning at build/vcpkg_installed/x64-windows-sp/share/bson-1.0/bson-1.0-config.cmake:15 (message):
  This CMake target is deprecated.  Use 'mongo::bson_static' instead.
  Consult the example projects for further details.
Call Stack (most recent call first):
  vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package)
  build/vcpkg_installed/x64-windows-sp/share/libmongoc-1.0/libmongoc-1.0-config.cmake:22 (find_package)
  vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package)
  skymp5-server/cpp/CMakeLists.txt:173 (find_package)


CMake Warning at build/vcpkg_installed/x64-windows-sp/share/libmongoc-1.0/libmongoc-1.0-config.cmake:15 (message):
  This CMake target is deprecated.  Use 'mongo::mongoc_static' instead.
  Consult the example projects for further details.
Call Stack (most recent call first):
  vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package)
  skymp5-server/cpp/CMakeLists.txt:173 (find_package)


CMake Warning at build/vcpkg_installed/x64-windows-sp/share/bson-1.0/bson-1.0-config.cmake:15 (message):
  This CMake target is deprecated.  Use 'mongo::bson_static' instead.
  Consult the example projects for further details.
Call Stack (most recent call first):
  vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package)
  build/vcpkg_installed/x64-windows-sp/share/libmongoc-1.0/libmongoc-1.0-config.cmake:22 (find_package)
  vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package)
  skymp5-server/cpp/CMakeLists.txt:173 (find_package)


CMake Warning at build/vcpkg_installed/x64-windows-sp/share/libmongoc-1.0/libmongoc-1.0-config.cmake:15 (message):
  This CMake target is deprecated.  Use 'mongo::mongoc_static' instead.
  Consult the example projects for further details.
Call Stack (most recent call first):
  vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package)
  skymp5-server/cpp/CMakeLists.txt:173 (find_package)


CMake Warning at build/vcpkg_installed/x64-windows-sp/share/bson-1.0/bson-1.0-config.cmake:15 (message):
  This CMake target is deprecated.  Use 'mongo::bson_static' instead.
  Consult the example projects for further details.
Call Stack (most recent call first):
  vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package)
  build/vcpkg_installed/x64-windows-sp/share/libmongoc-1.0/libmongoc-1.0-config.cmake:22 (find_package)
  vcpkg/scripts/buildsystems/vcpkg.cmake:857 (_find_package)
  skymp5-server/cpp/CMakeLists.txt:173 (find_package)

Server crash when activate Furniture in Riverwood

It seems to me that after some of the updates, it began to paint after activating the chopping deck(0x6c3c9) in riverwood.
Very often the RegisterForAnimationEvent function is called and the server crashes.

[2021-08-30 08:42:07.097] [console] [warning] ResourceFurnitureScript: Method not found - 'RegisterForAnimationEvent'
[onActivate]  Error: Out of stack space
<unable to get stack>

if you delete this script, the problem will stop the server crash

Linker warnings related to CEF: missing 'libcef_dll_wrapper.pdb'

See build https://github.com/skyrim-multiplayer/skymp/pull/121/checks?check_run_id=3356143869

  cmake --build D:\a\skymp\skymp/build --config Release
  shell: C:\Program Files\PowerShell\7\pwsh.EXE -command ". '{0}'"
  env:
    BUILD_TYPE: Release
    VCPKG_BINARY_SOURCES: clear;nuget,GitHub,readwrite
    VCPKG_FEATURE_FLAGS: manifests
...
libcef_dll_wrapper.lib(command_line_ctocpp.obj) : warning LNK4099: PDB 'libcef_dll_wrapper.pdb' was not found with 'libcef_dll_wrapper.lib(command_line_ctocpp.obj)' or at 'D:\a\skymp\skymp\build\skyrim-platform\_platform_se\bin\Release\libcef_dll_wrapper.pdb'; linking object as if no debug info [D:\a\skymp\skymp\build\skyrim-platform\_platform_se\SkyrimPlatformCEF.vcxproj]

Improve readability of the codebase

When working with code, it is very difficult to understand what this or that function or class method is responsible for, what arguments are passed in them and what they are responsible for. I would like to add at least descriptions for the function and methods with a description of the input and output parameters.

Send msgpack instead of plain-text JSON over network

Currently, JSON data in text format is sent over network. We could replace it with binary format (https://msgpack.org/) everywhere (nlohmann::json has builtin support for msgpack).

(Preferably, we should replace as much as possible with schemaful binary format, but that isn't possible everywhere)

  • Replace simdjson with nlohmann + msgpack
  • Remove Read/ReadEx utils from mp_common, simdjson from vcpkg.json and CMake

Fix that containers spawned by PlaceAtMe are not lootable

When we create a new container, such as a barrel, with the `placeAtMe ' function, firstly, when we open it for the first time, it is empty (when you open it for the second time, there are things), secondly, if you try to take these things, you will get an error and things are not taken

	Form barrel = Game.GetFormFromFile(0x845, "Skyrim.esm")
	ObjectReference newBarrel = ac.PlaceAtMe(barrel)
	Form sword = Game.GetForm(0x12eb7)
	newBarrel.AddItem(sword)

I get an error like this, as if the object does not exist

Error in server.tick: Error: Form with id ff000d32 doesn't exist
Error: Form with id ff000d32 doesn't exist
    at ScampServer.tick (<anonymous>)

Unit tests error

image
When running unit tests, it throws an exception.
The "LeveledListUtilsTest.h" test is supposedly to blame.

Build system failure with CMake 3.21

When building the project, an error occurs with the installation of vcpkg.

cmake version 3.21.0-rc3
nodeJs version 14.17.3
npm version 6.14.13

image

'It seems this machine didn't compile .psc files' in unit tests

Unit tests output two messages like this one:

> .\skymp5-server\cpp\Debug\unit.exe
<...>
It seems this machine didn't compile .psc files. Skipping the test
<...>

Triggered because directory behind preprocessor macro value BUILT_PEX_DIR="E:/skymp/skymp/build/skymp5-server/cpp/pex/papyrus_test_files" does not exist.

This should either be fixed by default or documented how to enable compiling these files.

Use `add_papyrus_library_ck` for `skymp5-scripts` instead of `add_papyrus_library`

add_papyrus_library uses our custom compiler for building Papyrus scripts. However, it makes our build system noticeably more complex. This compiler also does not support all Papyrus opcodes, and we run into issues when working with it on Linux.

add_papyrus_library_ck uses Bethesda's compiler when available. Produced .pex files are committed.

Currently, Papyrus is used in these places of the codebase:

  1. skymp5-scripts (custom compiler)
  2. papyrus_test_files (CK or do nothing)
  3. skyrim-platform (CK or use prebuilt)

For now, we should do the following:

  • Follow "CK or use prebuilt" for all Papyrus sources
  • Prevent build-system from rebuilding .pex each time even if .psc was not changed. This would speed up build generally and prevent generating unnecessary Git changes.

Cmake warnings

I also have received something similar with these #80 (comment) but on Linux

CMake Warning at cmake/add_papyrus_library_ck.cmake:37 (message):
Missing Papyrus Compiler at OFF/Papyrus compiler/PapyrusCompiler.exe.
Target skymp5-scripts wouldn't be built
Call Stack (most recent call first):
skymp5-scripts/CMakeLists.txt:5 (add_papyrus_library_ck)

CMake Warning at skymp5-server/cpp/CMakeLists.txt:114 (message):
SKYRIM_DIR is not specified, Papyrus sources will not be built

CMake Warning at build/vcpkg_installed/x64-linux/share/libmongoc-1.0/libmongoc-1.0-config.cmake:15 (message):
This CMake target is deprecated. Use 'mongo::mongoc_static' instead.
Consult the example projects for further details.
Call Stack (most recent call first):
vcpkg/scripts/buildsystems/vcpkg.cmake:784 (_find_package)
skymp5-server/cpp/CMakeLists.txt:188 (find_package)

CMake Warning at build/vcpkg_installed/x64-linux/share/libbson-1.0/libbson-1.0-config.cmake:15 (message):
This CMake target is deprecated. Use 'mongo::bson_static' instead.
Consult the example projects for further details.
Call Stack (most recent call first):
vcpkg/scripts/buildsystems/vcpkg.cmake:784 (_find_package)
build/vcpkg_installed/x64-linux/share/libmongoc-1.0/libmongoc-1.0-config.cmake:22 (find_package)
vcpkg/scripts/buildsystems/vcpkg.cmake:784 (_find_package)
skymp5-server/cpp/CMakeLists.txt:188 (find_package)

CMake Warning at build/vcpkg_installed/x64-linux/share/libmongoc-1.0/libmongoc-1.0-config.cmake:15 (message):
This CMake target is deprecated. Use 'mongo::mongoc_static' instead.
Consult the example projects for further details.
Call Stack (most recent call first):
vcpkg/scripts/buildsystems/vcpkg.cmake:784 (_find_package)
skymp5-server/cpp/CMakeLists.txt:188 (find_package)

CMake Warning at build/vcpkg_installed/x64-linux/share/libbson-1.0/libbson-1.0-config.cmake:15 (message):
This CMake target is deprecated. Use 'mongo::bson_static' instead.
Consult the example projects for further details.
Call Stack (most recent call first):
vcpkg/scripts/buildsystems/vcpkg.cmake:784 (_find_package)
build/vcpkg_installed/x64-linux/share/libmongoc-1.0/libmongoc-1.0-config.cmake:22 (find_package)
vcpkg/scripts/buildsystems/vcpkg.cmake:784 (_find_package)
skymp5-server/cpp/CMakeLists.txt:188 (find_package)

CMake Warning at build/vcpkg_installed/x64-linux/share/libmongoc-1.0/libmongoc-1.0-config.cmake:15 (message):
This CMake target is deprecated. Use 'mongo::mongoc_static' instead.
Consult the example projects for further details.
Call Stack (most recent call first):
vcpkg/scripts/buildsystems/vcpkg.cmake:784 (_find_package)
skymp5-server/cpp/CMakeLists.txt:188 (find_package)

CMake Warning at build/vcpkg_installed/x64-linux/share/libbson-1.0/libbson-1.0-config.cmake:15 (message):
This CMake target is deprecated. Use 'mongo::bson_static' instead.
Consult the example projects for further details.
Call Stack (most recent call first):
vcpkg/scripts/buildsystems/vcpkg.cmake:784 (_find_package)
build/vcpkg_installed/x64-linux/share/libmongoc-1.0/libmongoc-1.0-config.cmake:22 (find_package)
vcpkg/scripts/buildsystems/vcpkg.cmake:784 (_find_package)
skymp5-server/cpp/CMakeLists.txt:188 (find_package)

CMake Warning at build/vcpkg_installed/x64-linux/share/libmongoc-1.0/libmongoc-1.0-config.cmake:15 (message):
This CMake target is deprecated. Use 'mongo::mongoc_static' instead.
Consult the example projects for further details.
Call Stack (most recent call first):
vcpkg/scripts/buildsystems/vcpkg.cmake:784 (_find_package)
skymp5-server/cpp/CMakeLists.txt:188 (find_package)

CMake Warning at build/vcpkg_installed/x64-linux/share/libbson-1.0/libbson-1.0-config.cmake:15 (message):
This CMake target is deprecated. Use 'mongo::bson_static' instead.
Consult the example projects for further details.
Call Stack (most recent call first):
vcpkg/scripts/buildsystems/vcpkg.cmake:784 (_find_package)
build/vcpkg_installed/x64-linux/share/libmongoc-1.0/libmongoc-1.0-config.cmake:22 (find_package)
vcpkg/scripts/buildsystems/vcpkg.cmake:784 (_find_package)
skymp5-server/cpp/CMakeLists.txt:188 (find_package)

info TOOL Using Ninja generator, because ninja is available.
info CMD CONFIGURE

Tests: Unknown bind__() error 98

$ ./skymp5-server/cpp/unit
[ESPM] Skyrim.esm read in 0.103972s, parsed in 3.09136s, size is 238Mb
[ESPM] Update.esm read in 0.009465s, parsed in 0.048818s, size is 17Mb
[ESPM] Dawnguard.esm read in 0.010295s, parsed in 0.294307s, size is 24Mb
[ESPM] HearthFires.esm read in 0.001476s, parsed in 0.046697s, size is 3Mb
[ESPM] Dragonborn.esm read in 0.030766s, parsed in 0.573462s, size is 61Mb
DoMessage for 1 users took 59 microseconds
Unknown bind__() error 98.

...

System info:

$ cmake --version
cmake version 3.21.1

CMake suite maintained and supported by Kitware (kitware.com/cmake).

$ clang++-12 --version
Ubuntu clang version 12.0.0-3ubuntu1~20.04.3
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin

$ node --version 
v14.17.4

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal

espm shouldn't use c-style time api

https://github.com/skyrim-multiplayer/skymp/blob/2317755730f8bd46f43d46c241e5873f718005b9/skymp5-server/cpp/lib_espm/Loader.cpp

This class uses clock and clock_t from C API.

We should prefer more modern APIs since they are more portable and works the same way across operation systems, etc.
So, we need to switch to C++ time API from the <chrono> header.

In this file we need to replace all clock_t/clock mentions to modern std::chrono::* things. Everything should continue working.

Improve warnings about unavailable Creation Kit

Currently, if SKYRIM_DIR is unspecified, following warnings are issued:

CMake Warning at cmake/add_papyrus_library_ck.cmake:37 (message):
  Missing Papyrus Compiler at OFF/Papyrus compiler/PapyrusCompiler.exe.
Target skymp5-scripts wouldn't be built
Call Stack (most recent call first):
  skymp5-scripts/CMakeLists.txt:5 (add_papyrus_library_ck)

CMake Warning at skymp5-server/cpp/CMakeLists.txt:114 (message):
  SKYRIM_DIR is not specified, Papyrus sources will not be built

These warnings actually don't help in practice. They confuse when one tries to build the project without Papyrus script modifications. And if someone modifies sources, it doesn't actually help to diagnose issues. So, in fact, task of keeping track of script modification now lies on pull request reviewer.

Ideally, we should fail when some modifications are made, but Papyrus compiler isn't available.

Therefore, it's suggested to:

  1. Keep a list of current scripts and their hashes
  2. Issue no warnings if all scripts are the same
  3. Fail if scripts were modified, but compiler is not available (maybe also try to return to using https://github.com/skyrim-multiplayer/papyrus-compiler in this case)
  4. Otherwise, use compiler to build modified scripts
  5. Reviewer is responsible to keep hashes list up to date. Optionally, it can be included in some test to fail CI if something is wrong

Support Debug.MessageBox

The latest public version of skymp, possibly a problem in Gotostate or state (it works in single player).

Fix TypeScript projects failing to build due to incorrect package.json paths

Аn error occurs when trying to build a project.
I use vscode to build project.
After generate project (ctrl + s CMakeLists.txt) i press build button and got this error

[build]   Allocator.cpp
[build]   npm ERR! code ENOENT
[build]   npm ERR! syscall open
[build]   npm ERR! path C:\Games\skymp\build\skymp5-front/package.json
[build]   npm ERR! errno -4058
[build]   npm ERR! enoent ENOENT: no such file or directory, open 'C:\Games\skymp\build\skymp5-front\package.json'
[build]   npm ERR! enoent This is related to npm not being able to find a file.
[build]   npm ERR! enoent 
[build]   
[build]   npm ERR! A complete log of this run can be found in:
[build]   npm ERR!     C:\Users\Ezhik\AppData\Local\npm-cache\_logs\2021-07-10T18_43_41_173Z-debug.log
[build]   npm ERR! code ENOENT
[build]   npm ERR! syscall open
[build]   npm ERR! path C:\Games\skymp\build\skymp5-server\ts/package.json
[build]   npm ERR! errno -4058
[build]   npm ERR! enoent ENOENT: no such file or directory, open 'C:\Games\skymp\build\skymp5-server\ts\package.json'
[build]   npm ERR! enoent This is related to npm not being able to find a file.
[build]   npm ERR! enoent 
[build] C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\Microsoft.CppCommon.targets(241,5): error MSB8066: Custom build for 'C:\Games\skymp\build\CMakeFiles\dfcf637b721517209785aca2622fc076\skymp5-front.rule' exited with code -4058. [C:\Games\skymp\build\skymp5-front\skymp5-front.vcxproj]
[build]   
[build]   npm ERR! A complete log of this run can be found in:
[build]   npm ERR!     C:\Users\Ezhik\AppData\Local\npm-cache\_logs\2021-07-10T18_43_41_264Z-debug.log

but build don`t stop, but in the end i got one more error

[build]   npm ERR! code ENOENT
[build]   npm ERR! syscall open
[build]   npm ERR! path C:\Games\skymp\build\skyrim-platform\_platform_se/package.json
[build]   npm ERR! errno -4058
[build]   npm ERR! enoent ENOENT: no such file or directory, open 'C:\Games\skymp\build\skyrim-platform\_platform_se\package.json'
[build]   npm ERR! enoent This is related to npm not being able to find a file.
[build]   npm ERR! enoent 
[build]   
[build]   npm ERR! A complete log of this run can be found in:
[build]   npm ERR!     C:\Users\Ezhik\AppData\Local\npm-cache\_logs\2021-07-10T18_58_46_702Z-debug.log

After these actions, only the scripts folder is located in the build/dist folder

Infrastructure Roadmap

CI/CD

  • Perform Windows and Linux builds.
  • Test if CMake build is able to produce dist directory with the expected content.
  • TypeScript code formatting.
  • C++ code formatting.
  • CMake code formatting.

Build system

  • Measure the time it takes for each add_subdirectory in top-level CMakeLists.txt to be done to understand which projects are eating up CMake generation times.
  • Remove skyrimPlatform.d.ts from skymp5-functions-lib. The skyrimPlatform.ts built by TSConverter should be used.
  • Npm install should not dump warnings into the output stream.
  • Npm install commands should not be called if everything is already installed, because it's slow
  • Custom targets (and these are all targets, except for C++ targets) are being built every time, and not only when the files they depend on have changed. This slows down the build and should be fixed.
  • Remove dev_service (JS part of the build system). Reimplement its functionality in CMake.
  • Remove legacy vs_startup_project.
  • Add and document ability to develop and use certain subprojects instead of the whole repository.
  • Ensure that CMAKE_BINARY_DIR is ${CMAKE_SOURCE_DIR}/build (#82).
  • Ensure that all pdb files are placed into build/dist.
  • Visual Studio should adequately display source tree for C++ and non-C++ targets.

Build system: Dependency management
It would be nice to unify the process of dependencies installation and fetch all of them from vcpkg:

  • CommonLibSSE
  • TiltedCore
  • TiltedHooks
  • TiltedReverse
  • TiltedUI
  • TiltedOnline (only ui_process is required currently)
  • SKSE64
  • xbyak
  • directxtk (it seems we already use vcpkg version, just remove outdated files from the repo)
  • frida
  • ctpl
  • CEF
  • cr
  • MakeID
  • npm dependencies (super-experimental)

Platform/compiler support

  • Add Dockerfile for building on Linux.
  • #95

Feature deprecation/removal

  • Rewrite TypeScript part of the server in C++, drop NodeJS.
  • Remove existing CLI.
  • Remove server-settings.json in favor of CLI.
  • Use SLikeNet for browser messages instead of WebSocket.
  • We should remove hacky _libkey.js.
  • NPCs and Papyrus scripts should be whitelisted on the server.

Remove unnecessary downloads
Downloads should be controlled by external tooling. Client/CEF should not download anything from the server.

  • Bundle UI with the client, not the server.
  • Remove skymp5-client.js and its update system from the server.

Privacy

  • Should not set enable-media-stream in Chromium by default.

WIP. Feel free to leave comments.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.