Fork Stalwart WebUI v1.0.11 as INBUXA Admin

- One edition: whatever edition the server reports, nothing is hidden or
  disabled as Enterprise-only (accountStore.setAccountInfo).
- INBUXA branding: name, logo (mark plus a text-colored wordmark), favicon,
  page titles, setup wizard text, and ihasmail's palette in light and dark.
- Two-factor setup names INBUXA as the issuer and drops the image parameter
  that made authenticator apps fetch a logo from a third-party site.
- Runs apart from the server: the server address can be set at deploy time
  with <meta name="api-base-url">, and OAuth endpoints the server returns as
  relative paths are resolved against the server's address, not the page's.
  Verified end to end against a separate inbuxa-server.
- Upstream's release workflow moved to .github-upstream so it never runs.

Upstream's history contains no Enterprise-only code, so this is an ordinary
fork. upstream is a fetch-only remote.
This commit is contained in:
2026-09-18 12:00:54 -07:00
parent dc462b137f
commit 1d72ef3aa1
22 changed files with 197 additions and 252 deletions
+37 -140
View File
@@ -1,158 +1,55 @@
<p align="center">
<a href="https://stalw.art">
<img src="./img/logo-red.svg" height="150">
</a>
<img src="./img/brand/inbuxa-lockup-light.svg" alt="inbuxa" height="120">
</p>
<h3 align="center">
Web-based User Interface for Stalwart 🛡️
</h3>
<h3 align="center">INBUXA Admin</h3>
<br>
The administration interface for the INBUXA mail server: every server setting,
first-boot setup, and recovery, in the browser.
<p align="center">
<a href="https://github.com/stalwartlabs/webui/actions/workflows/build.yml"><img src="https://img.shields.io/github/actions/workflow/status/stalwartlabs/webui/build.yml?style=flat-square" alt="continuous integration"></a>
&nbsp;
<a href="https://www.gnu.org/licenses/agpl-3.0"><img src="https://img.shields.io/badge/License-AGPL_v3-blue.svg?label=license&style=flat-square" alt="License: AGPL v3"></a>
&nbsp;
<a href="https://stalw.art/docs/get-started/"><img src="https://img.shields.io/badge/read_the-docs-red?style=flat-square" alt="Documentation"></a>
</p>
<p align="center">
<a href="https://mastodon.social/@stalwartlabs"><img src="https://img.shields.io/mastodon/follow/109929667531941122?style=flat-square&logo=mastodon&color=%236364ff&label=Follow%20on%20Mastodon" alt="Mastodon"></a>
&nbsp;
<a href="https://twitter.com/stalwartlabs"><img src="https://img.shields.io/twitter/follow/stalwartlabs?style=flat-square&logo=x&label=Follow%20on%20Twitter" alt="Twitter"></a>
</p>
<p align="center">
<a href="https://discord.gg/jtgtCNj66U"><img src="https://img.shields.io/discord/923615863037390889?label=Join%20Discord&logo=discord&style=flat-square" alt="Discord"></a>
&nbsp;
<a href="https://matrix.to/#/#stalwart:matrix.org"><img src="https://img.shields.io/matrix/stalwartmail%3Amatrix.org?label=Join%20Matrix&logo=matrix&style=flat-square" alt="Matrix"></a>
</p>
It is a fork of [Stalwart WebUI](https://github.com/stalwartlabs/webui). Like
upstream it is schema-driven. After signing in it fetches the server's schema
and builds every form, list and menu from it, so it covers every setting the
server has without hardcoding any of them.
## Features
> **Status: in development, not released.**
**Stalwart WebUI** is schema-driven single-page application for administering [Stalwart](https://stalw.art). After authentication the panel fetches a JSON schema from the server and dynamically generates all forms, lists, navigation, and layouts from that schema. Nothing is hardcoded.
## What's different from upstream
Key features:
- **One edition.** Nothing is hidden or marked as Enterprise-only. INBUXA
ships every feature to everybody. See the INBUXA server's `docs/spec/`.
- **Runs anywhere, not on the mail server.** Upstream is installed onto the
mail server itself. INBUXA Admin is its own deployment, pointed at the server
either at build time (`VITE_API_BASE_URL`) or at deploy time:
`<meta name="api-base-url" content="https://mail.example.com">` in
`index.html`.
- **INBUXA's look:** the logo and ihasmail's palette.
- **Two-factor setup** names INBUXA as the issuer, and no longer makes
authenticator apps fetch a logo from a third-party site.
- **Schema-driven UI**: All forms, lists, and navigation are generated from a JSON schema fetched from `/api/schema` after login. No object types, field names, or layouts are hardcoded.
- **JMAP protocol**: All data operations (queries, creates, updates, deletes, blob uploads) use JMAP (RFC 8620) with method chaining and result references.
- **Permission-aware**: Every button, link, field, and section respects the user's permissions. Elements the user cannot access are hidden.
## Developing
## Screenshots
<img src="./img/demo.gif">
## Get Started
Stalwart WebUI is included with Stalwart Mail Server, to install Stalwart Mail Server on your server by following the instructions for your platform:
- [Linux / MacOS](https://stalw.art/docs/install/linux)
- [Windows](https://stalw.art/docs/install/windows)
- [Docker](https://stalw.art/docs/install/docker)
All documentation is available at [stalw.art/docs/get-started](https://stalw.art/docs/get-started).
## Getting started
Prerequisites:
- Node.js 18 or later
- A running Stalwart instance (for JMAP API calls)
Install dependencies:
```
npm install
```
### Environment variables
Configuration is done through Vite environment variables. Copy or edit `.env.development` in the project root:
```
VITE_API_BASE_URL=http://localhost:443
VITE_ACCESS_TOKEN=
VITE_OAUTH_SCOPES=
```
| Variable | Description |
|---|---|
| `VITE_API_BASE_URL` | URL of the Stalwart server. Used for all API requests during development. In production builds (when empty or unset) requests are relative to the current origin. |
| `VITE_ACCESS_TOKEN` | When set, skips the OAuth flow entirely and uses this token for all requests. Useful for local development and testing. |
| `VITE_OAUTH_SCOPES` | Optional OAuth scopes. Omitted from the authorization request when empty. |
### OAuth client ID
The OAuth 2.0 client ID is not a build-time setting. It is read at runtime from a meta tag in `index.html`:
```html
<meta name="oauth-client-id" content="" />
```
The server rewrites the `content` attribute when it serves the page, so a single build works for any deployment. When no
client ID is configured the attribute is left empty and the panel falls back to `stalwart-webui`.
### Bypassing OAuth for development
Set `VITE_ACCESS_TOKEN` to a valid bearer token to skip the login page and go straight to the admin panel. You can obtain a token from the Stalwart server's token endpoint or use an API key:
```
VITE_ACCESS_TOKEN=your-bearer-token-here
```
### Running the dev server
```
npm run dev
```
This starts Vite's development server with hot module replacement, typically at `http://localhost:5173`.
## Testing
Run the unit tests (Vitest):
```
npm test
```
Run tests in watch mode:
```
npm run test:watch
```
## Building for production
```
```bash
npm ci
npm run dev # http://localhost:5173, against VITE_API_BASE_URL in .env.development
npm run typecheck && npx eslint src/ && npx vitest run
npm run build
```
This runs the TypeScript compiler followed by Vite's production build. Output
goes to the `dist/` directory.
## Keeping up with upstream
To preview the production build locally:
Upstream's history contains no Enterprise-only code, so this is an ordinary
git fork. `upstream` is a fetch-only remote:
```
npm run preview
```bash
git fetch upstream --tags
git merge v1.0.12 # the next release tag
```
## Support
## License and credits
If you are having problems running Stalwart Mail Server, you found a bug or just have a question,
do not hesitate to reach us on [Github Discussions](https://github.com/stalwartlabs/mail-server/discussions),
[Reddit](https://www.reddit.com/r/stalwartlabs), [Discord](https://discord.gg/aVQr3jF8jd) or [Matrix](https://matrix.to/#/#stalwart:matrix.org).
Additionally you may purchase a subscription to obtain priority support from Stalwart Labs LLC
## License
This project is dual-licensed under the **GNU Affero General Public License v3.0** (AGPL-3.0; as published by the Free Software Foundation) and the **Stalwart Enterprise License v1 (SELv1)**:
- The [GNU Affero General Public License v3.0](./LICENSES/AGPL-3.0-only.txt) is a free software license that ensures your freedom to use, modify, and distribute the software, with the condition that any modified versions of the software must also be distributed under the same license.
- The [Stalwart Enterprise License v1 (SELv1)](./LICENSES/LicenseRef-SEL.txt) is a proprietary license designed for commercial use. It offers additional features and greater flexibility for businesses that do not wish to comply with the AGPL-3.0 license requirements.
Each file in this project contains a license notice at the top, indicating the applicable license(s). The license notice follows the [REUSE guidelines](https://reuse.software/) to ensure clarity and consistency. The full text of each license is available in the [LICENSES](./LICENSES/) directory.
## Copyright
Copyright (C) 2024, Stalwart Labs LLC
Free software under the [GNU Affero General Public License, version 3](./LICENSES/AGPL-3.0-only.txt).
A fork of Stalwart WebUI, copyright © Stalwart Labs LLC. Upstream's files are
dual-licensed AGPL-3.0-only or Stalwart's Enterprise License, and INBUXA takes
them under the AGPL-3.0 only. Upstream's copyright notices are kept on every
file. INBUXA isn't affiliated with or endorsed by Stalwart Labs.