Simplify local project hosting, process management, and tunneling
v0.39.0 (mirrors package.json — update both when releasing)
Built with the tools and technologies:
- Overview
- Recent updates
- Getting Started
- Features
- Project Structure
- Roadmap
- Contributing
- License
- Acknowledgment
SelfHost-Helper is an advanced developer tool designed to simplify local project hosting, process management, and system monitoring. Built with a focus on stability, performance, and user experience, it integrates native Windows process control, real-time resource monitoring, and a modern UI to streamline development workflows.
Why SelfHost-Helper?
This project aims to provide developers with a robust, all-in-one solution for managing local projects efficiently. The core features include:
- 🛠️ Optional Docker builds: A Dockerfile is available for reproducible CI/container builds; everyday development uses npm only.
- ⚙️ Native Process Control: Implements Windows-specific job objects for reliable process grouping and resource management.
- 🔍 Real-Time Monitoring: Resource tracking, process insights, live logs, a configurable Overview grid, and a Resources view for deeper stats.
- 🎨 Modern UI: Frameless desktop shell with custom title bar, toast notifications, and styling via Tailwind CSS v4 (
@tailwindcss/postcss,@themeinsrc/index.css, plustailwind.config.jsfor legacy/theme alignment). - 📁 Project Lifecycle Management: Start/stop/restart projects, editor and file tools, settings split into General, Data, Backup, Runtimes, Updates, and About.
- 🔄 Cross-Platform Utilities: Process tree management and packaging targets for Windows (NSIS) and Linux (AppImage, deb, rpm).
- 🌐 Cloudflare Tunnels: Quick or authenticated tunnels via cloudflared, optional auto-start, dedicated tunnel tab and logs.
- 🔄 In-app updates: electron-updater checks GitHub Releases; Settings → Updates for checks and release notes (see
docs/auto-update-publishing.mdfor maintainers).
Recent development has expanded SelfHost-Helper into a full-featured local dev workspace:
- Overview & Resources: Per-project Overview tab with a draggable grid (
@eleung/react-grid-layout) and metric tiles; Resources tab for sparklines, uptime, and process detail. - Editor & LSP: Monaco with an LSP bridge (
typescript-language-server,ws) for in-app editing per project. - Search & Git (Editor): Ripgrep-based
SearchPaneland full Git viaGitPanellive insideEditorViewas resizable panels—not separate top-level router tabs (those are Overview, Console, Editor, Tunnel, Resources). - File system: Create, delete, rename files and folders; read/write and directory listing; folder watcher; ignore patterns for trees and search.
- Multi-workspace: Multiple projects with categories (
Categorymodel), drag-and-drop reorder, and bulk reorder; each project is a workspace root. - Backup & restore: Legacy SQLite migration with automatic backup; Settings → Backup (and data sections) to restore from a file or open the data folder; see
docs/RESTORE_FROM_BACKUP.md. - Auto-updates: GitHub Releases–driven updates via electron-updater; Settings → Updates; maintainers follow
docs/auto-update-publishing.md. - Error handling & logging: Central
electron/services/logger.js, IPC error logging, and debug logging for key operations.
Roadmap and planning notes are in TODO.md.
| Component | Details | |
|---|---|---|
| ⚙️ | Architecture |
|
| 🔩 | Code Quality |
|
| 📄 | Documentation |
|
| 🎛️ | Overview & layout |
|
| 🔔 | Shell & UX |
|
| 🔌 | Integrations |
|
| 🔍 | Search |
|
| 📂 | Git |
|
| 💾 | Backup & restore |
|
| 🌐 | Tunneling |
|
| ⬆️ | Auto-updates |
|
| 🧩 | Modularity |
|
| 🧪 | Testing |
|
| ⚡️ | Performance |
|
| 🛡️ | Security |
|
| 📦 | Runtime |
|
The user-visible app version is defined in package.json; keep the README header version in sync when releasing.
└── SelfHost-Helper/
├── ChangeLog
├── Dockerfile
├── LICENSE
├── README.md
├── RELEASE_NOTES_v0.7.0.md # historical; current notes on GitHub Releases
├── TODO.md
├── tsconfig.json
├── database/
│ └── models/ # Project.js, Category.js (Sequelize + SQLite)
├── docs/
│ ├── RESTORE_FROM_BACKUP.md
│ └── auto-update-publishing.md
├── electron/
│ ├── ipc/
│ ├── job/ # native Windows job object addon (C++)
│ ├── services/ # DB, projects, tunnels, git, search, LSP, stats, updates, …
│ ├── tray/
│ ├── main.js
│ └── preload.js
├── public/
│ └── file-icons/
├── resources/
├── src/
│ ├── components/ # UI, overview grid, panels
│ ├── editors/
│ ├── hooks/
│ ├── lib/
│ ├── pages/ # Dashboard, Settings (+ settings/* sections)
│ ├── store/
│ ├── config/
│ ├── App.jsx
│ ├── main.jsx
│ ├── index.css # Tailwind v4: @import "tailwindcss", @theme
│ └── monacoWorkers.js
├── eslint.config.js
├── index.html
├── jsconfig.json
├── package.json
├── postcss.config.js
├── tailwind.config.js
└── vite.config.jselectron/main.js— BrowserWindow, custom protocol, lifecycle; registers IPC and services.electron/preload.js— Exposeswindow.apito the renderer (context isolation).electron/ipc/handlers.js— IPC for projects, files, git, search, tunnels, settings, updates, and more.electron/services/— IncludesprojectsManager,database,tunnelManager,gitService,searchService,lspBridge,statsService,runtimeService,updateService,configBackupService,secretStore,settingsService,filesWatcher,logger,processTree,ignorePatterns, and related helpers.src/App.jsx— Hash routes: dashboard,project/:projectId/{overview|console|editor|tunnel|resources},/settings/*.src/components/ProjectLayout.jsx— Project shell and data loading;ViewTabs.jsxswitches the five primary views and shows the stats pill.src/components/EditorView.jsx— Monaco, file tree, resizableSearchPanelandGitPanel(search/git are editor panels, not separate top-level tabs).src/components/overview/— Dashboard grid (@eleung/react-grid-layout) and metric tiles.src/pages/settings/— General, data, backup, runtimes, updates (release notes viareact-markdown), about.- Full repository tree on GitHub — exhaustive listing.
For local development:
- Runtime: Node.js (LTS recommended)
- Language: JavaScript (renderer + main); TypeScript toolchain for
npm run typecheckonly - Package manager: npm
Docker is optional — use it only if you want the Dockerfile-based build pipeline. Most contributors run npm install and npm run dev directly on the host.
Build SelfHost-Helper from the source and install dependencies:
-
Clone the repository:
❯ git clone https://github.com/DevRoots-Studio/SelfHost-Helper
-
Navigate to the project directory:
❯ cd SelfHost-Helper -
Install the dependencies:
Using docker:
❯ docker build -t DevRoots-Studio/SelfHost-Helper .Using npm:
❯ npm installRun the project in development:
Using docker:
Build the image, then run a container; the built app is in /app/release inside the image (see Dockerfile VOLUME). Example:
docker build -t DevRoots-Studio/SelfHost-Helper .
docker run -it -v release-out:/app/release DevRoots-Studio/SelfHost-HelperUsing npm:
npm run devThis starts the Vite dev server and Electron together. For production, run npm run build then run the installer or unpacked app from the release/ directory.
| Script | Description |
|---|---|
npm run dev |
Start development (Vite + Electron via concurrently) |
npm run build |
Production build: Vite → dist/, then electron-builder → release/ |
npm run build:dev |
Dev artifact (separate appId, output under release-dev/) |
npm run build:prod |
Same as production build with NODE_ENV=production set for electron-builder |
npm run build:web |
Vite build only (frontend to dist/, no Electron package) |
npm run publish:prod |
Maintainers: build and publish to GitHub Releases (electron-builder --publish always). Requires GH_TOKEN (and optional .env via dotenv-cli). See docs/auto-update-publishing.md. |
npm run lint |
Run ESLint |
npm run typecheck |
tsc --noEmit (no compile output; checks against tsconfig.json) |
npm run format |
Format with Prettier |
npm run format:check |
Check Prettier formatting |
There is no automated test suite yet. Use ESLint, Prettier, and optionally npm run typecheck before releases.
The project roadmap and task list live in TODO.md — planned work, ideas, and completed items. For shipped versions, see GitHub Releases.
- 💬 Join the Discussions: Share your insights, provide feedback, or ask questions.
- 🐛 Report Issues: Submit bugs found or log feature requests for the
SelfHost-Helperproject. - 💡 Submit Pull Requests: Review open PRs and submit your own against the
mainbranch.
Contributing Guidelines
- Fork the Repository: Start by forking the project repository to your github account.
- Clone Locally: Clone the forked repository to your local machine using a git client.
git clone https://github.com/DevRoots-Studio/SelfHost-Helper
- Create a New Branch: Always work on a new branch, giving it a descriptive name.
git checkout -b new-feature-x
- Make Your Changes: Develop and test your changes locally.
- Commit Your Changes: Commit with a clear message describing your updates.
git commit -m 'Implemented new feature x.' - Push to github: Push the changes to your forked repository.
git push origin new-feature-x
- Submit a Pull Request: Create a PR against the original project repository. Clearly describe the changes and their motivations.
- Review: Once your PR is reviewed and approved, it will be merged into the main branch. Congratulations on your contribution!
SelfHost-Helper is licensed under the ISC License. See the LICENSE file in the repository root for the full text.
- Credit
contributors,inspiration,references, etc.