PluginBench
Rule

nativescript

via PatrickJS/awesome-cursorrules

Best practices and patterns for building mobile apps with NativeScript

What is nativescript?

Guidance for structuring NativeScript projects, organizing platform-specific code, styling with TailwindCSS, and optimizing performance. Use this rule when building cross-platform mobile applications with NativeScript to ensure consistent code organization, proper native integration, and efficient UI rendering.

  • Organize modular components and services with platform-specific file patterns (.ios.ts, .android.ts)
  • Apply naming conventions for platform-specific variables and descriptive component names
  • Configure TailwindCSS with platform variants (ios:, android:) and dark mode support
  • Use GridLayout and StackLayout for responsive, performant layouts
  • Manage native class extensions with @NativeClass() and proper delegate retention for iOS
  • Implement conditional platform code with __ANDROID__ and __APPLE__ for tree-shaking

Applies to

File patterns this rule matches.

**/*.tsx
**/*.ts
**/*.vue
**/*.svelte
src/**/*.ts
app/**/*.ts
src/**/*.tsx
app/**/*.tsx
src/**/*.vue
app/**/*.vue
src/**/*.svelte
Rule definition (reference)

Source of truth, from the repository.

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.

Related rules

NativeScript development best practices and project structure guidelines.

**/*
41k
via PatrickJS/awesome-cursorrules

Blocks phantom NestJS imports, deprecated patterns, and hallucinated decorators to enforce correct framework usage.

**/*
41k
via PatrickJS/awesome-cursorrules

Official Netlify development rules for serverless, edge, background, and scheduled functions with Blobs and Image CDN support.

**/*
41k
via PatrickJS/awesome-cursorrules

Safety-first, read-only network diagnostics guide for developers troubleshooting connection failures.

**/*
41k
via PatrickJS/awesome-cursorrules

Next.js + TypeScript + shadcn/ui development with Python LLM integration via API routes.

**/*
41k
via PatrickJS/awesome-cursorrules

Next.js with TypeScript and Tailwind UI best practices

**/*.tsx +3
41k
via PatrickJS/awesome-cursorrules