{"id":27240647,"url":"https://github.com/crherman7/rechunk","last_synced_at":"2025-10-27T05:09:23.327Z","repository":{"id":229359980,"uuid":"771131446","full_name":"crherman7/rechunk","owner":"crherman7","description":"🚀 OTA React Native Components \u0026 Functions","archived":false,"fork":false,"pushed_at":"2025-04-08T21:28:59.000Z","size":6562,"stargazers_count":17,"open_issues_count":7,"forks_count":1,"subscribers_count":3,"default_branch":"develop","last_synced_at":"2025-04-09T14:52:04.894Z","etag":null,"topics":["bundler","code-splitting","expo","ota","react-native","remote-component","server-driven-ui","typescript"],"latest_commit_sha":null,"homepage":"https://rechunk.xyz","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/crherman7.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-03-12T18:35:34.000Z","updated_at":"2025-04-08T21:29:03.000Z","dependencies_parsed_at":"2024-05-28T01:20:22.964Z","dependency_job_id":"113df56c-970e-4e56-a014-4ed8072d6bba","html_url":"https://github.com/crherman7/rechunk","commit_stats":null,"previous_names":["crherman7/rechunk"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crherman7%2Frechunk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crherman7%2Frechunk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crherman7%2Frechunk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/crherman7%2Frechunk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/crherman7","download_url":"https://codeload.github.com/crherman7/rechunk/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248281425,"owners_count":21077423,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bundler","code-splitting","expo","ota","react-native","remote-component","server-driven-ui","typescript"],"created_at":"2025-04-10T19:45:14.959Z","updated_at":"2025-10-27T05:09:23.322Z","avatar_url":"https://github.com/crherman7.png","language":"TypeScript","readme":"\u003cpicture\u003e\n  \u003cimg alt=\"ReChunk Banner\" src=\"./.github/assets/hero.png\"\u003e\n\u003c/picture\u003e\n\n\u003cbr/\u003e\n\u003cbr/\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003ca href=\"https://www.npmjs.com/package/@rechunk/core\"\u003e\u003cimg src=\"https://img.shields.io/npm/v/@rechunk/core.svg?style=flat\" alt=\"npm version\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.npmjs.com/package/@rechunk/core\"\u003e\u003cimg src=\"https://img.shields.io/npm/dm/@rechunk/core.svg?style=flat\" alt=\"Downloads\"\u003e\u003c/a\u003e\n\u003ca href=\"https://bundlephobia.com/package/@rechunk/core\"\u003e\u003cimg src=\"https://img.shields.io/bundlephobia/minzip/@rechunk/core\" alt=\"Bundle Size\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.typescriptlang.org/\"\u003e\u003cimg src=\"https://img.shields.io/badge/TypeScript-Ready-blue.svg\" alt=\"TypeScript\"\u003e\u003c/a\u003e\n\u003ca href=\"LICENSE.md\"\u003e\u003cimg src=\"https://img.shields.io/github/license/crherman7/rechunk.svg\" alt=\"License\"\u003e\u003c/a\u003e\n\u003ca href=\"CONTRIBUTING.md\"\u003e\u003cimg src=\"https://img.shields.io/badge/PRs-welcome-brightgreen.svg\" alt=\"PRs Welcome\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cp\u003e\u003cstrong\u003eReChunk is a lightweight React Native library that enables secure over-the-air updates and dynamic component loading, allowing you to update your app's UI without app store submissions.\u003c/strong\u003e\u003c/p\u003e\n\u003c/div\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003ca aria-label=\"rechunk.xyz\" href=\"https://rechunk.xyz\"\u003eWebsite\u003c/a\u003e\n  \u0026nbsp;•\u0026nbsp;\n  \u003ca aria-label=\"ReChunk Documentation\" href=\"https://rechunk.xyz/docs/\"\u003eDocumentation\u003c/a\u003e\n  \u0026nbsp;•\u0026nbsp;\n  \u003ca aria-label=\"ReChunk Discord Community\" href=\"https://discord.gg/xFhuxjwhss\"\u003eDiscord Community\u003c/a\u003e\n\u003c/div\u003e\n\n\u003cbr/\u003e\n\n## Why ReChunk?\n\n- 📱 **Bypass App Store Updates**: Deploy UI changes without waiting for app store approval\n- 🔄 **Instant Updates**: Push changes to all users simultaneously\n- 🛠 **Developer Friendly**: Simple API with TypeScript support\n- 🏃 **Performance First**: Minimal bundle size impact and optimized loading\n\n## Installation\n\n```bash\nnpm install @rechunk/core\nnpm install -D @rechunk/cli @rechunk/babel-plugin @rechunk/metro-config\n\n# or\n\nyarn add @rechunk/core\nyarn add -D @rechunk/cli @rechunk/babel-plugin @rechunk/metro-config\n```\n\n## Quick Example\n\n### 1. Initialize Project\n\n```bash\n# Create a new ReChunk project with a custom host\nnpx rechunk init -h https://your-rechunk-host.com -u username -p password\n```\n\nIf you'd like to use the hosted ReChunk service at [rechunk.xyz](https://rechunk.xyz), you can run:\n\n```bash\nnpx rechunk init --host https://rechunk.xyz/api/v1 --username admin --password password123\n```\n\n\u003e **Note:** This project is currently in beta. As we continue to improve the platform, certain aspects, such as authentication mechanisms (e.g., basic auth), may change in the future. Stay tuned for updates in our documentation and changelogs.\n\n### 2. Create a ReChunk Component\n\n```tsx\n// components/FeatureCard.tsx\n'use rechunk';\n\nimport {View, Text, TouchableOpacity, StyleSheet} from 'react-native';\nimport React, {useState} from 'react';\n\ninterface FeatureCardProps {\n  title: string;\n  description: string;\n  onPress?: () =\u003e void;\n}\n\nexport default function FeatureCard({\n  title = 'New Feature',\n  description = 'Try out our latest update!',\n  onPress,\n}: FeatureCardProps) {\n  const [pressed, setPressed] = useState(false);\n\n  const handlePress = () =\u003e {\n    setPressed(true);\n    onPress?.();\n  };\n\n  return (\n    \u003cTouchableOpacity\n      style={[styles.container, pressed \u0026\u0026 styles.pressed]}\n      onPress={handlePress}\u003e\n      \u003cView style={styles.content}\u003e\n        \u003cText style={styles.title}\u003e{title}\u003c/Text\u003e\n        \u003cText style={styles.description}\u003e{description}\u003c/Text\u003e\n      \u003c/View\u003e\n    \u003c/TouchableOpacity\u003e\n  );\n}\n\nconst styles = StyleSheet.create({\n  // ... styles remain the same\n});\n```\n\n### 3. Configure Your Project\n\n```javascript\n// babel.config.js\nconst {withReactNativeBabelPresetOptions} = require('@rechunk/babel-plugin');\n\nmodule.exports = {\n  presets: [\n    [\n      'module:metro-react-native-babel-preset',\n      api =\u003e withReactNativeBabelPresetOptions(api),\n    ],\n  ],\n  plugins: ['@rechunk/babel-plugin'],\n};\n\n// metro.config.js\nconst {cacheVersion} = require('@rechunk/metro-config');\n\nmodule.exports = {\n  cacheVersion,\n  // ... other Metro configuration\n};\n```\n\n### 4. Use the Component\n\n```tsx\n// App.tsx\nimport React, {Suspense} from 'react';\nimport {View, ActivityIndicator} from 'react-native';\nimport ReChunk from '@rechunk/core';\n\nimport FeatureCard from './FeatureCard';\n\nexport default function App() {\n  return (\n    \u003cSuspense fallback={\u003cActivityIndicator /\u003e}\u003e\n      \u003cFeatureCard\n        title=\"Welcome!\"\n        description=\"This component was loaded dynamically!\"\n        onPress={() =\u003e console.log('Pressed!')}\n      /\u003e\n    \u003c/Suspense\u003e\n  );\n}\n```\n\n### 5. Publish Your Component\n\n```bash\n# Start development server\nnpx rechunk dev-server\n\n# Or publish to production\nnpx rechunk publish\n```\n\n## Usage Guide\n\n### Development Workflow\n\n1. **Start Development Server**\n\n```bash\nnpx rechunk dev-server\n```\n\n2. **Mark Components for Remote Loading**\n   Add the `\"use rechunk\"` directive to any component you want to load remotely.\n\n3. **Configure Environment**\n\n```bash\n# Development\nexport RECHUNK_ENVIRONMENT=dev\n\n# Production\nexport RECHUNK_ENVIRONMENT=prod\n\n# Offline testing\nexport RECHUNK_ENVIRONMENT=offline\n```\n\n### Production Deployment\n\n1. **Publish Components**\n\n```bash\nnpx rechunk publish\n```\n\n2. **Manage Deployments**\n\n```bash\nnpx rechunk manage\n```\n\n## Features\n\n- **🚀 Over-The-Air Updates**: Deploy React Native components instantly without app store submissions. Push UI changes directly to your users in real-time.\n- **⚡️ Zero-Config Hosting**: Host your components anywhere - from S3 to your own servers. Zero vendor lock-in, maximum flexibility.\n- **🔒 Built-in Security**: Industry-standard digital signatures verify every component. Keep your dynamic updates secure and your users protected.\n\n## Getting Started\n\nVisit our [Quick Start Guide](https://rechunk.xyz/docs/) to begin using ReChunk in your project.\n\n## Community\n\nJoin our growing community! We're excited to help and hear your feedback:\n\n- 💬 Join our [Discord](https://discord.gg/xFhuxjwhss) for real-time discussions\n- ⭐ Star us on [GitHub](https://github.com/crherman7/rechunk) to show your support\n\n## Upcoming Features\n\nWe’re actively working on improvements to make ReChunk even more powerful. Here's what’s coming soon:\n\n### 🔖 Version-Based Manifest\n- Enable selective loading of components based on app version.\n- Support backward compatibility across deployments.\n- Manifest schema will define available components, versions, signatures, and dependencies.\n\n### 🏷️ Component Tagging \u0026 Versioning\n- Tag and version individual components (e.g. `v1.2.0`, `beta`, `experimental`).\n- Use tags to manage releases, rollbacks, and A/B testing.\n- CLI support for tagging:  \n  ```bash\n  npx rechunk publish --tag beta\n  ```\n\n### 📚 Exhaustive Documentation\n- Expanded guides and advanced use cases\n- Custom environments, CDN hosting, and authentication strategies\n- End-to-end examples for enterprise workflows\n\n\u003e Stay tuned — we’re building this in the open. Join [Discord](https://discord.gg/xFhuxjwhss) for updates.\n\n## Contributing\n\nPlease read our [Contributing Guide](./CONTRIBUTING.md) and help us build ReChunk together. For questions or feedback, feel free to open an issue.\n\n## Code of Conduct\n\nPlease review our [Code of Conduct](./CODE_OF_CONDUCT.md) for guidelines on community interaction.\n\n## License\n\nReChunk is licensed under the [MIT License](./LICENSE.md).\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrherman7%2Frechunk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcrherman7%2Frechunk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcrherman7%2Frechunk/lists"}