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.
.cursor/rules/nativescript.mdcWhat 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
GridLayoutand 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.mdcFrontmatter: description, globs, alwaysApply
Manually: put the files in place
.claude/rules/nativescript.mdThe paths frontmatter field limits the files: move globs from the source into paths
AGENTS.md
Codex reads AGENTS.md: paste the rule text there
Manually: put the files in place
.github/instructions/nativescript.instructions.mdThe applyTo field sets which files it applies to: move globs from the source into applyTo
Manually: put the files in place
.devin/rules/nativescript.mdManually: put the files in place
.clinerules/nativescript.mdStep 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