Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/DCO.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,14 +60,14 @@ By making a contribution to this project, I certify that:

## Project-specific addendum

basement is licensed under AGPL-3.0 with a commercial dual-licensing
basement is licensed under the MIT License with a commercial dual-licensing
path retained by the project maintainer (see `CONTRIBUTING.md`). By
signing off under the DCO, you are also confirming that you are
comfortable with the maintainer relicensing your contribution as part
of an aggregated commercial license offering — which is consistent
with item (a) / (b) of the DCO above (you have the right to submit
under the indicated open-source license, and the open-source license
in question is AGPL-3.0 alongside the project's dual-licensing
in question is the MIT License alongside the project's dual-licensing
practice).

If you cannot agree to that addendum, please reach out to the
Expand Down
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,4 @@ contact_links:
about: Full disclosure policy, response SLA, and threat model (SECURITY.md).
- name: Commercial licensing
url: https://github.com/MattJackson/basement/discussions
about: For proprietary embedding / hosted SaaS / AGPL escape-hatch enquiries, open a GitHub Discussion.
about: For proprietary embedding / hosted SaaS / commercial-licensing enquiries, open a GitHub Discussion.
12 changes: 6 additions & 6 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
# Contributing to basement

basement is an AGPL-3.0 multi-backend storage control plane. Patches,
basement is an MIT-licensed multi-backend storage control plane. Patches,
bug reports, and integration drivers are welcome.

## License + contributor terms

basement is licensed under the **GNU Affero General Public License,
version 3** ([`LICENSE`](./LICENSE)). By submitting a pull request,
basement is licensed under the **MIT License**
([`LICENSE`](./LICENSE)). By submitting a pull request,
patch, or any other contribution, you agree that **your contribution
is licensed to the project and its users under AGPL-3.0**, in the
is licensed to the project and its users under the MIT License**, in the
same terms as the rest of the codebase.

### Commercial dual-licensing path

The project maintainer (Matthew Jackson, `@MattJackson` on GitHub)
reserves the right to grant **commercial licenses** to basement for
proprietary embedding, hosted SaaS deployments, or other use cases
the AGPL's copyleft does not suit. This requires the maintainer to
the MIT license does not suit. This requires the maintainer to
hold (or be permitted to relicense) the copyright on every
contribution that ships in the binary.

Expand Down Expand Up @@ -62,7 +62,7 @@ React + Vite frontend (`frontend/`). The frontend builds into
### Clone + build

```bash
git clone https://github.com/mattjackson/basement
git clone https://github.com/MattJackson/basement
cd basement

# Frontend: install deps, build, drop dist/ into internal/web/dist/
Expand Down
699 changes: 21 additions & 678 deletions LICENSE

Large diffs are not rendered by default.

25 changes: 12 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
# basement

[![Release](https://img.shields.io/github/v/release/mattjackson/basement)](https://github.com/mattjackson/basement/releases)
[![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL_3.0-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
[![Go Version](https://img.shields.io/github/go-mod/go-version/mattjackson/basement)](https://github.com/mattjackson/basement/blob/main/go.mod)
[![Container](https://img.shields.io/badge/ghcr.io-basement-2496ED?logo=docker&logoColor=white)](https://github.com/mattjackson/basement/pkgs/container/basement)
[![SBOM](https://github.com/mattjackson/basement/actions/workflows/sbom.yml/badge.svg)](https://github.com/mattjackson/basement/actions/workflows/sbom.yml)
[![CI](https://github.com/MattJackson/basement/actions/workflows/quality.yml/badge.svg)](https://github.com/MattJackson/basement/actions/workflows/quality.yml)
[![Release](https://img.shields.io/github/v/release/MattJackson/basement)](https://github.com/MattJackson/basement/releases)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![Go Version](https://img.shields.io/github/go-mod/go-version/MattJackson/basement)](https://github.com/MattJackson/basement/blob/main/go.mod)
[![Container](https://img.shields.io/badge/ghcr.io-basement-2496ED?logo=docker&logoColor=white)](https://github.com/MattJackson/basement/pkgs/container/basement)
[![SBOM](https://github.com/MattJackson/basement/actions/workflows/sbom.yml/badge.svg)](https://github.com/MattJackson/basement/actions/workflows/sbom.yml)

> One pane of glass for self-hosted S3-compatible object storage.
> Manage many backends from one UI. Mount as a network drive.
> Drive it from Claude via MCP. AGPLv3.
> Drive it from Claude via MCP. MIT.

![Multi-cluster admin](docs/screenshots/v1.10/01-clusters-list.png)

Expand Down Expand Up @@ -46,7 +47,7 @@ No env vars, no bcrypt CLI, no JWT secret to generate up front — basement auto
Prefer a guided one-liner that drops a `docker-compose.yml` alongside the container and prints the password for you?

```bash
curl -sSL https://raw.githubusercontent.com/mattjackson/basement/main/scripts/install.sh | bash
curl -sSL https://raw.githubusercontent.com/MattJackson/basement/main/scripts/install.sh | bash
```

(Review-before-run recommended: `curl -sSLo install.sh https://.../install.sh && less install.sh && bash install.sh`.)
Expand Down Expand Up @@ -86,7 +87,7 @@ Shots ending in `-mocked.png` are Playwright-driven static-HTML renders for comp
| v1.10 | Bucket versioning + Object Lock + SSE-S3 / SSE-KMS |
| v1.11 | Launch readiness — first-run wizard, 5-min install, observability, deployment guide |

v2.0 establishes the foundation for what comes next. Want to influence the roadmap? File an issue, start a discussion in [GitHub Discussions](https://github.com/mattjackson/basement/discussions), or join the conversation on our [question template](.github/ISSUE_TEMPLATE/question.yml).
v2.0 establishes the foundation for what comes next. Want to influence the roadmap? File an issue, start a discussion in [GitHub Discussions](https://github.com/MattJackson/basement/discussions), or join the conversation on our [question template](.github/ISSUE_TEMPLATE/question.yml).

## Compared to other OSS admin UIs

Expand All @@ -111,7 +112,7 @@ The self-hosted S3 admin-UI landscape shifted in 2026 — upstream MinIO archive
| Prometheus `/metrics` (UI-served) | yes | yes | yes | no | no |
| Audit log UI | yes | partial | partial | no | no |
| Mobile / installable PWA | yes | no | no | partial (manifest only) | no |
| License | AGPL-3.0 | AGPL-3.0 | AGPL-3.0 | MIT | MIT |
| License | MIT | AGPL-3.0 | AGPL-3.0 | MIT | MIT |
| Latest release / activity | v2.0.0-rc.5 (2026-06) | last commit 2025-11 | last commit 2025-06 | v1.1.0 (2025-09) | v0.6.2 (2026-05) |

"n/a (backend)" means the upstream object store doesn't expose the feature, so no admin UI can ship it — Garage core does not implement versioning, Object Lock, or SSE-S3/SSE-KMS, and this isn't a UI gap. Rows for MinIO Console reflect the AGPL fork (opens3/console), since github.com/minio/console itself was retired alongside minio/minio in April 2026.
Expand Down Expand Up @@ -148,7 +149,7 @@ Verified against project READMEs, source code searches, and latest release notes
## Getting Help / Community

- **File a bug** → [bug_report.yml](.github/ISSUE_TEMPLATE/bug_report.yml)
- **Ask a question** → [question.yml](.github/ISSUE_TEMPLATE/question.yml) or [GitHub Discussions](https://github.com/mattjackson/basement/discussions)
- **Ask a question** → [question.yml](.github/ISSUE_TEMPLATE/question.yml) or [GitHub Discussions](https://github.com/MattJackson/basement/discussions)
- **Security** → [`SECURITY.md`](SECURITY.md) (do not file in public)
- **Chat**: OPEN — TODO: configure Discord / Matrix / IRC channel

Expand All @@ -170,6 +171,4 @@ CHANGELOG.md lists every release. Use the `latest` Docker tag for the rolling li

## License

GNU Affero General Public License v3.0 — see [LICENSE](./LICENSE).

For commercial dual-licensing (proprietary embedding, hosted SaaS without source disclosure, modifying without publishing changes): open a [GitHub Discussion](https://github.com/MattJackson/basement/discussions).
MIT License — see [LICENSE](./LICENSE).
2 changes: 1 addition & 1 deletion SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,7 @@ is the closest thing to a supply-chain manifest we offer today.

- [`CONTRIBUTING.md`](./CONTRIBUTING.md) — contribution terms +
DCO sign-off.
- [`LICENSE`](./LICENSE) — AGPL-3.0.
- [`LICENSE`](./LICENSE) — MIT.
- [`docs/configuration.md`](./docs/configuration.md) — production
environment variables (including the security-sensitive ones
named in the threat model above).
6 changes: 3 additions & 3 deletions SUPPORT.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Support

basement is open-source software (AGPL-3.0). Here's where to get help:
basement is open-source software (MIT). Here's where to get help:

## Bugs

Expand Down Expand Up @@ -39,7 +39,7 @@ triage, fix, and disclosure.

## Commercial / Dual-Licensing

For proprietary embedding, hosted SaaS without source disclosure, or other use
cases the AGPL's copyleft doesn't suit: open a [GitHub Discussion](https://github.com/MattJackson/basement/discussions).
For proprietary embedding, hosted SaaS, or other use
cases the MIT license doesn't suit: open a [GitHub Discussion](https://github.com/MattJackson/basement/discussions).
The maintainer reserves the right to grant commercial licenses on a
case-by-case basis.
4 changes: 2 additions & 2 deletions docs/comparison-research.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ and upstream backend documentation.

| Project | Repo | Latest release | Last push | License |
|---|---|---|---|---|
| basement | github.com/MattJackson/basement | v1.11.0.11 (2026-05) | active | AGPL-3.0 |
| basement | github.com/MattJackson/basement | v1.11.0.11 (2026-05) | active | MIT |
| MinIO Console (opens3 fork) | github.com/opens3/console | (no tagged releases; main moves) — last commit 2025-11-03 | 2025-11 | AGPL-3.0 |
| OpenMaxIO Object Browser | github.com/OpenMaxIO/openmaxio-object-browser | inherited `v1.7.6` (pre-fork); last commit 2025-06-24 | 2025-06 | AGPL-3.0 |
| khairul169/garage-webui | github.com/khairul169/garage-webui | v1.1.0 (2025-09-01) | 2025-09 | MIT |
Expand Down Expand Up @@ -158,7 +158,7 @@ named alternative.

### License

- **basement** — AGPL-3.0.
- **basement** — MIT.
- **MinIO Console (opens3)** — AGPL-3.0.
- **OpenMaxIO** — AGPL-3.0.
- **khairul169/garage-webui** — MIT.
Expand Down
4 changes: 2 additions & 2 deletions docs/deployment/docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,13 +50,13 @@ detection, image pull, compose-file generation, log tailing, and a
final banner that prints the auto-generated password:

```bash
curl -sSL https://raw.githubusercontent.com/mattjackson/basement/main/scripts/install.sh | bash
curl -sSL https://raw.githubusercontent.com/MattJackson/basement/main/scripts/install.sh | bash
```

For review-before-run:

```bash
curl -sSLo install.sh https://raw.githubusercontent.com/mattjackson/basement/main/scripts/install.sh
curl -sSLo install.sh https://raw.githubusercontent.com/MattJackson/basement/main/scripts/install.sh
less install.sh
bash install.sh
```
Expand Down
2 changes: 1 addition & 1 deletion internal/docslint/docslint_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ func TestContributingMD(t *testing.T) {
if len(text) < 500 {
t.Errorf("CONTRIBUTING.md: too short (%d bytes)", len(text))
}
mustMatch(t, "CONTRIBUTING.md AGPL", text, `AGPL-?3\.0`)
mustContain(t, "CONTRIBUTING.md MIT", text, "MIT")
mustContain(t, "CONTRIBUTING.md DCO sign-off line", text, "Signed-off-by")
mustContain(t, "CONTRIBUTING.md DCO acronym", text, "DCO")
mustContain(t, "CONTRIBUTING.md links DCO.md", text, "DCO.md")
Expand Down
Loading