Sign inSign up

jchristn77/mincms-dashboard

By jchristn77

•Updated 15 days ago

MinCMS is an S3-backed minimal content management system (CMS) with integrated dashboard

Image
Content management system
0

2.8K

jchristn77/mincms-dashboard repository overview

MinCMS Logo

MIT License .NET 10.0 React 19 Docker Compose Docker Pulls Docker Pulls

⁠MinCMS

MinCMS is a minimal, self-hosted content management system backed by S3-compatible storage. Upload, organize, and share files through a clean REST API and a modern React dashboard — no traditional database required.

MinCMS stores everything (files and metadata) in any S3-compatible bucket — AWS S3, Less3, MinIO, Wasabi, Backblaze B2, and more — so you keep full control of your data.

⁠Why MinCMS?

  • Simple by design — no database, no complex setup, just S3 and go
  • S3-compatible — works with AWS S3, MinIO, Wasabi, Backblaze B2, and any S3-compatible provider
  • Public download pages — share collections of files via clean, browsable URLs
  • API-first — every operation is available through a straightforward REST API
  • Modern dashboard — manage collections and files through a responsive React UI with light/dark mode
  • Docker-ready — up and running in minutes with Docker Compose
  • Multi-platform — images available for linux/amd64 and linux/arm64

⁠Use Cases

  • File distribution — share downloads, release artifacts, or media assets with public-facing download pages
  • Content management — organize files into collections for different projects, teams, or clients
  • Digital asset management — centralize images, documents, and media with metadata tracking
  • Self-hosted file sharing — a lightweight alternative to heavier CMS platforms when all you need is file management
  • Headless CMS backend — use the REST API to serve content to websites, apps, or CI/CD pipelines

⁠Getting Started

⁠Prerequisites
⁠Quick Start with Docker Compose
  1. Clone the repository

    git clone https://github.com/jchristn/MinCMS.git
    cd MinCMS/docker
    
  2. Configure your S3 credentials (required before starting)

    Edit docker/server/mincms.json and fill in your S3 settings. The server will fail to start if these are not configured.

    AWS S3:

    {
      "S3": {
        "AccessKey": "your-access-key",
        "SecretKey": "your-secret-key",
        "Bucket": "your-bucket-name",
        "Region": "us-east-1"
      }
    }
    

    MinIO or other S3-compatible services — also set EndpointUrl and RequestStyle:

    {
      "S3": {
        "AccessKey": "minioadmin",
        "SecretKey": "minioadmin",
        "Bucket": "my-bucket",
        "Region": "us-east-1",
        "EndpointUrl": "http://localhost:9000",
        "UseSsl": false,
        "RequestStyle": "PathStyle"
      }
    }
    

    Important: You must update docker/server/mincms.json with valid S3 credentials before running docker compose up. The configuration file is mounted into the container at startup — changes made after the container is running require a restart (docker compose restart mincms-server).

  3. Start the stack

    docker compose up -d
    
  4. Access the services

  5. Log into the dashboard using the default API key: mincmsadmin

Tip: Change the default access key in mincms.json before deploying to production.

⁠Architecture

MinCMS consists of two services:

ComponentTechnologyDescription
MinCms.Server.NET 10REST API for managing collections & files
MinCms.DashboardReact 19Web UI for browsing and managing content

All data — both file content and collection metadata — is stored in your S3 bucket. There is no separate database to manage, back up, or migrate.

┌──────────────┐      ┌──────────────┐      ┌──────────────────┐
│   Dashboard  │────> │  API Server  │────> │  S3-Compatible   │
│  (React 19)  │      │  (.NET 10)   │      │     Storage      │
└──────────────┘      └──────────────┘      └──────────────────┘
     :8300                :8200              AWS / Less3 / MinIO

⁠API Overview

All API endpoints (except health checks and public downloads) require authentication via x-api-key header or Authorization: Bearer <key>.

⁠Collections
MethodEndpointDescription
GET/v1.0/collectionsList all collections
POST/v1.0/collectionsCreate a new collection
GET/v1.0/collections/{slug}Get collection details
DELETE/v1.0/collections/{slug}Delete collection & files
⁠Files
MethodEndpointDescription
GET/v1.0/collections/{slug}/filesList files
POST/v1.0/collections/{slug}/filesUpload a file
GET/v1.0/collections/{slug}/files/{fileName}Get file metadata
DELETE/v1.0/collections/{slug}/files/{fileName}Delete a file
DELETE/v1.0/collections/{slug}/filesDelete multiple files
⁠Public Downloads (No Authentication)
MethodEndpointDescription
GET/download/{slug}Browsable file listing
GET/download/{slug}/{fileName}Download a file
GET/download/{slug}/sitemap.xmlXML sitemap for SEO

⁠Configuration

MinCMS is configured through mincms.json and environment variables. Environment variables take precedence, making it easy to override settings per deployment.

⁠Settings File (mincms.json)
{
  "Rest": {
    "Hostname": "localhost",
    "Port": 8200,
    "Ssl": false
  },
  "S3": {
    "AccessKey": "",
    "SecretKey": "",
    "Bucket": "",
    "Region": "",
    "EndpointUrl": null,
    "UseSsl": true,
    "RequestStyle": "VirtualHosted"
  },
  "AccessKeys": [
    {
      "Name": "Admin",
      "Key": "mincmsadmin"
    }
  ],
  "Logging": {
    "ConsoleLogging": true,
    "MinimumSeverity": 1,
    "EnableColors": false,
    "FileLogging": true,
    "LogDirectory": "./logs/",
    "LogFilename": "mincms.log",
    "IncludeDateInFilename": true,
    "Servers": []
  }
}
⁠Server Environment Variables
VariableOverridesDescription
WEBSERVER_HOSTNAMERest.HostnameWebserver listen hostname
WEBSERVER_PORTRest.PortWebserver listen port
S3_ACCESS_KEYS3.AccessKeyS3 access key
S3_SECRET_KEYS3.SecretKeyS3 secret key
S3_BUCKETS3.BucketS3 bucket name
S3_REGIONS3.RegionAWS region
S3_ENDPOINTS3.EndpointUrlCustom S3-compatible endpoint URL
S3_USE_SSLS3.UseSslUse SSL for S3 (true/false)
S3_REQUEST_STYLES3.RequestStyleVirtualHosted or PathStyle
⁠Dashboard Environment Variables
VariableDefaultDescription
MINCMS_SERVER_URLhttp://localhost:8200Server URL for the login page
MINCMS_LOGO_FILE/assets/logo.pngLogin page logo
MINCMS_LOGO_NOTEXT_FILE/assets/logo-no-text.pngTop bar logo
MINCMS_FAVICON_FILE/assets/logo-no-text.icoBrowser favicon
⁠Configuration Precedence
Environment variable (if set and non-empty)
  └─ overrides → mincms.json value
                   └─ overrides → built-in default

⁠Building from Source

⁠Server
cd src/MinCms.Server
dotnet build
dotnet run
⁠Dashboard
cd dashboard
npm install
npm run dev
⁠Docker Images

Multi-platform images (linux/amd64 and linux/arm64) can be built with the provided scripts:

build-server.bat v0.1.0
build-dashboard.bat v0.1.0

⁠Contributing

Contributions are welcome! Here's how to get involved:

  • Report bugs — open an issue on the Issues⁠ tab
  • Request features — open an issue describing your idea
  • Ask questions — start a thread in the Discussions⁠ tab
  • Submit a PR — fork the repo, make your changes, and open a pull request

⁠License

MinCMS is released under the MIT License⁠. You are free to use, modify, and distribute it.

⁠Version History

See CHANGELOG.md⁠ for release notes.

Tag summary

Content type

Image

Digest

sha256:e5e9b9818…

Size

41.2 MB

Last updated

15 days ago

docker pull jchristn77/mincms-dashboard