Skip to content

Commit f293052

Browse files
committed
Initial release v1.0.0
0 parents  commit f293052

24 files changed

Lines changed: 13018 additions & 0 deletions

.github/workflows/release.yml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
name: Build & Release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*'
7+
8+
jobs:
9+
release:
10+
runs-on: ${{ matrix.os }}
11+
12+
strategy:
13+
matrix:
14+
os: [macos-latest, ubuntu-latest, windows-latest]
15+
16+
steps:
17+
- name: Check out Git repository
18+
uses: actions/checkout@v4
19+
20+
- name: Install Node.js
21+
uses: actions/setup-node@v4
22+
with:
23+
node-version: 20
24+
cache: 'npm'
25+
26+
- name: Install Dependencies
27+
run: npm install
28+
29+
- name: Build & Release
30+
env:
31+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32+
run: |
33+
npm run build
34+
npx electron-builder --config.publish.provider=github --publish always

.gitignore

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
# Logs
2+
logs
3+
*.log
4+
npm-debug.log*
5+
yarn-debug.log*
6+
yarn-error.log*
7+
lerna-debug.log*
8+
.pnpm-debug.log*
9+
10+
# Diagnostic reports (https://nodejs.org/api/report.html)
11+
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
12+
13+
# Runtime data
14+
pids
15+
*.pid
16+
*.seed
17+
*.pid.lock
18+
19+
# Directory for instrumented libs generated by jscoverage/JSCover
20+
lib-cov
21+
22+
# Coverage directory used by tools like istanbul
23+
coverage
24+
*.lcov
25+
26+
# nyc test coverage
27+
.nyc_output
28+
29+
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
30+
.grunt
31+
32+
# Bower dependency directory (https://bower.io/)
33+
bower_components
34+
35+
# node-waf configuration
36+
.lock-wscript
37+
38+
# Compiled binary addons (https://nodejs.org/api/addons.html)
39+
build/Release
40+
41+
# Dependency directories
42+
node_modules/
43+
jspm_packages/
44+
45+
# TypeScript v1 declaration files
46+
typings/
47+
48+
# TypeScript cache
49+
*.tsbuildinfo
50+
51+
# Optional npm cache directory
52+
.npm
53+
54+
# Optional eslint cache
55+
.eslintcache
56+
57+
# Microbundle cache
58+
.rpt2_cache/
59+
.rts2_cache_cjs/
60+
.rts2_cache_es/
61+
.rts2_cache_umd/
62+
63+
# Optional REPL history
64+
.node_repl_history
65+
66+
# Output of 'npm pack'
67+
*.tgz
68+
69+
# Yarn Integrity file
70+
.yarn-integrity
71+
72+
# dotenv environment variables file
73+
.env
74+
.env.test
75+
.env.production
76+
77+
# Parcel-bundler cache (https://parceljs.org/)
78+
.cache
79+
.parcel-cache
80+
81+
# Next.js build output
82+
.next
83+
out
84+
85+
# Nuxt.js build / generate output
86+
.nuxt
87+
88+
# Gatsby files
89+
.cache/
90+
# Comment in the public line in if your project uses Gatsby and not Next.js
91+
# public
92+
93+
# vuepress build output
94+
.vuepress/dist
95+
96+
# Serverless directories
97+
.serverless/
98+
99+
# FuseBox cache
100+
.fusebox/
101+
102+
# DynamoDB Local files
103+
.dynamodb/
104+
105+
# TernJS port file
106+
.tern-port
107+
108+
# Stores VSCode versions used for testing VSCode extensions
109+
.vscode-test
110+
111+
# yarn v2
112+
.yarn/cache
113+
.yarn/unplugged
114+
.yarn/build-state.yml
115+
.yarn/install-state.gz
116+
.pnp.*
117+
118+
# macOS
119+
.DS_Store
120+
121+
# Electron-builder
122+
dist/
123+
release/
124+
125+
# IDEs
126+
.idea/
127+
.vscode/
128+
*.swp
129+
*.swo
130+
131+
# Project specific
132+
build_log.txt

README.md

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
# Cloudflare R2 Visual Editor
2+
3+
A modern, desktop-based file manager for [Cloudflare R2 Storage](https://www.cloudflare.com/developer-platform/r2/), built with Electron and React.
4+
5+
![License](https://img.shields.io/badge/license-MIT-blue.svg)
6+
![Version](https://img.shields.io/badge/version-1.0.0-green.svg)
7+
![Electron](https://img.shields.io/badge/electron-28.2.0-blueviolet.svg)
8+
![React](https://img.shields.io/badge/react-18.2.0-61dafb.svg)
9+
10+
## 🌟 Features
11+
12+
- **⚡ High Performance**: Built with Vite and Electron for a snappy experience.
13+
- **🎨 Modern UI**: Beautiful glassmorphism design with Light/Dark mode support.
14+
- **📂 File Management**:
15+
- Upload, Download, and Delete files.
16+
- Virtual Folder support (navigate logical paths like `assets/images/`).
17+
- Sortable file lists (Name, Size, Last Modified).
18+
- Search functionality.
19+
- **🌍 Localization**: Full support for **English** and **Traditional Chinese (繁體中文)**.
20+
- **🔐 Security**:
21+
- Secure credential management (Access Key ID / Secret Key).
22+
- Automatic validation to prevent using API Tokens incorrectly.
23+
- **🚀 Cloudflare Integration**: Direct connection to R2 buckets without needing public access enabled.
24+
25+
## 🛠️ Technology Stack
26+
27+
- **Framework**: [Electron](https://www.electronjs.org/)
28+
- **Frontend**: [React](https://reactjs.org/) + [Vite](https://vitejs.dev/)
29+
- **Styling**: [TailwindCSS](https://tailwindcss.com/) + [shadcn/ui](https://ui.shadcn.com/)
30+
- **Icons**: [Lucide React](https://lucide.dev/)
31+
- **Storage**: [AWS SDK for JavaScript v3](https://aws.amazon.com/sdk-for-javascript/) (S3 Client)
32+
33+
## 📦 Installation & Build
34+
35+
### Prerequisites
36+
37+
- Node.js (v16 or higher)
38+
- npm or yarn
39+
40+
### Development
41+
42+
1. Clone the repository:
43+
```bash
44+
git clone https://github.com/yourusername/Cloudflare-R2-FileManager.git
45+
cd Cloudflare-R2-FileManager
46+
```
47+
48+
2. Install dependencies:
49+
```bash
50+
npm install
51+
```
52+
53+
3. Run in development mode:
54+
```bash
55+
npm run dev
56+
```
57+
58+
### Build for Production
59+
60+
To create a distributable installer (dmg, exe, AppImage):
61+
62+
```bash
63+
# Build for all platforms
64+
npm run build
65+
66+
# Build for specific platform
67+
npm run build:win # Windows
68+
npm run build:mac # macOS
69+
npm run build:linux # Linux
70+
```
71+
72+
## 📝 Usage
73+
74+
1. **Login**: Enter your Cloudflare R2 credentials.
75+
- **Endpoint**: Your R2 S3 API Endpoint (e.g., `https://<account_id>.r2.cloudflarestorage.com`)
76+
- **Access Key ID**: Generated from Cloudflare Dashboard (R2 > Manage API Tokens).
77+
- **Secret Access Key**: Your secret key.
78+
2. **Browse**: Select a bucket to explore.
79+
3. **Manage**: Drag & drop to upload, or use the interface to manage files.
80+
4. **Customize**: Go to Settings to toggle Dark Mode or switch between English/Traditional Chinese.
81+
82+
## 📄 License
83+
84+
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
85+
86+
## 👥 Credits
87+
88+
- **Author**: Cheerawab
89+
- **Icon Design**: Gemini Nano Banana Pro

build/icon.png

303 KB
Loading

electron.vite.config.mjs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { resolve } from 'path'
2+
import { defineConfig, externalizeDepsPlugin } from 'electron-vite'
3+
import react from '@vitejs/plugin-react'
4+
5+
export default defineConfig({
6+
main: {
7+
plugins: [externalizeDepsPlugin()]
8+
},
9+
preload: {
10+
plugins: [externalizeDepsPlugin()]
11+
},
12+
renderer: {
13+
resolve: {
14+
alias: {
15+
'@renderer': resolve('src/renderer/src')
16+
}
17+
},
18+
plugins: [react()]
19+
}
20+
})

0 commit comments

Comments
 (0)