1,563 karma · joined December 23, 2015
github: https://github.com/mickael-kerjean/filestash
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
- 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
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" }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
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...
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
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.
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.
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 ...
}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.
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
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