Skip to main content
For teams who need complete control over UIKit components and user flows. Fork & Extend gives you access to the full source code, allowing unlimited customization freedom.

Full Source Access

Complete control over all components

Custom Layouts

Build entirely new user flows

Your Codebase

Maintain your own version and roadmap

Professional Workflow

Full development environment setup
Pick Fork & Extend only after validating that Dynamic UI and Component Styling cannot achieve your goals with acceptable complexity.

When to Choose Fork & Extend

Fork & Extend is ideal when you need: Complete customization freedom – Modify any rendering or data flow
Custom user flows – Create navigation patterns not exposed by standard pages
Deep integration – Embed UIKit pieces inside a complex existing architecture
Performance tuning – Rework virtualization, batching, caching layers
Extensible domain logic – Inject proprietary moderation, ranking, analytics
Long-term ownership – Maintain an internal roadmap independent of upstream release cadence
Simple branding only – Use Dynamic UI (faster, zero maintenance)
Just per-component styling – Use Component Styling (lower effort)
Limited engineering capacity – Forks require continual rebasing
Short-lived experiment – Prefer a lighter extension path first
If you expect to contribute improvements back later, maintain a light fork (few direct core edits) and use extension points / adapters where possible.

Repository Directory

PlatformRepositoryLanguage / StackPackage / ToolingNotes
iOShttps://github.com/AmityCo/ASC-UIKit-iOS-OpenSourceSwiftSwiftPMSwiftUI wrappers & UIKit interop
Androidhttps://github.com/AmityCo/Amity-Social-Cloud-UIKit-AndroidKotlin (Compose)Gradle (KTS)Jetpack Compose components
Web (React)https://github.com/AmityCo/Amity-Social-Cloud-UIKit-Web-OpenSourceTypeScript / Reactpnpm / npm / Vite (variant)Modular import points
React Nativehttps://github.com/AmityCo/Amity-Social-UIKit-React-Native-CLI-OpenSourceTypeScript / RNYarn / MetroNative bridges in subpackages
Flutterhttps://github.com/AmityCo/Amity-Social-UIKit-Flutter-OpensourceDart / FlutterpubComposable widgets

Forking Strategies

Copy only needed modules (e.g. feed + reactions) into your mono‑repo, leaving update path harder but reducing dependency surface.
Broad internal rewrites; highest divergence risk; only for teams prepared to maintain a private long‑term branch & merge engine changes manually.
1

Fork Upstream

Create fork in your org; clone locally.
2

Add Upstream Remote

git remote add upstream <canonical-repo-url>
3

Baseline Audit

Run tests, lint, build to ensure clean starting point.
4

Create Feature Branches

One logical customization per branch; keep diffs focused.
5

Abstraction First

Add interfaces / adapters before altering core flows.
6

Rebase Regularly

git fetch upstream && git rebase upstream/main (avoid giant merge commits).
7

Tag Internal Releases

Semantic pre-release tags (e.g. 4.2.1-fork.3).

Git Operations (Examples)

git remote add upstream https://github.com/AmityCo/ASC-UIKit-iOS-OpenSource.git
git fetch upstream

Extension Points & Patterns

PatternUse CaseExample
Subclass / InheritOverride renderingCustom PostCell layout
Composition WrapperInject analytics / guardsWrap FeedList with tracking HOC / decorator
Dependency InjectionSwap services (auth, storage)Provide custom AuthProvider
Behavior Strategy ObjectChange navigation / flowsCustom CommentTrayBehavior
Theming AdapterAlign design tokensMap internal design system → UIKit tokens
Prefer adding a new extension seam over editing multiple call sites—easier to rebase.

Upgrade Strategy

Mirror upstream tags; create merge PRs soon after releases while diff is small.
Automate git diff upstream/vX.Y.Z..upstream/vX.Y.(Z+1) to surface structural changes.
Write smoke tests for critical flows (auth, feed load, post create) to detect regression during rebase.
Upstream feature flags let you phase into new APIs while old ones still exist.

Risk & Mitigation

RiskImpactMitigation
Divergence from upstreamHard upgradesRebase weekly; avoid large refactors in core files
Hidden security fix missedExposureSubscribe to repo releases; implement dependabot/security scanning
Unbounded scope creepMaintenance dragDefine exit criteria for each forked change
Performance regressionUser experienceProfile before/after; keep benchmarks

Performance Tuning Targets

Virtualize long lists; memoize heavy pure components.
Batch requests, introduce caching headers.
Lazy load & use responsive sources; prefetch critical thumbnails.
Defer non-critical observers until post-first-render.

Security & Compliance

Anti-Patterns

Regenerate or wrap instead; manual edits get lost.
Hard to review; split into atomic PRs.
Extract shared utility rather than duplicating logic.
Guarantees painful rebases later.

Contribution Opportunity

If a customization becomes broadly useful (e.g., accessibility improvement), consider opening an upstream PR instead of maintaining a private delta long-term.

Checklist Before Forking

  • Confirmed lower customization levels insufficient
  • Identified scope & success metrics
  • Allocated maintenance owner
  • Established rebase cadence (e.g. weekly)
  • Added contract tests

Next Steps

Reassess periodically whether parts of your fork can collapse back to vanilla via newly added upstream extension points.