# knowledgr/knowledgr-js architecture

> Architecture diagram of the GitHub repository knowledgr/knowledgr-js, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-06-22). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/knowledgr/knowledgr-js
- Repository: https://github.com/knowledgr/knowledgr-js

## Overview

1. **What this repo is**
   - `steem-js` is a client-side and server-side JavaScript SDK for the Steem blockchain.
   - It is not a backend service; it is a library that wraps Steem RPC nodes and exposes higher-level API, auth, and transaction-broadcast functions.

2. **Top-level public surface**
   - The main entrypoints are `src/index.js` for Node/CommonJS and `src/browser.js` for browser builds.
   - These aggregate the main namespaces exposed to consumers: `api`, `auth`, `broadcast`, `formatter`, and `config`.

3. **RPC/API subsystem**
   - `src/api/` is the read/query layer for blockchain data.
   - `methods.js` defines the RPC methods, while `transports/` contains the concrete network adapters.
   - `transports/http.js` and `transports/ws.js` are the two transport boundaries; both sit behind `transports/base.js` and are selected through `transports/index.js`.

4. **Network/data flow to Steem nodes**
   - Application code calls `steem.api.*` methods.
   - Those methods are serialized into RPC requests and sent through HTTP or WebSocket transport.
   - The library talks to external Steem RPC endpoints such as `api.steemit.com`, `node.steem.ws`, and `this.piston.rocks`.

5. **Auth and cryptography subsystem**
   - `src/auth/` is the signing and key-management layer.
   - `src/auth/ecc/` is a self-contained crypto package for key generation, signing, hashing, AES, signatures, and address handling.
   - `src/auth/memo.js` handles memo encryption/decryption, which is a distinct auth concern from transaction signing.

6. **Serialization subsystem**
   - `src/auth/serializer/` is another major boundary: it converts Steem operations and types into the chain’s canonical serialized form.
   - It includes type definitions, operation templates, object-id parsing, precision/number helpers, and validation.
   - This layer is used by broadcasting and by any code that needs chain-compatible binary/structured payloads.

7. **Broadcast subsystem**
   - `src/broadcast/` builds and submits signed blockchain operations.
   - `operations.js` and `param_types.js` define the supported transaction operations and how their arguments are shaped.
   - `helpers.js` and the top-level broadcast API coordinate signing plus submission through the API layer.

8. **End-to-end transaction flow**
   - For writes, the flow is: consumer code → `broadcast` → `auth`/`serializer` → signed transaction → `api` transport → Steem RPC node.
   - For reads, the flow is simpler: consumer code → `api` → transport → Steem RPC node → response back to the caller.

9. **Formatting and utility layer**
   - `src/formatter.js` and `src/utils.js` provide presentation and convenience helpers, such as reputation formatting and general-purpose transforms.
   - These are not network-facing; they sit above the raw API/auth layers and normalize blockchain data for app use.

10. **Environment/build boundaries**
   - The repo supports both Node and browser usage.
   - `webpack.config.js` and `webpack/` build browser bundles; `examples/webpack-example/` shows consumption from a bundled frontend.
   - `browser.js` is the browser-specific entry, which is an important architectural split from the Node entry.

11. **Examples as integration references**
   - `examples/` contains concrete usage paths for key auth, posting, multisig, vote broadcast, streaming, and HTML/browser demos.
   - These examples show the library’s intended integration points rather than additional subsystems.

12. **Tests reflect the main seams**
   - `test/` covers crypto, key formats, memo handling, serializer/types, broadcast, API behavior, and browser usage.
   - The test layout mirrors the architecture: network/API, auth/crypto, serialization, and end-to-end broadcast are all separate seams.

13. **Overall architecture to diagram**
   - A useful diagram would show a central SDK façade feeding three core internal domains: API/RPC, Auth/Crypto+Serializer, and Broadcast.
   - Around that core are environment-specific entrypoints for Node and browser, plus external Steem RPC nodes as the only runtime dependency.

Main entry points: [`src/index.js`](https://github.com/knowledgr/knowledgr-js/blob/master/src/index.js) (SDK entry), [`src/browser.js`](https://github.com/knowledgr/knowledgr-js/blob/master/src/browser.js) (Browser entry), [`src/broadcast/index.js`](https://github.com/knowledgr/knowledgr-js/blob/master/src/broadcast/index.js) (Broadcast facade), [`src/api/index.js`](https://github.com/knowledgr/knowledgr-js/blob/master/src/api/index.js) (API facade)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_group_entry["Entry points"]
  node_node_index["SDK entry<br/>entrypoint<br/>[index.js]"]
  node_node_browser["Browser entry<br/>entrypoint<br/>[browser.js]"]
  node_node_config["Config<br/>settings<br/>[config.js]"]
  node_node_formatter["Formatter<br/>presentation<br/>[formatter.js]"]
  node_node_utils["Utils<br/>helpers<br/>[utils.js]"]
end

subgraph group_group_api["API/RPC"]
  node_node_api_index["API facade<br/>query layer<br/>[index.js]"]
  node_node_api_methods["RPC methods<br/>rpc mapping<br/>[methods.js]"]
  node_node_http["HTTP transport<br/>[http.js]"]
  node_node_ws["WS transport<br/>[ws.js]"]
  node_node_transport_base["Transport base<br/>[base.js]"]
  node_node_transport_index["Transport select<br/>[index.js]"]
end

subgraph group_group_auth["Auth & serialization"]
  node_node_auth_index["Auth facade<br/>signing layer<br/>[index.js]"]
  node_node_memo["Memo crypto<br/>[memo.js]"]
  node_node_ecc["ECC crypto<br/>crypto package<br/>[index.js]"]
  node_node_serializer["Serializer<br/>chain encoding<br/>[index.js]"]
end

subgraph group_group_tx["Broadcast"]
  node_node_broadcast_index["Broadcast facade<br/>tx builder<br/>[index.js]"]
  node_node_broadcast_ops["Operations<br/>tx schema<br/>[operations.js]"]
  node_node_broadcast_params["Param types<br/>tx typing<br/>[param_types.js]"]
  node_node_broadcast_helpers["Broadcast helpers<br/>tx orchestration<br/>[helpers.js]"]
end

subgraph group_group_env["Build & examples"]
  node_node_webpack["Webpack build<br/>[webpack.config.js]"]
  node_node_webpack_make["Build helper<br/>[makeConfig.js]"]
  node_node_examples["Examples<br/>usage demos"]
end

subgraph group_group_ext["External"]
  node_node_rpc[("Steem RPC<br/>external endpoint")]
end

node_node_index -->|"exports"| node_node_api_index
node_node_index -->|"exports"| node_node_auth_index
node_node_index -->|"exports"| node_node_broadcast_index
node_node_index -->|"exports"| node_node_formatter
node_node_index -->|"exports"| node_node_config
node_node_browser -->|"exports"| node_node_api_index
node_node_browser -->|"exports"| node_node_auth_index
node_node_browser -->|"exports"| node_node_broadcast_index
node_node_browser -->|"exports"| node_node_formatter
node_node_browser -->|"exports"| node_node_config
node_node_api_index -->|"uses"| node_node_api_methods
node_node_api_index -->|"sends via"| node_node_transport_index
node_node_transport_index -->|"selects"| node_node_http
node_node_transport_index -->|"selects"| node_node_ws
node_node_http -->|"extends"| node_node_transport_base
node_node_ws -->|"extends"| node_node_transport_base
node_node_http -->|"connects"| node_node_rpc
node_node_ws -->|"connects"| node_node_rpc
node_node_auth_index -->|"uses"| node_node_ecc
node_node_auth_index -->|"uses"| node_node_memo
node_node_broadcast_index -->|"uses"| node_node_broadcast_helpers
node_node_broadcast_index -->|"uses"| node_node_broadcast_ops
node_node_broadcast_index -->|"uses"| node_node_broadcast_params
node_node_broadcast_helpers -->|"signs with"| node_node_auth_index
node_node_broadcast_helpers -->|"serializes with"| node_node_serializer
node_node_broadcast_helpers -->|"submits via"| node_node_api_index
node_node_serializer -->|"supports"| node_node_broadcast_index
node_node_api_methods -->|"targets"| node_node_rpc
node_node_examples -.->|"demonstrates"| node_node_index
node_node_webpack -->|"bundles"| node_node_browser
node_node_webpack -->|"uses"| node_node_webpack_make

click node_node_index "https://github.com/knowledgr/knowledgr-js/blob/master/src/index.js"
click node_node_browser "https://github.com/knowledgr/knowledgr-js/blob/master/src/browser.js"
click node_node_config "https://github.com/knowledgr/knowledgr-js/blob/master/src/config.js"
click node_node_formatter "https://github.com/knowledgr/knowledgr-js/blob/master/src/formatter.js"
click node_node_utils "https://github.com/knowledgr/knowledgr-js/blob/master/src/utils.js"
click node_node_api_index "https://github.com/knowledgr/knowledgr-js/blob/master/src/api/index.js"
click node_node_api_methods "https://github.com/knowledgr/knowledgr-js/blob/master/src/api/methods.js"
click node_node_http "https://github.com/knowledgr/knowledgr-js/blob/master/src/api/transports/http.js"
click node_node_ws "https://github.com/knowledgr/knowledgr-js/blob/master/src/api/transports/ws.js"
click node_node_transport_base "https://github.com/knowledgr/knowledgr-js/blob/master/src/api/transports/base.js"
click node_node_transport_index "https://github.com/knowledgr/knowledgr-js/blob/master/src/api/transports/index.js"
click node_node_auth_index "https://github.com/knowledgr/knowledgr-js/blob/master/src/auth/index.js"
click node_node_memo "https://github.com/knowledgr/knowledgr-js/blob/master/src/auth/memo.js"
click node_node_ecc "https://github.com/knowledgr/knowledgr-js/blob/master/src/auth/ecc/index.js"
click node_node_serializer "https://github.com/knowledgr/knowledgr-js/blob/master/src/auth/serializer/index.js"
click node_node_broadcast_index "https://github.com/knowledgr/knowledgr-js/blob/master/src/broadcast/index.js"
click node_node_broadcast_ops "https://github.com/knowledgr/knowledgr-js/blob/master/src/broadcast/operations.js"
click node_node_broadcast_params "https://github.com/knowledgr/knowledgr-js/blob/master/src/broadcast/param_types.js"
click node_node_broadcast_helpers "https://github.com/knowledgr/knowledgr-js/blob/master/src/broadcast/helpers.js"
click node_node_webpack "https://github.com/knowledgr/knowledgr-js/blob/master/webpack.config.js"
click node_node_webpack_make "https://github.com/knowledgr/knowledgr-js/blob/master/webpack/makeConfig.js"
click node_node_examples "https://github.com/knowledgr/knowledgr-js/tree/master/examples"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_node_index,node_node_browser,node_node_config,node_node_formatter,node_node_utils toneBlue
class node_node_api_index,node_node_api_methods,node_node_http,node_node_ws,node_node_transport_base,node_node_transport_index toneAmber
class node_node_auth_index,node_node_memo,node_node_ecc,node_node_serializer toneMint
class node_node_broadcast_index,node_node_broadcast_ops,node_node_broadcast_params,node_node_broadcast_helpers toneRose
class node_node_webpack,node_node_webpack_make,node_node_examples toneIndigo
class node_node_rpc toneTeal
```

## Components

### Entry points

Runtime-facing SDK entry modules for Node and browser consumers.

- [SDK entry](https://github.com/knowledgr/knowledgr-js/blob/master/src/index.js): entrypoint · CommonJS/Node public surface that aggregates the main namespaces. · `src/index.js`
- [Browser entry](https://github.com/knowledgr/knowledgr-js/blob/master/src/browser.js): entrypoint · Browser-specific public surface for bundled consumers. · `src/browser.js`
- [Config](https://github.com/knowledgr/knowledgr-js/blob/master/src/config.js): settings · Shared configuration surface for node selection and SDK behavior. · `src/config.js`
- [Formatter](https://github.com/knowledgr/knowledgr-js/blob/master/src/formatter.js): presentation · Helpers that normalize blockchain data for display and app use. · `src/formatter.js`
- [Utils](https://github.com/knowledgr/knowledgr-js/blob/master/src/utils.js): helpers · General-purpose convenience transforms used across the SDK. · `src/utils.js`

### API/RPC

Read/query layer and transport boundaries for Steem RPC endpoints.

- [API facade](https://github.com/knowledgr/knowledgr-js/blob/master/src/api/index.js): query layer · Public read/query namespace that invokes RPC methods through transports. · `src/api/index.js`
- [RPC methods](https://github.com/knowledgr/knowledgr-js/blob/master/src/api/methods.js): rpc mapping · Method definitions and request shaping for Steem RPC calls. · `src/api/methods.js`
- [HTTP transport](https://github.com/knowledgr/knowledgr-js/blob/master/src/api/transports/http.js): transport · HTTP boundary used to send RPC requests. · `src/api/transports/http.js`
- [WS transport](https://github.com/knowledgr/knowledgr-js/blob/master/src/api/transports/ws.js): transport · WebSocket boundary used to send RPC requests. · `src/api/transports/ws.js`
- [Transport base](https://github.com/knowledgr/knowledgr-js/blob/master/src/api/transports/base.js): transport base · Shared transport behavior beneath HTTP and WebSocket adapters. · `src/api/transports/base.js`
- [Transport select](https://github.com/knowledgr/knowledgr-js/blob/master/src/api/transports/index.js): transport selector · Chooses or exposes the concrete transport implementation. · `src/api/transports/index.js`

### Auth & serialization

Signing, memo crypto, and chain serialization boundary.

- [Auth facade](https://github.com/knowledgr/knowledgr-js/blob/master/src/auth/index.js): signing layer · Public signing and key-management namespace. · `src/auth/index.js`
- [Memo crypto](https://github.com/knowledgr/knowledgr-js/blob/master/src/auth/memo.js): memo crypto · Memo encryption and decryption utilities. · `src/auth/memo.js`
- [ECC crypto](https://github.com/knowledgr/knowledgr-js/blob/master/src/auth/ecc/index.js): crypto package · Key generation, hashing, signing, AES, and signature primitives. · `src/auth/ecc/index.js`
- [Serializer](https://github.com/knowledgr/knowledgr-js/blob/master/src/auth/serializer/index.js): chain encoding · Canonical serialization for operations and chain-compatible types. · `src/auth/serializer/index.js`

### Broadcast

Transaction construction and submission flow.

- [Broadcast facade](https://github.com/knowledgr/knowledgr-js/blob/master/src/broadcast/index.js): tx builder · Public transaction construction and submission surface. · `src/broadcast/index.js`
- [Operations](https://github.com/knowledgr/knowledgr-js/blob/master/src/broadcast/operations.js): tx schema · Supported transaction operations and their structure. · `src/broadcast/operations.js`
- [Param types](https://github.com/knowledgr/knowledgr-js/blob/master/src/broadcast/param_types.js): tx typing · Argument shaping for broadcast operations. · `src/broadcast/param_types.js`
- [Broadcast helpers](https://github.com/knowledgr/knowledgr-js/blob/master/src/broadcast/helpers.js): tx orchestration · Helpers that coordinate signing and submission via the API layer. · `src/broadcast/helpers.js`

### Build & examples

Browser bundling and usage examples.

- [Webpack build](https://github.com/knowledgr/knowledgr-js/blob/master/webpack.config.js): build · Browser bundle configuration and build pipeline. · `webpack.config.js`
- [Build helper](https://github.com/knowledgr/knowledgr-js/blob/master/webpack/makeConfig.js): build helper · Webpack configuration helper used by the build setup. · `webpack/makeConfig.js`
- [Examples](https://github.com/knowledgr/knowledgr-js/tree/master/examples): usage demos · Integration examples for auth, posting, voting, streaming, and browser usage. · `examples`

### External

Steem RPC nodes consumed by the SDK.

- **Steem RPC**: external endpoint · External Steem blockchain nodes accessed over HTTP or WebSocket.

## Connections

- SDK entry → API facade: exports · Main SDK entry exposes the read/query API.
- SDK entry → Auth facade: exports · Main SDK entry exposes signing and key management.
- SDK entry → Broadcast facade: exports · Main SDK entry exposes transaction broadcast APIs.
- SDK entry → Formatter: exports · Main SDK entry exposes formatting helpers.
- SDK entry → Config: exports · Main SDK entry exposes configuration.
- Browser entry → API facade: exports · Browser entry exposes the read/query API.
- Browser entry → Auth facade: exports · Browser entry exposes auth primitives.
- Browser entry → Broadcast facade: exports · Browser entry exposes transaction broadcast APIs.
- Browser entry → Formatter: exports · Browser entry exposes formatting helpers.
- Browser entry → Config: exports · Browser entry exposes configuration.
- API facade → RPC methods: uses · API facade maps consumer calls to RPC methods.
- API facade → Transport select: sends via · API facade sends requests through the selected transport.
- Transport select → HTTP transport: selects · Transport selector can resolve the HTTP adapter.
- Transport select → WS transport: selects · Transport selector can resolve the WebSocket adapter.
- HTTP transport → Transport base: extends · HTTP transport inherits shared transport behavior.
- WS transport → Transport base: extends · WebSocket transport inherits shared transport behavior.
- HTTP transport → Steem RPC: connects · HTTP transport talks to external Steem nodes.
- WS transport → Steem RPC: connects · WebSocket transport talks to external Steem nodes.
- Auth facade → ECC crypto: uses · Auth facade delegates cryptographic primitives to ECC.
- Auth facade → Memo crypto: uses · Auth facade provides memo crypto support.
- Broadcast facade → Broadcast helpers: uses · Broadcast facade coordinates signing and submission helpers.
- Broadcast facade → Operations: uses · Broadcast facade relies on supported operation definitions.
- Broadcast facade → Param types: uses · Broadcast facade uses parameter typing and shaping.
- Broadcast helpers → Auth facade: signs with · Broadcast helpers use auth for transaction signing.
- Broadcast helpers → Serializer: serializes with · Broadcast helpers use serializer for canonical payloads.
- Broadcast helpers → API facade: submits via · Broadcast helpers submit signed transactions through the API layer.
- Serializer → Broadcast facade: supports · Serializer provides chain-compatible encoding for writes.
- RPC methods → Steem RPC: targets · RPC method calls ultimately target external Steem nodes.
- Examples → SDK entry: demonstrates · Examples illustrate usage of the SDK entry surface.
- Webpack build → Browser entry: bundles · Webpack builds the browser entry into frontend bundles.
- Webpack build → Build helper: uses · Webpack configuration is composed through helper logic.
