Giter Club home page Giter Club logo

ssb-keys-neon's Introduction

ssb-keys-neon

A drop-in replacement of ssb-keys, implemented in Rust and delivered as a native module in Node.js

npm install ssb-keys-neon

Motivation

It would make a lot of sense for SSB to be implemented in Rust, a language for safety and performance. Sunrise Choir has written a lot of SSB modules in Rust, but these are not yet running in production, simply because it requires a lot of work to migrate from Node.js (and/or Electron) to Rust.

Neon allows you to create native modules for Node.js written in Rust. This is great, because it allows us to use Sunrise Choir's modules directly inside Node.js!

ssb-keys-neon does exactly that, it runs ssb-crypto, ssb-keyfile, ssb-multiformats (Rust crates) under the hood, but provides an API that perfectly mirrors that of ssb-keys. There is no code you need to migrate, just replace ssb-keys with ssb-keys-neon and it's done.

We even run the same test suite for ssb-keys on ssb-keys-neon.

Usage

There are two ways you can use this npm package.

Option 1: (easiest) automatically replace

In your package.json, assuming you already have ssb-keys, you can replace its implementation by pointing to the GitHub repo for ssb-keys-neon:

   // ...
   "dependencies": {
     "ssb-ebt": "^5.6.7",
     "ssb-friends": "^4.1.4",
     "ssb-invite": "^2.1.3",
-    "ssb-keys": "7.2.0",
+    "ssb-keys": "staltz/ssb-keys-neon#replace-7.2.0",
     "ssb-lan": "^0.2.0",
     "ssb-logging": "^1.0.0",
     "ssb-markdown": "^6.0.4",
   }
   // ...

This is the easiest method because you only need to change package.json, your code can still require('ssb-keys') and under the hood it will load ssb-keys-neon.

Note that you cannot specify version ranges. If you previously had "ssb-keys": "7.x.x", you will have to specify an exact version when you write "staltz/ssb-keys-neon#replace-7.2.0", you cannot write "staltz/ssb-keys-neon#replace-7.x.x".

Option 2: manually replace

This method gives you more control over the usage of ssb-keys-neon, as well as allows you to specify version ranges. Just remove ssb-keys from your package.json, and add ssb-keys-neon:

   // ...
   "dependencies": {
     "ssb-ebt": "^5.6.7",
     "ssb-friends": "^4.1.4",
     "ssb-invite": "^2.1.3",
-    "ssb-keys": "8.0.0",
+    "ssb-keys-neon": ">=8.0.0-1",
     "ssb-lan": "^0.2.0",
     "ssb-logging": "^1.0.0",
     "ssb-markdown": "^6.0.4",
   }
   // ...

Then, you also have to replace usages of ssb-keys manually in JavaScript source files:

-var ssbKeys = require('ssb-keys')
+var ssbKeys = require('ssb-keys-neon')

 // ...

Versioning and support

[email protected] is compatible with [email protected]. Versions older than 8.0.0 still use the old name ssb-neon-keys so be sure to type it correctly.

Versions of ssb-keys that are mirrored by ssb-keys-neon currently include (and which platforms are guaranteed to be supported):

8.0.0 (click here to see which platforms are supported)

As of [email protected]

  • macOS (darwin-x64)
    • Node 10.x
    • Node 12.x
    • Node 14.x
    • Electron 7.x
    • Electron 8.x
    • Electron 9.x
    • Electron 10.x
  • Linux (linux-x64)
    • Node 10.x
    • Node 12.x
    • Node 14.x
    • Electron 7.x
    • Electron 8.x
    • Electron 9.x
    • Electron 10.x
  • Windows (win32-x64)
    • Node 10.x
    • Node 12.x
    • Node 14.x
    • Electron 7.x
    • Electron 8.x
    • Electron 9.x
    • Electron 10.x
7.2.2 (click here to see which platforms are supported)

As of [email protected]

  • macOS (darwin-x64)
    • Node 10.x
    • Node 12.x
    • Node 14.x
    • Electron 7.x
    • Electron 8.x
    • Electron 9.x
    • Electron 10.x
  • Linux (linux-x64)
    • Node 10.x
    • Node 12.x
    • Node 14.x
    • Electron 7.x
    • Electron 8.x
    • Electron 9.x
    • Electron 10.x
  • Windows (win32-x64)
    • Node 10.x
    • Node 12.x
    • Node 14.x
    • Electron 7.x
    • Electron 8.x
    • Electron 9.x
    • Electron 10.x
7.2.1 (click here to see which platforms are supported)

As of [email protected]

  • macOS (darwin-x64)
    • Node 10.x
    • Node 12.x
    • Node 14.x
    • Electron 7.x
    • Electron 8.x
    • Electron 9.x
    • Electron 10.x
  • Linux (linux-x64)
    • Node 10.x
    • Node 12.x
    • Node 14.x
    • Electron 7.x
    • Electron 8.x
    • Electron 9.x
    • Electron 10.x
  • Windows (win32-x64)
    • Node 10.x
    • Node 12.x
    • Node 14.x
    • Electron 7.x
    • Electron 8.x
    • Electron 9.x
    • Electron 10.x
7.2.0 (click here to see which platforms are supported)

As of [email protected]

  • macOS (darwin-x64)
    • Node 10.x
    • Node 12.x
    • Node 14.x
    • Electron 7.x
    • Electron 8.x
    • Electron 9.x
    • Electron 10.x
  • Linux (linux-x64)
    • Node 10.x
    • Node 12.x
    • Node 14.x
    • Electron 7.x
    • Electron 8.x
    • Electron 9.x
    • Electron 10.x
  • Windows (win32-x64)
    • Node 10.x
    • Node 12.x
    • Node 14.x
    • Electron 7.x
    • Electron 8.x
    • Electron 9.x
    • Electron 10.x

License

LGPL-3.0

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.