Building Dhaaga mobile app from source
September 20, 2025
Here is the step-by-step process to build the Dhaaga project (specifically, the mobile app) from source code.
Tools (Pre-Requisites)
Node.Js and NPM
Here is the official download page. I would recommend installing the latest LTS version (v24).
If the following commands print something, we are good:
node -v
npm -v Android SDK
One good thing about Expo projects is that there is absolutely no need to install Android Studio or Xcode locally to build the app (as long as we can pay for either expo or any CI pipeline of choice).
In all other cases, at the bare minimum, we will need the cli tools:
# macos only, using homebrew
brew install android-commandlinetools If you are new to Android development, I would recommend following the official guide to install the entire suite (i.e. - includes virtual devices, sdk manager and the entire Android Studio editor)
Dependencies (Pre-Requisites)
For starters, run npm install from the root of the project.
@package/*
Dhaaga uses a monorepo structure, with multiple internal packages residing inside the packages/ folder.
We will need to bundle these before building the app itself. The following script handles it:
# from the root folder
npm run build-deps Project Configuration
This step is optional. If you are just playing around or intend to only make small tweaks to the base app, you can skip this step.
In all other cases (soft/hard forks), you will need to update the following:
app.config.ts- updatenameand anything that hasiconin it’s name.eas.json- update APP_NAME, APP_SCHEME and BUNDLE_IDENTIFIER
^ Regarding app.config.ts, you will also need to change (required for building dev clients) extra.eas.projectId and slug, since you have no access to the official app’s project. More on development clients later 👇
^ Regarding eas.json, unless you have specific environment variables that need to be tweaked, the only setting that matters are:
android.buildType = app-bundle # for aabs
android.buildType = apk # for apks
developmentClient = true # for development clients
distribution = internal # for development clients Lite Edition
The only difference from the standard edition is that:
- Some permissions are aggressively trimmed
- Any complementary services (i.e. - hosted by me at suvam.io) are toggled off with feature flags. This complies with NonFreeNet.
- Also strips any services that may be deemed NonFreeNet (i.e. - Google Notifications and Play Store APIs)
The following script handles all that:
# from apps/mobile
npm run scripts/lite.js