UNPKG

kindlyguard

Version:

Security-focused MCP server protecting against unicode attacks, injection threats, and other AI vulnerabilities

134 lines (105 loc) 4.21 kB
# KindlyGuard Binary Distribution Strategy This document explains how KindlyGuard distributes native binaries through npm, following best practices from projects like esbuild and swc. ## Architecture ### Main Package (`@kindlyguard/kindlyguard`) - Contains Node.js wrapper code and CLI scripts - Has optional dependencies on platform-specific packages - Automatically downloads the correct binary during `postinstall` - Provides fallback download mechanism if platform package is unavailable ### Platform Packages (`@kindlyguard/*`) - Separate packages for each platform/architecture combination: - `@kindlyguard/linux-x64` - Linux x64 - `@kindlyguard/darwin-x64` - macOS x64 (Intel) - `@kindlyguard/darwin-arm64` - macOS ARM64 (Apple Silicon) - `@kindlyguard/win32-x64` - Windows x64 - Each contains only the platform-specific binaries - Published independently with matching versions ## Directory Structure ``` npm-package/ ├── package.json # Main package ├── lib/ │ ├── main.js # Node.js API │ ├── main.d.ts # TypeScript definitions │ ├── platform.js # Platform detection utilities │ └── postinstall.js # Binary installation script ├── bin/ │ ├── kindlyguard # CLI wrapper (installed by postinstall) │ └── kindlyguard-cli # CLI tool wrapper ├── scripts/ │ └── build-platform-packages.js # Build script └── npm/ # Platform packages ├── kindlyguard-linux-x64/ ├── kindlyguard-darwin-x64/ ├── kindlyguard-darwin-arm64/ └── kindlyguard-win32-x64/ ``` ## Installation Flow 1. User runs `npm install @kindlyguard/kindlyguard` 2. npm installs the main package and attempts to install the optional platform dependency 3. `postinstall.js` runs and: - Detects the current platform - Tries to copy binaries from the platform package (if installed) - Falls back to direct download from GitHub releases (if needed) - Validates the binary works correctly ## Building and Publishing ### Build All Platform Packages ```bash npm run build-platform-packages ``` This script: - Builds binaries for all supported platforms (requires cross-compilation setup) - Copies binaries to respective platform package directories - Updates version numbers to match main package ### Publish All Packages ```bash npm run publish-all ``` This script: - Publishes all platform packages first - Waits for packages to be available on npm - Publishes the main package ### Manual Platform Build For building a specific platform: ```bash # Linux x64 cargo build --release --target x86_64-unknown-linux-gnu # macOS x64 cargo build --release --target x86_64-apple-darwin # macOS ARM64 cargo build --release --target aarch64-apple-darwin # Windows x64 cargo build --release --target x86_64-pc-windows-msvc ``` ## Environment Variables - `KINDLYGUARD_SKIP_DOWNLOAD` - Skip binary download during install - `KINDLYGUARD_DOWNLOAD_BASE` - Override download URL base - `CI` - Skip install in CI environments ## Platform Detection The platform detection logic (`lib/platform.js`) handles: - Mapping Node.js platform/arch to our naming scheme - Detecting musl libc on Linux (Alpine) - Validating binary executability - Generating download URLs ## Security Considerations - Binaries are downloaded over HTTPS - Each binary is validated before use - Platform packages are scoped to `@kindlyguard` namespace - Fallback mechanism ensures users can always install ## Troubleshooting ### Binary Not Found If the binary isn't found after installation: 1. Check if the platform is supported 2. Verify the platform package was installed 3. Check file permissions (Unix) 4. Try manual download from GitHub releases ### Cross-Platform Building To build for all platforms from a single machine: 1. Install Rust cross-compilation targets 2. Install required linkers (e.g., mingw for Windows) 3. Use the build script or cargo directly ## Future Improvements - Add support for more platforms (linux-arm64, etc.) - Implement binary signing/verification - Add automatic cross-compilation in CI - Support for musl libc variants