Thanks
Built on the work of others
nextrmnl would not exist without these projects, as a building block, a font or a counterpart. Each is named and linked here. The exact versions are in the repository, in requirements.txt and package.json.
The model
PuTTY comes first. How selecting copies, how a right click pastes, how an unknown host key is reported: PuTTY got that right twenty-five years ago, and nextrmnl copies it because every Windows admin has it in their fingers. Then WinSCP, for the idea that the files belong next to the terminal.
Counterparts
nextrmnl talks to your machines, it replaces none. Without these agreements and programs there would be nothing to connect to.
| Project | What for |
| OpenSSH | The SSH server on almost every machine nextrmnl talks to, and the format of the keys in the vault |
| SSH and SFTP | The two protocols everything runs over. Any machine that speaks them works. |
| authentik, Keycloak, Authelia, Pocket ID | Sign-in through OpenID Connect; for authentik there is the button that sets everything up |
| 7-Zip | Opens the encrypted backups without nextrmnl |
On the server
| Project | What for | Licence |
| Python | The language of the server | PSF |
| AsyncSSH | Speaks SSH and SFTP to your machines, checks host keys, reads and writes keys | EPL-2.0 or GPL-2.0 |
| FastAPI | The framework of the API, including the WebSocket to the terminal | MIT |
| Uvicorn | The server that delivers everything | BSD-3-Clause |
| SQLAlchemy | The way to the database | MIT |
| SQLite | The database itself, one file, including the backup interface | public domain |
| Pydantic | Checks every incoming and outgoing value, reads the environment variables | MIT |
| argon2-cffi | Hashes the passwords with Argon2id and derives the key to the vault from them | MIT |
| cryptography | AES-256-GCM for the vault and the server-side secrets | Apache-2.0 or BSD-3-Clause |
| bcrypt | Opens OpenSSH keys with a passphrase | Apache-2.0 |
| httpx | Talks to the OIDC provider and to authentik during setup | BSD-3-Clause |
| PyJWT | Checks the id tokens of the OIDC provider | MIT |
| segno | The QR code for the authenticator app | BSD-3-Clause |
| pyzipper | The encrypted backup | MIT |
| python-multipart | Receives uploaded files | Apache-2.0 |
In the browser
| Project | What for | Licence |
| xterm.js | The terminal itself, with the addon that fits it to the window | MIT |
| React | The interface | MIT |
| React Router | The pages within it | MIT |
| i18next | German and English | MIT |
| Tailwind CSS | The looks | MIT |
| Vite | Builds the interface | MIT |
| TypeScript | The language of the interface | Apache-2.0 |
| Vitest | The tests of the interface | MIT |
The fonts of this site
This site ships its fonts with it instead of loading them: a project that holds the access to your machines should not advertise with a page that contacts a foreign server when opened. Shipping them means the licence travels along, and that is why it is listed here. All three under the SIL Open Font License 1.1.
And around it
| Project | What for |
| Docker | One container, and it runs |
| GitHub | Source, bug reports and the finished images |
| Playwright | Drives this site and the application through a real browser before every release |
nextrmnl as a whole is licensed under the AGPL-3.0. The licences of the building blocks are in the packages themselves; the obligation of the AGPL runs in one direction only: whoever runs a modified version of nextrmnl as a network service has to offer its source.