expensify/app · Archived

coding-standards

Provides coding standards for React Native — performance patterns, consistency rules, and clean React architecture. Use when writing, modifying, or reviewing code.

First seen Feb 16, 2026

Installation

$ npx skills add expensify/app --skill coding-standards

Stronger alternatives

This repository is archived — consider an actively maintained alternative.

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from expensify/app.

npx skills add expensify/app

Browse all from expensify/app

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

Stars 4.9K
License LICENSE.md
Default branch main
Open issues 1,393
Status Archived

Skill metadata

Parsed from SKILL.md frontmatter.

Declared agents claude-code

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 6,087 B
  • docs SUMMARY.md 189 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 64 installs

SKILL.md

Expensify Coding Standards

Coding standards for the Expensify App. Each standard is a standalone file in rules/ with reasoning, examples, and applicability conditions.

Categories

Category Prefix Focus
Performance PERF-* Render optimization, memo patterns, useEffect hygiene, data selection
Consistency CONSISTENCY-* Platform checks, magic values, unused props, ESLint discipline, localization, file naming, JSDoc
Clean React Patterns CLEAN-REACT-PATTERNS-* Composition, component ownership, state structure, prop typing, function components
UI UI-* Loading indicators, scrollable pages, styling conventions

Quick Reference

Performance

  • [PERF-1](rules/perf-1-no-spread-in-renderitem.md) — No spread in renderItem
  • [PERF-2](rules/perf-2-early-return.md) — Return early before expensive work
  • [PERF-3](rules/perf-3-onyx-list-item-provider.md) — Use OnyxListItemProvider in renderItem
  • [PERF-5](rules/perf-5-shallow-comparison.md) — Shallow over deep comparisons
  • [PERF-6](rules/perf-6-derive-state-from-props.md) — Derive state from props
  • [PERF-7](rules/perf-7-reset-via-key-prop.md) — Reset via key prop
  • [PERF-8](rules/perf-8-events-in-handlers.md) — Handle events in handlers
  • [PERF-9](rules/perf-9-no-useeffect-chains.md) — No useEffect chains
  • [PERF-10](rules/perf-10-no-useeffect-parent-comm.md) — No useEffect parent communication
  • [PERF-11](rules/perf-11-optimize-data-selection.md) — Optimize data selection
  • [PERF-12](rules/perf-12-prevent-memory-leaks.md) — Prevent memory leaks
  • [PERF-13](rules/perf-13-hoist-iterator-calls.md) — Hoist iterator-independent calls
  • [PERF-14](rules/perf-14-use-sync-external-store.md) — Use useSyncExternalStore
  • [PERF-15](rules/perf-15-cleanup-async-effects.md) — Clean up async Effects
  • [PERF-16](rules/perf-16-guard-double-init.md) — Guard double initialization
  • [PERF-17](rules/perf-17-pass-raw-index-on-demand.md) — Pass raw source, index on demand (no pre-built digest)
  • [PERF-18](rules/perf-18-use-pre-mount-destination.md) — Use usePreMountDestination for RHP pre-mounting
  • [PERF-19](rules/perf-19-scalar-collection-selectors.md) — Collection selectors return only what the consumer uses

Consistency

  • [CONSISTENCY-1](rules/consistency-1-no-platform-checks.md) — No platform-specific checks in components
  • [CONSISTENCY-2](rules/consistency-2-no-magic-values.md) — No magic numbers/strings
  • [CONSISTENCY-3](rules/consistency-3-no-code-duplication.md) — No code duplication
  • [CONSISTENCY-4](rules/consistency-4-no-unused-props.md) — No unused props
  • [CONSISTENCY-5](rules/consistency-5-justify-eslint-disable.md) — Justify ESLint disables
  • [CONSISTENCY-6](rules/consistency-6-proper-error-handling.md) — Proper error handling
  • [CONSISTENCY-7](rules/consistency-7-localize-copy.md) — Localize all user-visible copy
  • [CONSISTENCY-8](rules/consistency-8-localize-numbers-dates.md) — Localize numbers, amounts, dates and phone numbers
  • [CONSISTENCY-9](rules/consistency-9-file-naming.md) — Name files after what they export
  • [CONSISTENCY-10](rules/consistency-10-jsdoc.md) — Follow the JSDoc style guidelines
  • [CONSISTENCY-11](rules/consistency-11-no-todo-comments.md) — Track future work in an issue, not a TODO comment
  • [CONSISTENCY-12](rules/consistency-12-callback-named-for-action.md) — Name callbacks for what they do, not the event they handle
  • [CONSISTENCY-13](rules/consistency-13-document-props.md) — Document component props with a JSDoc block comment
  • [CONSISTENCY-14](rules/consistency-14-new-file-header.md) — Non-trivial new files start with a header description
  • [CONSISTENCY-15](rules/consistency-15-comment-why.md) — Comments explain why the code exists, not what it does
  • [CONSISTENCY-16](rules/consistency-16-plain-comment-style.md) — Write comments as plain, natural sentences
  • [CONSISTENCY-17](rules/consistency-17-no-ai-jargon.md) — No AI-generated jargon in code or comments
  • [CONSISTENCY-18](rules/consistency-18-plural-form.md) — Pluralize with PluralForm, not ternaries on a count

Clean React Patterns

  • [CLEAN-REACT-PATTERNS-0](rules/clean-react-0-compiler.md) — React Compiler compliance
  • [CLEAN-REACT-PATTERNS-1](rules/clean-react-1-composition-over-config.md) — Composition over configuration
  • [CLEAN-REACT-PATTERNS-2](rules/clean-react-2-own-behavior.md) — Components own their behavior
  • [CLEAN-REACT-PATTERNS-3](rules/clean-react-3-context-free-contracts.md) — Context-free component contracts
  • [CLEAN-REACT-PATTERNS-4](rules/clean-react-4-no-side-effect-spaghetti.md) — No side-effect spaghetti
  • [CLEAN-REACT-PATTERNS-5](rules/clean-react-5-narrow-state.md) — Keep state narrow
  • [CLEAN-REACT-PATTERNS-6](rules/clean-react-6-no-componentprops.md) — Import the exported prop type instead of ComponentProps
  • [CLEAN-REACT-PATTERNS-7](rules/clean-react-7-no-inline-prop-types.md) — Do not inline prop types on exported components
  • [CLEAN-REACT-PATTERNS-8](rules/clean-react-8-no-class-components.md) — Use function components, not class components
  • [CLEAN-REACT-PATTERNS-9](rules/clean-react-9-no-proptypes.md) — Use TypeScript types, not propTypes or defaultProps

UI

  • [UI-1](rules/ui-1-correct-loading-indicator.md) — Use the correct loading indicator based on navigation context
  • [UI-2](rules/ui-2-new-page-scrollview.md) — New pages must be scrollable
  • [UI-3](rules/ui-3-no-inline-styles.md) — Do not use inline style objects

Usage

During development: When writing or modifying src/ files, consult the relevant standard files for detailed conditions, examples, and exceptions.

During review: The code-inline-reviewer agent loads all standards from this directory. See .claude/agents/code-inline-reviewer.md.