Skip to content
FileLens Markdown & JSON Viewer

Chrome extension · v1.0.0

Your browser dumps a README as raw text. FileLens renders it.

Markdown and JSON, in the tab you already opened — same URL, so bookmarks, history and reload keep working.

  • 117 KB
  • No permissions at install
  • No network requests
  • Free, forever
Without FileLens file:///~/project/README.md
# Payments service

The service that moves money. **Read this before touching it.**

| Endpoint | Method | Idempotent |
|---|---|---|
| /charges | POST | yes, via key |
| /refunds | POST | yes, via key |

```bash
pnpm run dev --filter payments
```

- [ ] Rotate the sandbox key
- [ ] Backfill `charge.created_at`
With FileLens file:///~/project/README.md

Payments service

The service that moves money. Read this before touching it.

Endpoint Method Idempotent
/charges POST yes, via key
/refunds POST yes, via key
pnpm run dev --filter payments
The same file, same tab, same address. Chrome's plain-text view above; what FileLens renders below.

Why another one

Markdown viewers are a solved, crowded category. Nobody solved the weight.

The incumbent has 100,000+ users and 4.7 stars, and it earned them: it solved rendering and stopped there. It also ships 11.58 MB to display a README, and it speaks exactly one file format. FileLens speaks two, in 117 KB — roughly a hundredth of the weight.

FileLens 117 KB
The popular alternative 11.58 MB

The bars are to scale — FileLens's is 1% of the other, which is the honest picture and looks like an error. Only 19 KB of that runs before FileLens has decided the page is even its business, and each format's renderer loads only when you open that kind of file, so reading a README never costs you the JSON code.

The wedge is not a longer format list. It is the two formats a browser actually renders, done properly, small, and private. Everything below follows from that sentence — including the features that are deliberately missing.

Two formats

Both done properly. Not a long list with caveats.

Markdown

  • Tables, strikethrough, fenced code blocks, raw HTML
  • Bare URLs turned into links, and typographic quotes
  • Headings become anchors, so #installation in the address bar jumps where you expect
  • Sanitised on the way in — a document cannot script the page it renders into
  • Clean printing, and raw source one keystroke away

JSON

  • A collapsible tree, expand or collapse the whole thing from the menu
  • Strings, numbers, booleans and nulls coloured by type
  • Every object and array shows how many entries it holds
  • Very large files render without freezing the tab
  • Broken JSON tells you what failed and still shows you the raw file — which is exactly when you most want to read it yourself

What comes with it

A reader, not a preview pane

Nothing here is behind a paywall, because there is no paywall. FileLens is free on the Chrome Web Store, and it has no paid tier planned.

Outline that follows you

A heading tree with a filter box, tracking your scroll position as you read. Collapse the sidebar with s; it remembers which panel you left open.

Forty typographic settings

The Style panel is a visual editor for 40 design tokens — fonts, sizes, spacing, colours, code blocks, rules — with live preview. Your changes persist and follow your Chrome profile.

Live reload

Save the file in your editor and the page re-renders where you were. It works by the page asking the extension to re-read the one document that asked — and it is one switch away from off.

Themes that were designed

Light and dark, each drawn deliberately rather than colour-inverted, plus a System setting that follows your OS.

Keyboard first

s sidebar · r raw source · f fullscreen · Esc leaves it. Keys are ignored while you are typing in a field.

Picks up where you stopped

Per-file scroll memory, capped at the 200 most recent files and kept on this device only — those keys are paths on one machine's disk, and syncing them would broadcast what you read.

One setup step

Local files do nothing until you flip one Chrome switch.

Chrome blocks every extension from file:// pages until you allow it by hand. It is not a permission an extension can request, prompt for, or grant in code — which is why so many viewers in this category simply ask for access to every website instead.

FileLens opens a setup page on install that shows you whether the switch is on, with the address ready to copy. That page re-checks every time you come back to the tab, because Chrome fires no event when the switch changes. You can reopen it any time from Details → Extension options. If FileLens seems to be doing nothing at all, this is almost certainly why.

  1. 01

    Open chrome://extensions

    Chrome will not let a link take you there, so paste it into the address bar.

  2. 02

    Find the FileLens card → Details

    The card carries the extension's own permission list, in Chrome's words.

  3. 03

    Turn on Allow access to file URLs

    That is the whole setup. Open any .md or .json file.

Private by construction

It asks for nothing at install. Check the dialog.

Most extensions in this category ask to read and change your data on all websites before you have used them once. FileLens asks for no website at all, and it makes no network requests — not to us, not to anyone. There is no server to send anything to.

What FileLens requests at install and what each item grants
At install Answer
Host permissions None
Permissions showing a warning prompt None
Permissions requested storage, scripting, activeTab — none of which grants access to any site
Pages it runs on file:///* only, until you enable a specific site yourself
Optional host permissions Declared, granted one origin at a time, at your request, each with Chrome's own confirmation
Analytics, telemetry, crash reporting None of it exists

Tested, not promised

An end-to-end test renders the whole fixture corpus in a real browser, records every network request the browser attempts — including from the background worker — and fails if any of them is not a local file or one of FileLens's own packaged files. A source grep only proves nobody wrote a fetch; this catches a dependency, a stylesheet or a font doing it.

Remote images in local files are blocked

An image loaded from the internet by a document you were emailed is a read receipt: it tells that server you opened the file, when, and from where. FileLens leaves a marker where the image would be, so you can see it made a decision rather than wonder why something is broken. Links are unaffected — clicking one is you choosing to.

One caveat, stated rather than glossed

With live reload on, FileLens re-reads the file you are looking at about once a second so it can re-render when you save. That is a local read of a document you already opened, restricted to that exact address by the browser's own record of which document asked, and nothing is transmitted. One switch turns it off.

Measured, not assumed

Every number on this page came from an instrument rather than an estimate — the size from the build gate, the network claim from a real browser, the dropped formats from measuring what Chrome actually does with them. Where measuring contradicted the plan, the plan changed and this page says so.

What it does not do

Two formats, by decision, not by backlog.

An earlier plan promised CSV, YAML, TOML, XML, diff and log as well. Measuring Chrome's actual behaviour killed that, and the promise went with it rather than shipping caveats. Being clear about this is more useful than a longer feature list.

  • Local .csv and .yaml cannot work at all

    Chrome downloads them instead of showing a page, so no extension ever gets a document to render. The header rewrite that rescues served files has nothing to act on for file:// — there is no response to modify. Measured, not assumed.

  • .toml, .diff, .log, .xml are left alone

    Deliberately. They stay listed in the source as recognised and deliberately unhandled, which stops content sniffing from claiming a .log whose first line happens to be a JSON record. .xml is not even plain text — Chrome opens its own tree viewer, a different DOM entirely.

  • .jsonc and .json5 are not handled

    A strict parser rejects them, and telling you a valid file is broken is worse than not opening it.

  • Task lists do not render as checkboxes

    - [ ] thing shows the brackets literally. Common in READMEs, and it needs a parser plugin that is not in yet.

  • No syntax highlighting inside code blocks

    Fenced blocks render as monospace with their own background and border, but the code inside is not coloured by language.

  • It renders documents; it does not edit them

    FileLens is a reader. There is no editing, no saving, and no writing to any file you open.

Questions

Frequently asked questions

Is FileLens free?

Yes — completely. Free on the Chrome Web Store, with no paid tier, no trial, no account and no ads. Every feature on this page is in the build you install, because there is no other build.

I installed it and nothing happens on my local files.

Turn on Allow access to file URLs on the FileLens card at chrome://extensions. Chrome blocks every extension from file:// pages until you do, and it will not let an extension request that for you. FileLens's setup page shows you the current state and re-checks each time you return to the tab.

Does it work on files served by a website?

Yes, on sites you enable one at a time. FileLens holds no host permissions at install; you enable an origin from the toolbar popup, Chrome asks you to confirm, and only that origin is granted. You can see the list in settings, remove any of them there, or withdraw them from chrome://extensions. Removing a site hands the permission back to Chrome rather than keeping it.

Does the URL change when a file renders?

No — and that was a deliberate architectural decision, not a side effect. FileLens rewrites the page you are on instead of redirecting you to a viewer page, so bookmarks, history, reload, anchors and sharing a path with a colleague all keep working.

Is anything I open sent anywhere?

No. FileLens makes no network requests. File contents are never stored or transmitted, no file names or paths are recorded, and there is no install ID, device ID or user ID — nothing distinguishes one installation from another.

Open DevTools and watch the Network panel stay empty. See the privacy policy for the complete account, including the live-reload caveat.

Why does an image in my local file show as a placeholder?

Because it is hosted on a remote server, and loading it would tell that server you opened the file. FileLens blocks remote images in local documents by default and leaves a visible marker, so you can tell a decision was made rather than assume something is broken. There is a one-click opt-in when you do want them.

Will it slow down every page I visit?

It is not on every page. The only static content script in the manifest matches file:///*, and there is a standing rule in the source against widening it. Where it does run, 19 KB loads before FileLens has decided the page is even its business; the format's renderer loads only after that.

Do my settings sync between my machines?

Theme, style overrides, sidebar state, preferences and your enabled-site list use chrome.storage.sync, so they roam with your own Chrome profile — Chrome's mechanism, between your own devices, never through us. Your per-file scroll positions deliberately do not sync.

Install

Free on the Chrome Web Store

FileLens is free — no account, no trial, no paid tier, and nothing to upgrade to. Chrome installs it in one click and keeps it updated from then on.

Install Extension — Free
  • No account and no sign-up
  • No website access requested at install
  • No network requests, ever
  • Uninstall from the toolbar in two clicks

One step after installing: turn on Allow access to file URLs, as described above. Chrome will not let any extension do that for you, and local files stay untouched until you do.

A file it rendered wrongly? Send it.

A document that came out mangled, a JSON file that would not open, a format worth reconsidering. There is no in-app reporting — that would need a network request — so email and GitHub issues are the whole support channel, and both are read.

Email support