You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
feat: prepare v0.1.0 and redesign the cross-platform send experience
Prepare Sync360 for its first public Android and Windows release while
improving the send flow across Android, desktop, and iOS.
Send experience:
- replace secondary send tabs with a Material 3 Expressive button group
- add explicit nearby-device selection before starting a transfer
- show contextual send actions using the selected device name
- keep selected-device state and derived send availability in screen state
- validate selected content and target device in the ViewModel
- clear device selection when the selected device is no longer available
- improve empty, scanning, selected, and unavailable device presentation
- add accessible radio-selection semantics to nearby-device cards
- simplify nearby-device information by hiding unnecessary technical details
- add text character count, clear action, and improved input guidance
File selection:
- introduce shared file-selection content across supported platforms
- replace the expanding vertical file list with a horizontal lazy row
- add larger file cards with filenames, sizes, previews, and remove actions
- display image thumbnails when available through Coil
- show suitable file-type fallbacks for files without image previews
- report selected file count and total size without misrepresenting unknown sizes
- prevent duplicate files from being added using their stable URI
- change the picker action from selecting files to adding more files
- keep picker implementations platform-specific while sharing presentation
- fix desktop file selection by reading files from the AWT dialog explicitly
- preserve the iOS document-picker delegate for the required native lifetime
- keep Android picker and URI handling inside the Android implementation
Architecture and state:
- keep UI components declarative and driven by immutable screen state
- route user actions through callbacks and ViewModel event handlers
- avoid platform ViewModel injection inside file-picker implementations
- centralize shared file presentation without changing transfer behavior
- use supported Material 3 Expressive button-group APIs
- preserve existing network discovery and transfer flows
Release preparation:
- set Android, desktop, and iOS version metadata to 0.1.0
- add optional Android release-signing configuration through ignored properties
- provide a safe example keystore-properties file
- configure Windows MSI packaging and stable upgrade identity
- resize the desktop splash artwork for a more appropriate launch window
- keep local signing credentials and generated release material out of Git
Documentation:
- update README platform and installation information
- document current Android and Windows packaging workflows
- clarify local-network behavior, privacy, and present security limitations
- update architecture, development, contribution, and open-source notes
- refresh roadmap, changelog, store listing, and security guidance
- remove or correct stale platform and implementation claims
No Gradle builds or automated tests were run.
Copy file name to clipboardExpand all lines: CHANGELOG.md
+4-1Lines changed: 4 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -25,6 +25,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
25
25
- Compose Desktop startup, platform DI implementations, native file dialog, clipboard, and Downloads actions.
26
26
- Navigation 3 adaptive 50/50 Send/Receive scene for wider windows.
27
27
- Application-lifetime network startup and state-driven connection repair.
28
+
- Enabled iOS device and Apple-silicon Simulator targets with native Bonjour discovery, document selection, clipboard, Files-visible storage, and streamed TCP transfer implementations.
29
+
- Added an iOS-only GitHub Actions workflow for an unsigned Simulator app and optional development-signed iPhone IPA.
30
+
- Prepared version `0.1.0` across Android, Desktop, and iOS; added private Android release signing configuration and a permanent Windows MSI upgrade identity.
28
31
- Public architecture, development, roadmap, security, privacy, and contribution documentation.
29
32
30
33
### Changed
@@ -52,4 +55,4 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
52
55
- No speed, ETA, retry, pause/resume, or interrupted-transfer recovery; transfer progress currently shows batch-wide whole-byte percentage.
53
56
- Foreground/background and network-change lifecycle handling are incomplete.
54
57
- Desktop support needs broader operating-system, adapter, firewall, and router validation.
55
-
- Automated transfer coverage is minimal; iOS is inactive.
58
+
- Automated transfer coverage is minimal; iOS physical-device discovery and transfer are unverified.
Sync360 is currently an early rebuild prototype. The current Android-first milestone supports local discovery and a simple Ktor request/response proof between nearby devices. Real text transfer, file transfer, production security, and public releases are not implemented yet.
5
+
Sync360 sends text and files directly between nearby devices on the same reachable local network. It does not use a Sync360 account, cloud-storage service, analytics service, advertising service, or Sync360 transfer backend.
6
6
7
7
## Data Handling
8
8
9
9
- No account is required.
10
-
- No cloud service is used by the current prototype flow.
10
+
- No cloud service is used for discovery or transfer.
11
11
- No analytics, advertising, tracking, or telemetry is included.
12
12
- A random installation identifier is stored locally so devices can identify each other.
13
-
- Nearby-device discovery data stays on the local device while the app is running.
14
-
- The current prototype does not transfer or save user-selected files.
15
-
- The current prototype does not send user content to the developer.
13
+
- Nearby-device discovery information is exchanged only with devices on the reachable local network and is kept as runtime state.
14
+
- Text and selected files are sent directly to the receiver chosen by the user after the receiver approves the offer.
15
+
- Received files remain on the receiving device in its platform Downloads location.
16
+
- Shared text and transfer state are temporary runtime state; Sync360 does not maintain chat or clipboard history.
17
+
- Sync360 does not send shared content to the developer.
16
18
17
19
## Network Security
18
20
19
-
The current prototype uses cleartext HTTP on the local network for learning and testing. Final authentication, session validation, request signing, replay protection, and encryption are not implemented yet.
21
+
Sync360 currently uses cleartext local HTTP for offers and text and raw TCP for file bytes. Sender authentication, session validation, request signing, replay protection, encryption, and cryptographic integrity verification are not implemented yet. Receiver approval exists in the UI but is not a complete security boundary.
20
22
21
23
Do not treat the current code as production-secure file-transfer software. Use it only on private networks you control while testing.
22
24
23
25
## Permissions
24
26
25
-
Sync360 uses network access for local discovery and request/response testing. Future versions may require additional Android permissions for reliable transfer sessions, notifications, foreground services, wake locks, Wi-Fi multicast behavior, and file access.
27
+
Sync360 uses network access for local discovery and direct transfer. Android uses system file pickers and `MediaStore` for selected and received files. iOS source declares local-network and Bonjour usage and exposes its app Documents directory through Files. Future lifecycle work may require notification, foreground-service, wake-lock, or other platform permissions.
26
28
27
29
## Retention
28
30
29
-
The current prototype stores a local installation identifier. Discovery/request state is runtime state. Real transfer retention behavior will be documented when file transfer is implemented.
31
+
Sync360 stores a local installation identifier. Discovery, offer, text, and transfer state are runtime state. Files successfully received remain in Downloads until the user removes them through the operating system. Incomplete current files are removed after receive failure or cancellation where the platform implementation supports it.
30
32
31
33
## Contact
32
34
33
-
Add a support email or website before publishing this policy.
35
+
For privacy questions, contact the maintainer through the GitHub profile linked in `README.md`. Report security-sensitive findings through the private-contact guidance in `SECURITY.md`.
Copy file name to clipboardExpand all lines: README.md
+8-5Lines changed: 8 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -42,7 +42,7 @@ Chat apps and cloud drives are great when the other person is far away. Sync360
42
42
43
43
## Current status
44
44
45
-
Sync360 has a working Android-to-Android MVP for text and multiple-file transfer. The Desktop/JVM app now uses the same shared flow, and Desktop-to-Android file transfer is working in manual testing. It is still an active rebuild, not a production-ready release.
45
+
Sync360 has a working Android-to-Android MVP for text and multiple-file transfer. The Desktop/JVM app now uses the same shared flow, and Desktop-to-Android file transfer is working in manual testing. An initial iOS implementation is enabled in source and has opened successfully in a cloud simulator, but nearby discovery and transfer still need physical-device validation. It is still an active rebuild, not a production-ready release.
46
46
47
47
In an initial Windows 11 Ethernet test, the native Windows DNS-SD backend discovered the Android device quickly, removed it promptly after the Android app closed, appeared promptly on Android after Sync360 started, and disappeared from Android after the Desktop app closed. The Desktop discovery UI also left its initial loading state when the native browse operation started instead of continuing to show loading while resolved devices were already visible. These are manual observations from one setup, not broad Windows or laptop compatibility guarantees.
48
48
@@ -67,6 +67,7 @@ In an initial Windows 11 Ethernet test, the native Windows DNS-SD backend discov
67
67
- Save received Desktop files safely into Downloads through a temporary `.part` file, then move completed files into place without overwriting an existing name.
68
68
- Copy received text and open the Downloads folder on Desktop.
69
69
- Open connection troubleshooting from Send, Receive, or the top app bar, then manually restart local discovery and service advertising without resetting the app or removing received files.
70
+
- Provide enabled iOS device and simulator targets with native Bonjour discovery, file selection, clipboard, Files-visible storage, and streamed TCP transfer implementations.
70
71
71
72
### Still needs work
72
73
@@ -79,7 +80,8 @@ In an initial Windows 11 Ethernet test, the native Windows DNS-SD backend discov
79
80
- Automated transfer coverage and broader device/router testing.
80
81
- Broader Desktop validation across Windows, macOS, Linux, routers, firewalls, VPNs, and machines with multiple network adapters.
81
82
- Desktop packaging and release testing.
82
-
- iOS discovery, transfer, and storage implementations.
83
+
- Physical iOS device testing for local-network permission, discovery, text/file transfer, cancellation, and Files behavior.
84
+
- Public iOS packaging, signing, and distribution.
83
85
84
86
The current progress UI tracks the exact bytes transferred across the accepted batch and displays the resulting percentage.
-`shared/src/androidMain/` — Android NSD, file selection metadata, clipboard, local identity, raw TCP transfer, Downloads storage, and Android DI bindings.
155
157
-`shared/src/jvmMain/` — Windows system DNS-SD and macOS/Linux JmDNS discovery/registration, native file selection metadata, clipboard, local identity, raw TCP transfer, Downloads storage, and Desktop DI bindings.
156
158
-`desktopApp/` — Compose Desktop entry point and DMG/MSI/DEB packaging configuration.
157
-
-`iosApp/` — iOS shell; iOS targets are currently disabled in the shared Gradle configuration.
159
+
-`shared/src/iosMain/` — iOS Bonjour discovery/registration, file selection, clipboard, identity, streamed TCP transfer, Files-visible storage, and iOS DI bindings.
160
+
-`iosApp/` — SwiftUI iOS host for the enabled device and Apple-silicon Simulator targets.
158
161
159
-
The project remains Android-first, but the current Desktop app reuses the shared UI, ViewModels, controllers, HTTP protocol, and transfer contracts. Platform source sets implement only the parts that require Androidor JVM APIs.
162
+
The project remains Android-first, but Desktop and iOS reuse the shared UI, ViewModels, controllers, HTTP protocol, and transfer contracts. Platform source sets implement only the parts that require Android, JVM, or iOS APIs.
160
163
161
164
## Tech stack
162
165
@@ -262,7 +265,7 @@ Use the current app only for development and testing on private networks you con
262
265
### Later: bring the same simple flow to more devices
263
266
264
267
- Desktop packaging, release workflow, and broader compatibility testing.
265
-
- iOS investigation and implementation.
268
+
- iOS physical-device validation, signing, and distribution.
266
269
- More actionable connection errors and broader troubleshooting guidance.
267
270
- Retry or resume support where the added protocol complexity is justified.
Copy file name to clipboardExpand all lines: SECURITY.md
+10-17Lines changed: 10 additions & 17 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,8 +1,8 @@
1
1
# Security Policy
2
2
3
-
Sync360 is an early local-network sharing app. It is not production-secure yet.
3
+
Sync360 is an early local-network sharing app. It is not secure for untrusted networks yet.
4
4
5
-
The current rebuild intentionally focuses on understanding local discovery and request/response before adding the final security model. Security work is planned, especially before real file transfer is treated as user-ready.
5
+
The current rebuild implements local discovery, receiver-approved text sharing, and streamed file transfer before adding the final security model. Security work remains required before untrusted-network use.
6
6
7
7
## Supported versions
8
8
@@ -16,13 +16,7 @@ There are no stable supported releases yet.
16
16
17
17
Please do not open a public issue for security-sensitive reports.
18
18
19
-
Send private reports to:
20
-
21
-
```text
22
-
TODO: add security contact email
23
-
```
24
-
25
-
Until a contact email is added, please contact the maintainer privately through their GitHub/LinkedIn profile once available.
19
+
Until a dedicated security email is added, contact the maintainer privately through the GitHub or LinkedIn profile linked in `README.md`. Do not include exploit details in a public issue.
26
20
27
21
## What to report privately
28
22
@@ -43,16 +37,15 @@ General bugs, crashes, UI issues, documentation problems, and non-sensitive arch
43
37
44
38
## Current security status
45
39
46
-
Current implementation is a learning-stage prototype:
40
+
Current implementation:
47
41
48
-
- Android NSD discovery works.
49
-
- Ktor request/response proof exists.
50
-
- Receiver Accept/Decline proof exists.
51
-
- Real file transfer is not implemented yet.
52
-
- Final authentication/session validation is not implemented yet.
53
-
- Encryption is not implemented yet.
42
+
- Android NSD, Windows system DNS-SD, macOS/Linux JmDNS, and an initial iOS Bonjour implementation exist.
Copy file name to clipboardExpand all lines: STORE_LISTING.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,20 +6,20 @@ Share text and files directly between your Android and desktop devices over your
6
6
7
7
## Security Notice
8
8
9
-
Sync360 currently uses trusted-network mode. Connections require device approval and authenticated session requests, but transferred content is not encrypted by Sync360.
9
+
Sync360 currently uses trusted-network mode. The receiver approves offers in the UI, but requests and file sockets are not authenticated and transferred content is not encrypted by Sync360.
10
10
11
11
Use Sync360 only on a private home network or personal hotspot controlled by you. Do not use it on public or shared networks such as cafes, hotels, airports, schools, or offices.
12
12
13
13
## Privacy Summary
14
14
15
15
- Direct local-network transfer; no transfer cloud.
16
16
- No account, ads, analytics, tracking, or telemetry.
17
-
-Session approvals, tokens, and shared text are temporary.
17
+
-Offer decisions, transfer state, and shared text are temporary runtime state.
18
18
- Received files remain on the receiving device.
19
19
20
20
## Publishing Checklist
21
21
22
-
-Add support contact to`PRIVACY.md`.
22
+
-Keep the maintainer contact in`PRIVACY.md` current.
23
23
- Publish `PRIVACY.md` at a public URL for store submission.
24
24
- Keep store data-safety answers consistent with shipped code and permissions.
25
25
- Revisit this disclosure before adding crash reporting, analytics, cloud services, or encrypted pairing.
- Best-effort cancellation and batch-wide byte percentage.
25
26
26
-
Android-to-Android text and multiple-file flows have manual validation. Desktop-to-Android transfer has initial manual validation. In one Windows 11 Ethernet test, native Windows discovery added and removed Android promptly as its app opened and closed, while Android added and removed Windows promptly as the Desktop app opened and closed. Laptop, macOS, Linux, and broader adapter/network behavior still need validation. The app is still development software, not a production-ready release.
27
+
Android-to-Android text and multiple-file flows have manual validation. Desktop-to-Android transfer has initial manual validation. In one Windows 11 Ethernet test, native Windows discovery added and removed Android promptly as its app opened and closed, while Android added and removed Windows promptly as the Desktop app opened and closed. The enabled iOS implementation has opened successfully in a cloud simulator, but same-LAN discovery and transfer could not be tested there. Laptop, macOS, Linux, physical iOS, and broader adapter/network behavior still need validation. The app is still development software, not a production-ready release.
0 commit comments