npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

notifly-core-sdk

v2.21.0

Published

Shared Kotlin Multiplatform implementation used by the Notifly SDKs

Downloads

861

Readme

[!NOTE] This repository contains shared source code. Each platform SDK builds and distributes its own Core and Full packages. Application developers can install either the Full SDK or the platform's Core package.

Purpose

This module provides a shared implementation for behavior that should remain consistent across the Notifly SDKs. It reduces duplicated business logic while leaving platform integration and customer-facing SDK ownership with each platform repository.

This README covers the module's purpose, architectural boundaries, and contributor conventions. Keep individual feature descriptions and API usage examples in source-level documentation rather than maintaining a feature catalog here.

Architecture

flowchart TB
    KMP["notifly-kmp-sdk<br/>Shared source code"]
    Android["Android SDK<br/>Core JAR + Full AAR"]
    iOS["iOS SDK<br/>Core XCFramework + Full Swift sources"]
    JS["JavaScript SDK<br/>Core + Full packages"]
    RN["React Native SDK"]
    Flutter["Flutter SDK"]

    KMP --> Android
    KMP --> iOS
    KMP --> JS
    Android --> RN
    iOS --> RN
    Android --> Flutter
    iOS --> Flutter
    JS -->|Web| Flutter

The library is one Gradle module with package-level architectural boundaries:

  • commonMain owns shared domain logic, validation, and use cases.
  • jvmMain, iosMain, and jsMain provide infrastructure adapters, such as HTTP engines, synchronization, and generic native value conversion. They must not become separate per-platform feature implementations.
  • Each host SDK owns platform-specific product behavior, UI integration, SDK lifecycle decisions, and its customer-facing API.

Group shared code by feature under tech.notifly.kmp. Keep reusable infrastructure in core, independent of feature packages. Use expect/actual for platform capabilities, not to split business rules across platforms.

Platform integration

The Android, iOS, and JavaScript repositories pin a KMP source commit as a Git submodule and build their own Core artifacts. Core and Full use the same platform SDK version, and Full depends on that exact Core version.

| SDK | Integration and distribution | | --- | --- | | Android | Gradle composite build; Core JAR and Full AAR distributed through JitPack. | | iOS | Dynamic NotiflyCore.xcframework and Full SDK Swift sources, available through SwiftPM and CocoaPods. | | JavaScript | notifly-core-sdk and notifly-js-sdk on npm; browser bundles include the required Core code. | | React Native | Uses the Android and iOS SDKs through native bridges. | | Flutter | Uses the Android and iOS SDKs; Flutter Web uses the JavaScript SDK. |

The iOS repository hosts the Core binary on its own GitHub Releases. Customers do not need to select a separate KMP source version.

Contributor conventions

  • Write repository documentation, comments, identifiers, and test names in English, except for required non-English test fixtures.
  • Keep implementation details internal and public interfaces small and usable from Kotlin, Swift, and JavaScript.
  • Explain contracts above declarations with KDoc. Minimize inline comments and document rationale rather than narrating code.
  • Test observable behavior. Keep shared tests in commonTest and platform-specific infrastructure or interop tests in the corresponding platform test source set.
  • Use the pinned ktlint configuration. Review formatting changes and keep unrelated edits out of a change.

See AGENTS.md for detailed architecture, language, comment, and test conventions, and scripts/README.md for build and validation tooling.

Development

Requirements:

  • JDK 17
  • Node.js 22
  • macOS with Xcode for Apple targets
  • Chrome for browser tests

Check Kotlin source, tests, and Gradle scripts before committing:

./gradlew ktlintCheck --no-daemon

Apply automatic formatting when needed, then rerun the check:

./gradlew ktlintFormat --no-daemon
./gradlew ktlintCheck --no-daemon

The ktlint Gradle plugin and engine versions are pinned in build.gradle.kts. Style settings live in .editorconfig. CI and new releases run the check without modifying files. Resuming an existing release skips lint so older tags remain rebuildable. Semantic conventions still require review.

Run the shared test suite:

./gradlew \
  jvmTest \
  jsNodeTest \
  jsBrowserTest \
  iosSimulatorArm64Test \
  --no-daemon

Kotlin compatibility

The build uses Kotlin 2.2.21. Common and JVM code target Kotlin language/API 1.8 with stdlib 1.8.10 for Android compatibility. Kotlin/JS uses the stdlib matching the build compiler.

Repository structure

.
├── src/          # Shared Kotlin Multiplatform sources
├── scripts/      # Build and validation tools
├── smoke-tests/  # Consumer-level verification projects
└── .github/      # Automation workflows

Links