These are the headlines - - Thanks to Cemal, we have a fantastic new File Manager extension for the wifi ide. - Node has been upgraded from Node12 to Node16. - Using ide.AddModule() and !addmodule no longer randomly missing out sub-modules. - You can now build APKs with non-western characters in your app title. - ES6 modules are now supported for node apps with the cfg.NodeESM option. Here is the full list of changes since the last official release: DS 2.60b1_p4 - FileManager extension now supports remote install of APKs/SPKs/PPKs. - FileManager extension now allows diff comparison of two text files. - Device now displays multiple remote (wifi ide) connections. - Fixed crash when switching to terminal. - Fixed crash after subscribing to monthly premium. - Added yearly premium subscription option (cheaper). DS 2.60b1_p3 - Extension API func ext.Open() now switches to coding tabs when loading/displaying a file. - Added new 'options' param to ide.Obfuscate(), use 'noswap' to prevent app.* swapify. - Fixed missing 'Billing' permission in AABs when using app.CreatePlayStore. - Fixed missing 'Accounts' permission in AABs when using app.GetUser/Accounts. - Fixed the double-tap wifi "EADDRINUSE" error in wifi ide. - Added DS build number to About box + new app.GetDSBuild() method. - Tidied up app.CreateBluetoothList() layout. - Prevented ide.AddModule from firing more than once per run. DS 2.60b1_p2 - Fixed issue with using ctrl.Batch() method with obfuscation. - Removed troublesome bytecode file. DS 2.60b1 - Added FLAG_MUTABLE to app.SetInForeground() and others to stop API 31 error. - Added app.GetIsBatteryOptimized() detects if app is being optimized. - Added app.ShowBatterySettings() show user battery optimization settings. - Added foreground location service support for Android 10+. - Project dir is now added to module search paths for cfg.Node apps. - Added new obfuscate option to build.json (array of extra files to obfuscate). - Added ide.Obfuscate( src,dest ) method (useful for building extensions/plugins). - Added new !clean IDE command (cleans internal cache/temp dirs and re-extracts internal assets) - Added new !reset IDE command (resets to fresh install state, keeps projects & prefs) - Fixed bug with app.HttpRequest() and docs sample. - Upgraded Node from version 12 to version 16. - Fixed issue with ide.AddModule() randomly missing out modules. - Fixed problem with multiple @ symbols in ide.AddModule() method. - Added new cfg.NodeESM option to support use of ES modules. - Added new 'esm' option to app.CreateNode() to support ES modules. - Added new 'debug' option to app.CreateNode() enables generic debug trace for express and others. - Added new 'id' parameter to node.Run/Execute calls (for isolating script contexts in extended mode). - Fixed issue with BLE onUartReceive returning atob wrapped values. - Fixed issue building APKs with non-english characters in app title. - Fixed bug with quotes in debug run box causing DS crash. - Update internal docs to v237. - Fixed mail.Send for Android 11. - GameView: Added default loading splash screen. - GameView: Added gfx.SetSplash() (allows use of animated gif during load). - GameView: Fixed bug where OnReady called too early when loading text. - GameView: Added gfx.useCanvas property (use outside of OnLoad). - GameView: Added new gfx.debug=true option to visualise physics objects (use outside OnLoad) - GameView: Added new AddShape( 'polygon', [[x,y],[x,y],..] ) option to physics. - GameView: Fixed keyboard bug where keydown not being called in OnControl function. - GameView: Fixed bug where natural size of sprites was not available after load. - GameView: Added new ide.Export("GameView",src,dest) command to export game as HTML. DS 2.58b1 - UI plugin now automatically added to APKs when building Hybrid apps. - Fixed atob2 errors in Hybrid apps. - Fixed plugin sub-folders unwanted .js extension swaps in APK builds. - Fixed building APK with Hybrid apps. - Fixed missing options parameter on app.UpdateProgressBar. - Added 'shallow' option to app.ExtractAssets() method (only extracts top level). - Added 'extended' option to app.CreateNode() method (allows use of app.* methods). - Added 'documents' to app.GetSpecialFolder() method. - Added new Bluetooth permissions for Android 12. - Improved notification listener robustness. - Added app.GetPublicFolder() - Added app.GetTempFolder() method (Android automatically deletes old files if needed) - Added '/Public' file path support (maps to scoped/sandbox public folder for app). - Added '/Private' file path support (maps to app's private folder). - Added '/Temp' file path support (maps to app's cache/temp folder). - Added 'uri' type to app.SendIntent() extras. - Added 'Camera Photo' sample (uses built-in camera app) - Changed app.SaveJson() to take any object type. - Added node.SetEnv( name, val ) method to nodejs component. - Fixed list control not auto-expanding when calling SetTextSize or SetDivider. - Added 'Expand' method to list control. - Fixed app.Uri2Path for folder names containing blanks. - Fixed issue with drawer not displaying in cfg.Fast mode. - Fixed edit.setCursorColor() for Android 10+. - Added new edit.SetSelectColor() method.