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.