AI Decision System
Replayable, offline-verifiable records for AI-assisted go/no-go decisions: experiment promotions, typed model answers and human-approved actions.
Bareship은 팀과 AI 에이전트를 위한 오프라인 우선, 프로덕션 수준의 최소 React Native 템플릿입니다
Bareship is a production-ready, offline-first bare React Native template for teams and AI agents: offline writes, Keychain tokens, an enforced architecture, and it runs with no accounts.
개발 도구TypeScript · HTMLGitHub @psingh2907온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Production-ready, offline-first bare React Native template for teams and AI agents. Create an app: npx create-bareship MyApp
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Bareship uses the React Native CLI and takes the best ideas from Ignite, Obytes, TheCodingMachine and large open-source apps (Bluesky, Expensify), and adds what they leave out: an offline write queue, Keychain token storage, enforced architecture, optional Firebase and a supply-chain policy.
It runs with no accounts. No backend, Firebase project or Apple Developer team is needed to build it, run it, or install it on a phone: the dev build serves sample data from a mock backend inside the app. You add each service when you need it (going live).
Status: 0.3.2, on npm and as a GitHub template.
npx create-bareshipcreates an app in one command. An app made from the npm package builds and runs on iOS and Android, and the fastlane release builds pass on both. CI checks every pull request. Next: proving the native CI builds. See the roadmap and known limitations.
ios/ and android/. Every native edit is marked in the code and
logged with its Expo equivalent, so an Expo (CNG) version can share the same src/ later.AGENTS.md, ADRs and Callstack's React Native agent skills give Claude
Code, Copilot and other agents the same rules as your team.Requirements:
.nvmrc pins 24)corepack enable picks up the pinned version).ruby-version) with Bundler, Java 21Create the app:
npx create-bareship Acme
cd Acme
pnpm ios # or: pnpm android
create-bareship checks these tools first and says how to fix anything missing. It asks for the bundle id
and display name, then creates the app from the template, installs its dependencies, sets the bundle id, runs
pod install and makes the first git commit. npx bareship Acme does the same.
| Option | What it does |
|---|---|
--bundle-id <id> | Reverse-domain bundle id, like com.acme.app. Default: com.<appname>.app |
--display-name <name> | Name under the app icon. Default: the app name |
-y, --yes | Ask nothing and use the defaults, for CI and AI agents |
--skip-pods | Don't run pod install, for an Android-only setup. Always on outside macOS |
--skip-checks | Don't check the tools first |
--dry-run | Check the tools, then print the commands without running them |
For example, with no questions:
npx create-bareship Acme --bundle-id com.acme.app --display-name "Acme" --yes. Each version of
create-bareship creates the app from the same version of the template.
These are the steps create-bareship runs. The React Native CLI's init can't install with pnpm, so skip
its install. Leave out --package-name: it breaks the per-environment iOS bundle ids, and bootstrap sets
the id instead.
npx @react-native-community/[email protected] init Acme --template bareship --skip-install --install-pods false
cd Acme
pnpm install
bundle install
pnpm bootstrap --bundle-id com.acme.app --display-name "Acme"
pnpm android # or: pnpm ios
Or start from a copy of this repository: click
Use this template on GitHub (or clone it), then run
pnpm install and bundle install in your copy, and give bootstrap the app's name too:
pnpm bootstrap --name Acme --bundle-id com.acme.app --display-name "Acme". The copy also holds the
template's own files (website, changelog, contributing guide), which the npm package leaves out.
Start the emulator (or plug in a phone) before pnpm android: debug builds compile native code only for the
connected device's CPU. With no device connected they build all four Android CPU types, which takes about
four times as long.
On recent Android versions the first debug run asks to find and connect to nearby devices. Allow it: the debug build reaches Metro on your computer through the local network, and without the permission it shows "Unable to load script".
bootstrap sets the bundle ids and display names of all three environments and moves the Android package to
match, then runs pod install. With --name it also renames the Xcode project, schemes and URL schemes;
init already did that for you. Run it once on a fresh app. To try a copy of the repository without
renaming it, run pnpm pods instead.
Run pnpm pods again after any pnpm install that changes node_modules. Skia copies its iOS binaries into
node_modules during pod install, so a reinstall removes them, and the iOS build then fails with
libskia.xcframework/ios-arm64_arm64e: No such file or directory.
Sign in with [email protected] / password123. To try it on an Android phone without a computer
attached, build the demo APK.
When you're ready to build your own app, run pnpm strip-examples once. It removes the demo feed and
component showroom and leaves a blank Home tab, with sign-in, onboarding and settings still working. Then
add your own features, screens and API calls with pnpm gen (generators).
App
rtl: true away: layouts use start/end, and lint rejects left/right (languages).Data and offline
Production
.env file. Config is validated at launch (environments).https:// links once you add a domain. pnpm links:files writes the files your website
serves. A link that arrives while signed out opens after sign-in.Quality
role, aria-label) over the legacy accessibility* ones.shared/ and data/.native, run the workflow by hand, or set the repository variable NATIVE_BUILDS=true to build
on every push to main (ADR 0014). The native builds haven't
passed in this repository yet, see known limitations.For AI agents
CLAUDE.md and
.github/copilot-instructions.md point to it..claude/skills/ and pinned to a commit. Update them with pnpm skills:sync.add-feature, add-screen and add-endpoint, run the generators and walk
an agent through the rest: fields, offline pattern, strings, tests.src/
app/ composition: providers, navigation, boot sequence
features/ auth, feed, settings, onboarding, app-status, showroom
entities/ models shared by features: user, session, push, app-status
data/ query client, persisted cache, offline queue
shared/ ui, api, ports and adapters, i18n, config, lib (no business logic)
mocks/ MSW mock backend (dev builds, tests, demo APK)
Imports go downward only: app → features → entities → data → shared, and features never import each
other. Native and vendor libraries sit behind ports in shared/ports, so swapping a vendor changes one
adapter. See architecture.
| Command | What it does |
|---|---|
pnpm android, pnpm android:staging, pnpm android:prod | Run a debug build of that environment |
pnpm ios, pnpm ios:staging, pnpm ios:prod | Same on iOS |
pnpm pods | pod install through Bundler |
pnpm build:android:dev, pnpm build:android:staging | Release APK of that environment |
pnpm build:android:prod | Release App Bundle for Play |
pnpm build:android:demo | Release APK with sample data, for trying the app on a phone (guide) |
bundle exec fastlane bump version:1.2.0 | Set the version on both platforms and raise the build number |
bundle exec fastlane android build, … ios build | Release builds; beta lanes upload (releasing) |
pnpm check | Typecheck, lint, format check, boundaries, tests |
pnpm bootstrap | Set the bundle id and display name, and rename a copy of the repository (see quick start) |
pnpm pack-template | Build the npm packages, bareship and its installer create-bareship, into dist/npm/ (packaging) |
pnpm strip-examples | Remove the demo (feed, posts, showroom) and leave a blank Home tab; sign-in, onboarding and settings stay |
pnpm icons | Regenerate app icons from assets/brand/icon.svg |
docs/going-live.md lists what to add before release and what each step switches on: your API, release signing, Firebase, iOS push, a link domain and the Remote Config keys. Each step is independent; the rest of the app keeps working without it.
| Doc | What it covers |
|---|---|
| Website | All of these docs as a searchable site |
| AGENTS.md | Rules and conventions for contributors and AI agents |
| Architecture | Layers, data flow, session, ports and adapters, boot |
| Environments | dev, staging and prod: ids, .env files, flavors and schemes |
| Going live | API, signing, Firebase, push, links, force update |
| Packaging | How the npm template and the GitHub template are built and checked (maintainers) |
| Generators | Add features, screens and API calls with pnpm gen |
| Languages | English and Hindi, adding a language, and right-to-left |
| Releasing | fastlane lanes: release builds, version bump, TestFlight and Play uploads |
| Demo build | Installing the sample-data APK on an Android phone |
| Decisions (ADRs) |
.ruby-version for iOS; swap, two Gradle workers and time
limits for the Android builds, which ran out of memory on 8 GB private runners) are in the workflow but
haven't run on the larger public runners yet. GitHub's macOS image has Xcode 26.x, not 27, so the iOS job
is unproven too.Released (0.1 to 0.3)
| Area | What's included |
|---|---|
| Foundation | Decision records, version matrix, tooling, three environments, splash and icons, pnpm bootstrap |
| App | API client, TanStack Query with MMKV, navigation, design system, i18n, forms, sign-in, demo feed, mock backend |
| Production | Offline queue and UI, Firebase, push, force update, deep links, an OTA port, fastlane |
| Quality | Lint rules, generators with agent skills, tests with a coverage gate, a CI workflow |
| Distribution | npm package bareship, GitHub template, pnpm strip-examples, MIT license, website |
| Languages (0.2) | English and Hindi, right-to-left as a switch per language, a lint rule for start/end, a languages guide |
| Installer (0.3) | npx create-bareship Acme (or npx bareship Acme) checks the tools and creates the app in one command (ADR 0018) |
Next
| Item | Status |
|---|---|
| CI checks on every pull request, required to merge | Done |
| Native CI builds passing: Android memory use, Xcode 27 on the macOS runner | Next |
| Right-to-left text alignment on iOS | Done |
| Screen titles that follow a language switch without a restart, and the iOS back-button label | Done |
| End-to-end tests with Maestro | Postponed |
| Performance tooling: Reassure render baselines, startup metrics, a bundle report | Postponed |
An Expo (CNG) version that shares the same src/ | Later |
Contributions are welcome. CONTRIBUTING.md covers the whole path: what to open first, how to make and test a change, and how a pull request gets reviewed, merged and released.
pnpm check, and title the pull request as a
Conventional Commit (fix(feed): …). Changing a recorded decision needs a new ADR.Everyone follows the code of conduct. Report security issues privately (SECURITY.md).
MIT © 2026 Praveen Singh.
pnpm splash | Regenerate the splash screen from assets/brand/logo.svg |
pnpm gen feature|screen|endpoint | Scaffold a feature, screen or endpoint that follows the rules (AGENTS.md) |
pnpm links:files | Files your website serves so its links open the app (going live) |
pnpm skills:sync | Update the vendored agent skills to another upstream commit |
pnpm site:dev, pnpm site:build | Run or build the website and docs in website/ (editing the website) |
| Why each library and pattern was chosen |
| Native changes | Every edit to ios/ and android/, with its Expo equivalent |
| Version matrix | Toolchain and library versions, and what was checked |
| Best-practices audit | Audit against the agent skills, and open items |
| Research | The templates and apps studied, and what was taken from each |