A React application for searching, loading, and exploring Strudel sound samples from GitHub repositories. Built to discover and play with community-created sound libraries for Strudel live coding.
- π GitHub Search: Search for
strudel.jsonfiles across all public GitHub repositories - π¦ Load Sounds: Automatically parse and load sound samples from repositories
- π΅ Sound Explorer: Browse loaded sounds with categorization and filtering
βΆοΈ Audio Playback: Preview sounds directly in the browser- πΎ Export/Import: Save your sound library and restore it later
- π¨ Modern UI: Clean, responsive interface built with Tailwind CSS
- π Local Storage: Automatically persist your loaded sounds
Visit the live application: https://therebelrobot.github.io/open-strudel-samples/
- Node.js 20 or higher
- npm or yarn
# Install dependencies
npm install
# Start development server
npm run dev
# Build for production
npm run build
# Preview production build
npm run previewThe development server will start at http://localhost:5173/
- Use the search bar to find repositories containing
strudel.jsonfiles - The default query
path:/(^|\/)strudel\.json$/finds all matching files - Customize the search query to filter results (e.g., add
user:usernameto search specific users)
- Click "Load Sounds" on any repository card
- The app will fetch and parse the
strudel.jsonfile - All sounds will be added to your library automatically
- Switch to the "Sound Library" tab
- Browse sounds by category or search for specific sounds
- Click the play button to preview any sound
- Use the filter and sort options to organize your library
- Export: Download your entire sound library as a JSON file
- Import: Upload a previously exported JSON file to restore your library
- Clear All: Remove all loaded sounds (with confirmation)
βββ src/
β βββ components/ # React components
β β βββ Header.tsx
β β βββ SearchBar.tsx
β β βββ RepositoryCard.tsx
β β βββ RepositoryList.tsx
β β βββ SoundCard.tsx
β β βββ SoundGrid.tsx
β β βββ ExportImport.tsx
β βββ hooks/ # Custom React hooks
β β βββ useGitHubSearch.ts
β β βββ useStrudelJson.ts
β β βββ useAudioPlayer.ts
β βββ store/ # Zustand state management
β β βββ soundStore.ts
β βββ types/ # TypeScript type definitions
β β βββ github.ts
β β βββ strudel.ts
β βββ utils/ # Utility functions
β β βββ github-api.ts
β β βββ sound-processor.ts
β β βββ export-import.ts
β βββ App.tsx # Main application component
β βββ main.tsx # Application entry point
β βββ index.css # Global styles
βββ public/ # Static assets
βββ .github/
β βββ workflows/
β βββ deploy.yml # GitHub Pages deployment
βββ package.json
βββ vite.config.ts # Vite configuration
βββ tailwind.config.js # Tailwind CSS configuration
βββ tsconfig.json # TypeScript configuration
βββ README.md
- React 19 - UI framework
- TypeScript - Type safety
- Vite - Build tool and dev server
- Tailwind CSS - Styling
- Zustand - State management
- Web Audio API - Audio playback
- GitHub REST API - Repository search and content fetching
This application uses the GitHub REST API to search for and fetch strudel.json files:
- Code Search:
GET /search/code?q=path:/(^|\/)strudel\.json$/ - Raw Content:
https://raw.githubusercontent.com/{owner}/{repo}/{branch}/{path}
- Unauthenticated requests: 10 requests/minute
- Authenticated requests: 30 requests/minute
To use authenticated requests, you would need to add a GitHub personal access token (not currently implemented for security reasons in static sites).
The application expects sound files to be defined in a strudel.json file with the following structure:
{
"sounds": {
"category1": ["https://example.com/sound1.wav"],
"category2": [
"https://example.com/sound2.mp3",
"https://example.com/sound3.wav"
]
}
}Alternatively, sounds can be under a samples key:
{
"samples": {
"drums": ["https://example.com/kick.wav", "https://example.com/snare.wav"],
"bass": ["https://example.com/bass.wav"]
}
}# Start development server with hot reload
npm run dev# Build optimized production bundle
npm run build
# Preview the production build locally
npm run preview# Run ESLint
npm run lintThis project is configured for automatic deployment to GitHub Pages using GitHub Actions.
- Build the project:
npm run build - Deploy the
dist/folder to your hosting provider
The repository includes a GitHub Actions workflow (.github/workflows/deploy.yml) that automatically builds and deploys the application when changes are pushed to the main branch.
To enable GitHub Pages:
- Go to repository Settings β Pages
- Set Source to "GitHub Actions"
- Push to main branch to trigger deployment
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see LICENSE file for details
- Strudel - Live coding platform this tool supports
- GitHub API - Powers the search functionality
- Built with Vite, React, and Tailwind CSS
- Strudel - The main Strudel live coding environment
- Strudel REPL - Online Strudel editor
Made with β₯ for the Strudel community