Guidelines for nem2-sdk development collaboration

:warning: NOTE: This post is a work in progress and has some missing information. We will update as the information becomes available.

Hi NEMbers!

The NEM2 SDKs were released for Java/Kotlin/Scala and TypeScript/JavaScript, but there’s a long list of languages that still need to be supported.

The NEM Dev community showed great support and shared their interest to collaborate in the nem2-sdk development for other languages.

  • Provide an abstraction layer of NEM2
  • Reduce the complexity of developing NEM2 Libraries and Applications
  • Enable cross language design
  • Be Lightweight

The nem2-sdk development needs to be aligned with these goals. We, the NEM Foundation, will review the source code to ensure that these goals are followed, the code satisfies the required quality requirements, while security is not compromised. At the same time, we will provide development support to those who want to collaborate and ask for guidance.

Multiple people will be involved in the process so please take your time to read the past messages and GitHub guidelines. Doing this will help you to [be up-to-date with] or [understand] the current state of the SDK development. Also, we would like to ask collaborators to update their progress status regularly, in order to help others to get on board faster. Remember, this is a collaborative project *

Also, consider that the development is not just about code, it’s about documentation and tutorials too. We welcome all help in this area! @dgarcia360 is the guy to talk to about this.

How to start:

Clone nem2-sdk for typescript/javascript

  • Clone nem2-sdk for typescript/javascript.
  • We add the features to typescript/javascript first, and from there (slowly) migrate them to other languages.
  • Start becoming familiar with the folder structure, the naming, and the different objects types. It’s crucial that you are already familiar with ReactiveX since we use it everywhere.

Check nem2-library

The typescript/javascript SDK has the peculiarity of being divided into two packages, nem2-sdk and nem2-library as a dependency.

The nem2-library contains the crypto stuff, the serialization, and the API wrapper. It’s simple and has few objects. The other languages will have this stuff inside the SDK instead of being divided into two packages. At least for now.

You can post a message here in the forums with the programming language you are interested in developing for.

Make sure to post your GitHub username and the language you want to collaborate on.

If you want to share the experience you have with NEM/Catapult, crypto, OOP, Functional Reactive Programming, TDD, Unit-Tests and so on… you can do it publicly or privately by sending a message to me. It’s not required, but it helps us to organize and prepare for the help you may need later on.

After figuring out where you could help us most, we then get you onboard in the SDK language you want to collaborate with. In case there’s not a repository for your language, we’ll create one.

Creating the milestone 1.0

Because the new SDK has to copy the typescript/javascript SDK, the milestone 1.0 tasks are that, copy.

Assume you will have to redo some work.

The nem2-sdk is under active development, and it is far from being finished, if you start doing an sdk, you will have to change/adapt it in the future.


The bounties & rules for collaborating are not decided yet. It will be published in the following weeks.

Collaboration under the nemtech repository

We want to endorse people that push NEM. We don’t see this as just the responsibility of the NEM Foundation.
No matter if you are an individual collaborator, a company or a partner; we will find a way to endorse those who deserve it. As soon as the collaboration starts, it has to be defined and agreed in the early stage to avoid misunderstandings later.

##Other points

Feel free to share your concerns or anything we may have missed in the guidelines.

Let’s push Catapult to the real adoption! :grin:

nem2-sdk-c#: it has been started by @kodtycoon
nem2-sdk-php: it has been started by @gevs
nem2-sdk-go: it has been started by @alvin-reyes

The repositories and the source code will be published soon.
:warning: They are far from finished and we are looking for more contributors for those!


Community SDK + NEM Dev Community members that shared an interest in developing

I would like to take part in the development of such an excellent project! preferably in the language Golang!

I would suggest you to start creating a repository in GitHub and sharing the link here to help others collaborate if they want to :smile: .

Create the Milestone 1.0 at GitHub and you could start with three main tasks.

  1. Generate the API request/responses using the OpenAPI specification, you can find it here. Become familiar with the Swagger project if you haven’t used it before, it generates the source code for you.
  2. Create the crytpo functions, you can find how we did it in nem2-library here and its tests.
  3. Implement the serialization, we had used the flatbuffers tool but it might change in the future, for now implement it as we have it today. You can find the Schemas for serialization here. When you start doing the point 3, you might need help. Just ask and we will give more details.

Those three tasks implement the low level interaction between the API and the SDK abstraction that you will later. They should be enough to start.

We do Test-Driven Development to ensure it works as desired, you might want to do the test last if you’re not familiar with TDD but we required tests to accept the SDK with the required quality. Check how we did the tests to get familiar with the edge cases and test the SDK properly.

But I suggest you contact @alvin-reyes since he started to develop the nem2-sdk for go too.

OK thanks!

i should also mention that a company doing a community fund proposal also mentions doing the GoLang SDK… MarginX Community Fund Proposal

possibly you guys could work together? :slight_smile:

Thanks @kodtycoon, yes I have spoke with @deleted_user_1 about this already. It will depend on how quickly we can get started as he/she also has some plans for getting the golang sdk done.

I would suggest starting a new repository for Go SDK under some of your GitHub profile, later we post the repository link on the list (second comment of this post).

Best regards! I already create a repository in and I’m already finishing documenting the nem-sdk to upload it and have it checked to see what you think. I did it the closest thing to to make it more familiar to other programmers, even using the same documentation of functions but adapted to Golang, I also made the same examples.