Simple Nextcloud Forms
You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Go to file
neil 507e8877c8 Merge branch 'root' of ssh:// into root 1 year ago
migrations implementing multiple database systems support! 3 years ago
src compatibility with nextcloud 22 and Forms API v1.1 2 years ago
templates messed up description in index.html. fixes #37 2 years ago
.gitignore removing db folder 3 years ago
Cargo.toml compatibility with nextcloud 22 and Forms API v1.1 2 years ago
LICENSE Initial commit 3 years ago Merge branch 'root' of ssh:// into root 1 year ago
adj-list.txt initial commit and v1? 3 years ago
config.toml.sample downgrading cookie key size from 48 to 32 3 years ago
lang.json fixing number of field types in index 2 years ago
name-list.txt initial commit and v1? 3 years ago
rustfmt.toml adding fmt rules 3 years ago


Warning: Breaking changes introduced on a minor Nextcloud release (>= 22.3.0) broke sncf. Please do not update until it is fixed. It seems easy to fix (use /login instead of /csrftoken) but I need time, feel free to try to fix it.

Simple Nextcloud Forms (sncf) is a lightweight proxy written in Rust with the Actix framework.

It is meant to make form creation easier, through the use of the Nextcloud Forms application, by generating administration links for forms: users do not need to log in or register, they just need to keep a link (in the form of<45-byte base64 key>) to log them in and give them access to their forms.

How ?

I really used black voodoo magic on this one.

This software acts as a proxy between the client and the Nextcloud instance. Here are some of its features :

  • When a link is created from the main page, sncf connects to the Nextcloud API and creates an account with a random username and password. Those credentials are stored in its SQLite database, along with a randomly-generated token (used in the administration link).
  • When an administration link is used, sncf uses its database to find the associated username and password, then fills the login form on the Nextcloud instance (taking in account its CSRF token) and proxies the generated Set-Cookie headers to the client (to log the user in), then redirects it to the Forms app.
  • When a form is created, sncf automatically forges a request to update some fields in the form (set isAnonymous to true, for instance). Those parameters can't be changed by the client.
  • When a form is updated, sncf parses the requests before proxying it in order to prevent the client to edit some specific fields (isAnonymous or form access policy, which must not set to allow the users of the same instance to see the form). If an unwanted request is made, sncf does not proxy it.
  • A lot of routes are restricted (settings, API) to prevent the instance from being used for anything else than the Forms app.

Those tweaks are completed by server-side CSS edits (using an application) to hide unwanted fields.


See the dedicated wiki page.

Note: There is currently no script to make the installation easier (see #12).

Compatibility table

Compatibility with sncf has been tested for the following Nextcloud and Nextcloud Forms versions.

sncf Nextcloud Nextcloud Forms
1.0.0 19.0.1, 19.0.2 2.0.2, 2.0.3
1.0.1, 1.0.2, 1.1.0, 1.2.0 19.0.1, 19.0.2, 20.0.0*, 20.0.1 2.0.4
Unsupported ** above 20.0.1, below 21.x above 2.0.4, below 2.2.2
1.3.0, 1.4.0 21.0.0 2.2.2, 2.2.3, 2.2.4
1.5.0 22.2.0 2.3.0

* Breaking changes, please check the wiki if you need to upgrade from a previous version.
** Untested versions, use at your own risk.

If your NC or NC Forms version isn't in this list, sncf may or may not work. We do not ensure backwards compatibility with older versions.

Avoid upgrading software without checking its compatibility with sncf.

If you upgrade anyway and notice a breaking change, please file an issue.



If you like this work, please donate to the 42l association (maintaining sncf) or Nextcloud (maintaining Nextcloud and Nextcloud Forms).


Currently, this software is translated in French, English and German (thanks alpcentaur!)

Feel free to take a look at the lang.json file and send a pull request.


Check the opened issues. Feel free to take a look at the code (it's really small). There's yet a lot of place for improvement. If you need info, you can create an issue with the question tag on it.


What is the CPU/RAM consumption of this setup?

The "setup" we're talking about is the main instance's,

  • sncf consumes between 20 and 60 MB of RAM and isn't CPU-hungry.
  • Nextcloud consumes between 60 MB and 120 MB of RAM. It's quite lightweight compared to other Nextcloud instances since the usual apps are disabled. It's eating some CPU like any regular PHP application.

Why didn't you write a Nextcloud application instead ?

That sounds appropriate, but I don't feel like writing PHP and I don't know Nextcloud internals. Feel free to write it, though.

Are you crazy? This tweak is gonna break at every single update.

Yeah, well, you're probably right. A Nextcloud app would be more suitable, I guess. But anyway, feel free to use something else if this is too much tweaking for you. But I'd prefer some pull requests to help me keep this software up-to-date with Nextcloud and Nextcloud Forms updates.