Spaces:
Running
Running
feat(download): add Linux beta support
Browse files- Change Linux from "coming soon" to "beta" status
- Enable download button for Linux users (.deb package)
- Add beta warning with links to GitHub issues and Discord
- Update InstallModal to allow Linux users to install apps
- Update GettingStarted page to reflect Linux beta availability
- src/components/InstallModal.jsx +55 -78
- src/pages/Download.jsx +15 -12
- src/pages/GettingStarted.jsx +3 -3
src/components/InstallModal.jsx
CHANGED
|
@@ -16,7 +16,6 @@ import VerifiedIcon from '@mui/icons-material/Verified';
|
|
| 16 |
import DownloadIcon from '@mui/icons-material/Download';
|
| 17 |
import OpenInNewIcon from '@mui/icons-material/OpenInNew';
|
| 18 |
import ComputerIcon from '@mui/icons-material/Computer';
|
| 19 |
-
import BlockIcon from '@mui/icons-material/Block';
|
| 20 |
|
| 21 |
function InstallModal({ open, onClose, app }) {
|
| 22 |
// Detect Linux users
|
|
@@ -196,59 +195,8 @@ function InstallModal({ open, onClose, app }) {
|
|
| 196 |
|
| 197 |
{/* Desktop App Requirement Block */}
|
| 198 |
<Box sx={{ p: 3 }}>
|
| 199 |
-
{
|
| 200 |
-
|
| 201 |
-
<Box
|
| 202 |
-
sx={{
|
| 203 |
-
display: 'flex',
|
| 204 |
-
alignItems: 'flex-start',
|
| 205 |
-
gap: 2,
|
| 206 |
-
p: 2.5,
|
| 207 |
-
borderRadius: '14px',
|
| 208 |
-
bgcolor: 'rgba(0, 0, 0, 0.03)',
|
| 209 |
-
border: '1px solid rgba(0, 0, 0, 0.08)',
|
| 210 |
-
}}
|
| 211 |
-
>
|
| 212 |
-
<Box
|
| 213 |
-
sx={{
|
| 214 |
-
width: 44,
|
| 215 |
-
height: 44,
|
| 216 |
-
borderRadius: '12px',
|
| 217 |
-
bgcolor: 'rgba(0, 0, 0, 0.05)',
|
| 218 |
-
display: 'flex',
|
| 219 |
-
alignItems: 'center',
|
| 220 |
-
justifyContent: 'center',
|
| 221 |
-
flexShrink: 0,
|
| 222 |
-
}}
|
| 223 |
-
>
|
| 224 |
-
<BlockIcon sx={{ fontSize: 24, color: '#999' }} />
|
| 225 |
-
</Box>
|
| 226 |
-
<Box sx={{ flex: 1 }}>
|
| 227 |
-
<Typography
|
| 228 |
-
sx={{
|
| 229 |
-
fontSize: 14,
|
| 230 |
-
fontWeight: 700,
|
| 231 |
-
color: '#1a1a1a',
|
| 232 |
-
mb: 0.75,
|
| 233 |
-
}}
|
| 234 |
-
>
|
| 235 |
-
Linux not supported yet
|
| 236 |
-
</Typography>
|
| 237 |
-
<Typography
|
| 238 |
-
sx={{
|
| 239 |
-
fontSize: 13,
|
| 240 |
-
color: '#666',
|
| 241 |
-
lineHeight: 1.6,
|
| 242 |
-
}}
|
| 243 |
-
>
|
| 244 |
-
The desktop app is currently available for <strong>macOS</strong> and <strong>Windows</strong> only.
|
| 245 |
-
Linux support is coming soon!
|
| 246 |
-
</Typography>
|
| 247 |
-
</Box>
|
| 248 |
-
</Box>
|
| 249 |
-
) : (
|
| 250 |
-
// macOS/Windows: Normal install flow
|
| 251 |
-
<Box
|
| 252 |
sx={{
|
| 253 |
display: 'flex',
|
| 254 |
alignItems: 'flex-start',
|
|
@@ -319,6 +267,37 @@ function InstallModal({ open, onClose, app }) {
|
|
| 319 |
</Link>
|
| 320 |
</Box>
|
| 321 |
</Box>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 322 |
)}
|
| 323 |
</Box>
|
| 324 |
|
|
@@ -331,7 +310,7 @@ function InstallModal({ open, onClose, app }) {
|
|
| 331 |
rel="noopener noreferrer"
|
| 332 |
variant="outlined"
|
| 333 |
sx={{
|
| 334 |
-
flex:
|
| 335 |
py: 1.5,
|
| 336 |
borderRadius: '12px',
|
| 337 |
borderColor: '#ddd',
|
|
@@ -348,29 +327,27 @@ function InstallModal({ open, onClose, app }) {
|
|
| 348 |
<OpenInNewIcon sx={{ fontSize: 16 }} />
|
| 349 |
</Button>
|
| 350 |
|
| 351 |
-
|
| 352 |
-
|
| 353 |
-
|
| 354 |
-
|
| 355 |
-
|
| 356 |
-
|
| 357 |
-
|
| 358 |
-
|
| 359 |
-
|
| 360 |
-
|
| 361 |
-
|
| 362 |
-
|
| 363 |
-
|
| 364 |
-
|
| 365 |
-
'
|
| 366 |
-
|
| 367 |
-
|
| 368 |
-
|
| 369 |
-
|
| 370 |
-
|
| 371 |
-
|
| 372 |
-
</Button>
|
| 373 |
-
)}
|
| 374 |
</Box>
|
| 375 |
</DialogContent>
|
| 376 |
</Dialog>
|
|
|
|
| 16 |
import DownloadIcon from '@mui/icons-material/Download';
|
| 17 |
import OpenInNewIcon from '@mui/icons-material/OpenInNew';
|
| 18 |
import ComputerIcon from '@mui/icons-material/Computer';
|
|
|
|
| 19 |
|
| 20 |
function InstallModal({ open, onClose, app }) {
|
| 21 |
// Detect Linux users
|
|
|
|
| 195 |
|
| 196 |
{/* Desktop App Requirement Block */}
|
| 197 |
<Box sx={{ p: 3 }}>
|
| 198 |
+
{/* All platforms: Normal install flow */}
|
| 199 |
+
<Box
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 200 |
sx={{
|
| 201 |
display: 'flex',
|
| 202 |
alignItems: 'flex-start',
|
|
|
|
| 267 |
</Link>
|
| 268 |
</Box>
|
| 269 |
</Box>
|
| 270 |
+
|
| 271 |
+
{/* Linux Beta Notice */}
|
| 272 |
+
{isLinux && (
|
| 273 |
+
<Box
|
| 274 |
+
sx={{
|
| 275 |
+
mt: 2,
|
| 276 |
+
p: 1.5,
|
| 277 |
+
borderRadius: '10px',
|
| 278 |
+
bgcolor: 'rgba(59, 130, 246, 0.08)',
|
| 279 |
+
border: '1px solid rgba(59, 130, 246, 0.2)',
|
| 280 |
+
}}
|
| 281 |
+
>
|
| 282 |
+
<Typography
|
| 283 |
+
sx={{
|
| 284 |
+
fontSize: 12,
|
| 285 |
+
color: '#3b82f6',
|
| 286 |
+
fontWeight: 500,
|
| 287 |
+
textAlign: 'center',
|
| 288 |
+
'& a': {
|
| 289 |
+
color: '#3b82f6',
|
| 290 |
+
textDecoration: 'underline',
|
| 291 |
+
fontWeight: 600,
|
| 292 |
+
},
|
| 293 |
+
}}
|
| 294 |
+
>
|
| 295 |
+
Linux support is currently in Beta — please report any issues on{' '}
|
| 296 |
+
<a href="https://github.com/pollen-robotics/reachy-mini-desktop-app/issues" target="_blank" rel="noopener noreferrer">GitHub</a>
|
| 297 |
+
{' '}or{' '}
|
| 298 |
+
<a href="https://discord.gg/HDrGY9eJHt" target="_blank" rel="noopener noreferrer">Discord</a>.
|
| 299 |
+
</Typography>
|
| 300 |
+
</Box>
|
| 301 |
)}
|
| 302 |
</Box>
|
| 303 |
|
|
|
|
| 310 |
rel="noopener noreferrer"
|
| 311 |
variant="outlined"
|
| 312 |
sx={{
|
| 313 |
+
flex: 1,
|
| 314 |
py: 1.5,
|
| 315 |
borderRadius: '12px',
|
| 316 |
borderColor: '#ddd',
|
|
|
|
| 327 |
<OpenInNewIcon sx={{ fontSize: 16 }} />
|
| 328 |
</Button>
|
| 329 |
|
| 330 |
+
<Button
|
| 331 |
+
variant="contained"
|
| 332 |
+
onClick={handleInstall}
|
| 333 |
+
startIcon={<DownloadIcon sx={{ fontSize: 20 }} />}
|
| 334 |
+
sx={{
|
| 335 |
+
flex: 1.5,
|
| 336 |
+
py: 1.5,
|
| 337 |
+
borderRadius: '12px',
|
| 338 |
+
bgcolor: '#FF9500',
|
| 339 |
+
fontWeight: 600,
|
| 340 |
+
fontSize: 14,
|
| 341 |
+
textTransform: 'none',
|
| 342 |
+
boxShadow: 'none',
|
| 343 |
+
'&:hover': {
|
| 344 |
+
bgcolor: '#e68600',
|
| 345 |
+
boxShadow: '0 4px 12px rgba(255, 149, 0, 0.35)',
|
| 346 |
+
},
|
| 347 |
+
}}
|
| 348 |
+
>
|
| 349 |
+
Install
|
| 350 |
+
</Button>
|
|
|
|
|
|
|
| 351 |
</Box>
|
| 352 |
</DialogContent>
|
| 353 |
</Dialog>
|
src/pages/Download.jsx
CHANGED
|
@@ -219,8 +219,8 @@ function getDownloadUrlForPlatform(release, platform) {
|
|
| 219 |
// Platform Card component
|
| 220 |
function PlatformCard({ platformKey, url, isActive, onClick }) {
|
| 221 |
const platform = PLATFORMS[platformKey];
|
| 222 |
-
const isComingSoon = platformKey.includes('darwin-x86_64')
|
| 223 |
-
const isBeta = platformKey.includes('windows');
|
| 224 |
|
| 225 |
return (
|
| 226 |
<Card
|
|
@@ -556,8 +556,8 @@ export default function Download() {
|
|
| 556 |
</Typography>
|
| 557 |
</Stack>
|
| 558 |
|
| 559 |
-
{/* Primary download button - different for Windows/macOS Apple Silicon vs macOS Intel
|
| 560 |
-
{detectedPlatform?.startsWith('windows') || detectedPlatform === 'darwin-aarch64' ? (
|
| 561 |
<>
|
| 562 |
<Button
|
| 563 |
variant="contained"
|
|
@@ -593,8 +593,8 @@ export default function Download() {
|
|
| 593 |
{currentPlatform?.subtitle} • {currentPlatform?.format?.replace('.', '').toUpperCase()} package
|
| 594 |
</Typography>
|
| 595 |
|
| 596 |
-
{/*
|
| 597 |
-
{detectedPlatform?.startsWith('windows') && (
|
| 598 |
<Box
|
| 599 |
sx={{
|
| 600 |
mt: 3,
|
|
@@ -613,14 +613,17 @@ export default function Download() {
|
|
| 613 |
fontWeight: 500,
|
| 614 |
}}
|
| 615 |
>
|
| 616 |
-
|
|
|
|
|
|
|
|
|
|
| 617 |
</Typography>
|
| 618 |
</Box>
|
| 619 |
)}
|
| 620 |
</>
|
| 621 |
) : (
|
| 622 |
<>
|
| 623 |
-
{/* macOS Intel
|
| 624 |
<Box
|
| 625 |
sx={{
|
| 626 |
px: 5,
|
|
@@ -654,7 +657,7 @@ export default function Download() {
|
|
| 654 |
}}
|
| 655 |
>
|
| 656 |
We're working hard to bring Reachy Mini Control to {currentPlatform?.name}.
|
| 657 |
-
In the meantime, macOS (Apple Silicon) is fully supported and Windows
|
| 658 |
</Typography>
|
| 659 |
|
| 660 |
{/* Alternative for Linux/advanced users - Python SDK */}
|
|
@@ -762,8 +765,8 @@ export default function Download() {
|
|
| 762 |
))}
|
| 763 |
</Grid>
|
| 764 |
|
| 765 |
-
{/* Platform support notice - show on Windows
|
| 766 |
-
{(detectedPlatform?.startsWith('windows') || detectedPlatform === 'darwin-aarch64') && (
|
| 767 |
<Box
|
| 768 |
sx={{
|
| 769 |
mt: 3,
|
|
@@ -778,7 +781,7 @@ export default function Download() {
|
|
| 778 |
variant="body2"
|
| 779 |
sx={{ color: 'rgba(255,255,255,0.5)' }}
|
| 780 |
>
|
| 781 |
-
🚧 macOS Intel
|
| 782 |
</Typography>
|
| 783 |
</Box>
|
| 784 |
)}
|
|
|
|
| 219 |
// Platform Card component
|
| 220 |
function PlatformCard({ platformKey, url, isActive, onClick }) {
|
| 221 |
const platform = PLATFORMS[platformKey];
|
| 222 |
+
const isComingSoon = platformKey.includes('darwin-x86_64');
|
| 223 |
+
const isBeta = platformKey.includes('windows') || platformKey.includes('linux');
|
| 224 |
|
| 225 |
return (
|
| 226 |
<Card
|
|
|
|
| 556 |
</Typography>
|
| 557 |
</Stack>
|
| 558 |
|
| 559 |
+
{/* Primary download button - different for Windows/macOS Apple Silicon/Linux vs macOS Intel */}
|
| 560 |
+
{detectedPlatform?.startsWith('windows') || detectedPlatform === 'darwin-aarch64' || detectedPlatform?.includes('linux') ? (
|
| 561 |
<>
|
| 562 |
<Button
|
| 563 |
variant="contained"
|
|
|
|
| 593 |
{currentPlatform?.subtitle} • {currentPlatform?.format?.replace('.', '').toUpperCase()} package
|
| 594 |
</Typography>
|
| 595 |
|
| 596 |
+
{/* Beta Warning for Windows and Linux */}
|
| 597 |
+
{(detectedPlatform?.startsWith('windows') || detectedPlatform?.includes('linux')) && (
|
| 598 |
<Box
|
| 599 |
sx={{
|
| 600 |
mt: 3,
|
|
|
|
| 613 |
fontWeight: 500,
|
| 614 |
}}
|
| 615 |
>
|
| 616 |
+
{detectedPlatform?.startsWith('windows')
|
| 617 |
+
? <>⚠️ Windows version is currently in Beta — installation requires <strong style={{ color: 'rgba(255,255,255,0.9)' }}>administrator privileges</strong>.</>
|
| 618 |
+
: <>⚠️ Linux version is currently in Beta — please report any issues on <a href="https://github.com/pollen-robotics/reachy-mini-desktop-app/issues" target="_blank" rel="noopener noreferrer" style={{ color: '#3b82f6', textDecoration: 'underline' }}>GitHub</a> or <a href="https://discord.gg/HDrGY9eJHt" target="_blank" rel="noopener noreferrer" style={{ color: '#3b82f6', textDecoration: 'underline' }}>Discord</a>.</>
|
| 619 |
+
}
|
| 620 |
</Typography>
|
| 621 |
</Box>
|
| 622 |
)}
|
| 623 |
</>
|
| 624 |
) : (
|
| 625 |
<>
|
| 626 |
+
{/* macOS Intel - Coming soon message */}
|
| 627 |
<Box
|
| 628 |
sx={{
|
| 629 |
px: 5,
|
|
|
|
| 657 |
}}
|
| 658 |
>
|
| 659 |
We're working hard to bring Reachy Mini Control to {currentPlatform?.name}.
|
| 660 |
+
In the meantime, macOS (Apple Silicon) is fully supported, and Windows & Linux are in beta!
|
| 661 |
</Typography>
|
| 662 |
|
| 663 |
{/* Alternative for Linux/advanced users - Python SDK */}
|
|
|
|
| 765 |
))}
|
| 766 |
</Grid>
|
| 767 |
|
| 768 |
+
{/* Platform support notice - show on Windows, macOS Apple Silicon, and Linux */}
|
| 769 |
+
{(detectedPlatform?.startsWith('windows') || detectedPlatform === 'darwin-aarch64' || detectedPlatform?.includes('linux')) && (
|
| 770 |
<Box
|
| 771 |
sx={{
|
| 772 |
mt: 3,
|
|
|
|
| 781 |
variant="body2"
|
| 782 |
sx={{ color: 'rgba(255,255,255,0.5)' }}
|
| 783 |
>
|
| 784 |
+
🚧 macOS Intel support coming soon
|
| 785 |
</Typography>
|
| 786 |
</Box>
|
| 787 |
)}
|
src/pages/GettingStarted.jsx
CHANGED
|
@@ -326,7 +326,7 @@ export default function GettingStarted() {
|
|
| 326 |
The desktop app includes everything you need to control your Lite version.
|
| 327 |
</Typography>
|
| 328 |
<Typography variant="caption" sx={{ display: 'block', mb: 2, color: 'warning.main' }}>
|
| 329 |
-
Desktop App
|
| 330 |
</Typography>
|
| 331 |
<Button
|
| 332 |
variant="contained"
|
|
@@ -334,7 +334,7 @@ export default function GettingStarted() {
|
|
| 334 |
to="/download"
|
| 335 |
startIcon={<DownloadIcon/>}
|
| 336 |
>
|
| 337 |
-
Download
|
| 338 |
</Button>
|
| 339 |
|
| 340 |
<Button
|
|
@@ -343,7 +343,7 @@ export default function GettingStarted() {
|
|
| 343 |
target="_blank"
|
| 344 |
startIcon={<OpenInNewIcon/>}
|
| 345 |
>
|
| 346 |
-
|
| 347 |
</Button>
|
| 348 |
|
| 349 |
</StepContent>
|
|
|
|
| 326 |
The desktop app includes everything you need to control your Lite version.
|
| 327 |
</Typography>
|
| 328 |
<Typography variant="caption" sx={{ display: 'block', mb: 2, color: 'warning.main' }}>
|
| 329 |
+
Desktop App available for macOS (Apple Silicon), Windows & Linux (beta). macOS Intel coming soon!
|
| 330 |
</Typography>
|
| 331 |
<Button
|
| 332 |
variant="contained"
|
|
|
|
| 334 |
to="/download"
|
| 335 |
startIcon={<DownloadIcon/>}
|
| 336 |
>
|
| 337 |
+
Download Desktop App
|
| 338 |
</Button>
|
| 339 |
|
| 340 |
<Button
|
|
|
|
| 343 |
target="_blank"
|
| 344 |
startIcon={<OpenInNewIcon/>}
|
| 345 |
>
|
| 346 |
+
Alternative: Python SDK
|
| 347 |
</Button>
|
| 348 |
|
| 349 |
</StepContent>
|