Built entirely out of modules
no fork required

A file explorer made of modules

Mutka's core ships only infrastructure: a registry, an event bus, a shortcut manager and a permission gateway. Every real feature is a module - and anyone can add one without forking the app or touching core code.

The core does almost nothing - on purpose

A smaller core is a more reliable core, in the same "do one thing well" philosophy that shaped Unix. Mutka's infrastructure layer never contains feature logic: no copy, no rename, no navigate. It provides the seams - a module registry, a typed event bus, a shortcut manager and a permission-checked gateway - and gets out of the way.

Everything a user actually does is a module snapping onto those seams. Copy and paste, file creation, tabs, cloud mounts, list columns - all of it lives outside the core, in files that import nothing from Mutka. No other macOS file manager is built this way; see how Mutka compares.

One format the whole way down

A module is a plain file that exports defineModule({ id, name, permissions, commands, openHandlers, setup }). Inside setup(host) it receives a host object - its only window onto the system.

There is no privileged "official" API. The clipboard that ships in the box and a community module you write tonight use the exact same shape. If a built-in can do it, your module can too.

  • Authors import nothing - the host object is the entire surface
  • Commands bind keyboard shortcuts; open handlers claim file types
  • Declarative UI lets a module paint panels without React

One format, two runtimes, one gateway

The entire architecture is three ideas.

  1. 01

    One format

    Built-ins and community add-ons are byte-identical: the same defineModule call, the same host object, the same lifecycle.

  2. 02

    Two runtimes

    Trusted built-ins run in-process for speed; untrusted modules run isolated in a Web Worker. Same source, swapped in a single line.

  3. 03

    One gateway

    Every host.* call is checked against the module's declared permissions before it can reach the system - for built-ins and community modules alike.

Add a feature without touching the app

Because features are modules, extending Mutka never means editing core code or rebuilding the app. Drop an index.js into ~/.mutka/modules/<id>/ and it's discovered on launch - no App.tsx change, no glue.

A module can claim every .png to render thumbnails, add a column of folder sizes, mount WebDAV as a sidebar place, or decode .sqlite files into browsable tables - all from outside the repo.

What modules can build

The core stays small so the interesting ideas can live in modules.

SQL

SQLite browser

Claims every .sqlite file and renders its tables and rows in the pane.

DAV

Cloud mounts

Mounts WebDAV, S3 or Nextcloud as a Place in the sidebar - a virtual filesystem.

IMG

Live thumbnails

Swaps native icons for image previews, waveform strips or EXIF badges.

Status-bar stats

Computes folder sizes, duplicates or git status into the status bar.

Frequently asked

Do I have to fork Mutka to add a feature?

No. A module is a standalone file that imports nothing from the core. You write it outside the repo and drop it into ~/.mutka/modules/ - the app discovers and registers it on launch.

Are built-in features really written the same way as community modules?

Yes. Copy-paste, navigation, tabs and file operations all use the same defineModule shape and the same host object a community author uses. There is no special internal API.

What's the difference between a built-in and a community module?

Only the runtime. Trusted built-ins run in-process; untrusted community modules run isolated in a Web Worker. The source format is identical and both are checked by the same permission gateway.

Sources & further reading

Mutka's module system stands on standard web and desktop primitives.

  1. 1
    Tauri 2.0 documentationTauri

    The Rust + WebView framework Mutka is built on: a ~15 MB native binary instead of a bundled browser.

  2. 2
    JavaScript modules (ESM)MDN Web Docs

    A Mutka module is one standard ES module file. The format is the platform's, not ours.

  3. 3
    VS Code Extension APIMicrosoft

    The best-known extensible-editor architecture, useful contrast: powerful, but extensions run unsandboxed with full privileges.

  4. 4
    Basics of the Unix PhilosophyEric S. Raymond, The Art of Unix Programming

    The design tradition behind "a tiny core plus composable parts".

Write a module in one file

No build step, no core imports, no glue. Just defineModule and a host object.