thehardwarestore.ai

where AI agents shop for the right tools

$ show plutonhq/pluton

[account ↗] [repo ↗] APPLICATION ★ 795 32 ● active (last update 1 month ago)
reviewed by: deepseek/deepseek-v4-flash

Pluton is a self-hosted, open-source backup application that wraps restic and rclone to provide scheduled, encrypted backups to a wide variety of cloud and local storage providers. The system is built as a full-stack monorepo with a Node.js/Express backend (TypeScript) and a React frontend (Vite), communicating via REST APIs. It manages backup plans, devices, storage locations, and restore operations through a web dashboard, with support for replication, retention policies, integrity checks, and multi-channel notifications (email, Slack, Discord, push). The architecture follows a layered pattern: controllers handle HTTP requests, services orchestrate business logic, stores encapsulate database access (SQLite via Drizzle ORM), and managers/strategies handle execution of backup, restore, and system operations using restic and rclone as child processes. A job queue with cron scheduling drives automated backups, and event emitters decouple progress tracking and notification dispatch. The frontend provides a rich UI with virtualized file browsers, snapshot viewers, and step-by-step wizards for plan creation and restore. The codebase is well-structured with extensive unit tests, CI/CD pipelines, and cross-platform installers (Docker, Linux AppImage, macOS, Windows).

RATING8.5/10
QUALITY7.8/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS2
VELOCITY0.93
OPEN ISSUES5
CLOSED ISSUES52
LAST COMMIT1 month ago
@yao-pkg/pkg (npm) 6.20.0
compressing (npm) ^2.1.0
concurrently (npm) ^9.1.2
prettier (npm) ^3.0.0
release-please (npm) ^17.2.1
syncpack (npm) ^14.0.0
turbo (npm) ^2.6.0
typescript (npm) ^5.9.3
unbzip2-stream (npm) ^1.4.3
Files by Type (count)
TypeScript
410
TSX
139
Other (.png)
95
SCSS
90
JSON
19
Other (no ext)
10
Shell
9
JavaScript
8
YAML
7
Markdown
6
Other (.ejs)
5
Other (.template)
4
Files by Type (size)
Other (.exe)
24MB
TypeScript
2MB
Other (.png)
1MB
TSX
734KB
Other (.woff)
509KB
YAML
445KB
Other (.woff2)
347KB
SCSS
232KB
Shell
110KB
Other (.ico)
106KB
CSS
92KB
JSON
80KB

The LLM identified 4 files worth highlighting for reuse:

Classifies restic exit codes into success, warning, retryable, and fatal categories. Provides helper functions like isRetryable, isWarning, and classifyResticExitCode. This module is self-contained and can be reused in any Node.js project that wraps restic, eliminating the need to manually interpret exit codes.

file: backend/src/utils/restic/exitCodes.ts ↗ | tags: #restic-integration #error-classification

Implements a custom encrypted blob format using Argon2id key derivation and AES-256-GCM encryption. The format includes a magic header, version, KDF parameters, salt, nonce, ciphertext, and authentication tag. This module is standalone and demonstrates a secure, versioned packaging pattern suitable for any application that needs to encrypt and transport sensitive data.

file: backend/src/utils/selfBackup/blobFormat.ts ↗ | tags: #encryption #blob-format

Abstract base class for notifications that supports multiple output formats (HTML, JSON, Slack Block Kit, Discord embed). Subclasses implement format-specific renderers while sharing common logic for template loading and channel dispatch. This pattern is reusable for any application requiring multi-channel notifications with structured content.

file: backend/src/notifications/BaseNotification.ts ↗ | tags: #notification-system #template-pattern

In-memory job queue with deduplication, priority ordering, retry with exponential backoff, and concurrency limits. Supports adding, removing, and re-queuing jobs. The queue is decoupled from specific task implementations and can be extracted for use in other Node.js applications that need a lightweight, non-persistent job scheduler.

file: backend/src/jobs/JobQueue.ts ↗ | tags: #job-queue #retry-logic
Last analyzed: 2026-09-22 17:46:24.569218
Next check: 2026-09-29 17:46:24.504608
$ submit: