Changelog
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[1.5.0] - 2026-02-11
Added
- Runtime Channel Switching: Added
switchChannel(channel)method touseOTAUpdates()hook, enabling production apps to switch update channels at runtime ("channel surfing") using Expo SDK 54'sUpdates.setUpdateRequestHeadersOverride(). - Added
isSwitchingChannelboolean state touseOTAUpdates()context for tracking switch progress. - Added
SwitchChannelResulttype export for typed channel switch responses. - Added "Channel surfing" section to the Expo Showcase demo controls screen with interactive channel buttons.
- Added a full Expo showcase app at
examples/demo(Expo SDK 54) to demo package UI/runtime behavior end-to-end. - Added a dedicated docs page for the showcase demo at
/examples/expo-showcase.
Changed
- Updated docs, README, and VitePress site to document runtime channel switching.
- Updated docs and README to reference the Expo showcase demo from all major sections.
[1.4.1] - 2026-02-10
Fixed
- Improved
OTAInfoScreenupdate ID resolution:- uses
Updates.updateIdwhen available - falls back to
Updates.manifest.idwhenupdateIdisnullin dev/client environments
- uses
- Improved
Update IDdisplay inOTAUpdateInfo:- shows a compact
prefix...suffixformat when available - shows
N/A (dev build)in development when no update ID is exposed by runtime
- shows a compact
- Improved
OTAInfoScreenscroll inset handling in tab navigators:- enabled automatic content and indicator inset adjustment
- increased bottom content padding for tab-hosted usage to avoid tab bar overlap
Changed
- Documented native navigation integration constraints for
OTAInfoScreen:- avoid rendering two headers at once (native stack + internal screen header)
- use standard native header mode for
OTAInfoScreenin tab routes - prefer fallback tabs on platforms/versions where native tabs features are unstable
[1.4.0] - 2026-02-10
Added
- Added
ota-publish revertcommand to rollback a channel by republishing a previous update group. - Added
ota-publish promotecommand to copy update groups between channels (e.g.preview -> production). - Added strict safety defaults for release-management commands:
- interactive group selection when
--groupis not provided - confirmation prompts by default
--dry-runpreview support--yesoverride to skip confirmation
- interactive group selection when
- Added runtime metadata field
lastSkippedReasontouseOTAUpdates()context. - Added provider config
recordSkippedChecksto control skipped-check metadata recording.
Changed
checkForUpdate()now records skipped checks more predictably (optionallastCheckupdate + skip reason) without breaking status semantics.UpdateBannernow works withoutexpo-linear-gradientby using an automatic solidViewfallback.- Updated docs and examples for new commands, skipped-check behavior, and gradient fallback.
- Updated Photo Trim App Store link to
https://apps.apple.com/app/id6755884114.
[1.3.0] - 2026-02-10
Added
- Implemented real
versionStrategy: "custom"withhooks.generateVersion. - Implemented real
changelog.source: "custom"withhooks.generateChangelog. - Added channel-aware template options:
versionFormatByChanneleas.messageFormatByChannelchannelAliaseswith{channelAlias}placeholder support.
- Added CLI one-off overrides:
--strategy--version-format- repeatable
--platform.
- Added
beforePublishoverride return support forchangelog,message, andversion. - Added typed CLI hook/context exports:
OTAHooks,BeforePublishContext,BeforePublishResult,AfterPublishContext,ErrorContext,CustomVersionContext,CustomChangelogContext,VersionTemplateVariables.
- Added provider config
minCheckIntervalMsfor throttled update checks.
Changed
- Replaced single-token string replacement with template rendering that handles repeated placeholders safely.
- Resolved
changelog.filePathrelative to project/config cwd. - Strengthened CLI config validation (channel map keys,
defaultChannel,filePathrequirement,customhook requirements). - Expanded
ota-publish inittemplate to include dynamic versioning/changelog examples. - Updated docs and CLI references across
/docs,README.md, andCLI.md.
[1.2.1] - 2025-12-08
Added
- Enhanced Render Props:
renderInfo,renderActions, andrenderChangelognow receive comprehensive prop objects (RenderInfoProps,RenderActionsProps, etc.) containing all necessary state and callbacks (e.g.,checkForUpdate,status,otaVersion). - Controlled Components:
OTAUpdateInfo,OTAUpdateActions, andOTAUpdateChangelognow accept partial props to override context values, enabling full customization.
Changed
- Documentation: Added detailed "Customization" guide to
info-screen.mdwith examples for custom components and render props. - Documentation: Optimized screenshot size in docs for better readability.
Fixed
- Types: Exported
RenderInfoProps,RenderActionsProps,RenderChangelogPropsfrom main package.
Added
- Refactored Architecture: Split
OTAInfoScreeninto modular, exported sub-components (OTAUpdateInfo,OTAUpdateActions,OTAUpdateChangelog). - Render Props: Added
renderInfo,renderActions,renderChangelogfor full UI customization. - Mode Support: Added
modeprop ('developer' | 'user') toOTAInfoScreento toggle between debug-heavy and user-friendly views. - Improved Feedback: Added native alerts for "Check for Update" results (Available, Up to Date, Error, Skipped).
- Simulation Mode: Added
simulateUpdate()debug action to test update flows without a real update. - Granular Control: Added explicit visibility props (
showRuntimeVersion,showUpdateId, etc.) to toggle individual info rows. - Enhanced UI: Completely redesigned with a modern card-based layout, grouped info sections, and distinct action buttons.
Changed
- Accessibility: Moved critical Action Buttons and Debug tools above the Changelog section to eliminate scrolling.
- Visuals: improved spacing, typography, and section separation.
Fixed
- Fixed missing
downloadingstatus in TypeScript definitions.
[1.1.5] - 2025-12-07
Fixed
- Fixed documentation home page layout features section.
- Updated README with clearer global CLI usage instructions.
[1.1.4] - 2025-12-07
Fixed
- Added missing
binfield topackage.jsonto properly linkota-publishexecutable. - Fixed
command not founderror when running vianpx.
[1.1.3] - 2025-12-07
Added
- Documentation Site: Launched comprehensive VitePress documentation.
- 15+ pages covering Guides, UI Components, CLI, and Examples.
- Search functionality and mobile responsive design.
- Screenshots: Added visual showcase for UI components in README and Docs.
- GitHub Actions: Automated workflow to deploy documentation to GitHub Pages on push.
- Marketing: Added
MARKETING.mdwith social media assets.
Changed
- Updated
README.mdwith dedicated documentation section and improved navigation. - Removed Photo Trim logo from global docs navigation (now in sponsor section).
[1.1.0] - 2025-12-07
Changed
- Initial npm release.
- Updated package exports for better ESM/CJS compatibility.
[1.0.0] - 2025-12-07
Added
UI Components
OTAUpdatesProvidercontext provider with state managementUpdateBanneranimated component with gradient and pulse animationOTAInfoScreenfull debug/info screen with changelog displayuseOTAUpdateshook for accessing update state and actions- Full theming support with dark and light presets
- i18n support with customizable translations
- Render props for component customization
- Icon support using lucide-react-native with text fallbacks
- Auto-check on mount and foreground
- Debug
simulateUpdate()function for testing
CLI Publishing Tool
ota-publishCLI command for publishing OTA updatesota-publish initcommand to initialize configuration- Configuration system using cosmiconfig (supports
.js,.mjs,.json) - Zod schema validation for type-safe configuration
- Multiple version strategies:
build— Increment build number only (default)semver— Auto-increment patch versiondate— Date-based versioning
- Multiple changelog sources:
git— Auto-generate from git commits (default)manual— Interactive promptsfile— Read from CHANGELOG.md or custom file
- Interactive mode with prompts (
--interactive) - Dry-run support (
--dry-run) - Custom changelog messages (
--message) - Hooks system for custom logic:
beforePublish— Run before publishingafterPublish— Run after successful publishonError— Handle publish errors
- EAS integration with automatic publishing
- Multi-channel support (development, preview, production)
- Beautiful CLI output with colors and spinners
Documentation
- Comprehensive README with usage examples
- Separate CLI documentation (CLI.md)
- TypeScript type definitions
- MIT License
- Marketing section featuring Photo Trim app
Build & Distribution
- Dual build output (CJS + ESM) for UI components
- ESM build for CLI tool
- TypeScript declarations (.d.ts)
- Executable bin wrapper
- Proper package.json exports configuration
Planned
- GitHub Actions workflow examples
Want to feel the package end-to-end first? Try the Expo Showcase Demo.