Vuefinder is a file manager component that expects you to bring the backend
A sleek, developer-friendly file manager for Vue — organize, preview, and manage files with ease.
At a glance
- What is it?
- Vuefinder is a Vue 3 file manager you embed in your own application, and it deliberately ships no server: it talks to whatever HTTP endpoints you implement through a driver, with a PHP package offered as the plug-and-play option and an OpenAPI 3.0 specification describing the contract. The frontend is substantial, with image cropping, uploads, a code editor and a CSV parser among its dependencies, so this is a UI component with real features rather than a thin file listing.
- Who is it for?
- Vuefinder fits a team that already has storage, an API and a place to put a file manager, such as a CMS or an internal tool, and it does not fit someone who wants a file browser that works on its own, since the server side is your job. Before you start, read the OpenAPI 3.0 specification and decide whether you use the PHP package or implement the endpoints yourself, because the data contracts are the contract with the component.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 4 days ago.
- What is it written in?
- Mainly Vue, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
A component, not an application
Vuefinder is described as a modern, customizable file manager component built for Vue. The word component is the important part, because it tells you where the responsibility boundary sits.
The pitch is to organise, preview and manage files through a reactive interface, just like a native file explorer, and to integrate it into your app, connect to any storage, whether local or S3, and craft your own cloud experience with full control over uploads, search and customization.
That is a component, not a product. There is no server to install, no database to provision and no user accounts to create. You add it to a Vue application you already have, point it at endpoints you already serve, and it becomes the file browser for that application.
Installation is a single npm command:
npm i vuefinderThe README then sends you to the documentation website for detailed installation instructions, configuration options and usage examples, and there is a live demo hosted at vuefinder.ozdemir.be where you can explore the features before installing anything.
The copyright and licence line dates the project from 2018, and it is MIT licensed, with the copyright held by Yusuf Özdemir. The repository is not archived, the default branch is master, and the last push was on 2026-10-19, with releases 4.7.6 on 2026-09-17, 4.7.5 on 2026-08-30 and 4.7.4 on 2026-08-18.
The driver is the whole backend contract
The backend section is the part to read twice, because it defines what you actually have to build.
You can use any backend language. Vuefinder talks to your server through the driver you provide, and a driver simply calls your HTTP endpoints and returns data in the expected shape. The README frames this as keeping Vuefinder backend-agnostic while giving you full control over auth, storage and business rules.
That last phrase is the design statement. Authentication, storage and business rules are exactly the parts a generic file manager should not own, because they differ between a CMS with existing accounts, a content pipeline with a review workflow, and an internal tool with a specific folder policy. By delegating them, the component stays small and the interesting decisions stay in your code.
There is a server library for the common case. The PHP package is described as recommended for plug-and-play, and the README notes that if you use it, the endpoints are already provided. For other stacks, the instruction is to mirror the same responses, and the README states that the data contracts are stable and designed to be simple to implement.
There is also a machine-readable version of that contract: the complete API specification is published as an OpenAPI 3.0 specification, for integration and validation. That is the artefact to hand to whoever writes the server side.
The infrastructure examples show the range. A Cloudflare R2 on Workers example in TypeScript provides serverless endpoints backed by R2 object storage, which is the clearest demonstration of the design: the component does not care that the files live in object storage behind a serverless function.
The older ecosystem libraries stopped at 3.x
There is a compatibility wrinkle that is easy to miss and expensive to discover late.
The README lists ecosystem libraries for older versions separately, under the heading for VueFinder 3.x and earlier. A Python WSGI implementation, a Go implementation and a Rust implementation are all linked, and all three are scoped to the 3.x line. If you arrive from search results, a blog post or an older project, you may land on one of these and assume it supports the current release. It does not.
That is a real consequence of the 4.x redesign implied by the current architecture: the PHP package is presented as the recommended option, the OpenAPI specification is the primary contract, and the alternative language libraries have not been carried forward. The React-adjacent thought does not apply here, but the pattern does: a component whose interface to the server changed shape leaves the community adapters behind until someone picks them up.
So the practical decision for someone starting on the 4.x line today is narrow. Use the PHP package, or implement the endpoints yourself against the OpenAPI specification, possibly using the Cloudflare R2 example as a worked example of a serverless implementation. The older Python, Go and Rust libraries are for projects still on 3.x.
For a 3.x project, the picture is different, and the older libraries are the fast path. What is not available either way is a hosted service, because the whole model assumes you own the storage and the API.
Fourteen dependencies, each with a job
The README argues that every dependency was picked on purpose, to keep the bundle small, and then lists them. It is worth reading the list as a feature inventory, because each entry is a capability the file manager has.
The interactive parts: vue-advanced-cropper for image cropping, viselect as a selection utility, OverlayScrollbars for the scrollbars, and @floating-ui/dom for positioning, which is what makes dropdowns and popovers land correctly.
The data parts: Uppy as the upload library, and @tanstack/vue-query for fetching, caching, synchronising and updating server state, which is how the file list stays in step with the server without you writing that logic.
The platform parts: nanostores as a tiny state manager, @nanostores/i18n as the internationalisation backend for it, and vue-sonner for toast notifications. The internationalisation choice is worth noting, since it is bundled rather than left to the host application, and the package exports a locales subpath, so the locales ship with the component.
The preview parts: CodeMirror 6 as the code editor for the built-in text and code preview, Papa Parse as a fast in-browser CSV parser, and vanilla-lazyload for lightweight and flexible lazy loading of thumbnails, which matters when a folder contains many images.
And the framework itself, Vue 3 or later.
The last two entries are the ones that pull real weight in a file manager, the code editor and the CSV parser, and they are also the two that most affect bundle size. The README's claim that the selection keeps Vuefinder lightweight is a claim about the choices, not a number, so measure your own bundle if that matters to you.
Package shape: ESM, typed, with locales and CSS as separate entry points
The package metadata tells you how the component is meant to be consumed.
The package is version 4.7.6, is declared as an ES module, and declares Node engines of 20.19.0 or later in the 20 line, or 22.12.0 and above. The published files are the dist directory, the README and the LICENSE, so the source is not shipped.
The exports map is where the finer points are. The root export carries types pointing at a generated declaration file and the import condition pointing at the bundled JavaScript, with a default condition alongside. Then there are separate subpath exports for the stylesheet under two names, for the bundle itself, and for the locales directory as a wildcard.
So a consumer can import the component, import the stylesheet explicitly rather than having it injected, and pull only the locale files it needs. The stylesheet is exposed under two paths that resolve to the same file, which is a compatibility shim for a rename rather than two different stylesheets.
Types are generated rather than hand written, since the types entry points at a file under dist/types that the build produces with vue-tsc. That is the type-check script, which runs vue-tsc with no emit against the app tsconfig, while a separate type-gen script emits the declarations used in the published package. Two tsconfig files are referenced for the app and one for the node-side tooling, plus a dedicated one for vitest.
The toolchain is a Vue 3 starter kit with Cypress on top
The scripts section describes a modern Vue project layout, and it is a good template in its own right.
Building is Vite, with build-only running vite build, and the main build script running the build-only task, type generation and a type check in sequence, orchestrated with npm-run-all. The dev script is plain vite, and preview is vite preview.
Testing is split into two layers. Unit tests run with vitest, with a vitest.config.ts at the root. End to end tests run with Cypress, and the end to end script uses start-server-and-test to start the preview server on port 4173 and then run Cypress in headless mode, while a second script does the same against the dev server and opens the Cypress runner interactively. A cypress.config.ts and a cypress directory are in the tree, and the prepare script runs cypress install, which means the binary is fetched at install time.
Quality tooling is oxlint, with a lint and a lint:fix script, and the repository has an .oxlintrc.json. Formatting is prettier with write and check scripts and a .prettierrc and .prettierignore. Type checking is vue-tsc, as described above.
The documentation is VitePress. There are scripts to serve the docs in development, to build them, and to preview them, and the docs build runs the package build first so the documentation can use the built artefact. The docs directory is in the tree, along with an examples directory holding an App.vue, a main.ts, an icons folder and a subfolder of further examples.
One packaging detail is worth noting: the prepack script runs the build, so the published tarball is always built from the current source rather than from whatever happens to be in the working tree.
Where Vuefinder is the wrong choice
Three situations argue against it.
The first is a project that just needs a file browser with no server. If you have files somewhere and want a UI over them with no API work at all, this component makes you write a server. That is a real cost: even with the PHP package, you are deploying and securing an endpoint, and the component's own features, upload, search, preview, all depend on that endpoint behaving correctly.
The second is a React or Angular project. The component is Vue 3 or later, and the package is a Vue component with Vue-specific dependencies such as @tanstack/vue-query. There is no framework-agnostic core to lift out; the driver concept is the portable part, and that is a contract rather than a component.
The third is a non-browser environment. The component renders to the DOM and uses a code editor, a cropper and a positioning library, none of which have a meaning outside a browser, so server-side rendering of a Vuefinder view is not a path the dependency list suggests.
On maintenance, the record is good. Releases come every couple of weeks, 4.7.6 on 2026-09-17, 4.7.5 on 2026-08-30 and 4.7.4 on 2026-08-18, and the last push was on 2026-10-19. The licence is MIT, so a fork or a vendored copy carries no obligation beyond keeping the notice. The one thing to keep an eye on is the 3.x to 4.x ecosystem split, because a project that adopted a language-specific server library on the old line will find the community adapters unmaintained relative to the component.
Editorial conclusion
Vuefinder fits a team that already has storage, an API and a place to put a file manager, such as a CMS or an internal tool, and it does not fit someone who wants a file browser that works on its own, since the server side is your job. Before you start, read the OpenAPI 3.0 specification and decide whether you use the PHP package or implement the endpoints yourself, because the data contracts are the contract with the component. Note that the older Python, Go and Rust libraries target Vuefinder 3.x and earlier, so on the 4.x line you are implementing the endpoints. The project is MIT licensed, version 4.7.6 was released on 2026-09-17, and the last push was on 2026-10-19.
Frequently asked questions
How do I install Vuefinder?
Install it with npm i vuefinder. The README directs you to the documentation website for detailed installation instructions, configuration options and usage examples, and there is a live demo at vuefinder.ozdemir.be.
Does Vuefinder include a backend?
No. Vuefinder talks to your server through a driver you provide, and a driver simply calls your HTTP endpoints and returns data in the expected shape. A PHP package is recommended for plug-and-play, and for other stacks the README says to mirror the same responses, with the complete API published as an OpenAPI 3.0 specification.
Which server libraries exist for Vuefinder?
The README lists a PHP package as the recommended option, plus an infrastructure example of Cloudflare R2 on Workers in TypeScript with serverless endpoints. Older ecosystem libraries for Python, Go and Rust are listed separately as being for VueFinder 3.x and earlier.
Which versions of Node and Vue does Vuefinder need?
The package metadata declares Node engines of 20.19.0 or later in the 20 line, or 22.12.0 and above, and the dependency list starts with Vue 3 or later. The published files are the dist directory, the README and the LICENSE.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/n1crack-vuefinder)Was this useful?