Local file explorer with Python-interactive HTML views
11
stars
1,796
commits
Python
primary language
Sep 6, 2026
updated
Download for macOS, Windows, and Linux →
Your files, your AI, your apps — on your own machine. Browse any directory in
the browser, run AI models locally, and describe an app for Claude Code to
build. Any .html file you open gets a tiny injected runtime that can call a
Python main() function and sync its state to the URL.
Runs entirely on 127.0.0.1. No accounts, no cloud, no sandboxing — your own
machine, your own trusted code.
Download from render.fused.io:
.dmg, Apple silicon.exe installermacOS is the native build; Windows and Linux have limited support. Trouble on first run? See troubleshooting.
Homebrew — the same macOS app, from the tap:
brew install --cask fusedio/tap/fused-render
GitHub releases — every build the download page serves is also attached to its release, if you want an older version or a checksum.
Python package — for running fused-render inside a Python environment you
already have, rather than as a desktop app. Each release attaches a wheel (see
the release notes for its URL): pip install <wheel-url>. From a source
checkout:
pip install -e .
Requires Python 3.11+. Building from source and the local dev loop live in CONTRIBUTING.md.
Home opens on a file search, with everything on this machine below it:
The downloaded app opens Home in a browser tab. From a pip install it's a command:
fused-render
Either way you land on http://127.0.0.1:1777/. Useful flags:
fused-render --start-dir ~/data --port 9000 --no-browser
--start-dir is where the explorer starts (default ~/Fused); the whole
filesystem stays browsable from there.

fused-render-open --register
Registers fused-render into Explorer's right-click "Open with" menu (HKCU
only, no admin) for every format it previews — double-clicking a file, or
picking "fused-render" from Open With, reuses a running server or starts one
detached, then opens the file. fused-render-open --unregister
removes the associations.
Any .py file is a runnable target as long as it defines a main()
function:
# sine.py
import math
def main(n: int = 80, freq: float = 1.0):
return {"points": [[i / n, math.sin(2 * math.pi * freq * i / n)] for i in range(n)]}
Any .html file can call it and bind the result to the URL:
<input id="freq" type="range" min="0.1" max="5" step="0.1" />
<script>
const slider = document.getElementById("freq");
slider.addEventListener("input", () => fused.params.set("freq", slider.value));
fused.params.onChange(draw);
async function draw() {
const freq = fused.params.get("freq") || "1.0";
const { points } = await fused.runPython("./sine.py", { freq });
// ...render points...
}
draw();
</script>
A page can do a lot through fused:
fused.runPython(pyPath, params) and fused.params — call main(**params)
and keep a string key/value store in sync with the URL, so a refresh or a
bookmark reproduces the view. fused.readFile / writeFile / uploadFile /
mkdir / stat / rawUrl work on files directly, no Python needed.
→ fused-render-authoringfused.ai.text({prompt, ...}) — ask Claude Code, or a local model when
opts.model is a Hugging Face repo id (or pin the tier with
opts.provider: "local" | "claude"). fused.ai.image / .video /
.transcribe / .embed run locally; fused.ai.models lists, downloads,
loads and unloads them.
→ fused-render-aifused.capture — record the screen or the microphone, or grab a screenshot.
→ fused-render-capturefused.fileIndex — search and query the machine-wide file index instead of
walking the filesystem.
→ fused-render-indexfused.daemon — start, stop and talk to a folder's background daemon, one
the server keeps running after the page closes.
→ fused-render-background-appsfused.trackJob / fused.watchJob — long-running work in the download
manager, whether your page is doing it or the server is.
→ fused-render-jobsfused.env says whether a page is running here ("local") or exported and
hosted ("hosted"). The complete list, with every option, is the header of
fused_render/static/runtime.js.
Every built-in preview template is an HTML file on these same primitives —
fused_render/templates/ has 140 of them to copy from.
docs/usage.md covers the execution engine, remote storage mounts, the AI Models page, preferences, and export for hosted serving.
This repo doubles as a Claude Code plugin
marketplace. Its skills teach Claude to run the app, author views, use local AI
and jobs, and build preview templates — the same skills under skills/.
From inside Claude Code:
/plugin marketplace add fusedio/fused-render
/plugin install fused-render@fused-render
Or from the command line:
claude plugin marketplace add fusedio/fused-render
claude plugin install fused-render@fused-render
The manifests live in .claude-plugin/ (marketplace.json + plugin.json).
Installing is optional and only affects your own Claude Code sessions. Chats
started from inside fused-render already get these skills: the app assembles
the same plugin under ~/.fused-render/skill-plugin/ and loads it per session
with --plugin-dir, so they work on a plain DMG or wheel install with nothing
cloned.
SECURITY.md has the trust model and how to report a vulnerability.
Open source under the MIT license, made by Fused.
Python
59.8%
TypeScript
22.0%
HTML
12.4%
CSS
3.3%
JavaScript
1.5%
Local file explorer with Python-interactive HTML views
11
stars
1,796
commits
Python
primary language
Sep 6, 2026
updated
Download for macOS, Windows, and Linux →
Your files, your AI, your apps — on your own machine. Browse any directory in
the browser, run AI models locally, and describe an app for Claude Code to
build. Any .html file you open gets a tiny injected runtime that can call a
Python main() function and sync its state to the URL.
Runs entirely on 127.0.0.1. No accounts, no cloud, no sandboxing — your own
machine, your own trusted code.
Download from render.fused.io:
.dmg, Apple silicon.exe installermacOS is the native build; Windows and Linux have limited support. Trouble on first run? See troubleshooting.
Homebrew — the same macOS app, from the tap:
brew install --cask fusedio/tap/fused-render
GitHub releases — every build the download page serves is also attached to its release, if you want an older version or a checksum.
Python package — for running fused-render inside a Python environment you
already have, rather than as a desktop app. Each release attaches a wheel (see
the release notes for its URL): pip install <wheel-url>. From a source
checkout:
pip install -e .
Requires Python 3.11+. Building from source and the local dev loop live in CONTRIBUTING.md.
Home opens on a file search, with everything on this machine below it:
The downloaded app opens Home in a browser tab. From a pip install it's a command:
fused-render
Either way you land on http://127.0.0.1:1777/. Useful flags:
fused-render --start-dir ~/data --port 9000 --no-browser
--start-dir is where the explorer starts (default ~/Fused); the whole
filesystem stays browsable from there.

fused-render-open --register
Registers fused-render into Explorer's right-click "Open with" menu (HKCU
only, no admin) for every format it previews — double-clicking a file, or
picking "fused-render" from Open With, reuses a running server or starts one
detached, then opens the file. fused-render-open --unregister
removes the associations.
Any .py file is a runnable target as long as it defines a main()
function:
# sine.py
import math
def main(n: int = 80, freq: float = 1.0):
return {"points": [[i / n, math.sin(2 * math.pi * freq * i / n)] for i in range(n)]}
Any .html file can call it and bind the result to the URL:
<input id="freq" type="range" min="0.1" max="5" step="0.1" />
<script>
const slider = document.getElementById("freq");
slider.addEventListener("input", () => fused.params.set("freq", slider.value));
fused.params.onChange(draw);
async function draw() {
const freq = fused.params.get("freq") || "1.0";
const { points } = await fused.runPython("./sine.py", { freq });
// ...render points...
}
draw();
</script>
A page can do a lot through fused:
fused.runPython(pyPath, params) and fused.params — call main(**params)
and keep a string key/value store in sync with the URL, so a refresh or a
bookmark reproduces the view. fused.readFile / writeFile / uploadFile /
mkdir / stat / rawUrl work on files directly, no Python needed.
→ fused-render-authoringfused.ai.text({prompt, ...}) — ask Claude Code, or a local model when
opts.model is a Hugging Face repo id (or pin the tier with
opts.provider: "local" | "claude"). fused.ai.image / .video /
.transcribe / .embed run locally; fused.ai.models lists, downloads,
loads and unloads them.
→ fused-render-aifused.capture — record the screen or the microphone, or grab a screenshot.
→ fused-render-capturefused.fileIndex — search and query the machine-wide file index instead of
walking the filesystem.
→ fused-render-indexfused.daemon — start, stop and talk to a folder's background daemon, one
the server keeps running after the page closes.
→ fused-render-background-appsfused.trackJob / fused.watchJob — long-running work in the download
manager, whether your page is doing it or the server is.
→ fused-render-jobsfused.env says whether a page is running here ("local") or exported and
hosted ("hosted"). The complete list, with every option, is the header of
fused_render/static/runtime.js.
Every built-in preview template is an HTML file on these same primitives —
fused_render/templates/ has 140 of them to copy from.
docs/usage.md covers the execution engine, remote storage mounts, the AI Models page, preferences, and export for hosted serving.
This repo doubles as a Claude Code plugin
marketplace. Its skills teach Claude to run the app, author views, use local AI
and jobs, and build preview templates — the same skills under skills/.
From inside Claude Code:
/plugin marketplace add fusedio/fused-render
/plugin install fused-render@fused-render
Or from the command line:
claude plugin marketplace add fusedio/fused-render
claude plugin install fused-render@fused-render
The manifests live in .claude-plugin/ (marketplace.json + plugin.json).
Installing is optional and only affects your own Claude Code sessions. Chats
started from inside fused-render already get these skills: the app assembles
the same plugin under ~/.fused-render/skill-plugin/ and loads it per session
with --plugin-dir, so they work on a plain DMG or wheel install with nothing
cloned.
SECURITY.md has the trust model and how to report a vulnerability.
Open source under the MIT license, made by Fused.
Python
59.8%
TypeScript
22.0%
HTML
12.4%
CSS
3.3%
JavaScript
1.5%