Changelog
Notable changes to the template. Versions follow Semantic Versioning. Apps made from the template own their copy of the code, so a new version reaches an app only when its authors apply the changes.
Unreleased
Section titled “Unreleased”- Every dependency in
package.jsonis pinned to an exact version (it already was in the lockfile), andpnpm addnow saves exact versions (savePrefix: ''inpnpm-workspace.yaml), as AGENTS.md asks. - ESLint, Prettier and Jest skip
.claude/, sopnpm checkno longer lints and tests the copies of the repo that Claude Code keeps in.claude/worktrees/. concurrent-ruby(used by CocoaPods and fastlane) goes from 1.3.3 to 1.3.8, which fixes three security advisories. The Gemfile’s< 1.3.4pin came from the React Native template and was only needed with activesupport older than 7.1; the lockfile has 7.2.4, so the Gemfile now asks for>= 1.3.7.
0.3.2 (2026-10-19)
Section titled “0.3.2 (2026-10-19)”A new logo, and pnpm splash keeps the markers that point to each native change.
- New logo: a boat whose mainsail is a B (ADR 0019). It replaces the stacked layers in the app icon (every environment), the splash screen, the README, the website header, favicon and share image. Apps made from the template start with it as their placeholder icon and splash.
pnpm splashkeeps the[bareship]marker comments inAndroidManifest.xml. react-native-bootsplash’s generator drops every comment from the manifest, soscripts/splash.tsnow runs it and puts the manifest back; if.MainActivitydoesn’t useBootTheme, it keeps the generated manifest and lists the comments to restore by hand.
0.3.1 (2026-10-19)
Section titled “0.3.1 (2026-10-19)”The npm pages: create-bareship becomes the page to start from. No changes to the app’s code.
create-bareship’s npm page shows the full README, with screenshots and what’s inside, instead of a short options list; it also has the template’s search keywords.bareship’s page keeps the same README under its “template, not a library” note, which now links tocreate-bareship. Links in both point at GitHub.- README: the installer’s options table is in the quick start, and the npm badge and link go to
create-bareship. The website’s npm icon,llms.txtand search data point there too. scripts/ci/check-create.shchecks that both npm READMEs have the quick start and screenshots and no relative links.- The app’s README says that an app made with
npx create-bareshipis already installed, and gives a teammate’s clone steps (pnpm install,bundle install,pnpm pods) instead of asking forbootstrap. - Website: the home page, FAQ, introduction and AI agents page create the app with
npx create-bareship.
0.3.0 (2026-10-19)
Section titled “0.3.0 (2026-10-19)”npx create-bareship Acmecreates an app in one command (ADR 0018). It checks the tools first (Node, pnpm, Ruby and Bundler, Java 21, Xcode on a Mac) and says how to fix anything missing, asks for the bundle id and display name (or takes--bundle-id,--display-nameand--yes), then runsinit,pnpm install,bundle installandpnpm bootstrap, and makes the first git commit.create-bareship@Xcreates apps frombareship@X. It has no dependencies.- The
bareshippackage runs the same installer as its bin, sonpx bareship Acmeworks too, and its npm page says at the top that it’s a template, not a library to install. - README and website: the quick start leads with
npx create-bareship; the manual steps stay as a fallback. pnpm pack-templatepacks both packages, andscripts/ci/check-create.shcreates an app through each and runs its checks. The installer isn’t copied into apps.
0.2.0 (2026-10-17)
Section titled “0.2.0 (2026-10-17)”Hindi replaces Arabic as the second language, and right-to-left becomes a switch per language. Apps made from 0.1.x keep Arabic until their authors apply these changes.
- Hindi replaces Arabic as the second language (ADR 0017).
Right-to-left stays supported as
rtl: trueon a language inLANGUAGES; tests cover the direction switch and mirrored icons without shipping an RTL language. - Lint rejects
left/rightstyle keys andtextAlign: 'left' | 'right'; usestart/end. pnpm genandpnpm strip-exampleswork on every locale file, so adding a language needs no script changes.- Fix: dates and relative times (“2 days ago”) stayed in the old language after a switch in Settings,
because the React Compiler cached the formatted text. Components now use
useFormat()from@/shared/lib/format, and lint rejects plainformatRelative/formatDate/formatNumbercalls in JSX. - README and website: the screenshots show the feed and Settings in Hindi instead of Arabic.
- Docs: a languages guide (how it works, adding a language or a right-to-left one), on the website under Build your app.
0.1.2 (2026-10-17)
Section titled “0.1.2 (2026-10-17)”Screenshots on the npm page. No changes to the app’s code.
- README and website: screenshots of the demo app on iOS and Android (feed, offline with a like waiting to sync, dark theme, Arabic right to left, settings, sign-in). The website shows them in iOS and Android tabs.
- The npm package leaves out the screenshots (
assets/screenshots/), so apps made from it don’t carry them.
0.1.1 (2026-10-17)
Section titled “0.1.1 (2026-10-17)”Fixes pnpm bootstrap for apps made with init, following the quick start.
- Docs and website: the React Native CLI (npm package
bareship) is the first way to create an app; an npm link in the site header; FAQ answers on versions and updates. - Fix
pnpm bootstrapon an app made withinit: a bundle id that extends the packageinitset (com.acme→com.acme.app, as in the quick start) crashed while moving the Android package folder, after the files were already rewritten. A second run then said “Nothing to rename” and skippedpod install, so the iOS build failed. Bootstrap now moves the folder through a temporary one, and still sets up the iOS configs and pods when there is nothing to rename. pnpm bootstrap --nameis optional and defaults to the app’s current name, sinceinitalready sets it. The quick start is nowpnpm bootstrap --bundle-id com.acme.app --display-name "Acme"; a copy of the GitHub repository still passes--name.scripts/ci/check-template-init.shruns that exact case.
0.1.0 (2026-10-14)
Section titled “0.1.0 (2026-10-14)”The first release, on npm as bareship
(npx @react-native-community/cli@20.2.0 init Acme --template bareship --skip-install --install-pods false)
and as a GitHub template repository. It collects everything below.
App README and code of conduct
Section titled “App README and code of conduct”- Apps made with
initget their own README (scripts/app-readme.md): how to run, customise and release the app, with no links to the template’s own files.scripts/ci/check-template-init.shchecks it and the links in the app’s docs. - README: a new header with the logo, a tagline and quick links, and a direct Use this template link.
CODE_OF_CONDUCT.md(Contributor Covenant 2.1).
Public, with a website
Section titled “Public, with a website”- The repository is public and a GitHub template repository.
- Website and docs live at https://bareship.praveensingh.co.in with a sitemap and
robots.txt(ADR 0016). Vercel deploys it on every push tomain. - The website builds without the app’s packages installed (Vercel), and the Offline and AI agents pages
are now committed (the root
.gitignorehid them).
Renamed to Bareship
Section titled “Renamed to Bareship”- The template is now Bareship (was
rn-template): npm packagebareship, repositorypsingh2907/bareship, code markers[bareship](ADR 0015). - The app inside the template is renamed with
pnpm bootstrap: bundle idcom.bareshipapp, URL schemebareshipapp://. Apps made withinitget their own names, as before. - Docs: run
pnpm podsagain after apnpm installthat changesnode_modules(Skia’s iOS binaries).
Phase 5: packaging
Section titled “Phase 5: packaging”pnpm strip-examplesremoves the demo (feed, posts mocks, showroom) and leaves a blank Home tab;scripts/ci/check-strip-examples.shchecks the stripped app.- npm template for the React Native CLI (
pnpm pack-template), checked end to end byscripts/ci/check-template-init.sh. pnpm bootstrapchecks for the Ruby gems before renaming anything.- MIT license, contributing and security guides, issue templates.
- The tab navigator’s route is
Main(wasHome), so an app’s own Home tab doesn’t clash with it.
Phase 4: quality tooling
Section titled “Phase 4: quality tooling”- Lint sweep: no barrel files, React Compiler lint rules, ARIA accessibility props.
pnpm gen feature|screen|endpointand theadd-feature,add-screen,add-endpointagent skills.- fastlane lanes for version bumps, release builds, match signing, TestFlight and Play uploads.
- Postponed: Maestro end-to-end tests, Reassure, startup metrics, bundle report.
Phase 3: production
Section titled “Phase 3: production”- Offline write queue (patterns A–D), offline banner and “waiting to sync” states.
- Optional Firebase: Crashlytics, Analytics, Remote Config, FCM push with local notifications.
- Deep links and universal / App Links, force update and maintenance mode, demo APK.
Phases 0–2: foundation and app layer
Section titled “Phases 0–2: foundation and app layer”- Decisions (ADRs), three environments, splash, icons,
pnpm bootstrap, CI. - API client with Zod, TanStack Query persisted to MMKV, React Navigation static API, Unistyles design system, English and Arabic (RTL), forms, auth, feed and settings, MSW mock backend.
Made by Praveen Singh, Senior React Native engineer