Skip to content

Releases: 8848digital/reactant

Release list

Reactant v1.0.0

Choose a tag to compare

@karan1633 karan1633 released this 13 Jul 13:23

Reactant v1.0.0

The first stable release of Reactant — an offline-first starter for web + React Native products on a Frappe backend.

Reactant is not a library you depend on; it's a repository you own. Clone it, run one personalizer, and start building. The hard parts — on-device storage, sync, an authenticated API client, and a monorepo that keeps web and native honest — ship pre-wired as versioned packages. Everything under apps/ and packages/{core,ui-web,ui-native} is yours to edit.


Highlights

  • Offline-first by default. The @8848digital/offline-kit engine (on-device storage + sync) and the @8848digital/catalyst chassis (API client, React Query, auth, Frappe sync transport) come installed and wired. Boot glue lives in apps/web and apps/native/src/bootstrap.ts — you plug in your product, not the plumbing.
  • One codebase, two front doors. A pnpm + Turborepo workspace shares a single @app/core (features, domain types, endpoints, design tokens) across a Next.js web app and a bare React Native app, with React and React Native versions pinned to one resolution across the tree.
  • Web on Next.js (App Router). The web app runs on Next.js 15 + React 19 + Tailwind. The welcome screen boots with no backend required, so a fresh clone is runnable in minutes.
  • A feature convention that scales. Vertical slices (hooks → repo → data/{local,remote}, with usecases/outbox for writes) enforce one downward dependency direction. ESLint guards the boundary: only the DB layer may touch getOfflineDb or run SQL.
  • Neutral, brandable foundation. Design tokens are placeholder values with a fixed shape — rebrand by editing values, never by hardcoding. No domain-specific naming, fonts, or icons leak into your product.
  • Safe to ship. Android release builds require your upload keystore and refuse to silently fall back to the public debug key; iOS and Android declare no permissions you didn't ask for; native identity is a clearly marked, one-time checklist item.

What's included

Chassis & engine (installed)

  • @8848digital/offline-kit — on-device storage + sync engine.
  • @8848digital/catalyst — API client, React Query, auth, and Frappe sync transport (depends on offline-kit).
  • Distributed via GitHub Packages; a read token in your user-level ~/.npmrc is the only credential you supply.

Your workspace (yours to edit)

  • apps/web — Next.js (App Router) + React 19 + Tailwind.
  • apps/native — React Native 0.85 (bare).
  • packages/core (@app/core) — features, domain types, endpoints, and design tokens, including the reference example slice.
  • packages/ui-web, packages/ui-native — intentionally empty component scaffolds; bring your own.

Tooling

  • pnpm 11 workspace + Turborepo (dev · build · lint · test).
  • ESLint (incl. React, React Native, a11y, and architecture-boundary rules), Prettier, Husky + lint-staged, and commitlint (Conventional Commits).
  • setup.mjs personalizer — sets project name + API URL on first run, then self-deletes.
  • Bug and feature issue templates.

Notable changes since the internal template

Added

  • @app/core scaffold — tokens, endpoints, and the reference example vertical slice.
  • Welcome app shells for both web and native, with offline glue pre-wired.
  • Empty ui-web / ui-native component packages.
  • setup.mjs personalizer and the monorepo tooling/config baseline.

Changed

  • Web migrated from Vite + React Router to the Next.js App Router.
  • packages/core README rewritten to match the real, neutral template.
  • ExampleItem moved to a slice-local type — feature-local types are now enforced, not conventional.

Fixed / hardened

  • Android release builds now require a real upload keystore instead of falling back to the shared, public debug key.
  • Android and iOS no longer declare location permissions by default; the iOS usage string is generic.
  • Native geolocation throws when unimplemented rather than returning hardcoded coordinates.
  • Removed domain-specific wording, fonts (Manrope), product icons, and dangling doc references left over from the source template.

Getting started

node setup.mjs          # personalize: project name + API URL (then it self-deletes)
pnpm install            # pulls @8848digital/* from GitHub Packages
pnpm --filter web dev   # web at localhost:3000 — welcome screen needs no backend

Native (after the React Native toolchain is set up):

pnpm --filter <your>-native start      # Metro
pnpm --filter <your>-native android    # or: ios

Requirements

  • Node 20+, pnpm 11+
  • A GitHub Packages read token for the private @8848digital/* packages (in your ~/.npmrc).
  • Native: the React Native toolchain (Android Studio / Xcode).
  • A running Frappe site with the mobile sync app.

Before you ship

  • Native identity: replace the placeholder bundle id com.example.reactant / app name ReactantApp across apps/native/android/** and apps/native/ios/**.
  • Android signing: generate your own upload keystore and provide credentials via keystore.properties (local) or REACTANT_UPLOAD_* env vars (CI). Unsigned release artifacts cannot be uploaded to Play. See the README for the full checklist.

Reactant v1.0.0 — clone it, personalize it, and start building.