Repository navigation
Releases: Nwokike/CollabShell
Release list
Collab Shell v2.2.0 (pre-release, pending approval)
Automated multi-platform build generated from commit 72d6d7af5deb6c5f40727c77e3f4cf9787d46984.
This is a pre-release placeholder. Feel free to edit this title and description with your release notes right from the GitHub Releases UI.
Colab Shell v2.1.2
Colab Shell: Notebook & TTY (v2.1.2) fixes the false "update available" prompt from 2.1.1, plus general bug fixes and expanded test coverage.
- False update prompt fixed. One version spot was missed in the last bump, so the app kept flagging 2.1.1 as new even though you already had it. Update and it goes away.
- General bug fixes and stability improvements.
- Expanded automated test coverage, including a guard that keeps the version numbers in sync across every release.
Colab Shell v2.1.1
Colab Shell: Notebook & TTY (v2.1.1) fixes the long-standing "dead session" bug where leaving a session idle for hours caused new terminal tabs and file operations to fail with 404s, plus brings seamless in-app update notifications, a top-right version chip, and onboarding UI refinements.
🔄 Session Auto-Heal & Token Refresh (Headline Fix)
- Sessions no longer die after hours idle — Google Colab's runtime proxy tokens expire after a few hours even while the VM remains active. Colab Shell now automatically syncs and refreshes the token on app resume, session sync, and on-demand.
- Terminal tab resilience — Opening a new terminal tab or reconnecting to existing tabs now heals expired tokens on 404 and connects cleanly instead of throwing connection errors.
- File Explorer self-healing — Browsing, uploading, and downloading files now automatically re-authenticates if the proxy token expired during a long session.
- Kernel execution guard — Code execution and kernel restart no longer delete a live session when encountering a stale proxy token.
🔔 In-App Updates & Version Notifications
- Top-right version chip — A clean version pill in the top-right header displays your current version and automatically flips to an "Update: vX.X.X Available!" badge when a new build is published.
- Always-accessible changelog dialog — Tapping the version chip or the Settings version row opens a two-mode changelog: view offline release notes when up-to-date with a live "Check for Updates" button, or direct platform download buttons (Google Play / GitHub APK) when an update is available.
🎨 Onboarding & UI Polish
- Ergonomic Auth Buttons — Fixed Google Sign-In and code verification buttons in onboarding to standard width instead of stretching across the entire desktop/tablet screen.
- Centered responsive presentation — Onboarding slides and navigation are now neatly centered on wider viewports.
Colab Shell v2.1.0
Colab Shell: Notebook & TTY (v2.1.0) brings full desktop keyboard shortcuts to the Notebook, Terminal, and Files screens — Jupyter-standard cell shortcuts, leak-free terminal combos (via flet-terminal 0.3.8), and a context-aware F1 cheat sheet — plus the terminal top-bar overhaul you asked for.
⌨️ Notebook — Jupyter-standard shortcuts
- Shift+Enter runs the cell and advances to the next (inserts a new one when at the last cell) — Ctrl+Enter runs in place — Alt+Enter runs and inserts below.
- Ctrl+Shift+Enter runs all cells; Ctrl+S exports the notebook as
.ipynb(same as the download icon). - Ctrl+Shift+A / B insert a code cell above/below; Alt+Up/Down moves the active cell; Ctrl+Shift+D deletes it; Ctrl+Shift+M toggles code ↔ markdown.
- Escape leaves the editor (markdown renders immediately).
- The active cell is highlighted; run-and-advance focuses the next editor automatically.
🖥️ Terminal — shortcuts that never leak into your shell
- Powered by flet-terminal 0.3.8: combos are intercepted on the Dart side before the PTY, so nothing extra is typed into your command line.
- Ctrl+Shift+T new terminal · Ctrl+Shift+W close · Ctrl+Shift+1..9 switch terminal · Ctrl+PageUp/PageDown cycle · Ctrl+Shift+F search · Ctrl+Shift+L clear · Ctrl+Shift+C/V copy/paste · Ctrl+Shift+=/-/0 zoom in/out/reset.
🛠️ Terminal top-bar fixes
- Snug zoom buttons — the huge gap between zoom in/out is gone (compact Material density).
- New Reconnect button — re-attaches the active terminal's socket to the same shell, no terminal reset.
- Theme (colour) switcher is back — cycles Dracula → JetBrains Dark → Matrix Green → Colab Light right from the bar (now that it actually applies, thanks to the 0.3.7 fix).
📁 Files shortcuts
- F5/Ctrl+R refresh · Alt+Up/Backspace parent folder · Ctrl+A select all · Ctrl+Shift+N new folder · Delete delete selection · Escape clear selection.
🌍 Global
- F1 opens a shortcuts cheat sheet for whatever screen you're on; Ctrl+1..5 jumps between Home, Notebooks, Terminal, Files, Settings.
🧪 Under the hood
- New keyboard engine (
core/shortcuts.py+hooks/use_keyboard_shortcuts.py, ported from the proven KTV Player pattern) with a 21-test pytest suite; shortcut help text is ASCII-English-only by test.
Colab Shell v2.0.1
Colab Shell: Notebook & TTY (v2.0.1) fixes the two biggest terminal pain points — content loss on tab switches and permanent disconnection after backgrounding the app — plus UX polish across onboarding, home, and notebooks.
🖥️ Terminal Resilience (the headline fixes)
- Tab switching no longer loses terminal content — every stdout chunk is now mirrored into a per-tab scrollback buffer in Python. When a terminal's view is recreated (tab switch, remount), the buffer is replayed into it, so each tab keeps its own full history.
- WebSockets owned by the panel, not the widget — terminal connections live on
TerminalEntryat panel level instead of being tied to the widget's mount cycle, so switching tabs or re-rendering the session screen no longer kills background shells. - Automatic reconnect with backoff — when Colab's proxy closes an idle socket (typical after backgrounding the app), the client now re-attaches to the same PTY by name with exponential backoff instead of showing "Disconnected" forever.
- Reconnect on app resume — returning from Android background triggers a connectivity probe and re-attaches any dead terminal sockets; your shell (cwd, env, variables) is exactly where you left it.
⚙️ Terminal Settings That Actually Apply (flet-terminal 0.3.7)
- Zoom / theme / blink / search now apply instantly and reliably — flet-terminal 0.3.7 replaces
Control.update()inside frozen declarative trees with a session-level patch helper (control_update), fixing updates that silently no-op'd once Flet detached the control's parent chain. - Scroll freely while selecting text — the terminal no longer snaps back to the bottom on every rebuild while the keyboard is open; auto-follow only happens while you're already at the bottom. Selection events are debounced so drag-select doesn't flood the bridge.
- Search as you type — the terminal search bar matches live (350 ms debounce); arrows still step through matches.
📓 Notebooks
- Import
.pyfiles — notebook import now accepts Python scripts in addition to.ipynb. Files using# %%cell markers are split per block (# %% [markdown]becomes a markdown cell); plain scripts import as one code cell.
Colab Shell v2.0.0
Colab Shell: Notebook & TTY (v2.0.0) is a ground-up rewrite of the entire UI layer to Flet 0.86's new React-like declarative API (@ft.component, @ft.observable, use_state, use_effect), plus major terminal, theming, and reliability improvements.
🔥 Architecture: React-Like Declarative UI
- Full Declarative Migration — Every screen (Home, Session, Files, History, Settings) rebuilt as functional components with observable state models. State mutations trigger surgical re-renders instead of full-page
page.update()repaints. - Observable State Models —
AppState,TerminalPanelState,TerminalEntry, and per-screen models drive all UI reactively; no manual refresh calls. - Frozen-Control Safety — All imperative mutations inside declarative trees use
thaw()context managers matching Flet's internal_before_update_safepattern.
🖥️ Terminal Overhaul
- Terminal Theme Follows App Mode — Terminal automatically switches between dark (JetBrains Dark) and light (Colab Light) themes when the app's light/dark mode changes, including live OS brightness flips in System mode.
- Starts in /content — New terminals
cd /contentimmediately after connecting, landing in the shared data directory instead of/root. - Real Cursor Blink — Implemented a Dart-side blink timer (
setCursorVisibleMode+notifyListeners) since upstream xterm 4.0.0 has no built-in blink. - Reactive CTRL/ALT Modifiers — Sticky modifier buttons repaint instantly via observable subscription (
ModifierState+@ft.componentModifierKey). - Inline Header Controls — Zoom in/out, theme cycle, and search toggle buttons directly in the terminal tab bar.
- FAB Inherits Terminal Settings — The session FAB menu exposes all terminal settings (theme presets with checkmarks, cursor blink, search bar, zoom in/out/reset) synced live with the terminal panel.
- Fullscreen Removed — Replaced by the merged header; no longer needed.
📐 One-Line Merged Session Header
- SpanInsight-Style Header — Session name (ellipsized with tooltip), live status dot, hardware badge (CPU/GPU/TPU), Notebook/Terminal tab switcher, and theme toggle all in a single compact header line. Separate status card eliminated.
🔐 Mount Drive & Auth GCP — Fixed
- Credential Propagation — Rewrote the Drive auth hook to match
colab-cli's proven logic: dry-run check → user authorization dialog → propagate credentials (dryrun=false) with retries → always sendinput_replyso the kernel resumes. - jupyter-kernel-client Pin — Pinned
<1.0because v1.0.1 renamedKernelClient→JupyterKernelClient, breakinggoogle-colab-cli0.6.0's runtime construction (TypeError: 'NoneType' object is not callable).
🎨 Adaptive Theming & Contrast
- Light/Dark Glass Cards — All glass surfaces, banners, and selection toolbars use adaptive opacity/border values resolved from the active theme mode.
- Files Selection Bar — Replaced orange-on-orange (
SECONDARY_CONTAINERbg +PRIMARYicon) with adaptive glass background and PRIMARY accent when selected. - Compact Appearance Selector — Settings → Appearance now uses horizontal icon+label cards (SpanInsight-style) instead of oversized radio rows.
🐛 Fixes
- Download Folder Beyond /content — Removed hardcoded
/contentprefix; absolute paths like/var,/root,/datalabnow download correctly. - Import .ipynb Crash — Fixed for Flet 0.86's
pick_files()returninglist[FilePickerFile](notFilePickerResult). - Notebook FAB Import Always Available — Import no longer gated behind
has_cells; accessible even in empty notebooks. - Offline Handling — Startup offline screen, home banner, and network guards on all operations; returning users no longer forced through OAuth onboarding when offline.
Colab Shell v1.1.0
Colab Shell: Notebook & TTY (v1.1.0) is a major release bringing full real-time interactive terminal emulation, robust multi-platform storage normalization, enhanced remote file management, and polished action workflows.
🔥 Major New Features & Architectural Upgrades
1. Interactive PTY Terminal & Tabbed Workspace
- Real-Time Web-Based Terminal (TTY) — Integrated live interactive terminal sessions directly into the session workspace via Google Colab's
/api/terminalsWebSocket endpoints. - Tabbed Session Interface — Seamlessly toggle between Notebook cell execution and Terminal shell tabs within an active cloud instance.
- WebSocket Header & Protocol Engineering — Resolved remote connection rejections by injecting
Origin: https://colab.research.google.comand properly formatting subprotocols (['colab-ws-token']) acrosstornadoproxy tunnels.
2. Unified Storage & History Logging Infrastructure
- Universal Storage Patching (
storage_patch.py) — Intercepted and wrappedHistoryLogger.__init__,StateStore, andSettingsStoreto ensure all execution logs and session histories persist reliably insidestorage/history/on both Android mobile devices and Linux desktop environments. - Full Backend Audit Logging — Added automatic
HistoryLogger().log_event()hooks across all core operations:new_session,stop_session,exec_code,ls,upload,download, andrm. - Instant Log Visibility — Fixed previous issues where session history views displayed empty lists by eliminating split configuration directory paths.
3. Interactive File Manager Improvements
- Parent Directory Navigation — Upgraded directory traversal using
posixpath.dirnameandposixpath.normpathto allow seamless browsing from subdirectories up to/contentand root (/). - Instant UI Repainting — Uploading (
upload) or deleting (rm) files now automatically refreshes directory listings (_load_files) and forces immediate UI repainting (page.update()) so changes appear instantly. - Native OS File Picker & Folder Downloading — Integrated
ft.FilePickerso users can choose exact save destinations on their device without Android storage permission conflicts. Added comprehensive Zip-and-Download support for archiving and downloading entire remote directories. - Animated Progress Bars & Payload Sizes — Replaced indeterminate loading spinners with sweeping
ft.ProgressBarcontrols that accurately report total payload sizes during uploads and downloads. - Path Normalization — Standardized POSIX path joining (
posixpath.normpath) across all file operations to eliminate path double-slashes and clean up file transfers.
4. Action Bar & Home Dashboard Refinements
- Home Quick Actions Redesign — Replaced ambiguous dashboard buttons with clear, action-oriented controls: New Notebook, Quick Terminal, and Cloud Files.
- Intelligent New Session Routing — Launching a new instance directly from the Terminal, Files, or Notebooks dashboard actions now preserves the user's intent, routing straight into that feature view as soon as provisioning completes.
- Robust Modal & Dialog Management — Eliminated UI freezing and unresponsive barriers across the app by replacing deprecated
page.pop_dialog()calls with explicitdialog.open = Falsestate management. - Live Output for Drive & GCP Auth — Wired live execution streaming (
on_output=_action_output) to Mount Drive and Auth GCP buttons, showing immediate authorization prompts and progress updates directly in the snackbar. - Clearer Labeling — Updated the
Browseraction chip label toColab Webfor improved user clarity. - Google Play Title Compliance — Updated official app branding to
Colab Shell: Notebook & TTY(28 characters, adhering to Google Play's 30-character limit).
CollabShell v1.0.0 — Initial Release
Welcome to the initial launch of CollabShell, an independent, premium client application designed to manage, monitor, and run Google Colab cloud environments directly from your mobile device. Built using the Flet framework with the Flutter engine and Python, CollabShell provides a beautiful, responsive, and native client interface wrapping the Google Colab CLI.
Core Features
1. Session Lifecycle & Accelerator Control
- Accelerator Selection — Provision GPU tiers (
T4on the free tier;L4,G4,A100,H100on Pro/Pro+) or TPU models (v5e1,v6e1) to handle deep learning, AI inference, and high-performance computing. - Kernel Management — Start new instances with custom names, check active runtime statuses, restart python kernels to clear variables, and stop/terminate instances to release compute quota.
- Active Keep-Alive Daemon — Enable active background pings every 60 seconds to prevent Google from shutting down your VM due to idle timeouts.
- Auto-Cleanup — Configure session termination on app disconnect to preserve compute credits, or keep them active when the app closes.
2. Interactive Notebook Cell Editor
- Jupyter-Style Cells — Add, edit, delete, and re-order Code and Markdown cells.
- Rich Output Console — Parse colorized ANSI logs, output streams, execution traces, and view inline generated images (e.g. Matplotlib charts).
- Interactive Stdin Inputs — Support for interactive code prompts through clean pop-up dialog overlays when the remote kernel demands user input.
- Google Cloud & Drive Integration — Mount your personal Google Drive filesystem directly to the VM path (
/content/drive) or propagate credentials (GCP authentication) with one click. - Import / Export IPYNB — Load local
.ipynbfiles to parse cell lists, and export your notebook progress back to standard Jupyter Notebook format.
3. Standalone Quick Run
- One-Shot Script Run — Execute local
.pyscripts on temporary Colab VMs without writing code in the cell editor. - Script Customization — Pass custom command-line arguments to your scripts, specify execution timeouts, and choose to terminate or persist the VM afterward.
- Live Output Stream — View output streams and logs in real-time as your python script compiles and runs.
4. Remote File Browser
- Virtual Directory Navigation — Navigate the remote Linux filesystem of your Google Colab instance.
- File Transfers — Upload local datasets and scripts from your mobile storage, download remote output assets to your local device
Downloadsfolder, and delete files on the instance.
5. Chronological Event Logging & History
- Event Trace Logs — Keep an audit trail of session creations, script executions, file transfers, and system automations.
- Filters & Search — Filter event lists by type (executions, file operations, state transitions) or session name.
- Export System Logs — Export history tables as
.ipynb,.md,.jsonl, or.txtformats.
UI & Polish
- Solarized Branding Palette — Custom Solarized and dark-mode designs with Outfit typography and RobotoMono monospace console text.
- Swipe Onboarding Guide — Modern 3-step gesture onboarding introducing core features and handling permissions.
- Responsive Layout — Responsive screen design adapts smoothly from compact mobile viewports to widescreen tablets.
- Interstitial Ads — Built-in Google AdMob integration to support compute operations.
Performance & Security
- Multi-threaded Async Architecture — Heavy CLI operations run non-blockingly via Python's
asyncio.to_threadengine, ensuring the user interface remains smooth and interactive even during long remote VM assignments. - Mobile Forge Binary Compatibility — Recompiled native wheels (
tornado,pyarrow) dynamically loaded from Flet's mobile forge to run the gRPC and websocket client bindings directly on Android. - Privacy-First Sovereignty — All network connections go directly to Google Cloud without middleman proxies, and authentication tokens are kept secure in local sandbox directories.