<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>React Native Pickers Blog</title>
        <link>https://react-native-pickers.dev/blog</link>
        <description>React Native Pickers Blog</description>
        <lastBuildDate>Mon, 09 Nov 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[React Native Pickers 1.0: a stable API, and calendars that show your events]]></title>
            <link>https://react-native-pickers.dev/blog/react-native-pickers-1-0</link>
            <guid>https://react-native-pickers.dev/blog/react-native-pickers-1-0</guid>
            <pubDate>Mon, 09 Nov 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[React Native Pickers reaches 1.0: a stable, semver-guarded API for 30+ pure-JS pickers, plus a new Timeline (day and week view) and Agenda for React Native, Expo and the web.]]></description>
            <content:encoded><![CDATA[<p>React Native Pickers is 1.0. The API you've been building on is now stable: from here on, anything that would break your code waits for a major version, announced with a migration guide. And 1.0 brings the piece the library was missing: calendars that show your events, with a new <a class="" href="https://react-native-pickers.dev/docs/components/timeline"><code>Timeline</code></a> and <a class="" href="https://react-native-pickers.dev/docs/components/agenda"><code>Agenda</code></a>.</p>
<div class="language-bash codeBlockContainer_BE0R theme-code-block" style="--prism-color:var(--code-text);--prism-background-color:var(--site-code)"><div class="codeBlockContent_fy2P"><pre tabindex="0" class="prism-code language-bash codeBlock_vuUB thin-scrollbar" style="color:var(--code-text);background-color:var(--site-code)"><code class="codeBlockLines_aaS4"><div class="token-line" style="color:var(--code-text)"><span class="token function" style="color:var(--code-function)">npm</span><span class="token plain"> </span><span class="token function" style="color:var(--code-function)">install</span><span class="token plain"> @elik56a/react-native-pickers@^1</span><br></div></code></pre></div></div>
<!-- -->
<h2 class="anchor anchorTargetHideOnScrollNavbar__c4Z" id="where-it-stands">Where it stands<a href="https://react-native-pickers.dev/blog/react-native-pickers-1-0#where-it-stands" class="hash-link" aria-label="Direct link to Where it stands" title="Direct link to Where it stands" translate="no">​</a></h2>
<p>Thirty releases in, the library covers what an app asks people to pick, with one dependency-free package: wheels, times and time ranges, durations, dates and date ranges, months, week strips and expandable calendars, date-times, searchable selects, countries and phone numbers, languages, currencies and amounts, time zones, emoji, colors, a slider, star ratings and one-time codes, plus the bottom sheets, action sheets, menus and form fields around them.</p>
<p>Every one of them follows its platform: the iOS design on iPhone, Material 3 on Android, and a design of its own in the browser, all from the same props. None of it is native code, so it runs in Expo Go, bare React Native and React Native Web without a rebuild, and drags and scrolls still run on the UI thread through <code>Animated</code>'s native driver.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar__c4Z" id="new-timeline">New: Timeline<a href="https://react-native-pickers.dev/blog/react-native-pickers-1-0#new-timeline" class="hash-link" aria-label="Direct link to New: Timeline" title="Direct link to New: Timeline" translate="no">​</a></h2>
<p><a class="" href="https://react-native-pickers.dev/docs/components/timeline"><code>Timeline</code></a> is a calendar's day view, or up to a week of days side by side: a grid of hours with each event placed by its time.</p>
<ul>
<li class="">Events that overlap share the width, side by side, and widen into the columns free beside them, as calendar apps lay them out.</li>
<li class="">All-day events sit in a row over the grid, and a line marks the current time across today.</li>
<li class="">A swipe moves to the next days, and a tap on an empty part of the grid hands you the slot it points at, to add an event there.</li>
<li class="">On iOS, events are tinted with their color and the current time sits in a red pill, as in Calendar. In Material and on the web they're filled with their color, and a dot starts the now line, as in Google Calendar.</li>
</ul>
<div class="language-tsx codeBlockContainer_BE0R theme-code-block" style="--prism-color:var(--code-text);--prism-background-color:var(--site-code)"><div class="codeBlockContent_fy2P"><pre tabindex="0" class="prism-code language-tsx codeBlock_vuUB thin-scrollbar" style="color:var(--code-text);background-color:var(--site-code)"><code class="codeBlockLines_aaS4"><div class="token-line" style="color:var(--code-text)"><span class="token tag punctuation" style="color:var(--code-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--code-tag)">Timeline</span><span class="token tag" style="color:var(--code-tag)"> </span><span class="token tag attr-name" style="color:var(--code-attr)">events</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--code-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--code-tag)">events</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">}</span><span class="token tag" style="color:var(--code-tag)"> </span><span class="token tag attr-name" style="color:var(--code-attr)">numberOfDays</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--code-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">{</span><span class="token tag script language-javascript number" style="color:var(--code-number)">3</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">}</span><span class="token tag" style="color:var(--code-tag)"> </span><span class="token tag attr-name" style="color:var(--code-attr)">onEventPress</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--code-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--code-tag)">openEvent</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">}</span><span class="token tag" style="color:var(--code-tag)"> </span><span class="token tag attr-name" style="color:var(--code-attr)">onSlotPress</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--code-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">{</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">(</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--code-tag)"> start</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--code-tag)"> end </span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">}</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">)</span><span class="token tag script language-javascript" style="color:var(--code-tag)"> </span><span class="token tag script language-javascript arrow operator" style="color:var(--code-punctuation)">=&gt;</span><span class="token tag script language-javascript" style="color:var(--code-tag)"> </span><span class="token tag script language-javascript function" style="color:var(--code-function)">addEvent</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">(</span><span class="token tag script language-javascript" style="color:var(--code-tag)">start</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">,</span><span class="token tag script language-javascript" style="color:var(--code-tag)"> end</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">)</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">}</span><span class="token tag" style="color:var(--code-tag)"> </span><span class="token tag punctuation" style="color:var(--code-punctuation)">/&gt;</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetHideOnScrollNavbar__c4Z" id="new-agenda">New: Agenda<a href="https://react-native-pickers.dev/blog/react-native-pickers-1-0#new-agenda" class="hash-link" aria-label="Direct link to New: Agenda" title="Direct link to New: Agenda" translate="no">​</a></h2>
<p><a class="" href="https://react-native-pickers.dev/docs/components/agenda"><code>Agenda</code></a> lists the same events day by day. On iOS each day gets a band that sticks to the top while its events scroll under it; in Material and on the web, the date sits beside each day's events, as in Google Calendar's schedule. It scrolls to the day you give it and tells you the day at the top as the user scrolls, so it stays in step with an <a class="" href="https://react-native-pickers.dev/docs/components/expandable-calendar"><code>ExpandableCalendar</code></a> above it:</p>
<div class="language-tsx codeBlockContainer_BE0R theme-code-block" style="--prism-color:var(--code-text);--prism-background-color:var(--site-code)"><div class="codeBlockContent_fy2P"><pre tabindex="0" class="prism-code language-tsx codeBlock_vuUB thin-scrollbar" style="color:var(--code-text);background-color:var(--site-code)"><code class="codeBlockLines_aaS4"><div class="token-line" style="color:var(--code-text)"><span class="token keyword" style="color:var(--code-keyword)">const</span><span class="token plain"> </span><span class="token punctuation" style="color:var(--code-punctuation)">[</span><span class="token plain">day</span><span class="token punctuation" style="color:var(--code-punctuation)">,</span><span class="token plain"> setDay</span><span class="token punctuation" style="color:var(--code-punctuation)">]</span><span class="token plain"> </span><span class="token operator" style="color:var(--code-punctuation)">=</span><span class="token plain"> </span><span class="token function" style="color:var(--code-function)">useState</span><span class="token punctuation" style="color:var(--code-punctuation)">(</span><span class="token keyword" style="color:var(--code-keyword)">new</span><span class="token plain"> </span><span class="token class-name" style="color:var(--code-tag)">Date</span><span class="token punctuation" style="color:var(--code-punctuation)">(</span><span class="token punctuation" style="color:var(--code-punctuation)">)</span><span class="token punctuation" style="color:var(--code-punctuation)">)</span><span class="token punctuation" style="color:var(--code-punctuation)">;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--code-text)"><span class="token plain" style="display:inline-block"></span><br></div><div class="token-line" style="color:var(--code-text)"><span class="token plain"></span><span class="token tag punctuation" style="color:var(--code-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--code-tag)">ExpandableCalendar</span><span class="token tag" style="color:var(--code-tag)"> </span><span class="token tag attr-name" style="color:var(--code-attr)">value</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--code-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--code-tag)">day</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">}</span><span class="token tag" style="color:var(--code-tag)"> </span><span class="token tag attr-name" style="color:var(--code-attr)">onChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--code-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--code-tag)">setDay</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">}</span><span class="token tag" style="color:var(--code-tag)"> </span><span class="token tag punctuation" style="color:var(--code-punctuation)">/&gt;</span><span class="token plain"></span><br></div><div class="token-line" style="color:var(--code-text)"><span class="token plain"></span><span class="token tag punctuation" style="color:var(--code-punctuation)">&lt;</span><span class="token tag class-name" style="color:var(--code-tag)">Agenda</span><span class="token tag" style="color:var(--code-tag)"> </span><span class="token tag attr-name" style="color:var(--code-attr)">events</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--code-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--code-tag)">events</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">}</span><span class="token tag" style="color:var(--code-tag)"> </span><span class="token tag attr-name" style="color:var(--code-attr)">selectedDate</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--code-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--code-tag)">day</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">}</span><span class="token tag" style="color:var(--code-tag)"> </span><span class="token tag attr-name" style="color:var(--code-attr)">onVisibleDateChange</span><span class="token tag script language-javascript script-punctuation punctuation" style="color:var(--code-punctuation)">=</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">{</span><span class="token tag script language-javascript" style="color:var(--code-tag)">setDay</span><span class="token tag script language-javascript punctuation" style="color:var(--code-punctuation)">}</span><span class="token tag" style="color:var(--code-tag)"> </span><span class="token tag punctuation" style="color:var(--code-punctuation)">/&gt;</span><br></div></code></pre></div></div>
<p>Both take one flat array of plain objects, <code>{ id, title, start, end }</code> with an optional <code>color</code>, <code>subtitle</code> and <code>allDay</code>, and give your own event type back in every callback. Coming from <code>react-native-calendars</code>? The <a class="" href="https://react-native-pickers.dev/docs/resources/migration/react-native-calendars#agenda-agendalist-and-timeline">migration guide</a> maps its <code>AgendaList</code> and <code>Timeline</code> props.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar__c4Z" id="what-10-promises">What 1.0 promises<a href="https://react-native-pickers.dev/blog/react-native-pickers-1-0#what-10-promises" class="hash-link" aria-label="Direct link to What 1.0 promises" title="Direct link to What 1.0 promises" translate="no">​</a></h2>
<ul>
<li class=""><strong>Semantic versioning, for real.</strong> A minor release adds; a patch fixes. Removing or renaming a component, prop or export, changing a default or the shape of a value, or raising the lowest supported React Native version is a major release.</li>
<li class=""><strong>Deprecation before removal.</strong> What's going away is marked <code>@deprecated</code> in a minor release, with the replacement in the docs, and removed no sooner than the next major.</li>
<li class=""><strong>Looks follow the platforms.</strong> Matching a platform's own design more closely, such as a new iOS or Material look, ships in minor releases. Pin a version, or set <code>theme</code> and <code>styles</code>, to freeze a look.</li>
</ul>
<p>The whole policy is on the <a class="" href="https://react-native-pickers.dev/docs/resources/versioning">versioning and stability</a> page.</p>
<h2 class="anchor anchorTargetHideOnScrollNavbar__c4Z" id="upgrading-from-030">Upgrading from 0.30<a href="https://react-native-pickers.dev/blog/react-native-pickers-1-0#upgrading-from-030" class="hash-link" aria-label="Direct link to Upgrading from 0.30" title="Direct link to Upgrading from 0.30" translate="no">​</a></h2>
<p>There's nothing to change: 1.0 is 0.30.1 plus <code>Timeline</code> and <code>Agenda</code>. Bump the version and you're done.</p>
<p>Thank you to everyone who filed an issue, sent a pull request or asked for a picker that wasn't there yet. Tell us what to build next on <a href="https://github.com/elik56a/react-native-pickers/issues" target="_blank" rel="noopener noreferrer" class="">GitHub</a>.</p>]]></content:encoded>
            <category>release</category>
        </item>
    </channel>
</rss>