Migrate React Native apps directly from react-native-geolocation-service to react-native-nitro-geolocation without using /compat.

MITAuto-check passedMobile

Install Service Migration

skills CLI
$ npx skills add jingjing2222/react-native-nitro-geolocation --skill service-migration -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jingjing2222/react-native-nitro-geolocation service-migration --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jingjing2222/react-native-nitro-geolocation.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/service-migration .claude/skills/service-migration && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
service-migration
GitHub stars
115
Token cost
~2.3k tokens
SKILL.md length
764 words
Files
3 (incl. scripts)
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

Migrate React Native apps directly from react-native-geolocation-service to react-native-nitro-geolocation without using /compat.

  • Works in 12 steps: Inspect package.json, lockfiles, and the… → Confirm react-native-geolocation-service… → Install react-native-nitro-modules and → …
  • Replacing react-native-geolocation-service imports
  • SKILL.md covers Workflow, Bundled Script, Hard Rules and API Mapping, plus 3 more sections
  • Runs JavaScript scripts from its folder; calls node, curl and rg; reaches react-native-nitro-geolocation.pages.dev

What it does

Service Migration is an agent skill from jingjing2222/react-native-nitro-geolocation. Migrate React Native apps directly from react-native-geolocation-service to react-native-nitro-geolocation without using /compat. Use when replacing react-native-geolocation-service imports, installing Nitro packages, configuring the Android provider, converting callback APIs to Promise/watch APIs, preserving service-specific options such as accuracy and provider metadata, and reporting manual-review sites for settings dialogs, forceRequestLocation, and default option differences.

Its SKILL.md is about 2.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 4 other files, including scripts (for example `agents/openai.yaml`).

It sits in Mobile, covering Cross-platform mobile apps. It works with React Native, Android, React and iOS. The repository describes itself as: A React Native Geolocation module Using Nitro. The licence is MIT.

When your agent uses it

  • Replacing react-native-geolocation-service imports
  • Installing Nitro packages
  • Configuring the Android provider
  • Converting callback APIs to Promise/watch APIs

Example prompts

  • “/service-migration”

Requirements

  • Node.js

Workflow steps

12 steps, taken from the first numbered list in SKILL.md.

  1. Inspect package.json, lockfiles, and the worktree state.
  2. Confirm react-native-geolocation-service is installed or imported.
  3. Install react-native-nitro-modules and
  4. Refresh docs context when network is available
  5. Search all service usages
  6. Insert or update one app-startup setConfiguration() call. Normal
  7. Rewrite imports directly to named imports from
  8. Convert one-shot location calls to Promise chains first. Use async/await
  9. Convert watches to low-level watchPosition plus unwatch first.
  10. Upgrade to useWatchPosition only for hook-safe React function components
  11. Convert explicit Android settings-dialog behavior from
  12. Remove react-native-geolocation-service.

What it can do on your machine

Read from SKILL.md and the folder at commit 89704cf. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • node
    • curl
    • rg

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • react-native-nitro-geolocation.pages.dev

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Service Migration loads about 2.3k tokens when it runs. Until then it costs about 126 tokens; SKILL.md has 764 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~126
When it runs · the whole SKILL.md, loaded when a task matches
~2.3k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from jingjing2222/react-native-nitro-geolocation at commit 89704cf, republished under its MIT licence (© jingjing2222). 764 words, ~2,299 tokens.

Download SKILL.mdSave it as .claude/skills/service-migration/SKILL.md (or your agent's skills folder). This skill also uses 2 other files; get the full folder from GitHub.
name
service-migration
description
Migrate React Native apps directly from react-native-geolocation-service to react-native-nitro-geolocation without using /compat. Use when replacing react-native-geolocation-service imports, installing Nitro packages, configuring the Android provider, converting callback APIs to Promise/watch APIs, preserving service-specific options such as accuracy and provider metadata, and reporting manual-review sites for settings dialogs, forceRequestLocation, and default option differences.

Geolocation Service Migration

Migrate directly to react-native-nitro-geolocation.

Do not use react-native-nitro-geolocation/compat. Do not create intermediate compat imports. Do not preserve Geolocation default-object usage unless the user explicitly asks for a compatibility fallback.

Workflow

  1. Inspect package.json, lockfiles, and the worktree state.
  2. Confirm react-native-geolocation-service is installed or imported.
  3. Install react-native-nitro-modules and react-native-nitro-geolocation.
  4. Refresh docs context when network is available:
    bash
    curl -fsSL https://react-native-nitro-geolocation.pages.dev/llms.txt
    curl -fsSL https://react-native-nitro-geolocation.pages.dev/llms-full.txt
    Use llms.txt as the index and llms-full.txt only for exact API names, option semantics, or examples. If the target app pins an older installed version, confirm APIs against that package's local types.
  5. Search all service usages:
    bash
    rg "react-native-geolocation-service|Geolocation\\.|requestAuthorization|showLocationDialog|forceRequestLocation|forceLocationManager|mocked|provider|PLAY_SERVICE_NOT_AVAILABLE|SETTINGS_NOT_SATISFIED|INTERNAL_ERROR|PermissionsAndroid"
  6. Insert or update one app-startup setConfiguration() call. Normal react-native-geolocation-service migrations should use locationProvider: "playServices". Use "android" only when the legacy app intentionally used forceLocationManager: true.
  7. Rewrite imports directly to named imports from react-native-nitro-geolocation.
  8. Convert one-shot location calls to Promise chains first. Use async/await only when the surrounding function is already async or clearly safe to make async.
  9. Convert watches to low-level watchPosition plus unwatch first.
  10. Upgrade to useWatchPosition only for hook-safe React function components or custom hooks.
  11. Convert explicit Android settings-dialog behavior from showLocationDialog: true to a requestLocationSettings() flow.
  12. Remove react-native-geolocation-service.
  13. Run detected validation commands.
  14. Report semantic changes and manual-review sites.

Bundled Script

Resolve scripts/migrate-geolocation-service.mjs relative to this SKILL.md.

Run inventory first:

bash
node <skill-dir>/scripts/migrate-geolocation-service.mjs --root <app-root> --inventory-only

Dry-run the direct API transform:

bash
node <skill-dir>/scripts/migrate-geolocation-service.mjs --root <app-root> --dry-run

Optionally add startup configuration when the app startup file is obvious:

bash
node <skill-dir>/scripts/migrate-geolocation-service.mjs \
  --root <app-root> \
  --startup-file <app-root>/src/App.tsx

The script is assistance, not a blind migration. It performs package-manager detection, dependency install/remove commands, AST-based import/callsite rewrites when Babel parser tooling is available, and a manual-review report. If the target project lacks Babel parser/generator dependencies, rerun with --allow-tool-install to install temporary codemod dependencies outside the app.

Hard Rules

  • Never import from react-native-nitro-geolocation/compat.
  • Never rewrite to /compat as an intermediate step.
  • Prefer direct named imports.
  • Configure locationProvider: "playServices" for normal react-native-geolocation-service migrations.
  • Use locationProvider: "android" only when legacy code used forceLocationManager: true or the app explicitly requires Android LocationManager.
  • Convert enableHighAccuracy: true to accuracy: { android: "high", ios: "best" } unless an explicit accuracy object already exists.
  • Preserve explicit accuracy, timeout, maximumAge, distanceFilter, interval, fastestInterval, useSignificantChanges, and showsBackgroundLocationIndicator.
  • Convert showLocationDialog: true to an explicit requestLocationSettings() flow.
  • Do not auto-convert forceRequestLocation; report it.
  • Do not introduce React hooks unless the file is a function component or custom hook and the call is at hook-safe top level.
  • Use low-level watchPosition plus unwatch as the first safe target.
  • Replace numeric error-code checks with LocationErrorCodes where possible.
  • Do not remove PermissionsAndroid code unless it is clearly only for location permission and replaced by requestPermission().
Show full SKILL.md (341 more words)Show less

API Mapping

react-native-geolocation-servicereact-native-nitro-geolocationNotes
Geolocation.getCurrentPosition(success, error, options)getCurrentPosition(options)Convert to Promise chain first.
Geolocation.watchPosition(success, error, options)watchPosition(...) or useWatchPosition(...)Start with low-level API.
Geolocation.clearWatch(id)unwatch(token)Token type changes.
Geolocation.stopObserving()stopObserving()Keep only when global cleanup was intended.
`requestAuthorization("whenInUse""always")`setConfiguration({ authorizationLevel }) plus requestPermission()
accuracy: { android, ios }accuracy: { android, ios }Preserve explicit values.
enableHighAccuracyaccuracy presetPrefer accuracy.
showLocationDialogrequestLocationSettings()Convert explicit true; report omitted defaults.
forceLocationManagersetConfiguration({ locationProvider: "android" })Global setting, not a call option.
default fused provider intentsetConfiguration({ locationProvider: "playServices" })Do this for normal service migrations.
forceRequestLocationno direct optionReport and preserve intent manually.
position.mockedGeolocationResponse.mockedAvailable in the API.
position.providerGeolocationResponse.providerAvailable in the API.
error codes -1, 1, 2, 3, 4, 5LocationErrorCodesPrefer named constant comparisons.

Transform Patterns

Rewrite imports directly:

ts
import {
  getCurrentPosition,
  watchPosition,
  unwatch,
  stopObserving,
  requestPermission,
  setConfiguration,
  requestLocationSettings,
  LocationErrorCodes,
} from "react-native-nitro-geolocation";

Convert one-shot calls to Promise chains:

ts
getCurrentPosition({
  accuracy: { android: "high", ios: "best" },
  timeout: 15000,
  maximumAge: 10000,
})
  .then(onSuccess)
  .catch(onError);

Convert explicit Android settings-dialog behavior:

ts
requestLocationSettings({
  accuracy: { android: "high", ios: "best" },
})
  .then(() =>
    getCurrentPosition({
      accuracy: { android: "high", ios: "best" },
      timeout: 15000,
    })
  )
  .then(onSuccess)
  .catch(onError);

Use low-level watches as the first safe target:

ts
const watchToken = watchPosition(onPosition, onError, {
  accuracy: { android: "high", ios: "best" },
  distanceFilter: 10,
  interval: 5000,
  fastestInterval: 2000,
});

unwatch(watchToken);

Upgrade to useWatchPosition only when the watch is already owned by a React function component or custom hook and the original callbacks do not contain ordering-sensitive side effects.

Manual Review Requirements

Always report these instead of guessing:

  • Omitted showLocationDialog. Service default was true; Nitro requires an explicit requestLocationSettings() flow if the app wants the Android settings dialog.
  • Omitted timeout or maximumAge on getCurrentPosition. Service defaults were effectively infinite; Nitro defaults are timeout: 600000 and maximumAge: 0.
  • forceRequestLocation. Preserve the fallback behavior explicitly only after product/UX review.
  • Mixed forceLocationManager usage. Nitro locationProvider is global.
  • requestAuthorization code that handles disabled. requestPermission() status does not include disabled; use hasServicesEnabled() or getProviderStatus() separately.
  • PermissionsAndroid usage unless it is clearly redundant after requestPermission().
  • Watch callbacks with analytics, navigation, mutation, debouncing, or ordering-sensitive side effects.
  • Class components, services, background tasks, and conditional branches where introducing hooks would break React rules.

Validation

Use the target app's detected package manager and existing scripts. Prefer typecheck, lint, and test when they exist. Do not invent missing scripts. For device-sensitive behavior, verify at least one permission request, one current-position request, one Android settings flow when applicable, and one watch start/stop flow.

© jingjing2222, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 2 other files (scripts) in skills/service-migration of jingjing2222/react-native-nitro-geolocation.

  • SKILL.md
  • agents/openai.yaml
  • scripts/migrate-geolocation-service.mjs

Open the folder on GitHubat commit 89704cf

Compare with similar skills

Service Migration next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Service Migration compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Service Migration this skilljingjing2222/react-native-nitro-geolocation115—~2.3kAutomated safety check: PassMIT
Screenmapaleqsio/screenmap244—~7.2kAutomated safety check: PassMIT
ThemingCode-with-Beto/skills140—~2.5kAutomated safety check: PassNone
Upgrade Rn Versionbrandingbrand/flagship165—~3.7kAutomated safety check: PassMIT
Upgrade React NativeShopify/flash-list7.2k—~1.9kAutomated safety check: PassMIT
Fishjam React Native Clientsoftware-mansion-labs/skills291—~1.9kAutomated safety check: PassMIT

Similar skills

  • Screenmap

    aleqsio/screenmap

    Generate a visual navigation map of an Expo / React Native or NativeScript app.

    244 GitHub stars~7.2k tokensUpdated 6 days ago
    MobileAuto-check passed
  • Theming

    Code-with-Beto/skills

    Scaffold a unified, cross-platform color theme system into an Expo Router app.

    140 GitHub stars~2.5k tokensUpdated 3 mo ago
    MobileAuto-check passed
  • Upgrade Rn Version

    brandingbrand/flagship

    Adopt a new stable React Native minor into Flagship Code. An agent skill from brandingbrand/flagship.

    165 GitHub stars~3.7k tokensUpdated 9 days ago
    MobileAuto-check passed
  • Upgrade React Native

    Shopify/flash-list

    Official

    Upgrade the React Native fixture app to a new version. An agent skill from Shopify/flash-list.

    7.2k GitHub stars~1.9k tokensUpdated 9 days ago
    MobileAuto-check passed
  • Fishjam React Native Client

    software-mansion-labs/skills

    React Native / Expo SDK for Fishjam — video/audio streaming on iOS and Android.

    291 GitHub stars~1.9k tokensUpdated 13 days ago
    MobileAuto-check passed
  • Rnn Codebase

    wix/react-native-navigation

    Official

    Navigate and work with the react-native-navigation (RNN) codebase.

    13k GitHub stars~2k tokensUpdated 5 days ago
    MobileAuto-check passed

More from jingjing2222/react-native-nitro-geolocation

  • Community Migration

    jingjing2222/react-native-nitro-geolocation

    Migrate React Native apps from @react-native-community/geolocation to react-native-nitro-geolocation.

    115 GitHub stars~3.5k tokensUpdated 28 days ago
    Auto-check passed

Categories

Questions about Service Migration

What does Service Migration do?

Migrate React Native apps directly from react-native-geolocation-service to react-native-nitro-geolocation without using /compat. Service Migration is an agent skill from jingjing2222/react-native-nitro-geolocation. Migrate React Native apps directly from react-native-geolocation-service to react-native-nitro-geolocation without using /compat.

When should I use Service Migration?

Service Migration fits situations like: replacing react-native-geolocation-service imports; installing Nitro packages; configuring the Android provider; converting callback APIs to Promise/watch APIs.

How do I install Service Migration in Claude Code?

Run `npx skills add jingjing2222/react-native-nitro-geolocation --skill service-migration -a claude-code`. Or copy the skill folder (skills/service-migration in jingjing2222/react-native-nitro-geolocation) into .claude/skills/service-migration in your project. Claude Code loads it when a task matches its description.

How do I install Service Migration in Codex?

Run `npx skills add jingjing2222/react-native-nitro-geolocation --skill service-migration -a codex`. Or copy the skill folder (skills/service-migration in jingjing2222/react-native-nitro-geolocation) into .agents/skills/service-migration in your project. Codex loads it when a task matches its description.

Can I use Service Migration in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jingjing2222/react-native-nitro-geolocation --skill service-migration -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/service-migration, .gemini/skills/service-migration, .github/skills/service-migration and .opencode/skills/service-migration in your project.

What does Service Migration need to run?

Going by SKILL.md and its folder, Service Migration needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node, curl and rg). Our summary lists: Node.js.

Does Service Migration access the network?

SKILL.md names 1 domain. In commands or code: react-native-nitro-geolocation.pages.dev; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Service Migration safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Service Migration use?

Service Migration is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Service Migration use?

About 2.3k tokens (SKILL.md is roughly 9.2k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Service Migration?

Skills that share tags, products or a category with Service Migration: Screenmap (aleqsio/screenmap, 244 stars), Theming (Code-with-Beto/skills, 140 stars), Upgrade Rn Version (brandingbrand/flagship, 165 stars) and Upgrade React Native (Shopify/flash-list, 7.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Service Migration?

jingjing2222 (a GitHub user) maintains it in jingjing2222/react-native-nitro-geolocation, which has 115 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on September 13, 2026.

Source: jingjing2222/react-native-nitro-geolocation on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.