Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,8 @@ The code follows a feature-first clean architecture with BLoC; [CLAUDE.md](CLAUD
| [docs/security.md](docs/security.md) | Token storage, certificate pinning, screen capture protection and the inactivity sign-out |
| [docs/crash-reporting.md](docs/crash-reporting.md) | Sentry and what it masks before an event leaves the device |
| [docs/development.md](docs/development.md) | Toolchain, test slices, the feature generator and CI |
| [docs/release.md](docs/release.md) | Release signing, the changelog and the upload to Play internal testing |
| [docs/release.md](docs/release.md) | Release signing, the changelog, the upload to Play internal testing, and the store listing answers |
| [docs/privacy-policy.md](docs/privacy-policy.md) | The app's privacy policy, also in Turkish ([docs/privacy-policy.tr.md](docs/privacy-policy.tr.md)) |
| [docs/testing-architecture.md](docs/testing-architecture.md) | Test layers, doubles and guard tests |
| [docs/mock-architecture.md](docs/mock-architecture.md) | How recorded answers in `assets/mock/` are served |
| [docs/feature-first-clean-boundaries.md](docs/feature-first-clean-boundaries.md) | Layer boundaries and dependency rules |
Expand Down
31 changes: 31 additions & 0 deletions android/fastlane/metadata/android/en-US/full_description.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
LibreDB Mobile is the Android client of LibreDB Studio. It lets you work from your phone with the databases that Studio offers you.

The app signs in to the LibreDB Studio and Keycloak deployment it was built for, so you need an account there from the organisation that runs it. The app never connects to a database itself and holds no database password: Studio keeps every database credential, opens every connection and decides which connections you may use.

Connections
• See the connections Studio offers you, grouped by environment, and search them.
• Star your favourites and find the ones you opened recently.
• Check whether a connection answers, and switch the open connection from the top bar.

Browse
• Look inside a connection without changing it: its databases and schemas, the kinds of objects with their counts, and the objects of each kind.
• Open an object's columns, indexes, foreign keys and source, and search the objects by name.
• Browse the keys of a Redis database and open a key's value.

Rows
• Preview the rows of a table as cards or as a compact table, load more, and open a row's detail.
• Columns whose names look sensitive, such as email, password or card number, are masked on screen with the same default rules as Studio's web grid.

SQL editor
• Type and run a statement, a script or a selection, in the database you pick, and cancel a statement that is running.
• Your draft and your statement history stay on the phone, and a statement from the history or from Browse opens in the editor.
• Before a statement that may change data runs, the app shows it in full and asks you to confirm; on a production connection you type the connection's name first.

Privacy and security
• Single sign-on through your organisation's Keycloak; the tokens are kept in the device's secure storage.
• Drafts and history are encrypted on the device, separately for each account.
• Screens that show results are kept out of screenshots and the recent apps view.
• The app signs you out after 15 minutes without input.
• Remove my data, in Settings, deletes what the app keeps for your account.

The app is available in English and Turkish.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Browse your databases and run SQL from your phone, through LibreDB Studio.
1 change: 1 addition & 0 deletions android/fastlane/metadata/android/en-US/title.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
LibreDB Mobile
31 changes: 31 additions & 0 deletions android/fastlane/metadata/android/tr-TR/full_description.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
LibreDB Mobile, LibreDB Studio'nun Android istemcisidir. Studio'nun size sunduğu veritabanlarıyla telefonunuzdan çalışmanızı sağlar.

Uygulama, derlenirken belirlenen LibreDB Studio ve Keycloak kurulumunda oturum açar; bu yüzden o kurulumu işleten kuruluştan alınmış bir hesabınız olmalıdır. Uygulama hiçbir veritabanına kendisi bağlanmaz ve hiçbir veritabanı parolası tutmaz: her veritabanı kimlik bilgisini Studio saklar, her bağlantıyı Studio açar ve hangi bağlantıları kullanabileceğinize Studio karar verir.

Bağlantılar
• Studio'nun size sunduğu bağlantıları ortamlarına göre gruplanmış olarak görün ve aralarında arayın.
• Sık kullandıklarınızı yıldızlayın, son açtıklarınızı bulun.
• Bir bağlantının yanıt verip vermediğini sınayın, açık bağlantıyı üst çubuktan değiştirin.

Gözat
• Bir bağlantının içine hiçbir şeyi değiştirmeden bakın: veritabanları ve şemaları, nesne türleri ve sayıları, her türün nesneleri.
• Bir nesnenin sütunlarını, dizinlerini, yabancı anahtarlarını ve kaynağını açın, nesneleri adlarıyla arayın.
• Bir Redis veritabanının anahtarlarına göz atın ve bir anahtarın değerini açın.

Satırlar
• Bir tablonun satırlarını kartlar ya da sıkışık bir tablo olarak önizleyin, daha fazlasını yükleyin, bir satırın ayrıntısını açın.
• Adı hassas görünen sütunlar, örneğin e-posta, parola ya da kart numarası, ekranda Studio'nun web tablosundaki varsayılan kurallarla maskelenir.

SQL düzenleyici
• Seçtiğiniz veritabanında bir deyimi, bir betiği ya da bir seçimi yazıp çalıştırın, çalışan bir deyimi iptal edin.
• Taslağınız ve deyim geçmişiniz telefonda kalır; geçmişteki ya da Gözat'taki bir deyim düzenleyicide açılır.
• Veriyi değiştirebilecek bir deyim çalışmadan önce uygulama onu eksiksiz gösterir ve onayınızı ister; üretim bağlantısında önce bağlantının adını yazarsınız.

Gizlilik ve güvenlik
• Kuruluşunuzun Keycloak'u üzerinden tek oturum açma; belirteçler cihazın güvenli depolamasında tutulur.
• Taslaklar ve geçmiş cihazda, her hesap için ayrı şifrelenir.
• Sonuç gösteren ekranlar ekran görüntülerinin ve son uygulamalar görünümünün dışında tutulur.
• Uygulama 15 dakika işlem yapılmadığında oturumu kapatır.
• Ayarlar'daki Verilerimi sil, uygulamanın hesabınız için tuttuklarını siler.

Uygulama İngilizce ve Türkçe kullanılabilir.
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
LibreDB Studio üzerinden veritabanlarınıza göz atın, telefondan SQL çalıştırın.
1 change: 1 addition & 0 deletions android/fastlane/metadata/android/tr-TR/title.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
LibreDB Mobile
89 changes: 89 additions & 0 deletions docs/privacy-policy.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# LibreDB Mobile privacy policy

Last updated: October 24, 2026.

This policy describes what LibreDB Mobile for Android does with your data.
LibreDB Mobile is a client of LibreDB Studio: it signs you in through Keycloak and shows the databases that Studio offers you.
Questions about this policy go to [info@libredb.org](mailto:info@libredb.org).

## The servers the app talks to

The app talks to three kinds of servers, and to no others on its own:

- **Keycloak**, the sign-in server of the LibreDB deployment the app was built for.
You sign in on Keycloak's own page, in the device's browser, so the app never sees your password.
Keycloak gives the app tokens that identify you.
- **LibreDB Studio** of the same deployment.
The app sends Studio your Keycloak access token with its requests, so Studio knows who you are and what you may use.
The access token carries what Keycloak puts into it, such as your username, your e-mail address and your name.
The app also sends Studio what you ask it to do: the connection you open, the objects you look at and the statements you run.
- **Sentry**, a crash reporting service, but only when the build was made with a Sentry project key.
See the Crash reports section below.

The organisation that runs the deployment operates Keycloak and Studio, and decides what they record.
For example, Studio can keep an audit log of sign-ins and sign-outs and, depending on its settings, a record of the statements you run.
That organisation's own privacy terms cover what those servers keep.

The app reaches Keycloak, Studio and Sentry over HTTPS, which encrypts the traffic.

## What the app does not do

- The app holds no database password or other database credential: Studio keeps them and opens every database connection.
- The app shows no advertising, contains no advertising, third-party analytics or tracking SDK, and sends nothing about how you use it beyond the crash reports, session records and timing information described in the Crash reports section below.
- The app does not read your contacts, location, photos, files or other apps' data.
- The app does not sell your data or share it with anyone for advertising.

## What the app keeps on the device

- **Your session tokens**, in Android's secure storage, encrypted with a key held by the Android Keystore.
Signing out deletes them.
- **Your drafts and statement history**: the editor's draft for each connection and the statements you ran, encrypted on the device with a key for your account alone.
They stay after you sign out, so you find them again when you sign in with the same account, and another account on the device cannot read them.
- **Your connection choices**: the connections you starred or opened recently, the connection you had open last and the database you last used on it, and the sections of the connection list you collapsed.
- **Device preferences**: the language, the theme and whether results show as cards or as a table.

The app keeps no rows of query results after it closes.
While it runs, it keeps the lists, counts and descriptions of a connection's objects in memory for up to 10 minutes, so going back does not ask Studio again.
What you type into the object search goes only to Studio, and the app keeps no search history.
Android's cloud backup is turned off for the app, and its preferences, drafts and history are left out of device-to-device transfers.

## Sharing and copying

The app passes data to another app only when you ask it to.
When you copy a value of a result, the app copies what the screen shows, so a masked value is copied as its mask.
When you share an object's source, such as a view's definition, the system's share sheet sends it to the app you choose.
A source longer than 100,000 characters is shared as a file, and that file can stay in the app's temporary storage until Android clears it or you uninstall the app.

## Crash reports

A build made with a Sentry project key sends a report to Sentry when the app runs into an error.
A report holds the error and where in the app it happened, the app's version, technical details of the device such as its model, Android version, language, free memory and battery level, a random identifier of the installation, and a trail of the events before the error, such as the screens you opened and the app going to the background.
A build with a Sentry project key also sends a session record each time you use the app: when the session started and ended, how long it lasted, whether it ended in a crash, and the installation identifier.
It also sends timing information for about one in five app starts and screen changes, to show where the app is slow.
Before a report leaves the device, the app removes e-mail addresses, tokens, passwords and other credentials from it.
A report carries no screenshot, no layout of the screen, no request body and no screen recording of the session.
Sentry receives your device's IP address with each report, as with any connection to a server.
Sentry derives an approximate location, such as a city and a country, from that address, unless the Sentry project is set not to store IP addresses.
A build made without a Sentry project key sends no reports.

## Protections on the device

- The screens that show query results, a row's detail, a key's value or an object's source are kept out of screenshots, screen recordings and the recent apps view.
- Columns whose names look sensitive, such as e-mail, password or card number, are masked on screen.
- The app signs you out after 15 minutes without input.

## Deleting your data

- **Remove my data**, in the Privacy section of Settings, deletes what the app keeps for the signed-in account (the drafts, the history and the connection choices) and then signs you out.
It keeps the language, the theme and the result view preference, which belong to the device.
- **Uninstalling the app** deletes everything it keeps on the device.
- Crash reports already sent stay in Sentry until they expire; write to [info@libredb.org](mailto:info@libredb.org) to have them deleted sooner.
- Data that Keycloak or Studio keep about you is held by the organisation that runs them; ask that organisation to delete it.

## Children

The app is a tool for people who work with databases and is not directed at children.

## Changes to this policy

When the app starts handling data in a new way, this policy is updated before that version is released, and the date at the top changes.
89 changes: 89 additions & 0 deletions docs/privacy-policy.tr.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
# LibreDB Mobile gizlilik politikası

Son güncelleme: 24 Ekim 2026.

Bu politika, Android için LibreDB Mobile'ın verilerinizle ne yaptığını anlatır.
LibreDB Mobile, LibreDB Studio'nun bir istemcisidir: Keycloak üzerinden oturumunuzu açar ve Studio'nun size sunduğu veritabanlarını gösterir.
Bu politikayla ilgili sorularınızı [info@libredb.org](mailto:info@libredb.org) adresine yazabilirsiniz.

## Uygulamanın konuştuğu sunucular

Uygulama üç tür sunucuyla konuşur, kendiliğinden başka hiçbir sunucuyla konuşmaz:

- **Keycloak**, uygulamanın derlenirken bağlandığı LibreDB kurulumunun oturum açma sunucusu.
Oturumu Keycloak'un kendi sayfasında, cihazın tarayıcısında açarsınız; bu yüzden uygulama parolanızı hiç görmez.
Keycloak uygulamaya sizi tanıtan belirteçler verir.
- Aynı kurulumun **LibreDB Studio**'su.
Uygulama isteklerinde Studio'ya Keycloak erişim belirtecinizi gönderir; böylece Studio kim olduğunuzu ve neyi kullanabileceğinizi bilir.
Erişim belirteci, Keycloak'un içine koyduklarını taşır: örneğin kullanıcı adınızı, e-posta adresinizi ve adınızı.
Uygulama Studio'ya ondan istediklerinizi de gönderir: açtığınız bağlantıyı, baktığınız nesneleri ve çalıştırdığınız deyimleri.
- **Sentry**, bir çökme raporlama hizmeti; ancak yalnızca uygulama bir Sentry proje anahtarıyla derlendiyse.
Ayrıntılar aşağıdaki Çökme raporları bölümünde.

Keycloak ile Studio'yu kurulumu işleten kuruluş çalıştırır ve bu sunucuların neyi kaydedeceğine o kuruluş karar verir.
Örneğin Studio, oturum açma ve kapatmaların bir denetim kaydını ve ayarlarına göre çalıştırdığınız deyimlerin bir kaydını tutabilir.
Bu sunucuların tuttuklarına o kuruluşun kendi gizlilik koşulları uygulanır.

Uygulama Keycloak'a, Studio'ya ve Sentry'ye trafiği şifreleyen HTTPS üzerinden ulaşır.

## Uygulamanın yapmadıkları

- Uygulama hiçbir veritabanı parolası ya da başka bir veritabanı kimlik bilgisi tutmaz: bunları Studio saklar ve her veritabanı bağlantısını Studio açar.
- Uygulama reklam göstermez, hiçbir reklam, üçüncü taraf analiz ya da izleme SDK'sı içermez ve uygulamayı nasıl kullandığınıza dair aşağıdaki Çökme raporları bölümünde anlatılan çökme raporları, oturum kayıtları ve süre bilgisinin ötesinde hiçbir şey göndermez.
- Uygulama kişilerinizi, konumunuzu, fotoğraflarınızı, dosyalarınızı ya da başka uygulamaların verilerini okumaz.
- Uygulama verilerinizi satmaz ve reklam amacıyla kimseyle paylaşmaz.

## Uygulamanın cihazda tuttukları

- **Oturum belirteçleriniz**, Android'in güvenli depolamasında, Android Keystore'un tuttuğu bir anahtarla şifrelenmiş olarak.
Oturumu kapatmak onları siler.
- **Taslaklarınız ve deyim geçmişiniz**: düzenleyicinin her bağlantı için taslağı ve çalıştırdığınız deyimler, cihazda yalnızca hesabınıza ait bir anahtarla şifrelenmiş olarak.
Oturumu kapattıktan sonra da kalırlar; böylece aynı hesapla yeniden oturum açtığınızda onları bulursunuz ve cihazdaki başka bir hesap onları okuyamaz.
- **Bağlantı seçimleriniz**: yıldızladığınız ya da son açtığınız bağlantılar, en son açık olan bağlantı ve onda en son kullandığınız veritabanı, bağlantı listesinde daralttığınız bölümler.
- **Cihaz tercihleri**: dil, tema ve sonuçların kart mı tablo mu gösterileceği.

Uygulama kapandıktan sonra sorgu sonuçlarının hiçbir satırını tutmaz.
Uygulama çalışırken bir bağlantının nesnelerinin listelerini, sayılarını ve tanımlarını, geri dönüldüğünde Studio'ya yeniden sorulmasın diye en çok 10 dakika bellekte tutar.
Nesne aramasına yazdıklarınız yalnızca Studio'ya gider ve uygulama arama geçmişi tutmaz.
Uygulamanın Android bulut yedeklemesi kapalıdır; tercihleri, taslakları ve geçmişi cihazdan cihaza aktarımların dışında bırakılır.

## Paylaşma ve kopyalama

Uygulama veriyi başka bir uygulamaya yalnızca siz istediğinizde verir.
Bir sonucun bir değerini kopyaladığınızda uygulama ekranda görüneni kopyalar; maskelenmiş bir değer maskesiyle kopyalanır.
Bir nesnenin kaynağını, örneğin bir görünümün tanımını paylaştığınızda sistemin paylaşım penceresi onu seçtiğiniz uygulamaya gönderir.
100.000 karakterden uzun bir kaynak dosya olarak paylaşılır ve bu dosya, Android temizleyene ya da uygulamayı kaldırana kadar uygulamanın geçici depolamasında kalabilir.

## Çökme raporları

Bir Sentry proje anahtarıyla derlenmiş uygulama, bir hatayla karşılaştığında Sentry'ye bir rapor gönderir.
Bir rapor şunları içerir: hatayı ve uygulamanın neresinde olduğunu, uygulamanın sürümünü, cihazın modeli, Android sürümü, dili, boş belleği ve pil düzeyi gibi teknik ayrıntılarını, kuruluma ait rastgele bir tanımlayıcıyı ve hatadan önceki olayların bir izini, örneğin açtığınız ekranları ve uygulamanın arka plana geçişini.
Bir Sentry proje anahtarıyla derlenmiş uygulama ayrıca uygulamayı her kullanışınızda bir oturum kaydı gönderir: oturumun ne zaman başlayıp bittiği, ne kadar sürdüğü, bir çökmeyle bitip bitmediği ve kurulum tanımlayıcısı.
Ayrıca, uygulamanın nerede yavaş olduğunu göstermek için uygulama açılışlarının ve ekran değişikliklerinin yaklaşık beşte biri için süre bilgisi gönderir.
Bir rapor cihazdan çıkmadan önce uygulama içinden e-posta adreslerini, belirteçleri, parolaları ve diğer kimlik bilgilerini çıkarır.
Bir rapor ekran görüntüsü, ekran düzeni, istek gövdesi ya da oturumun ekran kaydını (görüntü kaydı) taşımaz.
Sentry, her sunucu bağlantısında olduğu gibi, her raporla birlikte cihazınızın IP adresini alır.
Sentry projesi IP adreslerini saklamayacak şekilde ayarlanmadıkça Sentry bu adresten şehir ve ülke gibi yaklaşık bir konum çıkarır.
Sentry proje anahtarı olmadan derlenmiş bir uygulama rapor göndermez.

## Cihazdaki korumalar

- Sorgu sonuçlarını, bir satırın ayrıntısını, bir anahtarın değerini ya da bir nesnenin kaynağını gösteren ekranlar ekran görüntülerinin, ekran kayıtlarının ve son uygulamalar görünümünün dışında tutulur.
- Adı hassas görünen sütunlar, örneğin e-posta, parola ya da kart numarası, ekranda maskelenir.
- Uygulama 15 dakika işlem yapılmadığında oturumunuzu kapatır.

## Verilerinizi silmek

- Ayarlar'ın Gizlilik bölümündeki **Verilerimi sil**, uygulamanın oturum açmış hesap için tuttuklarını (taslakları, geçmişi ve bağlantı seçimlerini) siler, ardından oturumunuzu kapatır.
Cihaza ait olan dili, temayı ve sonuç görünümü tercihini korur.
- **Uygulamayı kaldırmak** cihazda tuttuğu her şeyi siler.
- Gönderilmiş çökme raporları süreleri dolana kadar Sentry'de kalır; daha önce silinmeleri için [info@libredb.org](mailto:info@libredb.org) adresine yazın.
- Keycloak'un ya da Studio'nun sizinle ilgili tuttuğu verileri onları işleten kuruluş tutar; silinmeleri için o kuruluşa başvurun.

## Çocuklar

Uygulama veritabanlarıyla çalışan kişiler için bir araçtır ve çocuklara yönelik değildir.

## Bu politikadaki değişiklikler

Uygulama veriyi yeni bir şekilde işlemeye başladığında bu politika o sürüm yayımlanmadan önce güncellenir ve en üstteki tarih değişir.
Loading
Loading