Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
51 commits
Select commit Hold shift + click to select a range
9c45ff0
Bump tar from 7.5.10 to 7.5.11
dependabot[bot] Mar 11, 2026
334a376
Merge pull request #384 from internxt/dependabot/npm_and_yarn/tar-7.5.11
CandelR Mar 12, 2026
44ad1fd
Bump undici from 6.23.0 to 6.24.1
dependabot[bot] Mar 14, 2026
9271efb
Merge pull request #388 from internxt/dependabot/npm_and_yarn/undici-…
CandelR Mar 17, 2026
6795318
Bump socket.io-parser from 4.2.5 to 4.2.6
dependabot[bot] Mar 19, 2026
a2b7e88
Bump flatted from 3.3.3 to 3.4.2
dependabot[bot] Mar 21, 2026
1904a1f
Merge pull request #390 from internxt/dependabot/npm_and_yarn/socket.…
CandelR Mar 24, 2026
d777141
Merge pull request #391 from internxt/dependabot/npm_and_yarn/flatted…
CandelR Mar 24, 2026
35117c2
Bump handlebars from 4.7.8 to 4.7.9
dependabot[bot] Mar 27, 2026
e272b88
Bump yaml from 2.8.2 to 2.8.3
dependabot[bot] Mar 27, 2026
572fec4
Merge pull request #394 from internxt/dependabot/npm_and_yarn/yaml-2.8.3
CandelR Mar 27, 2026
4737fbc
Merge pull request #393 from internxt/dependabot/npm_and_yarn/handleb…
CandelR Mar 27, 2026
32fdb86
Bump node-forge from 1.3.3 to 1.4.0
dependabot[bot] Mar 27, 2026
7192bf2
Merge pull request #396 from internxt/dependabot/npm_and_yarn/node-fo…
CandelR Mar 27, 2026
cb66e11
Bump sjcl from 1.0.8 to 1.0.9
dependabot[bot] Mar 27, 2026
b438864
Merge pull request #397 from internxt/dependabot/npm_and_yarn/sjcl-1.0.9
CandelR Mar 31, 2026
04f571e
Bump @xmldom/xmldom from 0.8.11 to 0.8.12
dependabot[bot] Apr 1, 2026
5567b53
Update readme
CandelR Apr 1, 2026
8be0772
Merge pull request #400 from internxt/dependabot/npm_and_yarn/xmldom/…
CandelR Apr 1, 2026
3bffb97
Merge pull request #403 from internxt/feature/update-readme
CandelR Apr 2, 2026
63f4e1c
Bump lodash from 4.17.23 to 4.18.1
dependabot[bot] Apr 10, 2026
a96fbe6
Bump axios from 1.13.5 to 1.15.0
dependabot[bot] Apr 12, 2026
fe7aa96
Removed more info link
CandelR Apr 13, 2026
4a29aa4
Removed terms and conditions button from settings
CandelR Apr 14, 2026
3b012b3
Merge pull request #412 from internxt/feature/more-info-link
CandelR Apr 14, 2026
bb58c85
Merge pull request #413 from internxt/release-1.8.8
CandelR Apr 14, 2026
dfb3b4f
Merge pull request #410 from internxt/dependabot/npm_and_yarn/axios-1…
CandelR Apr 16, 2026
73d2bec
Merge pull request #407 from internxt/dependabot/npm_and_yarn/lodash-…
CandelR Apr 16, 2026
081a67e
Bump follow-redirects from 1.15.11 to 1.16.0
dependabot[bot] Apr 16, 2026
661052d
Merge pull request #414 from internxt/dependabot/npm_and_yarn/follow-…
CandelR Apr 16, 2026
d781a43
Update sonarcloud exclusions
CandelR Apr 17, 2026
25a5fb5
Update sonarcloud exclusions
CandelR Apr 17, 2026
d675092
Merge pull request #420 from internxt/feat/update-sonar-cloud
CandelR Apr 17, 2026
8181e24
bump version to 1.8.81 and remove terms and conditions link from Sign…
CandelR Apr 17, 2026
5d7ed59
Uses globalThis instead globla for jest.setup.ts
CandelR Apr 17, 2026
fc4900b
bump version to 1.8.9
CandelR Apr 17, 2026
b4bf9c9
Merge pull request #421 from internxt/feat/remove-tc
CandelR Apr 17, 2026
16966ee
Merge branch 'master' into bugfix/error-open-links-and-uploading-folders
CandelR Apr 21, 2026
f6b6f48
Fixed open link bug in Android devices (samsung knox issue)
CandelR Apr 21, 2026
202dca4
Added support for uploading empty files, check plan restrictions and…
CandelR Apr 21, 2026
9ccf1f5
added folder scanning state, modal for device space alert and fix and…
CandelR Apr 22, 2026
87089e2
Reduced complexity of some functions
CandelR Apr 22, 2026
3e308a6
Reduced complexity of SAF regex and useFolderUpload hook
CandelR Apr 22, 2026
fac38b3
Refactor UI components to use dynamic color theming, fixed uri for di…
CandelR Apr 22, 2026
839ac30
migrated theme preference to secure storage to use in shared keychain…
CandelR Apr 23, 2026
4583138
Fix sonar cloud issues
CandelR Apr 23, 2026
1500bd2
Bump versionCode to 123
CandelR Apr 23, 2026
286df83
Replaced View with Pressable in NewFolderModal for improved touch han…
CandelR Apr 23, 2026
d8c6693
Changed dark red colors for error notification label
CandelR Apr 23, 2026
95a1a2f
Merge branch 'bugfix/share-extension-qa' into feature/PB-6318-discove…
CandelR Apr 23, 2026
58eb778
Implement permission revocation check and thunk for photos backup man…
CandelR Apr 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
77 changes: 38 additions & 39 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,23 @@
</p>
<p align="center" style="margin-top: 10px;">Internxt</p>

## Stack

- React Native 0.81.5 · Expo 54 · React 19 · TypeScript 5.9
- State management: Redux Toolkit
- Navigation: React Navigation 6
- Styling: tailwind-rn

## Requirements

- JDK version: 11
- SDK version: 29 or 30
- Node version: ≥ 20
- JDK version: 17+
- SDK version: 34+

In case that you open the project in Android Studio:

- NDK version: 21.1.6
- CMake version: 3.10.2
- NDK version: 23.1.7779620
- CMake version: 3.22.1

## Setup

Expand Down Expand Up @@ -46,6 +54,16 @@ Remember to run the tailwind command during development to dynamically add and r
yarn tailwind:dev
```

Other useful commands:

```bash
yarn check-ts # TypeScript type check (run before committing)
yarn lint # type check + ESLint
yarn lint:fix # lint with auto-fix
yarn test:unit # run Jest unit tests
yarn test:unit:watch # run Jest in watch mode
```

</br>
<hr>
</br>
Expand Down Expand Up @@ -83,19 +101,6 @@ bash <(curl -s https://raw.githubusercontent.com/corbindavenport/nexus-tools/mas
#### Dependencies

Opening the project with Android Studio will install the necessary dependencies to start the application.
</br></br>

If you are using <b>Mac OS</b> an receiving the following error when during gradle sync

<p style="color: red; background: lightyellow; padding: 10px 15px;">
<span style="margin-right: 5px; font-size: 12px;">❌</span>
Caused by: groovy.lang.MissingPropertyException: No such property: logger for class: org.gradle.initialization.DefaultProjectDescriptor
</p>
Try opening Android Studio with the command below to ensure Android Studio is able to find Node

```bash
open -a /Applications/Android\ Studio.app
```

</br>

Expand All @@ -115,22 +120,6 @@ yarn android

You can only run the iOS application on a Mac OS computer.

### iOS installation

```bash
cd ios

pod install
```

If your computer is using <b>M1 Apple chipset</b>, replace the `pod install` command with the following:

```bash
sudo arch -x86_64 gem install ffi

arch -x86_64 pod install
```

### Run

```bash
Expand All @@ -141,18 +130,28 @@ yarn ios
<hr>
</br>

## Known issues

Current react-native-reanimated fails with Android using RN 0.64, until we upgrade RN version, a patch needs to be added manually:
https://github.com/software-mansion/react-native-reanimated/issues/3161#issuecomment-1112285417

## Test

This is what you should know about project testing.

Take a look to this official article about [testing in React Native](https://reactnative.dev/docs/testing-overview).

### E2E
### Unit tests

```bash
yarn test:unit
# or a single file:
jest path/to/file.spec.ts
```

### E2E tests (Detox)

```bash
yarn test:e2e:build:ios.debug
yarn test:e2e:test:ios.debug
yarn test:e2e:build:android.debug
yarn test:e2e:test:android.debug
```

- [Getting Started | Detox](https://wix.github.io/Detox/docs/introduction/getting-started/)
- [Jest Setup Guide | Detox](https://wix.github.io/Detox/docs/guide/jest)
2 changes: 1 addition & 1 deletion android/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ android {
applicationId 'com.internxt.cloud'
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 120
versionCode 123
versionName "1.9.0"

buildConfigField "String", "REACT_NATIVE_RELEASE_LEVEL", "\"${findProperty('reactNativeReleaseLevel') ?: 'stable'}\""
Expand Down
2 changes: 1 addition & 1 deletion android/app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<resources>
<string name="app_name">Internxt</string>
<string name="expo_system_ui_user_interface_style" translatable="false">automatic</string>
<string name="expo_runtime_version">1.8.7</string>
<string name="expo_runtime_version">1.9.0</string>
<string name="expo_splash_screen_resize_mode" translatable="false">contain</string>
<string name="expo_splash_screen_status_bar_translucent" translatable="false">false</string>
</resources>
34 changes: 34 additions & 0 deletions assets/lang/strings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,8 @@ const translations = {
searchInThisFolder: 'Search items in this folder',
searchInAllFolders: 'Search all my files',
encrypting: 'Encrypting',
scanningFolder: 'Scanning folder...',
scanningFolderShort: 'Scanning...',
decrypting: 'Decrypting',
downloadingPercent: 'Downloading... {0}%',
decryptingPercent: 'Decrypting... {0}%',
Expand Down Expand Up @@ -396,6 +398,8 @@ const translations = {
folderNameLabel: 'Name',
folderNamePlaceholder: 'Folder name',
folderNameEmpty: 'Folder name cannot be empty',
folderCreatedSuccess: 'Folder created!',
folderAlreadyExists: 'A folder with this name already exists',
folderCreateError: 'Failed to create folder. Please try again.',
uploadSuccess: 'Files uploaded successfully',
uploadedTitle: 'Uploaded!',
Expand All @@ -407,6 +411,7 @@ const translations = {
errorPrep: 'Could not prepare the file for upload.',
errorFileTooLarge: 'The maximum upload size is 300 MB at a time.',
errorFileAlreadyExists: 'A file with this name already exists in this folder.',
errorPaymentRequired: 'Uploading empty files requires a paid plan.',
uploading: 'Uploading…',
preparing: 'Preparing…',
cancelUploadTitle: 'Cancel upload?',
Expand Down Expand Up @@ -726,6 +731,16 @@ const translations = {
'You have currently used 3GB of storage. To start uploading more files, please upgrade your storage plan.',
advice: 'Get a higher plan or remove files you will no longer use in order to upload or sync your files again.',
},
NotEnoughDeviceSpaceModal: {
title: 'Not enough space on your device',
advice:
'Internxt needs free space on your device to encrypt and upload your files. Please free up some storage and try again.',
},
EmptyFileNotAllowedModal: {
title: 'Empty files not supported',
message:
'Uploading empty files is only available for some plans. Please upgrade your plan to use this feature.',
},
ComingSoonModal: {
title: 'Coming soon!',
subtitle: 'Our fantastic devs are working on it, so stay tuned!',
Expand Down Expand Up @@ -795,7 +810,9 @@ const translations = {
limitPerFile: 'Max upload size per file reached',
folderUploadCompleted: 'Successfully uploaded {0} files to "{1}"',
folderUploadPartial: '{0} of {1} files uploaded ({2} failed)',
folderUploadPartialWithSkipped: '{0} of {1} files uploaded ({2} failed, {3} skipped)',
folderUploadCancelled: 'Folder upload cancelled',
emptyFileSkippedDuringFolderUpload: 'Empty files were skipped (upgrade your plan to upload them)',
},
errors: {
runtimeLogsMissing: 'The logs file is missing or empty',
Expand Down Expand Up @@ -1154,6 +1171,8 @@ const translations = {
searchInThisFolder: 'Buscar en esta carpeta',
searchInAllFolders: 'Buscar en todos mis archivos',
encrypting: 'Encriptando',
scanningFolder: 'Escaneando carpeta...',
scanningFolderShort: 'Escaneando...',
decrypting: 'Desencriptando',
downloadingPercent: 'Descargando... {0}%',
decryptingPercent: 'Desencriptando... {0}%',
Expand Down Expand Up @@ -1294,6 +1313,8 @@ const translations = {
folderNameLabel: 'Nombre',
folderNamePlaceholder: 'Nombre de carpeta',
folderNameEmpty: 'El nombre no puede estar vacío',
folderCreatedSuccess: '¡Carpeta creada!',
folderAlreadyExists: 'Ya existe una carpeta con este nombre',
folderCreateError: 'Error al crear la carpeta. Inténtalo de nuevo.',
uploadSuccess: 'Archivos subidos correctamente',
uploadedTitle: '¡Subido!',
Expand All @@ -1305,6 +1326,7 @@ const translations = {
errorPrep: 'No se pudo preparar el archivo para la subida.',
errorFileTooLarge: 'El tamaño máximo de subida es de 300 MB a la vez.',
errorFileAlreadyExists: 'Ya existe un archivo con este nombre en esta carpeta.',
errorPaymentRequired: 'La subida de archivos vacíos requiere un plan de pago.',
uploading: 'Subiendo…',
preparing: 'Preparando…',
cancelUploadTitle: '¿Cancelar la subida?',
Expand Down Expand Up @@ -1626,6 +1648,16 @@ const translations = {
advice:
'Mejora tu plan o borra los archivos que no vayas a usar para subir o sincronizar tus archivos de nuevo.',
},
NotEnoughDeviceSpaceModal: {
title: 'No hay suficiente espacio en tu dispositivo',
advice:
'Internxt necesita espacio libre en tu dispositivo para encriptar y subir tus archivos. Libera algo de almacenamiento e inténtalo de nuevo.',
},
EmptyFileNotAllowedModal: {
title: 'Archivos vacíos no permitidos',
message:
'La subida de archivos vacíos solo está disponible en algunos planes. Actualiza tu plan para usar esta función.',
},
ComingSoonModal: {
title: '¡Próximamente!',
subtitle: 'Nuestros fantásticos programadores están trabajando en ello, así que mantente al tanto!',
Expand Down Expand Up @@ -1698,7 +1730,9 @@ const translations = {
limitPerFile: 'Tamaño máximo por archivo alcanzado',
folderUploadCompleted: '{0} archivos subidos correctamente a "{1}"',
folderUploadPartial: '{0} de {1} archivos subidos ({2} fallaron)',
folderUploadPartialWithSkipped: '{0} de {1} archivos subidos ({2} fallaron, {3} omitidos)',
folderUploadCancelled: 'Subida de carpeta cancelada',
emptyFileSkippedDuringFolderUpload: 'Se han omitido archivos vacíos (actualiza tu plan para subirlos)',
},
errors: {
runtimeLogsMissing: 'El archivo no se encuentra o está vacío',
Expand Down
Loading
Loading