All work

Office Suite for Phones

Office files on your phone, nothing uploaded

Year
2026
Kind
Apps
Status
In progress

A Flutter office suite for Android and iOS: Writer, Sheets, Slides and a PDF reader. It opens Word, Excel and PowerPoint files, including password-protected workbooks, and keeps everything on the device.

Four apps in one Flutter codebase. It reads .docx, .xlsx and .pptx itself, plus older .doc, .xls and .ppt, and decrypts password-protected Excel workbooks. Sheets recalculates formulas with its own engine and keeps Excel's saved value where it can't compute one. Files stay in the app's private storage, and the Android build doesn't request network access.

The problem

The point is to open and edit office files on a phone without an account or a cloud drive. Office Suite is one Flutter app for Android and iOS with four parts: Writer, Sheets, Slides and a PDF reader. Files live in the app's private storage, and this version uploads nothing.

How it works

  1. 01

    Work out what the file is

    Modern .docx, .xlsx and .pptx files are ZIP archives of XML. Older .doc, .xls and .ppt files are OLE compound files, a small FAT-style file system packed into one file. Each reader checks the first bytes (PK for ZIP, D0 CF 11 E0 for OLE), and the app has its own compound-file reader for .doc, .ppt and encrypted packages.

  2. 02

    Unlock password-protected workbooks

    A password-protected .xlsx isn't a ZIP at all. It's a compound file holding an EncryptionInfo stream and an EncryptedPackage stream. For the newer agile scheme, the app hashes the password with a salt spinCount times, checks the result against a stored verifier, unwraps the real key with AES-CBC, then decrypts the package in 4,096-byte segments, each with its own IV. The older standard scheme works too, and a wrong password just asks again.

  3. 03

    Map each format to a simple model

    Each reader keeps what a phone editor can use. Word paragraphs become blocks with a style (heading, list or quote) plus bold and italic. Slides become a title, body lines and up to 4 pictures, at most 30 per deck, with theme colors snapped to the app's palette. For old .doc and .ppt files the app pulls readable text runs out of the binary stream.

  4. 04

    Recalculate sheets on the phone

    Sheets has its own formula engine: a recursive-descent parser for arithmetic, comparisons, & to join text, and 11 functions including SUM, AVERAGE, IF and ROUND. Cells evaluate on demand and are cached, and a cell that depends on itself shows #CIRC instead of hanging. Grids are capped at 200 rows by 40 columns, and a bigger import says so.

  5. 05

    Save on the device, share on purpose

    Every document is a JSON file in the app's documents folder, with imported PDFs kept as raw bytes beside it. Editors save 350 ms after the last change. Nothing leaves unless you share it: Writer exports PDF or text, Sheets CSV or PDF, and Slides PDF, plus a full-screen present mode.

Results

30
unit and widget tests across the readers, formula engine, CSV and storage

Decisions

  • Fall back to Excel's own answer

    If an imported formula uses something the engine can't compute, the cell keeps the value Excel last saved instead of showing an error. The reader runs the engine over the workbook up to 3 times, swapping in saved values until nothing changes, so cells that depend on those settle too.

  • No network permission

    The Android release manifest declares no INTERNET permission; only the debug build has it, for Flutter's tooling. On Android the local-only promise is enforced by the operating system, not just by intent.