A centralized directory of featured applications, clients, tools, and integrations for LizardByte projects.
app-directory/
├── .github/workflows/
│ └── build.yml # Auto-build and deploy
├── apps/ # App definitions
│ ├── moonlight/
│ ├── tools/
│ └── integrations/
├── projects/ # Project configurations
│ └── sunshine/
│ ├── project.json # Project config
│ └── categories.json # Project categories
├── schemas/ # JSON schemas
│ ├── app.schema.json # App definition schema
│ ├── categories.schema.json
│ └── project.schema.json
├── scripts/
│ ├── build-index.js
│ └── clean.js
├── dist/ # Generated (deployed to gh-pages)
│ ├── index.json
│ └── sunshine.json
├── package.json
└── README.md
npm installnpm run build # Build all project indexes
npm run validate # Validate all JSON files
npm run lint # Lint JavaScript files
npm run lint:fix # Auto-fix linting issues
npm test # Validate + lint + build
npm run clean # Remove dist directoryEach project has its own generated index file:
// For Sunshine
const response = await fetch('https://lizardbyte.github.io/app-directory/sunshine.json');
const data = await response.json();
// For master index (all apps)
const response = await fetch('https://lizardbyte.github.io/app-directory/index.json');
const data = await response.json();- Create a JSON file in the appropriate
apps/subdirectory - Follow the schema defined in
schemas/app.schema.json - Validate:
npm run validate - Submit a pull request
- Indexes will be automatically regenerated and deployed
Example: See the Moonlight app definitions:
id: Unique identifier (kebab-case)name: Display namedescription: Full descriptioncategory: Category ID (must match a category in your project's categories.json)platforms: Array of supported platforms (windows, macos, linux, android, ios, web)
tagline: Short one-linericon: URL to app icon (512x512 PNG recommended)screenshots: Array of screenshot URLslinks: Object withwebsite,github,download,documentationURLstags: Array of searchable keywordsfeatured: Boolean to highlight the appcompatibility: Version requirements for host projects
- Create a project directory:
projects/{project-name}/ - Create project configuration:
projects/{project-name}/project.json - Create project-specific categories:
projects/{project-name}/categories.json
Example: See the Sunshine project configuration:
projects/sunshine/project.json- Project configurationprojects/sunshine/categories.json- Category definitions
GitHub Actions automatically:
- ✓ Validates all JSON files against schemas (apps, projects, categories)
- ✓ Lints JavaScript files with ESLint
- ✓ Builds project-specific indexes in
dist/directory - ✓ Deploys to GitHub Pages (
distbranch) - ✓ Runs on every push and pull request
npm run validate # Validate all JSON files
npm run lint # Lint JavaScript files
npm run lint:fix # Auto-fix linting issues
npm run build # Build all indexes
npm run build:all # Validate + lint + build
npm test # Same as build:all
npm run clean # Remove dist/ directoryThe built indexes are deployed to GitHub Pages and accessible via:
https://lizardbyte.github.io/app-directory/{project}.json
https://lizardbyte.github.io/app-directory/index.json
https://cdn.jsdelivr.net/gh/LizardByte/app-directory@dist/{project}.json
https://raw.githubusercontent.com/LizardByte/app-directory/dist/{project}.json
- Fork the repository
- Add your app JSON file
- Ensure it validates against the schema
- Submit a pull request
- Maintainers will review and merge
Apps listed in this directory retain their original licenses. This directory structure and metadata is MIT licensed.