All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
-
Complete i18n implementation: All 7 languages now fully supported
- English, Spanish, French, German, Portuguese, Chinese, Japanese
- All screens use localized strings from
StringResources - Language selector in Settings now shows all available languages
-
New UI Components
SortDialog.kt: Sort files by name, size, date, type with ASC/DESC orderFilterDialog.kt: Advanced filter by file type, date range, size rangeStorageChart.kt: Visual donut chart for storage usage by categoryStorageWarningBanner.kt: Warning banner when storage is 85%+ fullSharedWithMeScreen.kt: View files shared with current user
- Extracted ~100+ hardcoded strings from screens:
SettingsScreen.ktAIScreen.ktFederationScreen.ktCollaborationScreen.ktSyncScreen.ktVersionHistoryScreen.ktAdminScreen.ktPluginsScreen.kt
- Settings:
settingsAutoSync,settingsClearCache,settingsNotifications,settingsPushNotifications,settingsSecurity,settingsChangePassword,settingsLicenses,settingsLogoutConfirm - AI:
aiStartConversation,aiDescribeImage,aiAutoTagContent,aiSummarizeText,aiNoProviderConfigured,aiGeneratedTags,aiSelectModel - Federation:
federationTitle,federationEnterDomain,federationBlockConfirm,federationIncomingShares,federationOutgoingShares - Collaboration:
collaborationJoiningSession,collaborationCouldNotJoin,collaborationAddComment,collaborationNoCommentsYet - Sync:
syncTitle,syncDeactivateConfirm,syncRemoveConfirm,syncResolveConflict,syncChooseResolution - Version:
versionTitle,versionRestoreConfirm,versionCleanupOld,versionKeepLast,versionDeleteOlderThan - File Info:
infoType,infoFolder,infoFile,infoSize,infoMimeType,infoCreated,infoModified,infoPath,infoVisibility - Common:
commonBack,commonRequest,commonAccept,commonDecline,commonRevoke,commonBlock,commonRemove,commonDeactivate,commonResolve,commonSend,commonRetry,commonUnlink,commonConfigure
SortDialogTest.kt: Tests for sort field and order enumsFilterDialogTest.kt: Tests for filter types, date ranges, size rangesStorageChartTest.kt: Tests for storage category calculationsStringsTest.kt: Comprehensive i18n tests for all languages
- Language selector in SettingsScreen: Now shows all 7 languages instead of just 2
- Consistency: All UI text now uses localized strings
-
Activity Auto-logging:
ActivityLoggerservice that automatically logs all events to the Activity repository- Subscribes to FileEvent, FolderEvent, ShareEvent, UserEvent, SystemEvent
- Creates audit trail without manual intervention
-
Plugin Endpoint Routing: Dynamic routing for plugin-registered HTTP endpoints
- Plugins can register custom API endpoints via
PluginContext.registerEndpoint() - Endpoints accessible at
/api/v1/plugins/{pluginId}/api/{path}
- Plugins can register custom API endpoints via
-
Search API Integration: Full integration with
FullTextSearchPlugin/search/advancedwithsearchContent: trueuses Lucene-based full-text search- Returns snippets and relevance scores
-
Metadata Search: Implemented
/search/by-metadataendpoint- Search files by plugin-attached metadata
- Supports key-value pattern matching
- AI Plugin Refactor:
AIClassificationPluginnow uses centralizedAIService- Added
AIApiinterface toPluginContext - Plugins use managed AI providers instead of direct HTTP calls
- Simplified configuration (no per-plugin API keys)
- Added
-
LockManager Abstraction: Interface for distributed lock management
InMemoryLockManagerfor development/single-instanceRedisLockManagerplaceholder for production (requires Redis client)- Supports lock timeout, refresh, and cleanup
-
MultipartUploadManager Abstraction: Interface for multipart upload state
InMemoryMultipartUploadManagerfor developmentRedisMultipartUploadManagerplaceholder for production- Streaming completion support for large files
-
Federation Cryptography: Ed25519/RSA digital signatures
FederationCryptoServicefor signing and verifying federation messages- Timestamp and nonce validation to prevent replay attacks
- Supports Ed25519 (preferred) and RSA-SHA256
-
Delta Sync: Rsync-style rolling checksum algorithm
DeltaSyncServicefor efficient file synchronization- Adler-32 style weak checksum + MD5 strong checksum
- Block-level delta calculation and application
-
WebSocket Collaboration: Real-time OT message processing
CollaborationWebSocketManagerfor connection tracking- Full message protocol: join, cursor_update, selection_update, operation, presence
- Broadcast support for multi-user editing
- Added comprehensive test suites for new components:
DeltaSyncServiceTest- Rolling checksum and delta calculationFederationCryptoServiceTest- Signing and verificationLockManagerTest- Lock acquisition, release, and expirationMultipartUploadManagerTest- Multipart upload lifecycle
- Updated CHANGELOG with all Phase 1-6 completions
- Complete rewrite in Kotlin
- Backend: Migrated from Python/FastAPI to Kotlin/Ktor
- Frontend: Migrated from SvelteKit to Compose Multiplatform
- Database: Migrated from SQLite to PostgreSQL with Exposed ORM
- Multi-platform support: Web, Android, iOS, Desktop from single codebase
- Plugin architecture: Extensible system for metadata extraction, AI, search
- Kotlin Multiplatform shared module for cross-platform code
- Plugin system with event bus
- Full-text search plugin
- AI image classification plugin
- Image/Video metadata extraction plugins
- Compose Multiplatform UI with Material 3
- Comprehensive test suite with JUnit 5, MockK, Testcontainers
- OpenAPI/Swagger documentation
- GitHub Actions CI/CD pipeline
- Flyway database migrations
- Health check endpoints with real DB/storage checks
- Python/FastAPI backend
- SvelteKit frontend
- SQLite database support
- Nintendo Switch specific features (Tinfoil, NSP/NSZ support)
- Initial release
- Backend API with FastAPI (Python)
- Frontend UI with SvelteKit
- Helm chart for TrueNAS SCALE deployment
- Docker support for local development