Frans is a simple file-sharing service intended to be ready for cloud native.
It took heavy inspiration from DownloadTicketService. You could also call it a more modern implementation of DownloadTicketService
optimized for todays (2025) IT landscape.
- Create file shares and share them with others
- Create upload grants which allow others to upload their files to you
The goal is to translate frans
to the following languages:
-
German
-
French
-
Spanish
-
Russian
-
Simplified chinese
-
Japanese
-
Dutch
-
Portuguese, Brazilian
-
Czech
-
Italian
Feel free to contribute or improve translations via Crowdin
Frans comes with a Helm chart hosted via GitHub Container Registry.
The helm chart is unopinionated about anything outside of frans
and therefore doesn't install anything besides frans
itself.
This means that you will have to prepare a database server, OIDC provider and a SMTP Server beforehand.
Your values.yaml
should at least include the following values to connect with these services:
db:
# Database type to use. One of `postgres`, `mysql` or `sqlite3`
type: postgres
# Database host (file path in case of `sqlite3`)
host: localhost # or frans.db for sqlite3
# Database port
port: 5432 # or 3306 for mysql
# Database name
name: frans
# Database user
user: frans
# Database password (required for postgres and mysql)
password: frans
oidc:
issuer: https://your-oidc-provider
client_id: your-client-id
smtp:
server: smtp-server-host
port: 25
After your preparations are done, simply run
helm install frans oci://ghcr.io/jvllmr/frans --values values.yaml
to install the helm chart.
For more values.yaml
options, look inside the default values.yaml.
See docker-compose.minimal.yaml for a minimal example.
Take a look at Frans GitHub Releases for pre-compiled binaries for linux, macOS and windows!
frans
supports three types of databases. PostgreSQL
, mysql
/ mariadb
and sqlite
frans
does not handle user management by itself, but rather uses OpenID Connect (OIDC) to delegate this task to an OIDC provider. One of the more well known open source examples for an OIDC provider is Keycloak
which was initially developed by RedHat and has graduated to be a Cloud Native Computing Foundation (CNCF) project. Therefore, frans
is optimized for usage with Keycloak
.
If you want to try your luck with another OIDC provider, I have a checklist ready for you. The used OIDC provider client needs to:
- be a public client (no client secret needed) with pkce challenges
- allow usage of refresh tokens
- have an
end_session_endpoint
frans
requires a SMTP server to send mail notifications.
frans
supports configuration via a frans.yaml
configuration file relative to its executable or via environment variables.
I always welcome contributions. Even the smaller ones.
The following tools are required to start with development on frans:
- golang installed
pnpm
installed: installation via corepack is preferreddocker
withdocker compose v2
installedatlas
installed: https://atlasgo.io/guides/evaluation/install
After you have installed all requirements you can start the environment
pnpm services
This will start the services frans
depends on for development purposes.
It starts:
- a keycloak instance available under
http://localhost:8080
- a smtp4dev instance available under
http://localhost:5000
Keycloak can be managed via the credentials admin
/admin
.
Frans authentication is managed via the dev
realm.
pnpm db:migrate
# Start go backend in dev mode
pnpm dev:go
# Start client dev server
pnpm dev
After starting both development servers, frans
is available under http://localhost:8081/files
.
You can login via one of the following credentials:
frans_admin
/frans_admin
: User with administration rights
Everything for ent is generated from the contents of internal/ent/schema
.
After making your changes there, run the following to apply them correctly:
# generate new ent source
pnpm ent:generate
# create migration scripts for postgresql, mysql and sqlite3
pnpm db:diff
# apply migrations to development database
pnpm db:migrate
pnpm ent:new <entity name>
pnpm build