Releases: macOS26/logos
Releases · macOS26/logos
logos inkpen 1.0.7.31
✨ New Features
- FreeHand-style Reflect tool — Added to the transforms group with gradient fill mirroring and midpoint flip handles
- Crop shapes in keyline view — Crop shapes now participate in clip path settings for keyline view
🐛 Bug Fixes
-
Clipping & compositing
- Fix nested clipping groups rendering inner clip masks correctly in all view modes
- Fix compound path holes not clipping in nested clip groups
- Clip with mask's fill rule so compound-path holes are respected
- Fix nested clipping paths in SVG import and export
- Hiding a clip mask member now hides only the clip, not the content
-
Images & sandbox
- Fix linked images not loading on reopen by falling back to direct file path
- Fix EPERM flood from mmap'd CGImage outliving security scope
- Sandbox image fix
- Fix alignment using stale local bounds for image shapes
-
Keyline view
- Fix
cropImageBoxInKeylinepreference ignored for clipGroup images - Sync
cropImageBoxInKeylineAppStorage to AppState on appear and change
- Fix
-
Text & paths
- Fix text-to-outlines compound paths and ungroup layer mismatch
-
Guides
- Fix guide visibility toggle and exclude guides from all exports
-
Clipboard
- Fix Paste in Back pasting in front
-
General
- Make clipping groups (and member-based groups) scalable via the selection box
- Reconcile persisted tool-group order with current defaults
🎨 UI & Preferences
- Keyline View toggles rearranged — Keyline-related toggles in Preferences now displayed side by side for a more compact layout
🧹 Code Cleanup
- Strip all comments and blank lines from Swift sources
- Strip ThirdParty comments and blank lines; consolidate licenses
- Strip comments and blank lines from Metal shader files
- Strip comments and blank lines from py/css/html/pl files
- Remove all markdown files except README.md
- Restore logical blank lines: after imports, between top-level decls, between type members
- More humanly spaced: computed properties + property-group transitions
- Exclude duplicate ThirdParty LICENSE files to fix bundle resource collision
- Remove all app print statements
logos inkpen 1.0.6
✨ What's New in 1.0.6
🎨 SVG & Export Improvements
- SVG export: emit
clipPathdefs for clipGroup-wrapped objects - SVG/PDF export: render native clippingGroup as proper clip path/mask
- Export: preserve clipping paths in SVG output
- EPS import: add
com.adobe.encapsulated-postscriptas imported UTType in Info.plist - Export: fix clipped content not rendering correctly in exported files
🖌️ Drawing & Canvas
- Drawing: improve rendering of clipped/masked objects on canvas
- Canvas: handle nested clip groups correctly during display
- Tools: refine selection behavior for grouped/clipped elements
🐛 Bug Fixes
- Fix: clipped objects losing their mask when re-exported
- Fix: imported EPS files not recognized by the system
- Fix: SVG files with
<clipPath>elements importing incorrectly - Fix: PDF export dropping clip regions for complex paths
📦 Under the Hood
- Improved UTType declarations for better macOS file association
- Cleaner SVG path generation for clipped content
- Better handling of native clipping group serialization
FREEHAND EPS IMPORT (ALPHA -- UNDERCONSTRUCTION)
Release Notes
1.0.5
FreeHand 2 (FHD2) Import — Alpha (Work in Progress)
- Native FreeHand 2 binary parser — reverse-engineered from scratch to import legacy
.fhfiles from the FHD2 format - Rectangle, line, and oval/ellipse shape support
- Bézier curve and closed path rendering
- Fill, stroke, stroke width, and grayscale decoding
- CMYK color table support with full color engine
- Radial and linear gradient fill support with center/radius from file data
- Layer detection and absolute ID tracking
- Magic byte detection for File → Open auto-detection
FreeHand EPS Import (UNDER CONSTRUCTION)
- New PostScript/EPS parser with
.epsFile → Open support - PostScript concat transform matrix support
FreeHand 3+ Fixes
- Fixed clipping group rendering for FH3+ files by restoring
installGroupMemberIntoSnapshotimport path
Performance & Memory
- ~60–80 MB idle RAM reduction — shared Metal device, stripped unused GPU resources, released singletons
- Lazy-load and release SF Symbols cache (~15–25 MB) and Pantone library (~1 MB)
- Share font caches across documents
- Use
SharedMetalDeviceinMetalSpatialIndex
UI Improvements
- SF Symbols picker now shows empty state or recents instead of loading all 6,000+ symbols at once
- Guard against array bounds crashes in LayersPanel color swatch and layer row views
- Disabled window state restoration to prevent duplicate windows on relaunch
- Fixed window flash on launch — frame set synchronously with
display: false - Fixed blank window race condition — tabs start active instead of suspended
1.0.4
FreeHand 2 Parser (Initial)
- First batch of FH2 format support: point data, record scanning, bounding boxes
- Fill and stroke decoding with color chain lookups
- Sequential numbering and offset fixes
Color System
- Isolated
0x1454gradient colors from main color table to prevent yellow color pollution - Fixed red color rendering without side effects on other colors
Window Handling
- Disabled macOS window state restoration (
NSQuitAlwaysKeepsWindows) to prevent stale state - Fixed window flash on startup
1.0.3
Performance
- Tab suspension — background tabs drop their view tree, cutting memory usage ~50%
Documentation
- README updated with Performance & Memory section
Logos was created to create simple graphics and logos, but it's already stepping up to the plate to be much more.
1.0.4 (Build 34)
What's Changed in 1.0.4
FreeHand 2 Import (work in progress, writing an fh2 parser from scratch)
- Fix FH2 color chain parsing — use
inner_refat+10as sequential ID lookup for correct color chain resolution - Add oval/ellipse (0x151A) record support to FH2 parser
- Add rectangle (0x1519) and line (0x151D) record support to FH2 parser
- Add rounded corner support to FH2 rectangle parser
- Add CMYK color table support to FH2 parser
- Add stroke width support to FH2 parser
- Fix yellow stroke color pollution — isolate 0x1454 gradient colors from the main color table so gradient records don't bleed into stroke/fill colors
FreeHand Format Support
InkPen already supports FH3–FH11/MX import and open file formats. FH2 is work in progress, import only with .fh2 extension.
Memory & Performance
- Fixed memory leaks — the active document now receives the shared RAM allocation for the UI. Each tab releases its shared RAM on close and forwards it to the next document, preventing accumulation across tab switches.
UI & Stability
- Fix blank window race condition — start tab active instead of suspended, preventing occasional empty canvas on launch
- Fix window flash on launch — set frame synchronously with
display:falseto eliminate visual flicker - Revert transform controls grouping that broke the GUI layout
- Disable window state restoration — prevents duplicate windows on relaunch via
NSQuitAlwaysKeepsWindows
Version
- Version bumped to 1.0.4 (Build 34)
Full Changelog: 1.0.3...1.0.4
1.0.3
What's New in 1.0.3 (Build 33)
🧠 Memory & Performance
- Tab suspension — background tabs drop their view tree, cutting memory usage by ~50%
- Fix memory leaks — free resources on tab close, remove
.drawingGroup()overhead - Cut memory 50% — replace Canvas backgrounds with plain shapes, add MemoryDiagnostics
- Fix spatial index crash and memory explosion — resolve triangle misclassification in PathShapeDetector
- Share Metal pipelines across MetalSpatialIndex instances to reduce GPU overhead
🎨 UI Improvements
- Group transform controls into three visually distinct sections (Scale, Position, Rotation) with cleaner styling
🔄 Bug Fixes
- Fix undo restoring deleted objects to top of z-order instead of their original position
- Fix triangle misclassification in shape detection
📄 File Handling
- Register as SVG handler — app now conforms to
public.svg-imageUTI for proper SVG file association
📝 Documentation
- Updated README with Performance & Memory section covering these fixes
DMG will be added shortly.
Logos InkPen 1.0.2 (Tribute to FreeHand)
Logos InkPen 1.0.2 – FreeHand Revival
A massive update with direct selection improvements, FreeHand file import, UI/UX enhancements, and bug fixes!
🎨 New Features
FreeHand File Import
- Open / Import FreeHand documents directly:
.fh3,.fh4,.fh5,.fh6,.fh7,.fh8,.fh9,.fh10,.fh11,.fhmx. - Imports FreeHand files directly from libFreeHand — skips SVG code generation and reads straight to InkPen objects.
- Updated: FreeHand
.fh10+import support improved (IPTC metadata wrapper fix). Tested with.fh10files; the same fix should apply to.fh10,.fh11, and.fhmxformats.
Direct Selection Tool (Illustrator-Style!)
- Option+Click and Cmd+Click to select objects behind the topmost object.
- Auto-select topmost member when switching to direct selection in a group.
- Fine-tuning with Option + Arrow for 1/10th nudges.
- Move selected points via dialog or arrow keys.
UI/UX Improvements
- Lock icon now syncs with the layers panel and is always visible.
- Shift-constrain for drag operations (FreeHand/Illustrator style).
- Scale X, Scale Y, and Rotate fields in the toolbar.
- Align X and Align Y menu items in the Object menu.
- Bounding box rectangle button for faster selection.
- Max zoom increased to 16,000% for precision work.
Layers & Guides
- Delete layer button added to the Layers Panel.
- Guide selection now works from any layer with cursor indicators.
File Handling & Export
- PDF and SVG export fixes for groups using memberIDs.
- Offset path improvements (negative offsets, z-order placement).
- Support for additional image formats.
🐛 Bug Fixes
- Fixed direct selection nudge jumping entire shapes.
- Fixed Cmd+Click select behind behavior.
- Fixed snap-to-point interference with Shift-constrain.
- Fixed alignment issues when modern groups are selected second.
- Fixed PDF and SVG export for groups using memberIDs.
- Fixed negative offset path extraction and z-order placement.
- Fixed layout recursion warnings on startup.
- Fixed PDF raster images appearing vertically flipped due to incorrect pixel row order.
- Fixed FreeHand
.fh10+import failure caused by IPTC metadata wrapper in file header.
📂 Code Organization
- Python scripts moved to py/.
- Swift files moved to sw/.
- Documentation moved to docs/.
Full Changelog: 1.0.1...1.0.2
SF Symbols
- New SF Symbols search and place via Document menu in the toolbar.
📄 PDF Vector Graphics & Tax Season Import
- Greatly improved PDF vector graphic support with single and multiline text box generation.
- Closest font substitution for accurate PDF text rendering.
- Import your W-2 forms for tax season!
🎉 Logos InkPen.IO v1.0.1 — Initial Public Release
🎨 Logos InkPen.IO v1.0.1
Six months of development — one professional vector illustration app.
✏️ Drawing & Pen Tools
- Full FreeHand-style pen tool with calligraphic ink simulation
- Embed original inkpen data in Autodesk SVG exports
- Remove stroke expansion from selection hit test for better performance
- Pressure-sensitive drawing support
- Stroke simplification, deduplication, and smoothing filters
🖱️ Selection & Direct Selection
- Direct selection tool with paint/fill-based selection (FreeHand/Illustrator style)
- Option+Click select behind for direct selection tool
- Direct selection moves individual points; arrow key nudging for selected points
- Auto-select topmost member when switching to direct select with group
- Direct selection UI moves with shape during live nudge preview
- Move dialog support for selected points in direct selection mode
📐 Offset Path & Transform
- Offset Path feature with document units and ±12 picas / ±50px ranges
- Offset path uses document units with 0.1 precision
- Clamp offset slider when document units change
- Scale X, Scale Y, and Rotate fields in toolbar
- Transform box with direct opacity control
- Bounding box rectangle button in document toolbar
📏 Alignment & Anchors
- Align X and Align Y menu items in Object menu
- Separate X-only and Y-only anchor point alignment buttons
- Alignment anchor preference with locked item priority
- Simplified single align button in toolbar
📋 Import & Export
- SVG import: shapes added to new layer instead of replacing Guides layer
- SVG text import preserves UUID and textPosition
- PDF export fix for groups using memberIDs
- Autodesk SVG export uses true 96 DPI coordinates
- PNG export fix (was upside down from File menu)
- Dynamic format version in SVG and PDF metadata
🗂️ Layers & Groups
- Delete layer button in LayersPanel
- Lock icon as toggle button synced with layers panel
- Layer panel displays group members using memberIDs
- Sync direct selection when selecting from layers panel
- Track selection order in layers panel
- Copy/paste groups with unique UUIDs for all members
- Pasted groups keep members inside group
- Group color/stroke/opacity changes via memberIDs
- Fix nested group rendering to display sub-groups
🎯 Snapping, Zoom & View
- Fit screen on first open, never open minimized
- Fit to Page max zoom increased to 16,000%
- Classic Space+Cmd zoom shortcut
- Auto fit-to-page when window is resized
- Snap Page to Artwork/Selection captures all object types
- Show Grid, Snap to Grid, Grid on Top toggles
- Major grid line interval per unit type
- Grid renders above background layer
🌈 Color, Opacity & Gradients
- CPU SIMD optimization for color + gradient operations
- Live updates for opacity and width sliders on groups
- Preserve opacity when changing colors
- Fix color picker for groups with memberIDs
- Replace NSColor with PlatformColor and Color.platform* helpers
- Replace GradientSwatchNSView with SwiftUI Canvas
- Migrate to CGColor across PDF, cursors, eyedropper
🔤 Text & Typography
- Stroke placement support for text (center, inside, outside)
- Text to outlines with undo support
- Preserve text stroke and layer positions when converting to outlines
- Optimize text stroke rendering — outline once per text
- SVG text import with UUID and textPosition preservation
✂️ Path Operations & Clipping
- Combine path operation with unionMultiplePaths support
- Clipping mask with cross-layer support and undo
- Fix path operations duplicate IDs and undo count
- Fix release clipping mask reversing object order
- Fix clipping mask duplicating objects from other layers
📐 Units, Dimensions & Coordinates
- Unit-aware Transform X Y W H coordinates
- Show drawing dimensions in document unit
- 3 decimal places for dimension display
- Unit formats standardized to 2–3 decimal places
- Fix guide drag speed — canvasDelta already in doc coords
⏮️ Undo & Redo
- Selection/deselection in undo/redo
- Fix undo not available until deselection
- Undo support for group transforms, nested group drag, and property changes
- Undo for path operations, clipping masks, and corner radius changes
- Refactored nudge, text handling, corner radius, and transform controls to use undo helpers
🧩 Toolbar & UI
- Interpolation quality popup menu
- Add onTapGesture for instant button response
- Optimize LayersPanel reactivity
- Fix duplicate button actions
⚡ Performance — SIMD Optimizations
- SIMD optimize pan and coordinate transforms
- SIMD optimize Canvas views, GridView, TextCanvas, GPUMathAccelerator
- SIMD optimize CornerRadiusEditTool, PenPlusMinusTool, UnifiedObjectView gradient
- SIMD8 batch optimization with type aliases
- Exponential zoom easing with SIMD
- Optimize bounding box rectangle for faster response
- O(1) clipped objects cache
- Skip guides in layer rendering — use GuidesView only
- Skip viewport culling for text objects
🐛 Bug Fixes & Stability
- Fix tile rendering gaps with pixel-aligned sizes
- Fix tile culling coordinate conversion
- Fix Metal texture color space conversion
- Fix rectangle corner handle directions for cusp conversion
- Fix grid alignment and mm spacing
- Fix keyline view not rendering shapes
- Fix layout recursion warning on startup
- Fix orphaned objects from offset path operation
- Fix fitToPage centering calculation
- Various compile error fixes and warning cleanups
Full Changelog: https://github.com/macOS26/logos/commits/v1.0.1