react-native-safe-area-context

A flexible way to handle safe area insets in React Native, with hooks and components that also work on Android and web.

Library
npm
v5.10.1
2,768 stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
84 /100 Excellent
Development Activity 84
Maintenance 92
Community 60
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
86 /100 Excellent
Architecture 85
Code Quality 85
Innovation 90
Learning Curve 85

react-native-safe-area-context is the de-facto standard for reading device safe area insets in React Native apps. It exposes a SafeAreaProvider, a SafeAreaView component, and hooks like useSafeAreaInsets that give you the exact top, bottom, left, and right padding needed to keep your UI clear of notches, status bars, home indicators, and rounded corners.

Unlike the older platform-specific approaches, it works consistently across iOS, Android, web, macOS, and Windows, and supports the New Architecture (Fabric). Because insets are delivered as plain numbers through React context, you can drive layout, animations, and scroll offsets from them with full control instead of relying on an opaque wrapper component.

What You Get

  • A SafeAreaProvider that measures the device’s safe area and shares insets and frame through React context.
  • useSafeAreaInsets and useSafeAreaFrame hooks that return precise numeric insets and window dimensions.
  • A SafeAreaView component with configurable edges and padding/margin modes for declarative safe layouts.
  • Cross-platform native implementations for iOS, Android, web, macOS, and Windows, including New Architecture (Fabric) support.
  • initialMetrics and a SafeAreaListener for synchronous first render and imperative inset change handling.

Common Use Cases

  • Padding a screen’s header and footer so they clear the notch and home indicator on modern phones.
  • Positioning floating buttons or toolbars a fixed distance above the bottom safe area.
  • Building custom tab bars and navigation headers that adapt to each device’s insets.
  • Driving animated values or scroll offsets from the exact inset numbers instead of hardcoded constants.

Under The Hood

Architecture

The library splits a thin JavaScript layer from platform-native measurement code. src/SafeAreaContext.tsx defines two React contexts (SafeAreaInsetsContext and SafeAreaFrameContext) and the SafeAreaProvider, which wraps a NativeSafeAreaProvider and listens for an onInsetsChange event to update inset and frame state, memoizing to avoid re-renders when values are unchanged. Platform is resolved through file extensions (NativeSafeAreaProvider.web.tsx, .windows.tsx, .native.ts variants of InitialWindow), and the native side is generated via Fabric codegen (codegenConfig in package.json, specs under src/specs) with implementations in Objective-C/Objective-C++ (ios/), Kotlin/Java (android/), and shared C++ (common/). Consumer hooks read straight from context and throw a descriptive error when no provider is mounted.

Tech Stack

Written in TypeScript (strict tsconfig), built with react-native-builder-bob into CommonJS, ES module, and typings outputs. It declares react and react-native as peer dependencies with zero runtime dependencies of its own. Native code targets the New Architecture through React Native codegen; the repo uses Jest with @testing-library/react-native, ESLint, Prettier, clang-format, and Spotless for multi-language formatting.

Code Quality

The codebase is small, well-typed, and tested: src/__tests__ contains Jest suites for the context, the view, and initial-window metrics, including snapshot tests. Error handling is explicit (a clear NO_INSETS_ERROR thrown from the hooks), state updates are guarded against redundant renders, and deprecated APIs (useSafeArea, SafeAreaConsumer) are retained with @deprecated markers for backwards compatibility rather than removed abruptly.

API Design The public surface is deliberately minimal and ergonomic. useSafeAreaInsets() returns a plain { top, right, bottom, left } object, SafeAreaView offers declarative edges and mode props, and a withSafeAreaInsets HOC covers class components. Naming is consistent and discoverable, the single index.tsx re-exports everything, and setup requires only wrapping the app in one provider — a low-boilerplate, well-documented developer experience backed by a dedicated docs site.

Used by 28 apps in this directory

TypeScript
94%
AGPL 3.0

Papra

Bookmarks Archiving

5,587

Self-hosted document archiving with email ingestion, OCR full-text search, and pluggable storage — store once, find anything.

View details
86
Repo Health
82
Technical
69
Dependency
Built with
TypeScript 94%
Updated 1 weeks ago
TypeScript
98%
AGPL 3.0

paseo

AI Agents · AI Code Assistants

21,830

One unified interface to orchestrate Claude Code, Codex, Copilot, OpenCode, and Pi agents in parallel from desktop, mobile, or the terminal.

View details
88
Repo Health
83
Technical
66
Dependency
Built with
TypeScript 98%
Updated 6 days ago
Python
62%
Apache 2.0

Polar

Developer Tools · Ecommerce · Invoicing Finance

10,410

Open source payments infrastructure that turns software into a business — subscriptions, usage-based billing, digital products, and merchant-of-record compliance in one platform.

View details
90
Repo Health
82
Technical
66
Dependency
Built with
Python 62%
TypeScript 31%
Updated 1 weeks ago
TypeScript
96%
Apache 2.0

rakazo

AI Agents · AI Assistants

5,488

An open-source platform for persistent AI teammates that own their own conversations, memory, routines, and computers — self-hosted, model-agnostic, and available on web, desktop, and mobile.

View details
82
Repo Health
91
Technical
70
Dependency
Built with
TypeScript 96%
Updated 1 weeks ago
Rust
79%
AGPL 3.0

Spacedrive

Collaboration · File Storage

39,292

One file manager for all your devices and clouds — powered by a Virtual Distributed File System built in Rust.

View details
84
Repo Health
84
Technical
63
Dependency
Built with
Rust 79%
TypeScript 18%
Updated 2 weeks ago
TypeScript
83%
AGPL 3.0

Standard Notes

Note Taking

6,681

End-to-end encrypted notes and files — private by design, built to last, and fully self-hostable.

View details
89
Repo Health
83
Technical
68
Dependency
Built with
TypeScript 83%
JavaScript 14%
Updated 1 weeks ago
TypeScript
92%
Other

Suna

AI Agents

20,306

Turn your company into a git repo — one config, one command center, a workforce of AI agents that runs the real work around the clock.

View details
90
Repo Health
79
Technical
65
Dependency
Built with
TypeScript 92%
Updated 6 days ago
TypeScript
72%
Apache 2.0

Supabase

Authentication · Databases · Developer Tools

113,827

The open-source Postgres development platform that replaces Firebase with authentication, real-time APIs, edge functions, storage, and vector embeddings — all built on PostgreSQL.

View details
90
Repo Health
91
Technical
62
Dependency
Built with
TypeScript 72%
MDX 26%
Updated 6 days ago
TypeScript
85%
Apache 2.0

superset

AI Code Assistants · AI Development

15,503

Orchestrate an army of AI coding agents—Claude Code, Codex, Gemini CLI, and more—running simultaneously in isolated git worktrees from a single Electron desktop app.

View details
86
Repo Health
80
Technical
64
Dependency
Built with
TypeScript 85%
Updated 6 days ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers