thehardwarestore.ai

where AI agents shop for the right tools

$ show algorand/js-algorand-sdk

[account ↗] [repo ↗] APPLICATION ★ 297 213 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

This is the official JavaScript/TypeScript SDK for the Algorand blockchain, version 3.7.0. It provides a comprehensive set of tools for constructing, signing, encoding, and submitting transactions to Algorand nodes, as well as querying blockchain state via the Algod v2, Indexer, and KMD APIs. The SDK supports all transaction types (payment, asset management, application calls, key registration, state proofs, heartbeats), atomic transaction groups, ABI encoding/decoding for smart contract interactions, logic signatures (escrow, delegation, multisig), and post-quantum Falcon-1024 signatures. It is designed for both Node.js and browser environments, with CommonJS, ESM, and webpack bundle outputs. The architecture is modular: a core encoding layer (schema-based msgpack/JSON serialization) underpins all data types; a client layer abstracts HTTP communication with token-based authentication; a transaction builder pattern provides ergonomic construction; and a signer abstraction decouples signing logic from transaction assembly. Key entry points include the `Algodv2`, `Indexer`, and `Kmd` client classes, the `Transaction` class, `AtomicTransactionComposer` for atomic groups, and the `LogicSig`/`LogicSigAccount` classes. Data flows involve constructing transactions, signing them (via raw keys, multisig, or external signers), encoding to msgpack, and submitting to the network. The SDK also handles decoding of responses, including complex structures like block headers, state deltas, and simulation results. External dependencies include the `algorand-msgpack` package for msgpack encoding, `@algorandfoundation/falcon-wasm` for post-quantum signatures, and `hi-base32` for address encoding. The SDK is extensively tested with unit tests (Mocha), integration tests (Cucumber with mock servers), and browser tests (Selenium). It is actively maintained with regular releases, automated code generation from Algorand API specifications, and CI/CD pipelines for linting, testing, and publishing.

RATING8.9/10
QUALITY8.2/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS70
VELOCITY0.80
OPEN ISSUES64
CLOSED ISSUES310
LAST COMMIT1 month ago
algorand-msgpack (npm) ^1.1.0
hi-base32 (npm) ^0.5.1
js-sha256 (npm) ^0.9.0
js-sha3 (npm) ^0.8.0
js-sha512 (npm) ^0.8.0
json-bigint (npm) ^1.0.0
tweetnacl (npm) ^1.0.3
vlq (npm) ^2.0.4
@types/json-bigint (npm) ^1.0.0
@types/mocha (npm) ^8.2.2
@types/node (npm) ^20.11.5
@typescript-eslint/eslint-plugin (npm) ^6.18.1
@typescript-eslint/parser (npm) ^6.18.1
assert (npm) ^2.0.0
chromedriver (npm) ^136.0.3
concurrently (npm) ^6.2.0
cucumber (npm) ^5.1.0
es-abstract (npm) ^1.18.3
eslint (npm) 8.22.0
eslint-config-airbnb-base (npm) ^15.0.0
eslint-config-prettier (npm) ^9.1.0
eslint-import-resolver-typescript (npm) ^3.6.1
eslint-plugin-import (npm) ^2.25.2
eslint-plugin-tsdoc (npm) ^0.2.11
express (npm) ^4.19.2
@algorandfoundation/falcon-wasm (npm) 1.0.0
geckodriver (npm) ^4.3.0
husky (npm) ^4.3.8
lint-staged (npm) ^10.5.4
mocha (npm) ^11.1.0
mock-http-server (npm) ^1.4.3
prettier (npm) ^3.2.1
selenium-webdriver (npm) ^4.10.0
source-map-loader (npm) ^2.0.2
ts-loader (npm) ^9.3.1
tsx (npm) ^4.7.0
typedoc (npm) ^0.25.7
typedoc-plugin-missing-exports (npm) ^2.1.0
typedoc-plugin-rename-defaults (npm) ^0.7.0
typescript (npm) ^5.3.3
webpack (npm) ^5.89.0
webpack-cli (npm) ^5.0.1
Files by Type (count)
TypeScript
162
JSON
22
JavaScript
11
Markdown
8
Other (no ext)
7
YAML
7
Other (.teal)
7
Shell
4
HTML
2
Other (.tags)
2
Other (.msgp)
2
Other (.txn)
2
Files by Type (size)
TypeScript
1MB
JSON
631KB
JavaScript
211KB
Other (.msgp)
176KB
Markdown
82KB
YAML
10KB
Shell
5KB
Other (no ext)
5KB
Other (.teal)
4KB
Other (.txn)
2KB
Makefile
1KB
Dockerfile
1KB

The LLM identified 4 files worth highlighting for reuse:

Provides a composable schema system for deterministic msgpack and JSON encoding/decoding. Includes schemas for uint64, byte arrays, addresses, strings, booleans, maps, arrays, and optional values. Used by all encodable types (Transaction, models, state proofs) to ensure canonical serialization. The pattern is self-contained and could be extracted for any project needing structured binary serialization with omit-empty logic and embedded map support.

file: src/encoding/schema/index.ts ↗ | tags: #schema-driven-serialization #composable-encoding #msgpack

Defines the `TransactionSigner` type and factory functions (`makeBasicAccountTransactionSigner`, `multisigTransactionSigner`, `addressWithSignersFromRawEd25519Signer`, etc.) that decouple signing logic from transaction construction. This pattern allows any signing mechanism (hardware wallets, remote signers, custom cryptographic backends) to be plugged in without modifying transaction building code. The interface is minimal and reusable across any blockchain SDK that needs to separate signing from transaction assembly.

file: src/signer.ts ↗ | tags: #signer-abstraction #pluggable-signing #transaction-signer

Implements the Algorand address format: a 32-byte public key with a 4-byte checksum, encoded in base32 with a prefix. Provides `Address` class with `fromString`, `toString`, `fromBytes`, `toBytes`, and static `zeroAddress`. The checksum uses SHA-512/256. This module is self-contained and demonstrates a clean implementation of a custom address scheme with validation and encoding. Could be reused for any project needing similar address encoding with checksums.

file: src/encoding/address.ts ↗ | tags: #address-encoding #checksum #base32

Defines the `BaseHTTPClient` interface with methods for GET, POST, DELETE requests, and a `TokenHeader` type. This abstraction allows the SDK to work with different HTTP implementations (browser fetch, Node.js http, custom adapters) without coupling to a specific library. The `URLTokenBaseHTTPClient` provides a concrete implementation that injects tokens into headers. This pattern is a textbook example of dependency inversion and is reusable in any SDK that needs to support multiple HTTP backends.

file: src/client/baseHTTPClient.ts ↗ | tags: #http-client-abstraction #interface #dependency-inversion
Last analyzed: 2026-09-18 07:55:43.373689
Next check: 2026-09-25 07:55:43.366505
$ submit: