HNHacker News
TopNewBestAskShowJobs

mickael-kerjean

1,563 karma · joined December 23, 2015

email: mickael@kerjean.me

github: https://github.com/mickael-kerjean/filestash

submissionscomments
mickael-kerjean··on Ask HN: What are you working on? (October 2025)
I am playing at creating a FTP interface for all file transfer protocols (including the Dropbox API) so we can settle the argument of the infamous top comment of the Dropbox launch: https://github.com/mickael-kerjean/filestash
mickael-kerjean··on React is winning by default and slowing innovation
> using plain strings, what happens when you do a typo?

The tests fails

> Will your app will silently break or you’ll have a compile time error?

There is no silent error. In practice, there are a couple fail safes:

- using both eslint and tsc: https://github.com/mickael-kerjean/filestash/blob/master/pub...

- the code is full of runtime assertions: https://github.com/mickael-kerjean/filestash/blob/1d1bad001b...

- unhandled error (like most assertion) will interrupt everything to show a scary looking screen: https://github.com/mickael-kerjean/filestash/blob/1d1bad001b...

- controlled error which are part of the regular error handling will stop the flow showing a screen like this: https://demo.filestash.app/?error=test

mickael-kerjean··on React is winning by default and slowing innovation
I'm a counter example of your claim. Migrating away from React did made the complexity of my app a lot more manageable and unlocked new business opportunities that would have been impossible with React without following the JIRA route of making the software worse for 99% of users because 1% of those needed something. The project in question is Filestash (https://github.com/mickael-kerjean/filestash), what made me switch are those 2 reasons:

- Performance ceiling. Past the point where you have used all the react specific optimisation tricks (useMemo, etc...), React just gets in the way, once you start to optimise things to reduce the memory footprint, optimise for 60FPS, dig into heap snapshots and allocation traces, your life starts to become miserable where you need a complete understanding of not only your app but also the inner working of React, and the intersection of both React with your app. At that point, you either accept the ceiling or rewrite everything to vanilla JS and have complete control over every piece of the code you are shipping to the client

- Extensibility. I am now shipping plugins which patch frontend on the fly without any build step. In practice, after a plugin author packaged their plugin (as a zip file containing a manifest), the patches are applied in real time by the server without a prior frontend build system (open up the demo instance with the network tab open to see this working from: https://demo.filestash.app/). This powers themes with icons swaps, new behaviors (e.g. a "recall" button for files in Glacier), and other things plugin authors come up with that that makes the app far more customizable and opened for new niches without falling onto the JIRA trap

mickael-kerjean··on macOS Tahoe is certified Unix 03 [pdf]
There are some infuriating issues though, I have wiped out a couple files on OSX using sed with the -i option to replace a text within a file only to realised OSX would wipe it out instead ....
mickael-kerjean··on ChatGPT Developer Mode: Full MCP client access
mine does support SSE (https://github.com/mickael-kerjean/filestash) but it fails before getting there, with the log looking like this:

    2025/09/11 01:16:13 HTTP 200 GET    0.1ms /.well-known/oauth-authorization-server
    2025/09/11 01:16:13 HTTP 200 GET    2.5ms /
    2025/09/11 01:16:14 HTTP 404 GET    0.2ms /favicon.svg
    2025/09/11 01:16:14 HTTP 404 GET    0.2ms /favicon.png
    2025/09/11 01:16:14 HTTP 200 GET    0.2ms /favicon.ico
    2025/09/11 01:16:14 HTTP 200 GET    0.1ms /.well-known/oauth-authorization-server
    2025/09/11 01:16:15 HTTP 201 POST    0.3ms /mcp/register
    2025/09/11 01:16:27 HTTP 200 GET    1.4ms /
with the frontend showing: "Error creating connector" and the network call showing: { "detail": "1 validation error for RegisterOAuthClientResponse\n Input should be a valid dictionary or instance of RegisterOAuthClientResponse [type=model_type, input_value='{\"client_id\":\"ChatGPT.Dd...client_secret_basic\"}\\n', input_type=str]\n For further information visit https://errors.pydantic.dev/2.11/v/model_type" }
mickael-kerjean··on ChatGPT Developer Mode: Full MCP client access
This is exactly what I've been working on with Filestash (https://github.com/mickael-kerjean/filestash). It lets you connect to any kind of storage protocol that possible exist from S3, SFTP, FTS, SMB, NFS, Sharepoint, .... and layers its own fine grained permission control / chroots that integrate through SSO / RBAC so you can enforce access rules around who can do what and where (MCP doc: https://www.filestash.app/docs/api/#mcp)
mickael-kerjean··on Dropbox Paper mobile App Discontinuation
> Instant hosting by sharing a link pointing to a folder with an index.html

I made a plugin that make this possible from the Filestash client (https://github.com/mickael-kerjean/filestash). If you navigate to /public/{shareID}/ you will see your site

mickael-kerjean··on Purposeful animations
> Also, I think a lot of people would be happier if web apps exposed settings like zero animation

This exists as a browser setting, it's called "prefers-reduced-motion", an example usage in my code: https://github.com/mickael-kerjean/filestash/blob/master/pub...

mickael-kerjean··on Le Chat: Custom MCP Connectors, Memories
If someone from mistral comes around, is there a way for third party MCP implementation to be in the connector directory? I built a MCP connector allowing people to connect to every possible file transfer protocol from S3 to FTP(S), SFTP, SMB, NFS, Gdrive, Dropbox, azure blob, onedrive, sharepoint, etc.. and have a couple layers to delegate authentication, enforce authorisation, support for RBAC and create chroots so the LLM can't go haywire + tools to visualise and or edit hundreds of file format. Would be awesome to get it listed, and it's open source: https://github.com/mickael-kerjean/filestash
mickael-kerjean··on A bug saved the company
This is what sparked me to build a Dropbox like web app to connect to FTP servers: https://github.com/mickael-kerjean/filestash
mickael-kerjean··on Nyxt: The Emacs-like web browser
This kind of articles / project is exactly why I love HN. I am not much a marketing person but have enough basics to understand that if something does not appeal to me, that's because I'm not the target and as a emacs fanboy this kind of tools 100% appeal to me.
mickael-kerjean··on We keep reinventing CSS, but styling was never the problem
The file comes from wherever you have it stored in the first place (FTP, S3, SFTP, virtually anything) and viewer are plugins implementing various interfaces which are packaged up onto a zip file. With this approach, to add support for psd, I just implemented the image viewer interface (https://github.com/mickael-kerjean/filestash/blob/a605988d5c...), to add support for parquet files I implemented the table viewer interface (https://github.com/mickael-kerjean/filestash/blob/a605988d5c...) and still have the freedom for custom stuff like this docx editor based of libre office wasm: https://github.com/mickael-kerjean/filestash/tree/master/ser... Most of the actual implementations of the base interfaces are done in C, compiled to wasm and running via a web worker
mickael-kerjean··on We keep reinventing CSS, but styling was never the problem
I work on exactly this kind of app, and it’s open source: https://github.com/mickael-kerjean/filestash.

It’s a Dropbox-like file manager that instead of owning your data integrates with your existing storage, authentication, and authorization systems. Under the hood, there’s a lot going on, very recently I added plugins to handle various kind of file types that are not typically handled by browser, we're talking > 100 kind of file types handled entirely in the browser for niches like astronomy, data engineering, GIS, 3D models, dev and even embroidery patterns

mickael-kerjean··on Claude Code is all you need
Yep, I used to spend a lot of time learning PHP on a web server which was part of my internet subscription. Without it being free, I would never have learn how to create websites and would have never got in programming, the trigger was that free web hosting with PHP that was part of the internet connection my parents were already paying for
mickael-kerjean··on Windows XP Professional
My experience with XP was more like the infamous window very good edition flash games: https://demo.filestash.app/login?type=webdav&url=https://web...
mickael-kerjean··on GPT-5
I studied machine learning in 2012, gradient descent wasn't new back then either but it was 5 years before the "attention is all you need" paper. Progress might look continuous overall but if you zoom enough it might be a bit more discrete with breakthrough that must happen to jump the discrete parts, the question to me now is "How many papers like attention is all you need before a singularity?" I don't have that answer but let's not forget, until they released chat gpt, openAI was considered a joke by many people in the field who asserted their approach was a dead end.
mickael-kerjean··on Claude Code IDE integration for Emacs
In 15 years of using nothing but emacs, I have never met another emacs user in any of the companies I worked for. plenty of vim but literally 0 emacs
mickael-kerjean··on Why don't Americans trust experts? Just ask a paranormal investigator
Before openAI release gpt3, we had tons of experts on hacker news explaining with what seemed like reasonable arguments how openai was a joke in the machine learning community and how their approach couldn't work
mickael-kerjean··on CheerpJ 4.1: Java in the browser, now supporting Java 17 (preview)
For my use case of building Filestash, WASM is a game changer in those 2 areas:

1. use libraries from ecosystem outside JS. In the past few months, I've added support for file types like psd, dbf, arrow, parquet and about 50 more. To give a concrete example: https://www.filestash.app/tools/parquet-viewer.html WASM open up a very exciting door. In the same idea, I stumbled upon a couple JAVA only libraries which I would love to ship on a browser and not have to create web service to interact with those.

2. enable third party to make plugin that can run in my app in a safe way. In my case, plugins are zip files containing a bunch of assets and the WIP piece is to be able to put wasm in there that will run server side without giving those plugins a blank check for acting crazy.

mickael-kerjean··on Plain Vanilla Web
> it doesn't require them because it's a blog.

A counter example is Filestash [1], a full fledge file manager that can open > 100 file (from parquet, arrow, geojson, shp, raw images, etc...). Since it got moved out of React, the app perform better by every single metric than the original one. While I agree there's no team of 30 behind it, so is tons of software with people blindly defaulting to React for the same reason than people choose IBM: nobody get fired for choosing IBM / React.

[1] https://github.com/mickael-kerjean/filestash

mickael-kerjean··on Show HN: I open-sourced my AI toy company that runs on ESP32 and OpenAI realtime
Yep and having it in a child toy is way beyond the border of creepy
mickael-kerjean··on SerenityOS is a love letter to '90s user interfaces
and so is windows RG edition: https://demo.filestash.app/login?type=webdav&url=https://web...
mickael-kerjean··on Getting forked by Microsoft
Everywhere I've worked for the past 10+ years treats open source like a candy store to benefit from and wouldn't allow contributing code back
mickael-kerjean··on OpenAI o3 and o4-mini
The benchmark is something you can optimize for, doesn't mean it generalize well. Yesterday I tried for 2 hours to get claude to create a program that would extract data from a weird adobe file. 10$ later, the best I had is a program that was doing something like:

  switch(testFile) {
    case "test1.ase": // run this because it's a particular case 
    case "test2.ase": // run this because it's a particular case
    default:  // run something that's not working but that's ok because the previous case should
              // give the right output for all the test files ...
  }
mickael-kerjean··on A Postmortem of a Startup
A dirty secret I recently learned about: look for public contracts in your area, to find some of those, google "contract register filetype:pdf".

Tons of crazy shit in there waiting to be disrupted. The tricky part is to get the right financials to bid on the interesting stuff, a good pathway there is to combine multiple companies together and make a shared bid, reach out to me if you're interested.

mickael-kerjean··on Everything wrong with MCP
I made a MCP server to access remote storage using any kind of protocols (S3, SFTP, FTP, .... ), and authentication was not as much of a problem that most people would make you think. Is it technically pure and beautiful? No. Does it work? Yes and you can check by yourself by pointing the mcp inspector to "https://demo.filestash.app/sse" and play around
mickael-kerjean··on 2025 AI Index Report
The latest example for me was trying to generate a thumbnail of a PSD in plain C and figure out the layers in there as I was lazy to read the specs, with the objective to bundle it as a wasm and execute it on a browser, it never got to extract a thumbnail from a given PSD, it's very confident at making stuff but it never got anywhere despite spending a couple hours on it which would have been better spend reading specs and existing code on that topic
mickael-kerjean··on Black Mirror's pessimism porn won't lead us to a better future
> Imagine some theoretical technological advancement. Now take it out of context, put it in the worst possible circumstances, and imagine it appeared into a society like ours without any prior thought or discussion about the possible downsides of that technology

This is precisely why I love Black Mirror. Despite the warnings, we're allowing companies to build killer robot and are running a large scale experiment to build a god. For a long time, I thought ethics is what prevented us from cloning human but recent years are showing balance sheet will outweigh it. As Netflix is 99.9% garbage, watching something like Black Mirror is refreshing

mickael-kerjean··on The reality of working in tech: We're not hired to write code (2023)
That's in theory, in practice a very large amount of companies only hire dev to bring jira tickets to completion where engineers are kept in a complete bubble and will never speak to a single actual customer.
mickael-kerjean··on Ask HN: Code should be stored in a database. Who has tried this?
I have been playing with the exact opposite, representing a database as a file structure where databases show up as top level folders, tables are subfolders, and each row appears as a form like file automatically generated from the schema. You can see a screenshot of such form in [1] which you can edit and save back, effectively enabling anyone familiar with Dropbox to edit data on a database as it just look like a form to fill

The project is oss [2] and the storage connector is "mysql". It even handles foreign key by creating links to another folder with a search query to find the table row it's associated with

[1] https://i.imgur.com/OBJGIeg.png

[2] https://github.com/mickael-kerjean/filestash

← PreviousPage 4 of 15Next →