Skip to content

runcode v1.3.0 — file manager, zip import/export, editor fixes

Choose a tag to compare

@hami9 hami9 released this 22 Sep 10:35
· 7 commits to main since this release
Immutable release. Only release title and notes can be modified.

Phase 2 of the roadmap: a real file manager for projects, zip import/export, and four new MCP
tools. Testing it on device also turned up a crash and several layout bugs that were already
in the app; those are fixed here too.

File manager

Editor → folder icon. It shows the whole project, not just source/, so whatever a
script writes into data/ is visible.

  • Create files and folders (utils/helpers.py creates the folder too), rename, move to
    another folder, delete — with a confirmation that says how many files a folder holds.
    source/, data/, config/, logs/, cache/ and backups/ are the project layout and
    cannot be renamed or deleted; their contents can.
  • Renaming or moving the entry point takes the project with it — rename main.py and Run
    still works. ⋮ → Set as entry point picks another file.
  • Import files here copies files in from the phone; an existing file is never
    overwritten (scores.csv → scores (1).csv). Save a copy to phone gets any file back
    out, including databases a script produced.
  • Binary files and files over 512 KB no longer open in the editor as garbage; the app says
    what they are and how to get them out.

Import and export whole projects

⋮ → Export project (.zip) writes code, data and settings. Projects → import icon
brings it back as a new project — verified byte-identical after export → delete → import.

Any other zip works too: a GitHub "Download ZIP" is unwrapped from its top folder, macOS
junk is skipped, and the entry point is detected (main.py, bot.py, app.py, … or
index.html for a website).

Imports are defensive: an archive entry that tries to write outside the project is refused
(tested with ../../../shared_prefs/…; nothing was written), expansion is capped at 512 MB,
and imported projects never start on boot until you turn that on. Exports never contain
secrets — a secret variable is written only as its ${SEC_...} reference.

MCP

Sixteen tools now. New: create_directory, rename_path (rename or move; the entry point
follows), delete_path, and set_entry_point. read_file refuses binary and oversized
files with their size instead of returning mojibake, and list_files covers the whole project
with folders marked by a trailing /.

Edits made over the bridge appear in the app straight away: the tree refreshes, and a file
open in the editor reloads unless you have unsaved changes in it.

Fixed

  • Crash when opening a file. Opening a file that added a second tab could crash the app
    with IndexOutOfBoundsException: Material3's default tab indicator can recompose with the
    new tab index before the new tab is measured. This may be the crash reported earlier.
  • Line numbers didn't scroll. The numbers stayed put while the code scrolled under them.
    The editor now keeps its own scroll position and draws each number at the line's baseline;
    long lines wrap and get one number, and the view follows the cursor while you type.
  • Unsaved edits were lost when switching or closing a tab. They are saved now.
  • "New file" with an existing name wiped that file. It now refuses.
  • A long project name pushed Run off the editor toolbar; project cards hid their
    edit / backup / delete buttons on phone-width screens; the Home New button wrapped
    to "Ne / w".
  • Every path now goes through one containment check that requires a separator, so a sibling
    directory sharing a prefix can no longer slip past it.

Install

Signed with the same key as v1.2.0 (certificate SHA-256 9e9e346c…810568), so it installs
over it. versionName is now 1.3.0 — earlier releases all still reported 1.0.0.
minSdk 26, ABIs arm64-v8a and x86_64. Licensed MIT; third-party notices in
THIRD_PARTY_LICENSES.md.