All notable changes to this project will be documented in this file, this project
uses semantic versioning 2.0.0 spec in the format
major.minor.patch(-prerelease)(+buildmetadata).
Added: New featuresChanges: Changes in existing functionalityDeprecated: Soon-to-be removed featuresRemoved: Now removed featuresFixed: Bug fixesSecurity: VulnerabilitiesDocs: Documentation updatesContributors: Release contributorsFSC-ID: Firebase Crashlytics Issue ID
17-01-2026(Saturday, January 17, 2026)
-
Fix: UI crashes on tablet devices
- Summary: Resolved layout and configuration-specific crashes affecting tablet and large-screen devices, particularly during pane initialization and fragment rendering.
-
Fix: Layout measurement failures on large screens
- Summary: Corrected invalid view measurement and constraint handling that caused runtime exceptions on tablet form factors.
- Minor internal UI stability optimizations
- Summary: Small internal adjustments to improve rendering reliability and reduce crash likelihood on tablet and large-screen devices.
22-12-2025(Monday, December 22, 2025)
- Buffer size selection for dynamic IO operations
- Facebook page link to
Socials - Projects created from templates are now added to the recent project list
- File system monitoring
- Versioning Manager to enforce our Custom SemVer
- Onboarding fragment – the first thing a user sees must be nice 🙂
- introduced
PaneWindowto handle the panes in a decoupled fashion - In-app update system and update handling logic
- Theme export utility
- Allows exporting the currently active application theme to an XML file
- Tap detection and measurement system
- More
CodeEditorPanefile functions e.g save-as, reload-file, reload-file with-charset, file statistics, next and previous cursor location movement and lite mode ILog.javato expose the logs sent by Log.java to enhance debugging.- GM3 Color theme exporter to export app theme at runtime
- Command-Palette to enhance quick actions and workflows
- Debug overlay
- Activated by long-pressing the top layout for ~3–4 seconds and releasing
- Extensive internal refactoring and restructuring of the codebase
- Crashlytics and Analytics are now automatically sent, user can opt out in the setting
- Theme system updated to properly support Dynamic Colors
- Optimized push notifications with targeting
- Summary: Push notifications are now more efficient and can be targeted more accurately to improve delivery and user engagement.
- Jump to line dialog to use the Command-Palette
- Enforced EdgeToEdge across all supported api versions
- Pane system
- Overall application stability
- Performance and memory usage
- Fine tuned
BinaryFileChecker.javadetection aggressiveness - Foundation laid for future features and systems
- LiveServer to server both files and directories
- Internet connectivity check via the
IPProvider.java - Optimized
BinaryFileChecker.javato use weight instead of a majority rule system - Optimized
CodeEditor Paneto use resources optimally. - Optimized
BaseFragment.javato handle resources optimally. - File rename logic
- Code editor settings
Pin line numbersync; in terms which works Relative close depthsync; New configuration is synced in realtime with the Code Editor so you don't restart the app to apply the changes.Auto closing bracketssync; New configuration is synced in realtime to the Code Editor so you don't restart the app to apply the changes.Close unpinned project panessync; New configuration is synced in realtime so you don't restart the app to apply the changes.- Generally i've made a lot of improvements i still failed to track.
- Release notes support either plane text or html text.
- Migrated all pane functionality to
PaneWindow.java - Storage manager stability and reliability
- Memory management across the application
- Overall application stability and performance
-
Fix: Undo / Redo synchronization issue
- Summary: Redo operations could not be performed instantly due to editor state desynchronization. This has been fixed to ensure immediate and consistent redo behavior.
-
Numerous undocumented bug fixes
- Summary: A significant number of issues were resolved during development, most of which were not individually logged due to their volume.
-
Fix: Opened Issues
-
Fix: False positives within the
BinaryFileChecker -
Fix: Crash on android devices 11 and above due to storage related issues
- Summary: Crash occurs when user tries to perform file/folder selection
-
Fix: Crash on that occurs at certain times when user tries perform the
Clone git repositoryaction- Summary: This error occurred because the
Layout bindingwas initialized later i.e after the VM observer atGitRepository.java:123
- Summary: This error occurred because the
-
Fix: Failure to activate Code Editor
pin line numberpreference- Summary: Logic for this preference to be activated was not implemented
-
Fix: Sync error that occurred when refreshing the Code Editor color scheme
- Summary: If the
Auto complete windowpreference is disabled when ever the editor color scheme is refreshed the autocomplete window is displayed.
- Summary: If the
-
Fix: Failure to enable or disable
Font ligatureswhen the preference is selected- Summary: Logic to sync this feature with the Code Editor was not implemented
-
A lot of bug fixes were made, i only added those which were worth taking note of.
-
Fix: Opened Issues 12
-
Fix: Opened Issues 7
-
Fix: Opened Issues 6
- Secured CodeOps Studio private and sensitive data
- Summary: Strengthened encryption and protection of sensitive assets across the build, deployment, and runtime pipeline. This includes safeguarding secrets used in GitHub Actions, Firebase services, code signing keys, and internal application data to ensure user data remains private and protected.
- Opening and editing files from a removable storage
- The
ast-corelibrary until further notice. PaneUtil.javain favor ofPaneWindow.java- Template manager
- Reason: Will be replaced with a more robust, offline-first template system intended to support a future community-driven workflow.
- updated README
- updated CONTRIBUTING
- Introduced custom versioning system
- Summary: Implemented a variation of semantic versioning with specific rules for release tracking and consistency across the project.
26-12-2024(Thursday, Dec 26, 2024)
- Extra symbols for the input panel
- The input action MCR, MCL, MCU, MCD are essentially cursor actions where M (Move), C (Cursor), L( Left), R(Right), U(Up), D(Down)
- Moved Uri to file conversion from FileUtil to independent class
FileUriMediator.java - Decoupled storage permission handling to
MainActiviy.javafromMainFragment.java - Slowly migrating code base to more structural format
- Storage permission management
- Optimised the
ContextLifeCycleObserver.javaclass to handle URI related task gracefully - Optimised
LiveServer.javato load files optimally. - Optimised case conversion for
ContextualCodeEditor.java - Generally i've made a lot of improvements i failed to track.
-
Fix: Workaround for loading files via
LiveServerin theWebViewPane.javato an actual solution- Summary: Prior to this release when you init the
LiveServerthere is Ui lag due to the blocking operation, workaround was to load portion of the result and wait for the UI to settled before loading the blocking code.
- Summary: Prior to this release when you init the
-
Fix: Fixed the horrible crash that occurs when you select a file or folder
- Summary: Prior to this release crashes were a lot to often, i found that it mostly occurs on device with higher APIS
-
Crash when selecting a directory on android devices 11 and above
-
ArrayOutOfBoundExceptionthat occurs when we split the document id on certain dirs like ( emulated root(primary) & document(home) -
Failure to request storage permission on Android devices 11 and above
13-09-2024 (Thursday, Sep 13, 2024)
- Option to refresh file tree
- AST core module for future Node management
- Support for
.apkfile installation - Progress listener for case conversion in the
ContextualCodeEditor - Support for more symbols auto completions
\„ “ « ‚ ‘ ‹`
- Disable code obfuscation and resource shrinking
minifyEnabledandshrinkResources= falsebecause it breaks CodeOps Studio.
- Optimized file tree loading performance and reduced memory usage
- JavaDoc improvements
- Refactored Code base
Paneclass ID generation: shared ID list for all instances of thePaneclassPaneclass ID generation method:Pane#generateUUID()- Optimized
Wizard#getDeviceCountry(Context)method to retrieve the name of Country a device is currently in. Crashlytics now collects the actual Country Name instead of theDevice Locale - Revamp detection of invalid last opened project before opening
- Optimized
IdeApplicationandCrashActivityfor handling crash intent - Revamped
TreeView-TreeNodechildren sorting comparator - Optimised
ContextualCodeEditor#toLowerCase(String)andContextualCodeEditor#toUpperCase(String)method by reducing time complexity from O(n^2) to O(n) that was caused by thestring = string + ...reallocation - Case conversion by the
ContextualCodeEditoris now possible even whenClipBoardlimit is exceeded - Optimized line text duplication by the
CodeEditor - Optimized binary file detection, before a file is flagged as binary we compare how many times it
has been flagged as a binary across multiple
check+pointsagainst how many times it didn't, making the whole process more effective.
-
Fix: Case conversion failure.
- Summary: Case conversion failed because the result from the
AsyncTask#runNonCancelablewas not parsed into the editor.
- Summary: Case conversion failed because the result from the
-
Fix: Crash when parsing a string into
ReleaseType(String)in ChangelogAdapter due toNullPointerException- Summary: App crashed when trying to load saved release notes due on a null object
ReleaseType(null)reference in ChangelogAdapter.
- Summary: App crashed when trying to load saved release notes due on a null object
-
Fix: Pane Tab duplication. Proguard actually broke the project so it's disabled until further notice.
-
Fix:
CodeEditorPanepersistency.CodeEditorPanenow loads persisted arguments and restores them accordingly without text content history -
Fix: Failure to properly detect invalid projects when loading the last opened project.
- Summary: App crashed as a result of a null file path being passed to the
File.existsmethod
- Summary: App crashed as a result of a null file path being passed to the
-
Fix: Crash due to null
Logobject inLog.equals()method*- Summary: The app crashes with a
NullPointerExceptionwhen theequals()method is invoked on a nullLogobject in theLog.equals()method. This issue arises during item comparisons in theRecyclerView, particularly when updating the list usingAsyncListDifferin theLogAdapter. The crash often occurs when selecting an unsupportedUri. - Resolved Issue#10
- FCS-ID:
33308dfde6721aa4e51f9010a1f307ea
- Summary: The app crashes with a
-
Fix: Crash when accessing a null
CircularProgressIndicatorinCodeEditorPane.setLoading()- Summary: The app crashed due to a
NullPointerExceptionwhen attempting to access a nullCircularProgressIndicatorin theCodeEditorPane.setLoading()method. This occurred while loading a file, where theprogressbarwas not properly initialized. - Resolved Issue#9
- FCS-ID:
fcc3d4f7d3825fd148be619cf777948b
- Summary: The app crashed due to a
-
Fix: Crash when accessing null
ContextualCodeEditorinCodeEditorPane.canUndo()- Summary: The app crashed due to a
NullPointerExceptionwhen attempting to access a nullContextualCodeEditorobject in theCodeEditorPane.canUndo()method. This occurred during the preparation of the toolbar options menu when the undo state was being checked. - Resolved Issue#8
- FCS-ID:
c6f4d617cc63acaa3fe262dbb1e948ca
- Summary: The app crashed due to a
-
Fix: Crash when accessing a null
ViewHolderinRecyclerView- Summary: App crashed due to a
NullPointerExceptionwhen trying to reference a nullViewHolderin theRecyclerView. - Resolved Issue#7
- FCS-ID:
c12fd425b630739a67de5d35ea207be5
- Summary: App crashed due to a
-
Fix: JavaScript engine initialization failure. The issue was due to a failure in creating the VMBridge instance, and further investigation is needed to resolve the underlying problem.
- Summary: App crashed due to an
IllegalStateExceptionwhen attempting to initialize the JavaScript engine, specifically related to the VMBridge instance creation failure. - Resolved Issue#6
- FCS-ID:
8c42fe20ec460f1f2bb87c206438081f
- Summary: App crashed due to an
-
Fix:
TreeViewFragmentcontext attachment issue.- Summary: App crashed due to an
IllegalStateExceptionwhen attempting to access the fragment's context while it was not attached. - Resolved Issue#5
- FCS-ID:
5665f61e9b837932df3c90422eccb283
- Summary: App crashed due to an
-
Fix:
ChangeLogFragmentnull reference issue.ChangeLogFragmentnow correctly handles nullRecyclerViewreferences, preventing crashes when checking if logs are loaded.- Summary: App crashed due to a null
RecyclerViewreference being accessed in thecheckIfLoaded()method. - Resolved Issue#4
- FCS-ID:
4dfd5aed0ff4905420e59f5b3b09ce90
- Summary: App crashed due to a null
-
Fix:
NullPointerExceptionwhen handling back press inSettingsPanedue to nullFragment- Summary: App crashed because a null
Fragmentwas passed to theequals()method in theisPrimaryNavigation()check. - Resolved Issue#3
- FCS-ID:
516de67b0dd6824a7aec7f8bd411974d
- Summary: App crashed because a null
-
Fix: Crash when binding log data in the
LogAdapterdue toNullPointerException- Summary: App crashed when a null
CharSequencewas passed to theSpannableStringBuilder.append()method inonBindViewHolder() - Resolved Issue#2
- FCS-ID:
50dfb50c980fcffba644e7fa8debbafd
- Summary: App crashed when a null
-
Fix: Crash when accessing recent projects in the
WelcomePaneclass due toNullPointerException- Summary: App crashed as a result of a null file path being passed to the
File.existsmethod - Resolved Issue#1
- FCS-ID:
ba22d747cbd53061443dfc1c7a7698bf
- Summary: App crashed as a result of a null file path being passed to the
- Improved README
- Improved CONTRIBUTING