Skip to content
Anti2077Public

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

135 Commits

Folders and files

Repository files navigation

Marla Paper Lantern mark

Marla

Translation that stays beside what you are reading.

A native macOS translation layer that appears on intent, stays close to the source, and gets out of the way.

Light up a translation beside the source, read it, and continue without leaving your work.

简体中文 · English · 日本語 · Français · Español · Deutsch · 한국어

Status: incubation Platform: macOS 14 or later Swift 6.2 Rust 1.85

Marla introduction homepage · Download (GitHub Releases) · GitHub

Why Marla · Workflows · Privacy · Development · Documentation

Watch the real Marla workflow (MP4)

Real native macOS app capture. GitHub opens the MP4 in its media viewer.

Start here

Marla's introduction homepage is in website/. When you are ready to download, go to GitHub Releases; the source code and development records are in the GitHub repository. The repository is still being prepared for release, so the Releases page may not yet contain downloadable assets.

Why Marla

Most translation tools become another destination. Marla keeps the user's current application as the primary surface: invoke it with a shortcut, read a nearby result, dismiss it, and continue from the same place.

  • Stays in place. Selection and screenshot results appear in a nearby native card instead of a main translation window.
  • Shows intent immediately. The stable result surface appears before the network response and grows with streamed content.
  • Preserves structure. Quick Input and supported rich selections keep semantic Markdown through translation and native rendering.
  • Keeps providers replaceable. Named profiles support OpenAI-compatible Chat Completions, OpenAI Responses, Anthropic Messages, and Google Gemini Generate Content, with an explicit endpoint and model choice.

Three ways in

Entry Default shortcut What happens
Selected text ⌃⇧D Marla safely acquires the current selection and streams a result beside the source.
Screen region ⌃⇧S Frozen frames across displays support region, element, and window selection. Vision OCR is the default; cloud GLM-OCR or local Ollama glm-ocr can be selected explicitly.
Quick Input ⌃⇧Space A compact editor translates typed or pasted content, including supported Markdown structure.

Optional experiment: Independent in-place screenshot translation is disabled by default and can be enabled in the experimental settings. Its configurable default shortcut is ⌃⇧I. It uses cloud GLM-OCR to reconstruct reliable text blocks over only the selected frozen crop, stays in memory, and can be dismissed immediately. Ordinary screenshot translation keeps using the nearby card.

The shortcuts are configurable. Completed results support comparison, copy, retry, system speech, pinning, language changes, and provider switching without turning Marla into a document workspace.

Native where it matters

Explicit trigger
  → SwiftUI / AppKit acquisition and presentation
  → versioned in-process C ABI
  → embedded Rust core for providers, streaming, normalization, and cancellation
  → nearby native result surface

Marla is a Swift 6 macOS app with SwiftUI for durable surfaces and AppKit for menu-bar, panel, focus, and screen-level behavior. The Rust 2024 core is embedded as a static library: there is no localhost backend or separate always-running service.

Privacy, without hand-waving

Path Current boundary
Selection translation Only an explicitly triggered, protected Copy transaction may provide content. Accessibility is used for permission and positioning, not as a hidden text source.
Vision screenshot OCR The selected screenshot crop remains local for OCR. Text translation may still use the configured cloud provider.
Cloud GLM-OCR Only the selected crop is uploaded after explicit selection under the Settings disclosure, or when the user invokes the enabled in-place experiment.
Local Ollama GLM-OCR The selected crop goes only to the user-managed local Ollama glm-ocr service. Marla does not bundle, install, or start Ollama or its model; text translation may still use a cloud provider.
Storage Screenshots and recent translations stay in memory only; credentials are stored in Keychain. Persistent translation history and contextual window-text collection are not implemented.

Marla does not claim to be fully offline. The exact provider, OCR, and data boundaries are intentionally visible rather than collapsed into a single privacy slogan.

Supported languages

Marla's current product language set contains seven options:

Language Code
Simplified Chinese zh-Hans
English en
Japanese ja
French fr
Spanish es
German de
Korean ko

Traditional Chinese is normalized to the Simplified Chinese product option and is not a separate preference. Provider documentation may list more languages; Marla does not claim those languages as product-supported until detection, routing, UI, and provider mapping are verified together.

Project status

Marla remains in Incubation / Unreleased while its public entry points are being prepared. The native application and its core workflows are implemented, but no public Release, assigned product version, notarized package, or updater has been declared yet.

Acknowledgments and inspiration

Thanks to the open-source project Snow Shot. Its element snapping, wheel navigation through parent and child levels, background query scheduling, and interruptible selection transitions informed Marla’s screenshot element selection. Its fluid interaction was an important reference for this feature.

We studied a fixed Snow Shot source revision and implemented the feature independently in Swift/AppKit, without importing its source code or dependencies. Marla’s immediate retargeting on pointer movement, one-level-per-trackpad-gesture behavior, and animation timing were adjusted through hands-on feedback. See TASK-054 for implementation and verification records.

License

Marla’s original code, build scripts, documentation and original project assets are licensed under GNU GPL v3 only (GPL-3.0-only), to the extent of the owner’s rights. See LICENSE, COPYRIGHT, the bilingual licensing and source-distribution guide, and third-party notices. Modification, redistribution and commercial use are permitted under the GPL; there is no noncommercial restriction. Third-party material retains its original terms. The website’s GSAP dependencies have an unresolved GPL compatibility conflict; this grant does not relicense them or claim the combined website build is GPL compatible.

Development

Prerequisites

  • macOS 14 or later on Apple Silicon
  • Xcode 26.5 or a compatible full Xcode installation
  • Swift 6.2 or later
  • Rust 1.85 or later

Run the complete repository check:

./scripts/check.sh

The script checks Rust formatting, builds and tests the Rust core and Swift layer, builds the native Debug app against the Cargo debug library, validates the project structure, and checks the diff. It selects the full Xcode installation only for its own commands and does not change the machine-wide xcode-select setting.

Build the fixed-path, stable-signed Release development app:

./scripts/build-test-app.sh

The verified artifact is written to artifacts/Marla_dev.app with the development-only Marketing Version 0.0.0. This numeric value is bundle metadata, not a public release version.

First local signed build

The packaging script requires a stable local code-signing identity and never silently falls back to ad-hoc signing. Pass an identity name or certificate hash reported by security find-identity -v -p codesigning:

MARLA_CODE_SIGN_IDENTITY="Your Local Code Signing Identity" \
./scripts/build-test-app.sh

Later no-argument builds recover the certificate hash from the existing fixed app and verify that its designated requirement remains stable before replacement. This supports local testing only; it does not provide Developer ID distribution, notarization, or automatic TCC approval.

Repository map

Path Role
Sources/MarlaApp/ SwiftUI/AppKit application, acquisition, settings, sessions, and presentation
Sources/MarlaCore/ Swift-facing bridge models and provider contracts
Sources/MarlaRustFFI/ Versioned C bridge between Swift and Rust
rust/marla-core/ Embedded provider, streaming, OCR normalization, and cancellation core
website/ Independent React/Vite product-homepage prototype
docs/ Product truth, architecture, Tasks, status, and verification evidence
scripts/ Repository checks, packaging, and artifact verification

Start with the documentation map, then read the current status and the Task explicitly assigned to your conversation/worktree before making changes. The repository keeps product ideas, confirmed backlog, active implementation, and verified evidence deliberately separate.


Paper Lantern: a little light beside the reader.

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages