Skip to content

Kern 0.1.8.1

Choose a tag to compare

@github-actions github-actions released this 13 Jun 14:13
· 1 commit to main since this release

[0.1.8.1] — 2026-06-13 19:38 IST · First Major Release

This is the first release of Kern designated as a major milestone. Over the past eight days, the project has grown from an empty scaffold into a fully-featured, on-device document editor for Android: six format editors, a native file browser, a compiled PDF engine, resizable grids, and a complete automated test suite. Version 0.1.8.1 closes the work begun in 0.1.8.0 by adding test coverage for the new grid dimension system and confirming the codebase is clean for the milestone tag.


What's in this release

Resizable grid columns and rows · #12

The spreadsheet grid now supports drag-to-resize for both columns and rows. Explicit drag handles appear at the trailing edge of each selected header — replacing the previous invisible hit-target approach that was hard to discover and easy to misfire. Double-tapping a column or row header auto-resizes to fit the longest content in that column or row. Custom dimensions persist to .xlsx files via Apache POI, so a resized workbook reopens at the same proportions it was saved with.

Implementation notes for contributors:

  • Handles are rendered via Modifier.zIndex and non-consuming pointer input, which means they sit above the grid without blocking the two-finger pan gesture.
  • The subcompose layout uses binary search over a precomputed offset map to locate visible rows and columns under dynamic (non-uniform) cell sizes — a meaningful performance improvement over the previous linear scan.
  • Dimension serialisation stores column widths and row heights in the POI Sheet API's native units and round-trips them through save and reopen without drift.

Test coverage for grid dimensions

A new test, applyEdits_preservesColumnWidthsAndRowHeights, was added to ExcelDocumentTest.kt. It exercises the full POI serialisation path: a sheet with custom row heights and column widths is written out, read back in, and the recovered values are asserted to match the originals. This closes the gap left by 0.1.8.0, where the feature shipped ahead of its unit test.

The .skill-extracted artefact has also been removed from Git tracking and the result verified in the tree.


Test results

Environment Suites Tests Result
Android Studio (device) 5 15 ✓ All passed

The count increased from 14 to 15 with the addition of applyEdits_preservesColumnWidthsAndRowHeights.


Cumulative changelog since project start (0.1.0.0 → 0.1.8.1)

A summary of everything that has shipped across the eight-day development run, for readers coming to the project for the first time.

Format editors

Format Read Edit Save in place Export copy Notes
CSV Scrollable grid, add row/column, insert at selection
Excel .xlsx Multi-sheet, merged cells, resizable grid, formula display
Word .docx Paragraph text, heading styles, pinch-to-zoom
PowerPoint .pptx Text boxes per slide, pinch-to-zoom
PDF Viewer + merge/extract via native lopdf bridge
EPUB Chapter-by-chapter, TOC, DRM detection

File browser (added 0.1.7.0): lists Documents and Downloads; recent, all-files, and pinned-favorites views; search; per-format filter chips; list/grid toggle; sort by date, name, size, or type; per-file share, info, and delete; persisted pins and recents via SharedPreferences.

Grid editor highlights (Excel and CSV): 2D virtualised subcompose layout with true merged-cell spanning (0.1.7.7); LazyRow-based horizontal axis with bidirectional scroll sync (0.1.7.6); insert-at-selection for rows and columns (0.1.7.5); per-sheet scroll reset on tab switch (0.1.7.4); resizable columns and rows with drag handles and auto-fit (0.1.8.0–0.1.8.1).

Native PDF bridge: The kern-bridge Rust crate wraps lopdf and is cross-compiled to arm64-v8a, armeabi-v7a, and x86_64 via cargo-ndk in CI. The bridge is bundled into the APK and its availability is detected at runtime; tools degrade gracefully when the .so is absent (0.1.5.0, 0.1.7.3).

Quality and correctness

  • Unsaved-changes guard on back navigation across all editors (0.1.7.2).
  • Error feedback split between AlertDialog (long/instructional messages) and Snackbar (short confirmations), per Material 3 guidelines (0.1.7.8).
  • mutableStateOf<Int> replaced with mutableIntStateOf across all ViewModels to eliminate boxing allocations (0.1.7.9).
  • Modifier.clickable on Surface replaced with the native onClick parameter (0.1.7.10).
  • Dependencies: compose-bom updated to 2026.05.01, apache-poi to 5.5.1 (0.1.7.11).
    Automated tests (added 0.1.7.1, grown to 0.1.8.1):
Suite Coverage
CSV Parse/serialise round-trip, ragged rows, quoting, column labels
Excel Multi-sheet read; edit-only save preserves untouched cells and sheets; column/row dimension persistence
Word Paragraph text and coarse style read; edit-only save
PowerPoint Slide text read; edit-only save
EPUB Spine/TOC/block parsing; edit-only save with correct mimetype ordering; DRM rejection

All test fixtures are generated in-test via POI, OpenCSV, Jsoup, and zip — no binary files committed to the repository.


Upgrade notes

No migration steps are required. The .skill-extracted file has been removed from Git tracking; if you have it locally, git rm --cached .skill-extracted will clean it up.


What comes next

Comprehensive UI redesign is on the way!