Collaborative, secure, and fast S3 bucket management interface for your cloud infrastructure.
  • Go 54.9%
  • HTML 31%
  • CSS 12.5%
  • Makefile 0.6%
  • Shell 0.6%
  • Other 0.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-06-19 10:59:44 -03:00
.github/workflows Initial commit 2026-06-17 20:47:51 -03:00
internal feat: implement server-side pagination for S3 object listing and add load-more functionality to the UI 2026-06-19 10:51:45 -03:00
k8s Initial commit 2026-06-17 20:47:51 -03:00
packaging Initial commit 2026-06-17 20:47:51 -03:00
web feat: add client-side search functionality to buckets list template 2026-06-19 10:58:29 -03:00
.gitignore Initial commit 2026-06-17 20:47:51 -03:00
.version chore: bump version to 1.1.0 2026-06-19 10:59:44 -03:00
config.yaml.example feat: refactor LDAP authentication to support StartTLS, flexible group lookups, and structured user result mapping 2026-06-19 10:36:52 -03:00
Dockerfile Initial commit 2026-06-17 20:47:51 -03:00
go.mod Initial commit 2026-06-17 20:47:51 -03:00
go.sum Initial commit 2026-06-17 20:47:51 -03:00
LICENSE Initial commit 2026-06-17 20:47:51 -03:00
main.go Initial commit 2026-06-17 20:47:51 -03:00
Makefile Initial commit 2026-06-17 20:47:51 -03:00
nfpm.yaml Initial commit 2026-06-17 20:47:51 -03:00
README.md Initial commit 2026-06-17 20:47:51 -03:00

FS290

The Open Source S3 Bucket Manager**

Collaborative, secure, and fast S3 bucket management interface for your cloud infrastructure.


Naming Heritage

Following the naming convention established by ns116 (named after the BR-116 highway), FS290 takes its name from the BR-290 highway, the most important east-west arterial route in Rio Grande do Sul, Brazil, connecting the Atlantic coast and Porto Alegre to the western border.

Here, FS stands for File Storage (or File System), indicating its purpose as a high-performance gateway for managing S3-compatible cloud storage.


Features

  • S3 & Compatible Storages: Native support for AWS S3, Min.io, VersityGW, Ceph, and any other S3-compatible API.
  • Path-Style Addressing: Easily connects to local/private S3 instances using path-style URLs (use_path_style: true), bypassing virtual-host DNS requirements.
  • Access Control & RBAC: Manage user permissions with distinct admin and editor roles.
  • Authentication Integrations: Supports local accounts, LDAP server authentication, and OpenID Connect (OIDC) OAuth2 providers.
  • High-Performance Cache: Speeds up bucket listing and reduces API latency and transit costs by caching bucket metadata in a local PostgreSQL database.
  • Integrated Audit Logs: Logs actions (uploads, downloads, deletions, folder creation, user management) with user attribution and IP tracking for compliance.
  • Safe Directory Operations: Supports folder simulation (creating and recursively deleting virtual directories and their nested contents).

Project Structure

FS290 is designed as a single, static Go binary containing all backend logic, database migrations, and embedded frontend templates (utilizing TailwindCSS, Lucide Icons, and Vanilla CSS).

  • Backend: Go (using Go AWS SDK v2, pgx for PostgreSQL, and standard libraries).
  • Frontend: Go templates (html/template) with embedded static assets.
  • Database: PostgreSQL (handling sessions, audit logs, and bucket metadata caching).

Getting Started

1. Configuration

Create a config.yaml file in the root of the project. A template is available in config.yaml.example:

server:
  port: 8080
  host: "0.0.0.0"

database:
  dsn: "postgres://postgres:postgres@localhost:5432/fs290?sslmode=disable"

aws:
  access_key_id: "YOUR_ACCESS_KEY"
  secret_access_key: "YOUR_SECRET_KEY"
  region: "us-east-1"
  endpoint: "http://localhost:9000" # Leave empty for official AWS S3
  use_path_style: true               # Set to true for Min.io or VersityGW

# Allowed buckets. If empty, lists all buckets in the S3 account.
buckets:
  - name: "my-bucket-prod"
    label: "Production"
  - name: "my-bucket-staging"
    label: "Staging"

max_upload_size: 104857600 # Maximum upload size in bytes (default: 100MB)

2. Compilation

Compile the static Go binary using the provided Makefile:

make build

This compiles a static executable fs290 in the root of the project.

3. Execution

Run the server with the configuration file path:

./fs290 --config config.yaml

The server will listen on the port specified (default http://localhost:8080). On first run, it will automatically prompt you to create the initial administrator credentials at /setup.


License

This project is licensed under the MIT License.