# FileNation: sending a file as a link in an email

> FileNation is an Angular front end for a service that turns a file into a link you can mail to someone, with the bytes stored and transmitted through IPFS rather than a single company's server. The public repository holds the client and its build, while the Python service it talks to is described as private, and the last published release dates from February 2018.

**FileNation/FileNation** — The simplest way to send your files around the world using IPFS. ✏️ 🗃

- Repository: https://github.com/FileNation/FileNation
- Website: https://filenation.io/
- Stars: 864 · Forks: 90
- Language: JavaScript
- License: MIT
- Published: 2026-10-20 · Updated: 2026-10-20 · Language: en
- Canonical page: https://hysenlabs.com/projects/filenation-filenation

## A file becomes a link, and the bytes go to IPFS

FileNation is described as the simplest way to send unlimited files around the world using IPFS, and the README's tagline is the simplest way to send your files around the world. The mechanism is one sentence: it lets you send files as a link to an email, and the files cannot be censored because they are stored and transmitted decentralised, because it uses the InterPlanetary File System.

The README's own description of IPFS is worth reading, because it explains why a file-sharing service would be built this way. IPFS is a media distribution protocol, addressed by content and identities, it enables the creation of completely distributed applications, and it aims to make the web faster, safer and more open.

The content addressing is the part with consequences. If a file is named by the hash of its contents, then the same file always has the same address, and any node that holds a copy can serve it. That is what removes the single point of failure from the design, and it is also what makes the mail link a reasonable interface: what you send is an address, not a copy, so the recipient fetches the content from the network rather than from a mail attachment.

The service is hosted at filenation.io, and the repository's README links a Medium post that introduces it. The README also lists its own achievements: the launch of a first functional version as an MVP, a first position in the HackerNews ranking, and more than 600 stars on GitHub as a sign of interest from the technology community. Those are the project's own claims from 2018, and they date the project as much as the release history does.

## Angular in front, FilePond for the upload

The tech stack section names three things: Angular as the main framework, led by @alexsicart, the IPFS library, and a private Python server led by @polbaladas.

The dependency list in package.json shows what the Angular side is actually made of, and it is a coherent 2018-era application. The Angular packages sit at 6.1.1, with @angular/cdk and @angular/material at 6.4.3, and the component library follows the same vintage, with rxjs and rxjs-compat at 6.2.2 and zone.js at 0.8.26.

The upload UI is FilePond, through ngx-filepond at 4.0.0 and angular-filepond at 1.0.5, together with filepond-plugin-file-validate-type at 1.2.0, which is the plugin that validates the type of each file before it is accepted. That pairing is the interesting choice, because validating a file type in the browser before the upload is the difference between a service that rejects a video by mistake and one that does not.

The animation library is gsap at 2.0.1, and the IPFS client itself is the ipfs package at 0.34.0. There is also a set of Node stream shims, buffer at 5.2.1, stream at 0.0.2, stream-buffers at 3.0.2 and readable-stream at 3.0.6, which is what you would expect in a browser application that has to feed bytes into a Node-oriented API.

The top-level listing matches an Angular workspace: angular.json, tsconfig.json, tslint.json, src/, static/, e2e/, a .nvmrc pinning the Node version, a travis.yml, renovate.json for dependency updates, a patch.js, an .editorconfig and a CODE_OF_CONDUCT.md, with the MIT licence in the root.

## The Python server is the part you cannot read

The tech stack lists the server as private, with a Python implementation and a named lead. That single word changes what the repository is, and it is the first thing to check if you are evaluating the project.

What is in the repository is the browser client: the Angular application, the IPFS client integration, the upload UI, the build and the test configuration. What is not in the repository is the service that receives an upload, hands back a link, and serves the metadata that goes with it. There is no server directory, no Python source, no API specification and no schema in the top-level listing.

That matters more than it might appear. The interesting question for a decentralised file service is what happens at the point where the server is still involved, which is at the moment of upload, when the file has to be added to IPFS, and afterwards, when a link is resolved to an address. The client half of that story is in the repository. The other half is not.

There is a second gap in the same area, and it is smaller. The README's instructions for contributing end with a link to submit a pull request, and that link points at github.com/alexsicart/Decentralized-Cloud rather than at this repository. It looks like a leftover from an earlier name for the project, and it means the contribution path described in the README does not land where the README says it should.

Neither of these makes the project unusable as a reference. They do make it a client, not a system.

## Running it on your own machine

The README explains how to run the app locally, and it is three commands.

```bash
git clone https://github.com/Filenation/Filenation
npm i
npm start
```

Node has to be installed, the repository is cloned, the modules are installed, and the app is served at http://localhost:4200. The port is the Angular development server's default, which is a small reminder of which generation of the framework this is.

For a production build the README offers two variants, and the difference between them is worth knowing:

```bash
npm run prod or npm run prod:hashless
npm run compodoc:w
```

The scripts in package.json show what those mean. prod is ng build --prod, and prod:hashless is ng build --prod --output-hashing none. Angular's default production build fingerprints output files with a content hash in the filename, which is right for a deployable site because it busts caches, and wrong for a deployment where the URL of an asset has to stay stable, for example inside an IPFS directory or when something else references the file by name. The hashless build exists for that case.

The third command is for documentation rather than for the app. compodoc:w runs compodoc with the serve and watch flags against src/tsconfig.app.json, and compodoc is the Angular documentation generator, so this gives you a live documentation site for the codebase. The other compodoc scripts are compodoc:g for a one-off generation and compodoc:s for serving without watching.

The rest of the scripts are the standard Angular set: ng serve for start, ng build for build, ng test, ng lint, and ng e2e with a pree2e step that runs webdriver-manager update with the standalone and gecko flags turned off.

## A postinstall patch script is the first thing to look at

One entry in package.json deserves attention on its own:

```json
"postinstall": "node patch.js",
```

Every npm install in this project runs a script from the repository that rewrites something after the dependencies are in place. The repository has a patch.js at the top level, and the README does not describe what it does. That is not automatically a problem, because patching a dependency after install is a known technique, but it is a thing you must understand before you run the install, because it executes with your permissions and it changes files inside node_modules.

The rest of the tooling is conventional for the period. The development dependencies are the Angular CLI at 6.1.4, the build tooling at 0.7.4, compodoc at 1.1.3, jasmine-core at 3.2.1, codelyzer at 4.4.2 and the TypeScript type packages for Jasmine and Node. Linting is tslint, configured in a tslint.json at the root, and continuous integration is a travis.yml, both of which are the tools of that era rather than current ones.

The renovate.json file is the interesting exception, because dependency automation has aged better than the rest. It is what keeps a dependency tree that has not been touched since 2018 from rotting completely, since the pinned versions in package.json would otherwise stay pinned indefinitely.

So the honest summary of the build is that it is a period-correct Angular 6 workspace with a small hand-written patch step, and it will need a Node version and a set of old native dependencies to build at all.

## The last release is from 2018, and the branch is still moving

The release history is three alpha tags and then a long silence. v0.1-alpha was published on 2017-10-09, v0.2-alpha on 2017-11-26, and v0.3-alpha on 2018-02-25. The most recent release is more than eight years old at the time of writing, and the manifest version is a placeholder 0.0.0 with the package marked private, so there is no version in the code that corresponds to any of the tags.

Against that, the last push was on 2026-10-15, and the default branch is develop. So work is still landing in the repository while the published artefacts are from 2018, which is the pattern you would expect from a project that is being kept alive for a hosted service rather than for release engineering. A developer who clones it today gets source that is not what produced the running site.

The hosting is the other half. The service is at filenation.io, and the repository is the client for it. That means the useful thing about the code today is as a reference implementation of an Angular client for IPFS, and the useful thing about the service is whatever it currently does, which this repository does not describe.

The licence is MIT, and the contributor agreement is the thoughtbot open source code of conduct, which the README links. For anyone who wants to help, the constraint is the missing server, not the licence.

## Conclusion

Adopt FileNation as a reference if you are building a browser client for IPFS-backed file sharing, because the repository shows a complete Angular application with file upload validation, animation and a dev server, and it is small enough to read in an afternoon. Do not adopt it as a dependency or a product, because there is no published package, the newest release is v0.3-alpha from 2018, and the service half of the system is not in the repository at all, so the running service is something you cannot inspect or host from this code. Before you rely on the hosted site, check what the private Python server does with the link and whether the link survives when the sender goes offline, since decentralised storage removes the single server but not the availability question.

## FAQ

### What is FileNation?

It is a service for sending a file as a link you can email, with the file stored and transmitted through IPFS rather than on one company's servers. The project describes itself as the simplest way to send unlimited files around the world, and it is hosted at filenation.io.

### How do I run the FileNation app locally?

Install Node, clone the repository with git clone https://github.com/Filenation/Filenation, run npm i, and then npm start. The development server serves the app at http://localhost:4200, and for a production build the README offers npm run prod or npm run prod:hashless.

### Is the FileNation server code in the repository?

No. The tech stack lists the server as private, with a Python implementation and a named lead, and the repository contains only the Angular client, the build and the test configuration. The client and the service are separate halves, and only the client is open here.

### What licence is FileNation under?

MIT, with a LICENSE file in the repository root, and the package.json also records the MIT licence. Contributors are asked to follow the thoughtbot open source code of conduct, which the README links.

## Sources

- [FileNation/FileNation on GitHub](https://github.com/FileNation/FileNation)
- [License: MIT](https://github.com/FileNation/FileNation/blob/develop/LICENSE)
- [Project website](https://filenation.io/)
- [README](https://github.com/FileNation/FileNation/blob/develop/README.md)
- [Releases](https://github.com/FileNation/FileNation/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/filenation-filenation
