Latest commit

History

694 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RustFS Console

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

✨ Features

Core Features

  • File Browser - Visual file/object management interface with upload, download, delete operations
  • Access Keys Management - Create and manage service account access keys
  • Policy Management - Configure and manage IAM policies for fine-grained access control
  • User Management - Create, edit, enable/disable, and delete user accounts
  • User Groups Management - Create and manage user groups to simplify permission assignment

Advanced Features

  • Import/Export - Import and export system configurations
  • Performance Monitoring - Real-time system status, server information, and performance metrics
  • Tiered Storage - Configure and manage tiered storage policies
  • Event Destinations - Configure event destinations for event notifications
  • SSE Settings - Server-side encryption configuration
  • License Management - View and manage system license information

🛠️ Tech Stack

Core Framework

UI & Styling

Data Management

Other Tools

📁 Project Structure

console/
├── app/ # Next.js App Router pages and layouts
│ ├── (auth)/ # Authentication pages
│ └── (dashboard)/ # Dashboard pages
├── components/ # React components
│ ├── ui/ # shadcn/ui base components
│ └── ... # Business components
├── hooks/ # Custom React Hooks
├── contexts/ # React Context providers
├── lib/ # Utility functions and library code
│ └── feedback/ # Global feedback APIs (toast, dialog)
├── types/ # TypeScript type definitions
├── i18n/ # Internationalization resource files
│ └── locales/ # Multi-language files (13 languages)
├── config/ # Configuration files
├── public/ # Static assets
└── tests/ # Test files (mirror source structure)

🚀 Quick Start

Prerequisites

  • Node.js >= 20
  • pnpm >= 10.19.0 (recommended to use the version specified in the project)
  • Docker - For running RustFS service

Start RustFS Service

The RustFS service must be started before development. Run it using Docker:

# Create data directory
mkdir rustfs-data
# Run RustFS service
docker run -p 9000:9000 -p 9001:9001 -v ./rustfs-data:/data rustfs/rustfs:1.0.0-alpha.82

The service will start on the following ports:

  • 9000 - API port
  • 9001 - Console port

Install Dependencies

pnpm install

Development Mode

Note: Before starting the development server, ensure the RustFS service is running (see "Start RustFS Service" section above).

Start the development server (with hot reload):

pnpm dev

Visit http://localhost:3000 to view the application.

Build for Production

pnpm build

Run Production Build

pnpm start

💻 Development Guide

Code Quality Checks

Before committing code, ensure all checks pass:

1. Lockfile Sync Check

pnpm install --frozen-lockfile

Ensure pnpm-lock.yaml is in sync with package.json. After modifying package.json, you must run pnpm install and commit the updated lockfile.

2. TypeScript Type Check

pnpm type-check
# or
pnpm build

3. ESLint Check

pnpm lint

4. Code Formatting Check

pnpm format:check

5. Auto-fix Formatting Issues

pnpm lint:fix
# or
pnpm format

Naming Conventions

  • Component files: Use kebab-case (e.g., bucket-selector.tsx)
  • Component names: Use PascalCase (e.g., <BucketSelector />)
  • Directory structure: Group by feature/domain, use plural forms (e.g., buckets/, users/)
  • File naming: Don't repeat directory name in filename (e.g., buckets/info.tsx instead of buckets/bucket-info.tsx)

UI Component Usage

  • Declarative UI: Use base components from @/components/ui/*
  • Imperative feedback: Use @/lib/feedback/message and @/lib/feedback/dialog for global toast and dialog prompts

Testing

When tests are configured:

  • Test files should be placed in tests/ directory, mirroring source structure
  • Use *.spec.ts or *.test.ts naming
  • Run tests: pnpm test:run

🌍 Internationalization

The project supports multiple languages. Currently supported languages:

  • العربية (AR-MA)
  • 中文(简体)(Chinese Simplified)
  • English (US)
  • Deutsch (DE)
  • Español (ES)
  • Français (FR)
  • Bahasa Indonesia (ID)
  • Italiano (IT)
  • 日本語 (JP)
  • 한국어 (KR)
  • Português (BR)
  • Русский (RU)
  • Türkçe (TR)

Language files are located in the i18n/locales/ directory.

📦 Build & Deployment

Environment Variables

Configure necessary environment variables according to your deployment environment (e.g., API endpoints, authentication configuration).

Build Configuration

The project uses Next.js default build configuration. Custom configuration can be done via next.config.ts.

Deployment

The project can be deployed to any platform that supports Next.js:

  • Vercel (Recommended) - Zero-config deployment
  • Docker - Using official Next.js Docker image
  • Self-hosted - Run pnpm build && pnpm start

🤝 Contributing

Commit Guidelines

  • Use conventional commit messages (Conventional Commits)
  • Ensure all code quality checks pass before committing
  • Each PR should include a clear description and related issue links

Code Review

  • Keep PR scope focused; coordinate large refactors in advance
  • Commit messages and PR titles must be in English
  • UI-related work should include screenshots

📄 License

Licensed under the Apache License 2.0. See LICENSE for details.

🔗 Resources

📝 Development Notes

  • Follow the guidelines in AGENTS.md
  • Keep code simple, readable, and maintainable
  • Prefer using existing project tools and patterns
  • Consider internationalization support when adding new features
  • Ensure all changes pass type checking

About

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Latest commit

History

694 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RustFS Console

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

✨ Features

Core Features

  • File Browser - Visual file/object management interface with upload, download, delete operations
  • Access Keys Management - Create and manage service account access keys
  • Policy Management - Configure and manage IAM policies for fine-grained access control
  • User Management - Create, edit, enable/disable, and delete user accounts
  • User Groups Management - Create and manage user groups to simplify permission assignment

Advanced Features

  • Import/Export - Import and export system configurations
  • Performance Monitoring - Real-time system status, server information, and performance metrics
  • Tiered Storage - Configure and manage tiered storage policies
  • Event Destinations - Configure event destinations for event notifications
  • SSE Settings - Server-side encryption configuration
  • License Management - View and manage system license information

🛠️ Tech Stack

Core Framework

UI & Styling

Data Management

Other Tools

📁 Project Structure

console/
├── app/ # Next.js App Router pages and layouts
│ ├── (auth)/ # Authentication pages
│ └── (dashboard)/ # Dashboard pages
├── components/ # React components
│ ├── ui/ # shadcn/ui base components
│ └── ... # Business components
├── hooks/ # Custom React Hooks
├── contexts/ # React Context providers
├── lib/ # Utility functions and library code
│ └── feedback/ # Global feedback APIs (toast, dialog)
├── types/ # TypeScript type definitions
├── i18n/ # Internationalization resource files
│ └── locales/ # Multi-language files (13 languages)
├── config/ # Configuration files
├── public/ # Static assets
└── tests/ # Test files (mirror source structure)

🚀 Quick Start

Prerequisites

  • Node.js >= 20
  • pnpm >= 10.19.0 (recommended to use the version specified in the project)
  • Docker - For running RustFS service

Start RustFS Service

The RustFS service must be started before development. Run it using Docker:

# Create data directory
mkdir rustfs-data
# Run RustFS service
docker run -p 9000:9000 -p 9001:9001 -v ./rustfs-data:/data rustfs/rustfs:1.0.0-alpha.82

The service will start on the following ports:

  • 9000 - API port
  • 9001 - Console port

Install Dependencies

pnpm install

Development Mode

Note: Before starting the development server, ensure the RustFS service is running (see "Start RustFS Service" section above).

Start the development server (with hot reload):

pnpm dev

Visit http://localhost:3000 to view the application.

Build for Production

pnpm build

Run Production Build

pnpm start

💻 Development Guide

Code Quality Checks

Before committing code, ensure all checks pass:

1. Lockfile Sync Check

pnpm install --frozen-lockfile

Ensure pnpm-lock.yaml is in sync with package.json. After modifying package.json, you must run pnpm install and commit the updated lockfile.

2. TypeScript Type Check

pnpm type-check
# or
pnpm build

3. ESLint Check

pnpm lint

4. Code Formatting Check

pnpm format:check

5. Auto-fix Formatting Issues

pnpm lint:fix
# or
pnpm format

Naming Conventions

  • Component files: Use kebab-case (e.g., bucket-selector.tsx)
  • Component names: Use PascalCase (e.g., <BucketSelector />)
  • Directory structure: Group by feature/domain, use plural forms (e.g., buckets/, users/)
  • File naming: Don't repeat directory name in filename (e.g., buckets/info.tsx instead of buckets/bucket-info.tsx)

UI Component Usage

  • Declarative UI: Use base components from @/components/ui/*
  • Imperative feedback: Use @/lib/feedback/message and @/lib/feedback/dialog for global toast and dialog prompts

Testing

When tests are configured:

  • Test files should be placed in tests/ directory, mirroring source structure
  • Use *.spec.ts or *.test.ts naming
  • Run tests: pnpm test:run

🌍 Internationalization

The project supports multiple languages. Currently supported languages:

  • العربية (AR-MA)
  • 中文(简体)(Chinese Simplified)
  • English (US)
  • Deutsch (DE)
  • Español (ES)
  • Français (FR)
  • Bahasa Indonesia (ID)
  • Italiano (IT)
  • 日本語 (JP)
  • 한국어 (KR)
  • Português (BR)
  • Русский (RU)
  • Türkçe (TR)

Language files are located in the i18n/locales/ directory.

📦 Build & Deployment

Environment Variables

Configure necessary environment variables according to your deployment environment (e.g., API endpoints, authentication configuration).

Build Configuration

The project uses Next.js default build configuration. Custom configuration can be done via next.config.ts.

Deployment

The project can be deployed to any platform that supports Next.js:

  • Vercel (Recommended) - Zero-config deployment
  • Docker - Using official Next.js Docker image
  • Self-hosted - Run pnpm build && pnpm start

🤝 Contributing

Commit Guidelines

  • Use conventional commit messages (Conventional Commits)
  • Ensure all code quality checks pass before committing
  • Each PR should include a clear description and related issue links

Code Review

  • Keep PR scope focused; coordinate large refactors in advance
  • Commit messages and PR titles must be in English
  • UI-related work should include screenshots

📄 License

Licensed under the Apache License 2.0. See LICENSE for details.

🔗 Resources

📝 Development Notes

  • Follow the guidelines in AGENTS.md
  • Keep code simple, readable, and maintainable
  • Prefer using existing project tools and patterns
  • Consider internationalization support when adding new features
  • Ensure all changes pass type checking

About

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

694 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RustFS Console

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

✨ Features

Core Features

  • File Browser - Visual file/object management interface with upload, download, delete operations
  • Access Keys Management - Create and manage service account access keys
  • Policy Management - Configure and manage IAM policies for fine-grained access control
  • User Management - Create, edit, enable/disable, and delete user accounts
  • User Groups Management - Create and manage user groups to simplify permission assignment

Advanced Features

  • Import/Export - Import and export system configurations
  • Performance Monitoring - Real-time system status, server information, and performance metrics
  • Tiered Storage - Configure and manage tiered storage policies
  • Event Destinations - Configure event destinations for event notifications
  • SSE Settings - Server-side encryption configuration
  • License Management - View and manage system license information

🛠️ Tech Stack

Core Framework

UI & Styling

Data Management

Other Tools

📁 Project Structure

console/
├── app/ # Next.js App Router pages and layouts
│ ├── (auth)/ # Authentication pages
│ └── (dashboard)/ # Dashboard pages
├── components/ # React components
│ ├── ui/ # shadcn/ui base components
│ └── ... # Business components
├── hooks/ # Custom React Hooks
├── contexts/ # React Context providers
├── lib/ # Utility functions and library code
│ └── feedback/ # Global feedback APIs (toast, dialog)
├── types/ # TypeScript type definitions
├── i18n/ # Internationalization resource files
│ └── locales/ # Multi-language files (13 languages)
├── config/ # Configuration files
├── public/ # Static assets
└── tests/ # Test files (mirror source structure)

🚀 Quick Start

Prerequisites

  • Node.js >= 20
  • pnpm >= 10.19.0 (recommended to use the version specified in the project)
  • Docker - For running RustFS service

Start RustFS Service

The RustFS service must be started before development. Run it using Docker:

# Create data directory
mkdir rustfs-data
# Run RustFS service
docker run -p 9000:9000 -p 9001:9001 -v ./rustfs-data:/data rustfs/rustfs:1.0.0-alpha.82

The service will start on the following ports:

  • 9000 - API port
  • 9001 - Console port

Install Dependencies

pnpm install

Development Mode

Note: Before starting the development server, ensure the RustFS service is running (see "Start RustFS Service" section above).

Start the development server (with hot reload):

pnpm dev

Visit http://localhost:3000 to view the application.

Build for Production

pnpm build

Run Production Build

pnpm start

💻 Development Guide

Code Quality Checks

Before committing code, ensure all checks pass:

1. Lockfile Sync Check

pnpm install --frozen-lockfile

Ensure pnpm-lock.yaml is in sync with package.json. After modifying package.json, you must run pnpm install and commit the updated lockfile.

2. TypeScript Type Check

pnpm type-check
# or
pnpm build

3. ESLint Check

pnpm lint

4. Code Formatting Check

pnpm format:check

5. Auto-fix Formatting Issues

pnpm lint:fix
# or
pnpm format

Naming Conventions

  • Component files: Use kebab-case (e.g., bucket-selector.tsx)
  • Component names: Use PascalCase (e.g., <BucketSelector />)
  • Directory structure: Group by feature/domain, use plural forms (e.g., buckets/, users/)
  • File naming: Don't repeat directory name in filename (e.g., buckets/info.tsx instead of buckets/bucket-info.tsx)

UI Component Usage

  • Declarative UI: Use base components from @/components/ui/*
  • Imperative feedback: Use @/lib/feedback/message and @/lib/feedback/dialog for global toast and dialog prompts

Testing

When tests are configured:

  • Test files should be placed in tests/ directory, mirroring source structure
  • Use *.spec.ts or *.test.ts naming
  • Run tests: pnpm test:run

🌍 Internationalization

The project supports multiple languages. Currently supported languages:

  • العربية (AR-MA)
  • 中文(简体)(Chinese Simplified)
  • English (US)
  • Deutsch (DE)
  • Español (ES)
  • Français (FR)
  • Bahasa Indonesia (ID)
  • Italiano (IT)
  • 日本語 (JP)
  • 한국어 (KR)
  • Português (BR)
  • Русский (RU)
  • Türkçe (TR)

Language files are located in the i18n/locales/ directory.

📦 Build & Deployment

Environment Variables

Configure necessary environment variables according to your deployment environment (e.g., API endpoints, authentication configuration).

Build Configuration

The project uses Next.js default build configuration. Custom configuration can be done via next.config.ts.

Deployment

The project can be deployed to any platform that supports Next.js:

  • Vercel (Recommended) - Zero-config deployment
  • Docker - Using official Next.js Docker image
  • Self-hosted - Run pnpm build && pnpm start

🤝 Contributing

Commit Guidelines

  • Use conventional commit messages (Conventional Commits)
  • Ensure all code quality checks pass before committing
  • Each PR should include a clear description and related issue links

Code Review

  • Keep PR scope focused; coordinate large refactors in advance
  • Commit messages and PR titles must be in English
  • UI-related work should include screenshots

📄 License

Licensed under the Apache License 2.0. See LICENSE for details.

🔗 Resources

📝 Development Notes

  • Follow the guidelines in AGENTS.md
  • Keep code simple, readable, and maintainable
  • Prefer using existing project tools and patterns
  • Consider internationalization support when adding new features
  • Ensure all changes pass type checking

About

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

694 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RustFS Console

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

✨ Features

Core Features

  • File Browser - Visual file/object management interface with upload, download, delete operations
  • Access Keys Management - Create and manage service account access keys
  • Policy Management - Configure and manage IAM policies for fine-grained access control
  • User Management - Create, edit, enable/disable, and delete user accounts
  • User Groups Management - Create and manage user groups to simplify permission assignment

Advanced Features

  • Import/Export - Import and export system configurations
  • Performance Monitoring - Real-time system status, server information, and performance metrics
  • Tiered Storage - Configure and manage tiered storage policies
  • Event Destinations - Configure event destinations for event notifications
  • SSE Settings - Server-side encryption configuration
  • License Management - View and manage system license information

🛠️ Tech Stack

Core Framework

UI & Styling

Data Management

Other Tools

📁 Project Structure

console/
├── app/ # Next.js App Router pages and layouts
│ ├── (auth)/ # Authentication pages
│ └── (dashboard)/ # Dashboard pages
├── components/ # React components
│ ├── ui/ # shadcn/ui base components
│ └── ... # Business components
├── hooks/ # Custom React Hooks
├── contexts/ # React Context providers
├── lib/ # Utility functions and library code
│ └── feedback/ # Global feedback APIs (toast, dialog)
├── types/ # TypeScript type definitions
├── i18n/ # Internationalization resource files
│ └── locales/ # Multi-language files (13 languages)
├── config/ # Configuration files
├── public/ # Static assets
└── tests/ # Test files (mirror source structure)

🚀 Quick Start

Prerequisites

  • Node.js >= 20
  • pnpm >= 10.19.0 (recommended to use the version specified in the project)
  • Docker - For running RustFS service

Start RustFS Service

The RustFS service must be started before development. Run it using Docker:

# Create data directory
mkdir rustfs-data
# Run RustFS service
docker run -p 9000:9000 -p 9001:9001 -v ./rustfs-data:/data rustfs/rustfs:1.0.0-alpha.82

The service will start on the following ports:

  • 9000 - API port
  • 9001 - Console port

Install Dependencies

pnpm install

Development Mode

Note: Before starting the development server, ensure the RustFS service is running (see "Start RustFS Service" section above).

Start the development server (with hot reload):

pnpm dev

Visit http://localhost:3000 to view the application.

Build for Production

pnpm build

Run Production Build

pnpm start

💻 Development Guide

Code Quality Checks

Before committing code, ensure all checks pass:

1. Lockfile Sync Check

pnpm install --frozen-lockfile

Ensure pnpm-lock.yaml is in sync with package.json. After modifying package.json, you must run pnpm install and commit the updated lockfile.

2. TypeScript Type Check

pnpm type-check
# or
pnpm build

3. ESLint Check

pnpm lint

4. Code Formatting Check

pnpm format:check

5. Auto-fix Formatting Issues

pnpm lint:fix
# or
pnpm format

Naming Conventions

  • Component files: Use kebab-case (e.g., bucket-selector.tsx)
  • Component names: Use PascalCase (e.g., <BucketSelector />)
  • Directory structure: Group by feature/domain, use plural forms (e.g., buckets/, users/)
  • File naming: Don't repeat directory name in filename (e.g., buckets/info.tsx instead of buckets/bucket-info.tsx)

UI Component Usage

  • Declarative UI: Use base components from @/components/ui/*
  • Imperative feedback: Use @/lib/feedback/message and @/lib/feedback/dialog for global toast and dialog prompts

Testing

When tests are configured:

  • Test files should be placed in tests/ directory, mirroring source structure
  • Use *.spec.ts or *.test.ts naming
  • Run tests: pnpm test:run

🌍 Internationalization

The project supports multiple languages. Currently supported languages:

  • العربية (AR-MA)
  • 中文(简体)(Chinese Simplified)
  • English (US)
  • Deutsch (DE)
  • Español (ES)
  • Français (FR)
  • Bahasa Indonesia (ID)
  • Italiano (IT)
  • 日本語 (JP)
  • 한국어 (KR)
  • Português (BR)
  • Русский (RU)
  • Türkçe (TR)

Language files are located in the i18n/locales/ directory.

📦 Build & Deployment

Environment Variables

Configure necessary environment variables according to your deployment environment (e.g., API endpoints, authentication configuration).

Build Configuration

The project uses Next.js default build configuration. Custom configuration can be done via next.config.ts.

Deployment

The project can be deployed to any platform that supports Next.js:

  • Vercel (Recommended) - Zero-config deployment
  • Docker - Using official Next.js Docker image
  • Self-hosted - Run pnpm build && pnpm start

🤝 Contributing

Commit Guidelines

  • Use conventional commit messages (Conventional Commits)
  • Ensure all code quality checks pass before committing
  • Each PR should include a clear description and related issue links

Code Review

  • Keep PR scope focused; coordinate large refactors in advance
  • Commit messages and PR titles must be in English
  • UI-related work should include screenshots

📄 License

Licensed under the Apache License 2.0. See LICENSE for details.

🔗 Resources

📝 Development Notes

  • Follow the guidelines in AGENTS.md
  • Keep code simple, readable, and maintainable
  • Prefer using existing project tools and patterns
  • Consider internationalization support when adding new features
  • Ensure all changes pass type checking

About

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Latest commit

History

694 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RustFS Console

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

✨ Features

Core Features

  • File Browser - Visual file/object management interface with upload, download, delete operations
  • Access Keys Management - Create and manage service account access keys
  • Policy Management - Configure and manage IAM policies for fine-grained access control
  • User Management - Create, edit, enable/disable, and delete user accounts
  • User Groups Management - Create and manage user groups to simplify permission assignment

Advanced Features

  • Import/Export - Import and export system configurations
  • Performance Monitoring - Real-time system status, server information, and performance metrics
  • Tiered Storage - Configure and manage tiered storage policies
  • Event Destinations - Configure event destinations for event notifications
  • SSE Settings - Server-side encryption configuration
  • License Management - View and manage system license information

🛠️ Tech Stack

Core Framework

UI & Styling

Data Management

Other Tools

📁 Project Structure

console/
├── app/ # Next.js App Router pages and layouts
│ ├── (auth)/ # Authentication pages
│ └── (dashboard)/ # Dashboard pages
├── components/ # React components
│ ├── ui/ # shadcn/ui base components
│ └── ... # Business components
├── hooks/ # Custom React Hooks
├── contexts/ # React Context providers
├── lib/ # Utility functions and library code
│ └── feedback/ # Global feedback APIs (toast, dialog)
├── types/ # TypeScript type definitions
├── i18n/ # Internationalization resource files
│ └── locales/ # Multi-language files (13 languages)
├── config/ # Configuration files
├── public/ # Static assets
└── tests/ # Test files (mirror source structure)

🚀 Quick Start

Prerequisites

  • Node.js >= 20
  • pnpm >= 10.19.0 (recommended to use the version specified in the project)
  • Docker - For running RustFS service

Start RustFS Service

The RustFS service must be started before development. Run it using Docker:

# Create data directory
mkdir rustfs-data
# Run RustFS service
docker run -p 9000:9000 -p 9001:9001 -v ./rustfs-data:/data rustfs/rustfs:1.0.0-alpha.82

The service will start on the following ports:

  • 9000 - API port
  • 9001 - Console port

Install Dependencies

pnpm install

Development Mode

Note: Before starting the development server, ensure the RustFS service is running (see "Start RustFS Service" section above).

Start the development server (with hot reload):

pnpm dev

Visit http://localhost:3000 to view the application.

Build for Production

pnpm build

Run Production Build

pnpm start

💻 Development Guide

Code Quality Checks

Before committing code, ensure all checks pass:

1. Lockfile Sync Check

pnpm install --frozen-lockfile

Ensure pnpm-lock.yaml is in sync with package.json. After modifying package.json, you must run pnpm install and commit the updated lockfile.

2. TypeScript Type Check

pnpm type-check
# or
pnpm build

3. ESLint Check

pnpm lint

4. Code Formatting Check

pnpm format:check

5. Auto-fix Formatting Issues

pnpm lint:fix
# or
pnpm format

Naming Conventions

  • Component files: Use kebab-case (e.g., bucket-selector.tsx)
  • Component names: Use PascalCase (e.g., <BucketSelector />)
  • Directory structure: Group by feature/domain, use plural forms (e.g., buckets/, users/)
  • File naming: Don't repeat directory name in filename (e.g., buckets/info.tsx instead of buckets/bucket-info.tsx)

UI Component Usage

  • Declarative UI: Use base components from @/components/ui/*
  • Imperative feedback: Use @/lib/feedback/message and @/lib/feedback/dialog for global toast and dialog prompts

Testing

When tests are configured:

  • Test files should be placed in tests/ directory, mirroring source structure
  • Use *.spec.ts or *.test.ts naming
  • Run tests: pnpm test:run

🌍 Internationalization

The project supports multiple languages. Currently supported languages:

  • العربية (AR-MA)
  • 中文(简体)(Chinese Simplified)
  • English (US)
  • Deutsch (DE)
  • Español (ES)
  • Français (FR)
  • Bahasa Indonesia (ID)
  • Italiano (IT)
  • 日本語 (JP)
  • 한국어 (KR)
  • Português (BR)
  • Русский (RU)
  • Türkçe (TR)

Language files are located in the i18n/locales/ directory.

📦 Build & Deployment

Environment Variables

Configure necessary environment variables according to your deployment environment (e.g., API endpoints, authentication configuration).

Build Configuration

The project uses Next.js default build configuration. Custom configuration can be done via next.config.ts.

Deployment

The project can be deployed to any platform that supports Next.js:

  • Vercel (Recommended) - Zero-config deployment
  • Docker - Using official Next.js Docker image
  • Self-hosted - Run pnpm build && pnpm start

🤝 Contributing

Commit Guidelines

  • Use conventional commit messages (Conventional Commits)
  • Ensure all code quality checks pass before committing
  • Each PR should include a clear description and related issue links

Code Review

  • Keep PR scope focused; coordinate large refactors in advance
  • Commit messages and PR titles must be in English
  • UI-related work should include screenshots

📄 License

Licensed under the Apache License 2.0. See LICENSE for details.

🔗 Resources

📝 Development Notes

  • Follow the guidelines in AGENTS.md
  • Keep code simple, readable, and maintainable
  • Prefer using existing project tools and patterns
  • Consider internationalization support when adding new features
  • Ensure all changes pass type checking

About

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

694 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RustFS Console

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

✨ Features

Core Features

  • File Browser - Visual file/object management interface with upload, download, delete operations
  • Access Keys Management - Create and manage service account access keys
  • Policy Management - Configure and manage IAM policies for fine-grained access control
  • User Management - Create, edit, enable/disable, and delete user accounts
  • User Groups Management - Create and manage user groups to simplify permission assignment

Advanced Features

  • Import/Export - Import and export system configurations
  • Performance Monitoring - Real-time system status, server information, and performance metrics
  • Tiered Storage - Configure and manage tiered storage policies
  • Event Destinations - Configure event destinations for event notifications
  • SSE Settings - Server-side encryption configuration
  • License Management - View and manage system license information

🛠️ Tech Stack

Core Framework

UI & Styling

Data Management

Other Tools

📁 Project Structure

console/
├── app/ # Next.js App Router pages and layouts
│ ├── (auth)/ # Authentication pages
│ └── (dashboard)/ # Dashboard pages
├── components/ # React components
│ ├── ui/ # shadcn/ui base components
│ └── ... # Business components
├── hooks/ # Custom React Hooks
├── contexts/ # React Context providers
├── lib/ # Utility functions and library code
│ └── feedback/ # Global feedback APIs (toast, dialog)
├── types/ # TypeScript type definitions
├── i18n/ # Internationalization resource files
│ └── locales/ # Multi-language files (13 languages)
├── config/ # Configuration files
├── public/ # Static assets
└── tests/ # Test files (mirror source structure)

🚀 Quick Start

Prerequisites

  • Node.js >= 20
  • pnpm >= 10.19.0 (recommended to use the version specified in the project)
  • Docker - For running RustFS service

Start RustFS Service

The RustFS service must be started before development. Run it using Docker:

# Create data directory
mkdir rustfs-data
# Run RustFS service
docker run -p 9000:9000 -p 9001:9001 -v ./rustfs-data:/data rustfs/rustfs:1.0.0-alpha.82

The service will start on the following ports:

  • 9000 - API port
  • 9001 - Console port

Install Dependencies

pnpm install

Development Mode

Note: Before starting the development server, ensure the RustFS service is running (see "Start RustFS Service" section above).

Start the development server (with hot reload):

pnpm dev

Visit http://localhost:3000 to view the application.

Build for Production

pnpm build

Run Production Build

pnpm start

💻 Development Guide

Code Quality Checks

Before committing code, ensure all checks pass:

1. Lockfile Sync Check

pnpm install --frozen-lockfile

Ensure pnpm-lock.yaml is in sync with package.json. After modifying package.json, you must run pnpm install and commit the updated lockfile.

2. TypeScript Type Check

pnpm type-check
# or
pnpm build

3. ESLint Check

pnpm lint

4. Code Formatting Check

pnpm format:check

5. Auto-fix Formatting Issues

pnpm lint:fix
# or
pnpm format

Naming Conventions

  • Component files: Use kebab-case (e.g., bucket-selector.tsx)
  • Component names: Use PascalCase (e.g., <BucketSelector />)
  • Directory structure: Group by feature/domain, use plural forms (e.g., buckets/, users/)
  • File naming: Don't repeat directory name in filename (e.g., buckets/info.tsx instead of buckets/bucket-info.tsx)

UI Component Usage

  • Declarative UI: Use base components from @/components/ui/*
  • Imperative feedback: Use @/lib/feedback/message and @/lib/feedback/dialog for global toast and dialog prompts

Testing

When tests are configured:

  • Test files should be placed in tests/ directory, mirroring source structure
  • Use *.spec.ts or *.test.ts naming
  • Run tests: pnpm test:run

🌍 Internationalization

The project supports multiple languages. Currently supported languages:

  • العربية (AR-MA)
  • 中文(简体)(Chinese Simplified)
  • English (US)
  • Deutsch (DE)
  • Español (ES)
  • Français (FR)
  • Bahasa Indonesia (ID)
  • Italiano (IT)
  • 日本語 (JP)
  • 한국어 (KR)
  • Português (BR)
  • Русский (RU)
  • Türkçe (TR)

Language files are located in the i18n/locales/ directory.

📦 Build & Deployment

Environment Variables

Configure necessary environment variables according to your deployment environment (e.g., API endpoints, authentication configuration).

Build Configuration

The project uses Next.js default build configuration. Custom configuration can be done via next.config.ts.

Deployment

The project can be deployed to any platform that supports Next.js:

  • Vercel (Recommended) - Zero-config deployment
  • Docker - Using official Next.js Docker image
  • Self-hosted - Run pnpm build && pnpm start

🤝 Contributing

Commit Guidelines

  • Use conventional commit messages (Conventional Commits)
  • Ensure all code quality checks pass before committing
  • Each PR should include a clear description and related issue links

Code Review

  • Keep PR scope focused; coordinate large refactors in advance
  • Commit messages and PR titles must be in English
  • UI-related work should include screenshots

📄 License

Licensed under the Apache License 2.0. See LICENSE for details.

🔗 Resources

📝 Development Notes

  • Follow the guidelines in AGENTS.md
  • Keep code simple, readable, and maintainable
  • Prefer using existing project tools and patterns
  • Consider internationalization support when adding new features
  • Ensure all changes pass type checking

About

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Latest commit

History

694 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RustFS Console

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

✨ Features

Core Features

  • File Browser - Visual file/object management interface with upload, download, delete operations
  • Access Keys Management - Create and manage service account access keys
  • Policy Management - Configure and manage IAM policies for fine-grained access control
  • User Management - Create, edit, enable/disable, and delete user accounts
  • User Groups Management - Create and manage user groups to simplify permission assignment

Advanced Features

  • Import/Export - Import and export system configurations
  • Performance Monitoring - Real-time system status, server information, and performance metrics
  • Tiered Storage - Configure and manage tiered storage policies
  • Event Destinations - Configure event destinations for event notifications
  • SSE Settings - Server-side encryption configuration
  • License Management - View and manage system license information

🛠️ Tech Stack

Core Framework

UI & Styling

Data Management

Other Tools

📁 Project Structure

console/
├── app/ # Next.js App Router pages and layouts
│ ├── (auth)/ # Authentication pages
│ └── (dashboard)/ # Dashboard pages
├── components/ # React components
│ ├── ui/ # shadcn/ui base components
│ └── ... # Business components
├── hooks/ # Custom React Hooks
├── contexts/ # React Context providers
├── lib/ # Utility functions and library code
│ └── feedback/ # Global feedback APIs (toast, dialog)
├── types/ # TypeScript type definitions
├── i18n/ # Internationalization resource files
│ └── locales/ # Multi-language files (13 languages)
├── config/ # Configuration files
├── public/ # Static assets
└── tests/ # Test files (mirror source structure)

🚀 Quick Start

Prerequisites

  • Node.js >= 20
  • pnpm >= 10.19.0 (recommended to use the version specified in the project)
  • Docker - For running RustFS service

Start RustFS Service

The RustFS service must be started before development. Run it using Docker:

# Create data directory
mkdir rustfs-data
# Run RustFS service
docker run -p 9000:9000 -p 9001:9001 -v ./rustfs-data:/data rustfs/rustfs:1.0.0-alpha.82

The service will start on the following ports:

  • 9000 - API port
  • 9001 - Console port

Install Dependencies

pnpm install

Development Mode

Note: Before starting the development server, ensure the RustFS service is running (see "Start RustFS Service" section above).

Start the development server (with hot reload):

pnpm dev

Visit http://localhost:3000 to view the application.

Build for Production

pnpm build

Run Production Build

pnpm start

💻 Development Guide

Code Quality Checks

Before committing code, ensure all checks pass:

1. Lockfile Sync Check

pnpm install --frozen-lockfile

Ensure pnpm-lock.yaml is in sync with package.json. After modifying package.json, you must run pnpm install and commit the updated lockfile.

2. TypeScript Type Check

pnpm type-check
# or
pnpm build

3. ESLint Check

pnpm lint

4. Code Formatting Check

pnpm format:check

5. Auto-fix Formatting Issues

pnpm lint:fix
# or
pnpm format

Naming Conventions

  • Component files: Use kebab-case (e.g., bucket-selector.tsx)
  • Component names: Use PascalCase (e.g., <BucketSelector />)
  • Directory structure: Group by feature/domain, use plural forms (e.g., buckets/, users/)
  • File naming: Don't repeat directory name in filename (e.g., buckets/info.tsx instead of buckets/bucket-info.tsx)

UI Component Usage

  • Declarative UI: Use base components from @/components/ui/*
  • Imperative feedback: Use @/lib/feedback/message and @/lib/feedback/dialog for global toast and dialog prompts

Testing

When tests are configured:

  • Test files should be placed in tests/ directory, mirroring source structure
  • Use *.spec.ts or *.test.ts naming
  • Run tests: pnpm test:run

🌍 Internationalization

The project supports multiple languages. Currently supported languages:

  • العربية (AR-MA)
  • 中文(简体)(Chinese Simplified)
  • English (US)
  • Deutsch (DE)
  • Español (ES)
  • Français (FR)
  • Bahasa Indonesia (ID)
  • Italiano (IT)
  • 日本語 (JP)
  • 한국어 (KR)
  • Português (BR)
  • Русский (RU)
  • Türkçe (TR)

Language files are located in the i18n/locales/ directory.

📦 Build & Deployment

Environment Variables

Configure necessary environment variables according to your deployment environment (e.g., API endpoints, authentication configuration).

Build Configuration

The project uses Next.js default build configuration. Custom configuration can be done via next.config.ts.

Deployment

The project can be deployed to any platform that supports Next.js:

  • Vercel (Recommended) - Zero-config deployment
  • Docker - Using official Next.js Docker image
  • Self-hosted - Run pnpm build && pnpm start

🤝 Contributing

Commit Guidelines

  • Use conventional commit messages (Conventional Commits)
  • Ensure all code quality checks pass before committing
  • Each PR should include a clear description and related issue links

Code Review

  • Keep PR scope focused; coordinate large refactors in advance
  • Commit messages and PR titles must be in English
  • UI-related work should include screenshots

📄 License

Licensed under the Apache License 2.0. See LICENSE for details.

🔗 Resources

📝 Development Notes

  • Follow the guidelines in AGENTS.md
  • Keep code simple, readable, and maintainable
  • Prefer using existing project tools and patterns
  • Consider internationalization support when adding new features
  • Ensure all changes pass type checking

About

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Latest commit

History

694 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

RustFS Console

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

✨ Features

Core Features

  • File Browser - Visual file/object management interface with upload, download, delete operations
  • Access Keys Management - Create and manage service account access keys
  • Policy Management - Configure and manage IAM policies for fine-grained access control
  • User Management - Create, edit, enable/disable, and delete user accounts
  • User Groups Management - Create and manage user groups to simplify permission assignment

Advanced Features

  • Import/Export - Import and export system configurations
  • Performance Monitoring - Real-time system status, server information, and performance metrics
  • Tiered Storage - Configure and manage tiered storage policies
  • Event Destinations - Configure event destinations for event notifications
  • SSE Settings - Server-side encryption configuration
  • License Management - View and manage system license information

🛠️ Tech Stack

Core Framework

UI & Styling

Data Management

Other Tools

📁 Project Structure

console/
├── app/ # Next.js App Router pages and layouts
│ ├── (auth)/ # Authentication pages
│ └── (dashboard)/ # Dashboard pages
├── components/ # React components
│ ├── ui/ # shadcn/ui base components
│ └── ... # Business components
├── hooks/ # Custom React Hooks
├── contexts/ # React Context providers
├── lib/ # Utility functions and library code
│ └── feedback/ # Global feedback APIs (toast, dialog)
├── types/ # TypeScript type definitions
├── i18n/ # Internationalization resource files
│ └── locales/ # Multi-language files (13 languages)
├── config/ # Configuration files
├── public/ # Static assets
└── tests/ # Test files (mirror source structure)

🚀 Quick Start

Prerequisites

  • Node.js >= 20
  • pnpm >= 10.19.0 (recommended to use the version specified in the project)
  • Docker - For running RustFS service

Start RustFS Service

The RustFS service must be started before development. Run it using Docker:

# Create data directory
mkdir rustfs-data
# Run RustFS service
docker run -p 9000:9000 -p 9001:9001 -v ./rustfs-data:/data rustfs/rustfs:1.0.0-alpha.82

The service will start on the following ports:

  • 9000 - API port
  • 9001 - Console port

Install Dependencies

pnpm install

Development Mode

Note: Before starting the development server, ensure the RustFS service is running (see "Start RustFS Service" section above).

Start the development server (with hot reload):

pnpm dev

Visit http://localhost:3000 to view the application.

Build for Production

pnpm build

Run Production Build

pnpm start

💻 Development Guide

Code Quality Checks

Before committing code, ensure all checks pass:

1. Lockfile Sync Check

pnpm install --frozen-lockfile

Ensure pnpm-lock.yaml is in sync with package.json. After modifying package.json, you must run pnpm install and commit the updated lockfile.

2. TypeScript Type Check

pnpm type-check
# or
pnpm build

3. ESLint Check

pnpm lint

4. Code Formatting Check

pnpm format:check

5. Auto-fix Formatting Issues

pnpm lint:fix
# or
pnpm format

Naming Conventions

  • Component files: Use kebab-case (e.g., bucket-selector.tsx)
  • Component names: Use PascalCase (e.g., <BucketSelector />)
  • Directory structure: Group by feature/domain, use plural forms (e.g., buckets/, users/)
  • File naming: Don't repeat directory name in filename (e.g., buckets/info.tsx instead of buckets/bucket-info.tsx)

UI Component Usage

  • Declarative UI: Use base components from @/components/ui/*
  • Imperative feedback: Use @/lib/feedback/message and @/lib/feedback/dialog for global toast and dialog prompts

Testing

When tests are configured:

  • Test files should be placed in tests/ directory, mirroring source structure
  • Use *.spec.ts or *.test.ts naming
  • Run tests: pnpm test:run

🌍 Internationalization

The project supports multiple languages. Currently supported languages:

  • العربية (AR-MA)
  • 中文(简体)(Chinese Simplified)
  • English (US)
  • Deutsch (DE)
  • Español (ES)
  • Français (FR)
  • Bahasa Indonesia (ID)
  • Italiano (IT)
  • 日本語 (JP)
  • 한국어 (KR)
  • Português (BR)
  • Русский (RU)
  • Türkçe (TR)

Language files are located in the i18n/locales/ directory.

📦 Build & Deployment

Environment Variables

Configure necessary environment variables according to your deployment environment (e.g., API endpoints, authentication configuration).

Build Configuration

The project uses Next.js default build configuration. Custom configuration can be done via next.config.ts.

Deployment

The project can be deployed to any platform that supports Next.js:

  • Vercel (Recommended) - Zero-config deployment
  • Docker - Using official Next.js Docker image
  • Self-hosted - Run pnpm build && pnpm start

🤝 Contributing

Commit Guidelines

  • Use conventional commit messages (Conventional Commits)
  • Ensure all code quality checks pass before committing
  • Each PR should include a clear description and related issue links

Code Review

  • Keep PR scope focused; coordinate large refactors in advance
  • Commit messages and PR titles must be in English
  • UI-related work should include screenshots

📄 License

Licensed under the Apache License 2.0. See LICENSE for details.

🔗 Resources

📝 Development Notes

  • Follow the guidelines in AGENTS.md
  • Keep code simple, readable, and maintainable
  • Prefer using existing project tools and patterns
  • Consider internationalization support when adding new features
  • Ensure all changes pass type checking

About

A modern, responsive web management console for RustFS distributed file system, built with Next.js 16 (App Router) + React 19 + TypeScript + Tailwind CSS v4 + shadcn/ui.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages