agentsclimarketplace

Build nitro modules

Skill Marshanda14816/agent-skills/skills/build-nitro-modules

Builds React Native Nitro Modules from scratch in a monorepo. Scaffolds with Nitrogen, authors HybridObject TypeScript specs, generates native boilerplate, implements in C++/Swift/Kotlin, wires an example app, and prepares for npm publishing. Use when creating a new Nitro Module, implementing native functionality via HybridObjects, or setting up the nitrogen codegen pipeline.From its SKILL.md

Install
npx -y skills add Marshanda14816/agent-skills --skill build-nitro-modules

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

2 things to look at

  • no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
  • 2 stars2 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its file declares

Copied from the file, not written here

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

9.2 KB, ~2.2k tokens by cl100k_base, as published. Nobody here has run it

Build Nitro Modules

Overview

End-to-end skill for building a React Native Nitro Module: monorepo scaffolding via Nitrogen, TypeScript HybridObject spec authoring, native code generation, platform implementation (C++/Swift/Kotlin), example app wiring, and publish preparation.

Nitro Modules use a codegen pipeline (nitrogen) that reads .nitro.ts spec files and generates native C++/Swift/Kotlin boilerplate. You then fill in the implementation. This is fundamentally different from old-style turbo modules.

NEVER modify any file inside nitrogen/generated/. These files are fully regenerated every time npx nitrogen runs — any manual edits will be silently overwritten. Always edit only the .nitro.ts spec file, then re-run nitrogen to regenerate.

Ask First — Before Doing Anything

First, determine what the user wants to do:

"Are you creating a new Nitro Module library from scratch, or adding a new HybridObject to an existing library?"


If creating a new library — ask all of these before any command:

  1. Library name — What should the library be called? (e.g. react-native-math)
  2. Monorepo with packages/ folder — Should the library live in packages/<name> inside a monorepo? (Strongly recommended — default: yes)
  3. Example app — Should an example app be created to test the module? (Recommended — default: yes)
  4. Native languages — Which platforms and languages?
    • iOS: swift (default) or cpp
    • Android: kotlin (default) or cpp
    • Cross-platform C++ only: both cpp
  5. Module purpose — Briefly describe what the module does so the correct spec methods can be designed

Do not proceed past Step 1 of the build sequence until all five questions are answered.

If adding a HybridObject to an existing library — ask only:

  1. HybridObject name — What should the new HybridObject be called? (e.g. Camera, Crypto)
  2. Native languages — iOS: swift or cpp? Android: kotlin or cpp?
  3. Purpose — What does this HybridObject do?

Then skip directly to spec-hybrid-object.md (write the spec), spec-nitro-json.md (add autolinking entry), native-nitrogen-codegen.md (re-run nitrogen), and the relevant native implementation file. Skip all setup, monorepo, and example app steps.

Typical Build Sequence

# 1. Scaffold
npx nitrogen@latest init react-native-math

# 2. Run codegen (from package folder after writing spec + nitro.json)
cd packages/react-native-math && npx nitrogen

# 3. Create example app
npx @react-native-community/cli@latest init --skip-install MathExample

# 4. Install and test
cd example && bun add ../packages/react-native-math
bun add react-native-nitro-modules
bun example android
bun example ios

Full step-by-step references below.

When to Apply

Reference these guidelines when:

  • Creating any new React Native native module using the Nitro framework
  • Writing HybridObject TypeScript specs (*.nitro.ts files)
  • Running Nitrogen codegen and implementing generated interfaces
  • Setting up a monorepo example app for a Nitro library
  • Configuring Android Gradle paths for a monorepo structure
  • Debugging autolinking failures or missing generated files
  • Preparing a Nitro module package for npm publishing

Priority-Ordered Guidelines

PriorityCategoryImpactReference
1Monorepo scaffoldCRITICALsetup-monorepo-init.md
2HybridObject specCRITICALspec-hybrid-object.md
3nitro.json autolinkingCRITICALspec-nitro-json.md
4Nitrogen codegenHIGHnative-nitrogen-codegen.md
5C++ implementationHIGHnative-implement-cpp.md
6Kotlin implementationHIGHnative-implement-kotlin.md
7Swift implementationHIGHnative-implement-swift.md
8Example app setup (if requested)HIGHexample-app-setup.md
9Android Gradle paths (if example app)HIGHexample-android-config.md
10Metro + install + test (if example app)HIGHexample-metro-install.md
11npm publish prepMEDIUMspec-package-publish.md

Quick Reference

Minimum HybridObject Spec (src/specs/Math.nitro.ts)

import { type HybridObject, NitroModules } from 'react-native-nitro-modules'

interface Math extends HybridObject<{ ios: 'swift'; android: 'kotlin' }> {
  add(a: number, b: number): number
}

const math = NitroModules.createHybridObject<Math>('Math')
export { math }

Minimum nitro.json

{
  "$schema": "https://nitro.margelo.com/nitro.schema.json",
  "cxxNamespace": ["math"],
  "ios": { "iosModuleName": "ReactNativeMath" },
  "android": {
    "androidNamespace": ["math"],
    "androidCxxLibName": "ReactNativeMath"
  },
  "autolinking": {
    "Math": { "swift": "HybridMath", "kotlin": "HybridMath" }
  }
}

Root package.json Scripts

{
  "scripts": {
    "specs": "bun --cwd packages/react-native-math run specs",
    "example": "bun --cwd example"
  }
}

Run: bun example android, bun example ios, bun specs

References

FileDescription
setup-monorepo-init.mdMonorepo workspace structure and nitrogen init scaffold
spec-hybrid-object.mdWriting *.nitro.ts specs and exporting HybridObjects
spec-nitro-json.mdnitro.json all fields, autolinking, namespace configuration
native-nitrogen-codegen.mdRunning Nitrogen and verifying generated files
native-implement-cpp.mdImplementing HybridObjects in C++
native-implement-kotlin.mdImplementing HybridObjects in Kotlin (Android)
native-implement-swift.mdImplementing HybridObjects in Swift (iOS)
example-app-setup.mdRN CLI example app init, workspace wiring, version alignment
example-android-config.mdsettings.gradle and build.gradle monorepo path fixes
example-metro-install.mdMetro watchFolders, library install, App.tsx usage, test runs
spec-package-publish.mdpackage.json author, files field, npm publish readiness

Problem → Skill Mapping

ProblemReferenceAction
Don't know where to startsetup-monorepo-init.mdScaffold with nitrogen init
Spec file syntax errorspec-hybrid-object.mdFix *.nitro.ts interface
Autolinking not workingspec-nitro-json.mdCheck nitro.json autolinking block
Nitrogen generates no filesnative-nitrogen-codegen.mdVerify spec file extension and run command from right dir
C++ types unclearnative-implement-cpp.mdFollow type reference links to canonical examples
Kotlin compilation errornative-implement-kotlin.mdCheck annotations and override modifiers
Swift compilation errornative-implement-swift.mdCheck class inheritance and property signatures
Example app won't build (Android)example-android-config.mdFix Gradle monorepo path configuration
Metro can't resolve libraryexample-metro-install.mdAdd watchFolders to metro.config.js
Version mismatch between example and packageexample-app-setup.mdAlign react-native versions across workspaces
Package missing files on npmspec-package-publish.mdFix files field in package.json

What ships with it: 11 files

60.6 KB alongside SKILL.md

Keep looking

Skills are one crate of 326,834. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.