Find a file
2026-02-10 16:42:53 +11:00
.github/workflows Update GitHub Actions workflow versions 2026-02-02 21:27:07 +11:00
app Add data export feature (v4.1.0) 2026-02-06 23:33:33 +11:00
bootstrap V2 (Laravel re-make) 2022-03-06 02:02:12 +11:00
config Added ability to upload own favicon 2023-03-31 11:31:19 +11:00
database Add YabsSeeder with sample YABS benchmark data - Add 3 sample YABS entries with disk speeds and network speeds - Based on real YABS output from yabdb.com - Includes GB5/GB6 scores, disk I/O benchmarks, and iperf3 network tests - Updates servers to has_yabs=1 when seeded 2026-02-02 20:18:59 +11:00
public Update button styles 2026-02-06 23:58:18 +11:00
resources Fix delete modal not working for labels and other resources 2026-02-07 00:01:16 +11:00
routes Add data export feature (v4.1.0) 2026-02-06 23:33:33 +11:00
storage Revert "Revert "V2 (Laravel re-make)"" 2022-03-06 02:29:58 +11:00
tests Add data export feature (v4.1.0) 2026-02-06 23:33:33 +11:00
.editorconfig Initial v2 commit 2022-02-18 15:48:32 +11:00
.gitattributes Added public css and js to .gitattributes 2022-12-02 14:03:07 +11:00
.gitignore Remove .kiro from version control 2026-02-10 16:40:56 +11:00
.phpunit.result.cache Add data export feature (v4.1.0) 2026-02-06 23:33:33 +11:00
.styleci.yml Initial v2 commit 2022-02-18 15:48:32 +11:00
artisan Initial v2 commit 2022-02-18 15:48:32 +11:00
composer.json PHP 8.3 2024-12-09 15:37:23 +11:00
composer.lock v4.0.0: Update dependencies and fix security vulnerabilities 2026-02-02 16:37:04 +11:00
Dockerfile Update Dockerfile to PHP 8.4 2026-02-02 21:30:34 +11:00
LICENSE Initial commit 2021-01-20 14:35:05 +11:00
package-lock.json Update npm packages and Bootstrap to 5.3.8 2026-02-02 16:41:38 +11:00
package.json Updated webpack and package.json dependencies versions. NPM run dev 2024-12-09 16:24:07 +11:00
phpunit.xml Add comprehensive test suite with 150 tests 2026-02-02 19:54:34 +11:00
README.md Remove v2 screenshots from README 2026-02-10 16:42:53 +11:00
run.sh Improve run.sh with better env defaults, caching and optional auto-migrate 2026-02-02 16:57:28 +11:00
server.php V2 (Laravel re-make) 2022-03-06 02:02:12 +11:00
tailwind.config.js V2 (Laravel re-make) 2022-03-06 02:02:12 +11:00
webpack.mix.js 4.0 - Suppress webpack and Sass deprecation warnings from third-party packages 2026-02-02 19:59:36 +11:00

My idlers

A self-hosted web app for displaying, organizing and storing information about your servers (VPS/Dedi), shared & reseller hosting, seedboxes, domains, DNS and misc services.

Despite what the name infers this self-hosted web app isn't just for storing idling server information. By using a YABS output you can get disk & network speed values along with GeekBench 5 & 6 scores to do easier comparing and sorting. Of course storing other services e.g. web hosting is possible and supported too with My idlers.

Generic badge Generic badge Generic badge Generic badge

View demo site

Note: Create, Update and Delete are disabled on the demo site.

Project sponsor

Proudly sponsored by PikaPods - Deploy your own My Idlers instance with one click, no server setup required. PikaPods handles all the infrastructure so you can focus on managing your services.

PikaPods

4.1.0 changes (February 2026):

  • Added data export feature for all service types (servers, domains, shared, reseller, seedboxes, DNS, misc)
  • Export data in JSON or CSV format
  • Added export buttons to all index pages
  • Added global export section to settings page for exporting all data at once
  • Global CSV export creates a ZIP file with separate CSV files per service type
  • Added new API endpoints for data export:
    • GET /api/export/servers?format=json|csv
    • GET /api/export/domains?format=json|csv
    • GET /api/export/shared?format=json|csv
    • GET /api/export/reseller?format=json|csv
    • GET /api/export/seedboxes?format=json|csv
    • GET /api/export/dns?format=json|csv
    • GET /api/export/misc?format=json|csv
    • GET /api/export/all?format=json|csv
  • Added ExportService for centralized export logic
  • Added comprehensive test suite for export functionality
  • Modernized confirm-password and verify-email auth pages
  • Redesigned error pages (401, 403, 404, 500, 503) with card layout and light/dark mode support

4.0.0 changes (February 2026):

  • Updated Laravel version to 11.48
  • Updated Bootstrap version to 5.3.8
  • Updated all composer package versions
  • Updated all npm package versions
  • Fixed security vulnerabilities in dependencies
  • Added comprehensive seeders for Users, Servers, Shared, Reseller, Domains, Misc and DNS
  • Added YABS seeder with sample benchmark data
  • Updated Dockerfile to PHP 8.4 with additional extensions (bcmath, pcntl)
  • Improved Dockerfile with production optimizations and health check
  • Improved run.sh with better env defaults, caching and optional auto-migrate
  • Modernized auth pages (login, register, forgot/reset password) with clean design
  • Added light and dark mode support for auth pages
  • Added MAX_USERS env variable to control registration limit (0 = unlimited)
  • Redesigned dashboard with cleaner stat cards, costs and resources sections
  • Modernized navbar with improved styling and hover states
  • Updated dark mode with new color scheme and page background
  • Modernized all index pages with consistent card-based layout and improved table styling
  • Improved DataTables styling (search, pagination, dropdown) for light and dark modes
  • Fixed DataTables error alerts on empty tables
  • Made demo user and sample data seeding optional via SEED_DEMO_DATA env variable
  • Redesigned all create and edit pages with organized card sections and consistent form styling
  • Redesigned all show/detail pages with polished detail cards and visual hierarchy
  • Modernized settings page with organized card-based sections
  • Modernized account page with profile and API token sections
  • Modernized server and YABS comparison pages with improved table styling
  • Modernized public server listing page with consistent design
  • Added comprehensive test suite with 150 tests covering all major features
  • Added servers index card view option in settings (table or cards layout)
  • Fixed Vue.js loading issues on comparison pages
  • Fixed server comparison null value handling
  • Fixed inactive services still being counted in cost calculations and "Due Soon" (#125, #112)
  • Fixed OS icons showing wrong icons for certain OS IDs (#123)
  • Removed unused legacy auth pages and components

Test Suite

The application now includes a comprehensive test suite with 150 tests and 294 assertions:

Feature Tests:

  • Authentication (login, registration, password reset, email verification)
  • Servers CRUD operations and validation
  • Domains CRUD operations and validation
  • DNS records CRUD operations and validation
  • Providers, Locations, Labels, OS CRUD operations
  • IP addresses CRUD operations with HTTP mocking
  • Home dashboard functionality

Unit Tests:

  • Server model (server types, comparison logic)
  • Pricing model (cost calculations, term conversions)
  • Settings model (sorting/ordering logic)
  • Labels model (assignment operations)
  • IPs model (IPv4/IPv6 handling)
  • DNS model (type constants)

Run tests with:

vendor/bin/phpunit
# or with testdox output
vendor/bin/phpunit --testdox

Database Seeding

The seeder is split into two parts:

Core data (always seeded): Settings, Providers, Locations, OS, Labels - required for the app to function.

Demo data (optional): Admin user and sample services (servers, domains, shared hosting, etc.)

# Fresh install (core data only - recommended for production)
php artisan migrate:fresh --seed

# Fresh install with demo data
# First add SEED_DEMO_DATA=true to your .env file, then:
php artisan migrate:fresh --seed

Environment Variables

Variable Default Description
SEED_DEMO_DATA false Set to true to seed demo user and sample data during migrate:fresh --seed
MAX_USERS 0 Maximum number of users allowed to register. 0 = unlimited

Demo Login Credentials

When SEED_DEMO_DATA=true is set, a demo user is created:

Email Password
admin@admin.com password

Please run the following if updating from an existing install:

composer update
php artisan migrate
php artisan route:cache
php artisan cache:clear

Requires

  • PHP 8.4

Features

  • Add and manage servers, shared hosting, reseller hosting, seedboxes, domains, DNS and misc services
  • Auto get IP's from hostname
  • Check up/down status
  • Get YABS data from output or POST directly from yabs.sh
  • Compare servers and YABS benchmarks
  • Save & view YABS output with disk and network speeds
  • Export data in JSON or CSV format
  • Light and dark mode themes
  • Next due date tracking with dashboard overview
  • Multi currency and payment term support
  • Pre-defined operating systems with icons
  • Assign labels to services
  • Assign server type (KVM, OVZ, LXC & dedi)
  • Assign notes to any service
  • Public server listing option
  • REST API for all resources
  • Registration limit control (MAX_USERS)

Install

  • Run git clone https://github.com/cp6/my-idlers.git into your directory of choice
  • Run composer install
  • Run npm install
  • Run cp .env.example .env
  • Edit MySQL details and other settings in .env
  • Run php artisan key:generate
  • Run php artisan make:database my_idlers to create database
  • Run npm run prod to build assets
  • Run php artisan migrate:fresh --seed to create tables and seed data
  • Run php artisan serve

Updating

If you already have at least version 2.0 installed:

  • Run git pull
  • Run composer install
  • Run composer update
  • Run npm install
  • Run npm run prod
  • Run php artisan migrate
  • Run php artisan route:cache
  • Run php artisan cache:clear

Run using Docker

docker run \
  -p 8000:8000 \
  -e APP_URL=https://... \
  -e DB_HOST=... \
  -e DB_DATABASE=... \
  -e DB_USERNAME=... \
  -e DB_PASSWORD=... \
  -e MAX_USERS=0 \
  -e SEED_DEMO_DATA=false \
  ghcr.io/cp6/my-idlers:latest
docker exec ... php artisan migrate:fresh --seed --force  # Set up database one time

Managed Hosting

Run with a single click on PikaPods.com

PikaPods

Adding a YABS benchmark

yabs.sh now has JSON formatted response and can POST the output directly from calling the script.

With My idlers you can use your API key and the server id to directly POST the benchmark result

https://yourdomain.com/api/yabs/SERVERID/USERAPIKEYISHERE

Example yabs.sh call to POST the result:

curl -sL yabs.sh | bash -s -- -s "https://yourdomain.com/api/yabs/SERVERID/USERAPIKEYISHERE"

Credits

IP who is data provided by ipwhois.io

API endpoints

For GET requests the header must have Accept: application/json and your API token (found at /account)

Authorization : Bearer API_TOKEN_HERE

All API requests must be appended with api/ e.g mydomain.com/api/servers/gYk8J0a7

GET requests:

Endpoint Description
dns/ Get all DNS records
dns/{id} Get DNS record
domains/ Get all domains
domains/{id} Get domain
servers Get all servers
servers/{id} Get server
IPs/ Get all IPs
IPs/{id} Get IP
labels/ Get all labels
labels/{id} Get label
locations/ Get all locations
locations/{id} Get location
misc/ Get all misc services
misc/{id} Get misc service
networkSpeeds/ Get all network speeds
networkSpeeds/{id} Get network speed
os/ Get all operating systems
os/{id} Get operating system
pricing/ Get all pricing
pricing/{id} Get pricing
providers/ Get all providers
providers/{id} Get provider
reseller/ Get all reseller hosting
reseller/{id} Get reseller hosting
seedbox/ Get all seedboxes
seedbox/{id} Get seedbox
settings/ Get settings
shared/ Get all shared hosting
shared/{id} Get shared hosting
yabs/ Get all YABS
yabs/{id} Get YABS
note/{id} Get note
online/{hostname} Check if host is up
dns/{domainName}/{type} Get IP for domain

Export endpoints (v4.1):

Endpoint Description
export/servers?format=json|csv Export servers
export/domains?format=json|csv Export domains
export/shared?format=json|csv Export shared hosting
export/reseller?format=json|csv Export reseller hosting
export/seedboxes?format=json|csv Export seedboxes
export/dns?format=json|csv Export DNS records
export/misc?format=json|csv Export misc services
export/all?format=json|csv Export all data

POST requests

Create a server

/servers

Body content template

{
    "active": 1,
    "show_public": 0,
    "hostname": "test.domain.com",
    "ns1": "ns1",
    "ns2": "ns2",
    "server_type": 1,
    "os_id": 2,
    "provider_id": 10,
    "location_id": 15,
    "ssh_port": 22,
    "bandwidth": 2000,
    "ram": 2024,
    "ram_type": "MB",
    "ram_as_mb": 2024,
    "disk": 30,
    "disk_type": "GB",
    "disk_as_gb": 30,
    "cpu": 2,
    "has_yabs": 0,
    "was_promo": 1,
    "ip1": "127.0.0.1",
    "ip2": null,
    "owned_since": "2022-01-01",
    "currency": "USD",
    "price": 4.00,
    "payment_term": 1,
    "as_usd": 4.00,
    "usd_per_month": 4.00,
    "next_due_date": "2022-02-01"
}

PUT requests

Update a server

/servers/ID

Body content template

{
    "active": 1,
    "show_public": 0,
    "hostname": "test.domain.com",
    "ns1": "ns1",
    "ns2": "ns2",
    "server_type": 1,
    "os_id": 2,
    "provider_id": 10,
    "location_id": 15,
    "ssh_port": 22,
    "bandwidth": 2000,
    "ram": 2024,
    "ram_type": "MB",
    "ram_as_mb": 2024,
    "disk": 30,
    "disk_type": "GB",
    "disk_as_gb": 30,
    "cpu": 2,
    "has_yabs": 0,
    "was_promo": 1,
    "owned_since": "2022-01-01"
}

Update pricing

/pricing/ID

Body content template

{
    "price": 10.50,
    "currency": "USD",
    "term": 1
}

DELETE requests

Delete a server

/servers/ID

Notes

Public viewable listings

If enabled the public viewable table for your server listings is at /servers/public You can configure what you want viewable at /settings

Due date / due soon

This is simply just a reminder. If the homepage is requested (viewed) when a service is over due date it will get reset to plus the term from the old due date.

E.g if the term is a month then the due date gets updated to be 1 month from the old due date.

Supporting YABS commands:

curl -sL yabs.sh | bash

or

curl -sL yabs.sh | bash -s -- -r

Logo icons created by Freepik - Flaticon