Skip to main content
rule

nativescript — Cursor rule: what it does, how to install

This rule guides NativeScript work across TypeScript, Vue, and related stacks. Use it when shaping mobile UI, platform code, and native delegates.

Install into Cursor · Manually: put the files in place All methods and platforms ↓
.cursor/rules/nativescript.mdc
Open on GitHub

What nativescript does

The rule sets a structure for NativeScript projects: modular components and services, platform files such as .ios.ts and .android.ts, and a custom-native layout with shared types plus platform implementations. Platform-specific variables use ios or android prefixes.

For UI, it selects TailwindCSS with @nativescript/tailwind and tailwindcss. It recommends GridLayout for complex screens and StackLayout for linear sections. The guidance also covers @NativeClass(), iOS delegate retention, __ANDROID__ and __APPLE__ guards, timer cleanup, and framework-specific reactive state.

After changes to App_Resources or package.json, it advises running ns clean. A project built around another CSS framework will face a direct conflict with the rule’s TailwindCSS requirement.

What it helps with

  • structure platform-specific NativeScript code
  • separate iOS and Android implementations
  • style NativeScript views with TailwindCSS
  • prevent timer-related memory leaks
  • build responsive screens with GridLayout

Example prompts for the agent

  • Refactor this NativeScript screen around GridLayout and move platform code into separate files.
  • Check this Vue component against the NativeScript guidance and reduce deeply nested layout containers.
  • Add the required iOS delegate setup for this native class and retain the delegate instance at class scope.

How to install nativescript

Manually: put the files in place

.cursor/rules/nativescript.mdc

Frontmatter: description, globs, alwaysApply

Step by step, with commands for each platform: Cursor rules: .mdc files, four modes and what replaced .cursorrules

Questions about nativescript

How do I install nativescript in Cursor?

Place the rule at .cursor/rules/nativescript.mdc.

What does the nativescript rule do?

It guides NativeScript project structure, platform files, TailwindCSS styling, layout containers, iOS delegates, and timer cleanup.

Which files does nativescript target?

It targets .tsx, .ts, .vue, and .svelte files, including src/**/*.ts, app/**/*.ts, src/**/*.tsx, app/**/*.tsx, src/**/*.vue, app/**/*.vue, and src/**/*.svelte.

Source text

nativescript.mdc · CC0-1.0
---
description: "NativeScript best practices and patterns for mobile applications"
globs: **/*.tsx, **/*.ts, **/*.vue, **/*.svelte, src/**/*.ts, app/**/*.ts, src/**/*.tsx, app/**/*.tsx, src/**/*.vue, app/**/*.vue, src/**/*.svelte
alwaysApply: false
---
# NativeScript Best Practices

## Code Style and Structure
- Organize code using modular components and services for maintainability.
- Use platform-specific files (`.ios.ts`, `.android.ts`) when code exceeds 20 platform-specific lines.
- When creating custom native code, use a folder structure like `custom-native/index.ios.ts`, `custom-native/index.android.ts`, `custom-native/common.ts`, `custom-native/index.d.ts` to keep platform-specific code organized and easy to import with single import elsewhere, replacing `custom-native` with the name of the custom code.
  
## Naming Conventions
- Prefix platform-specific variables with `ios` or `android` (e.g., `iosButtonStyle`).
- Name custom components and styles descriptively (`primaryButtonStyle`, `userProfileView`).
 
## Usage
- Use `@NativeClass()` when extending native classes when needed
- For iOS, when extending native classes, always use `static ObjCProtocols = [AnyUIKitDelegate];` to declare custom delegates if a delegate is required or used.
- For iOS, always retain custom delegate instances to prevent garbage collection. For example, `let delegate = MyCustomDelegate.new() as MyCustomDelegate`, and ensure it is retained in the class scope.
- Favor `__ANDROID__` and `__APPLE__` for conditional platform code with tree-shaking.
- Track and clean up all timers (`setTimeout`, `setInterval`) to avoid memory leaks.

## UI and Styling
- Always TailwindCSS as the CSS Framework using `"@nativescript/tailwind": "^2.1.0"` for consistent styling paired with `"tailwindcss": "~3.4.0"`.
- Add ios: and android: style variants for platform-specific styling, addVariant('android', '.ns-android &'), addVariant('ios', '.ns-ios &');
- darkMode: ['class', '.ns-dark']
- Leverage `GridLayout` or `StackLayout` for flexible, responsive layouts. Place more emphasis on proper GridLayout usage for complex layouts but use StackLayout for simpler, linear arrangements.
- Use `visibility: 'hidden'` for elements that should not affect layout when hidden.
 
## Performance Optimization
- Try to avoid deeply nesting layout containers but instead use `GridLayout` wisely to setup complex layouts.
- Avoid direct manipulation of the visual tree during runtime to minimize rendering overhead.
- Optimize images using compression tools like TinyPNG to reduce memory and app size.
- Clean the project (`ns clean`) after modifying files in `App_Resources` or `package.json`.
 
## Key Conventions
- Reuse components and styles to avoid duplication.
- Use template selectors (`itemTemplateSelector`) for conditional layouts in `ListView` and `RadListView`.
- Minimize heavy computations in UI bindings or methods.
- Only if using plain xml bindings, use `Observable` or `ObservableArray` properties to reflect state changes efficiently.
- When using Angular, React, Solid, Svelte or Vue, always leverage their respective state management, lifecycle hooks, rendering optimizations and reactive bindings for optimal performance.

© PatrickJS · CC0-1.0 · PatrickJS/awesome-cursorrules

Similar IDE rules

Everything for Mobile →

From the same set210

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor