{"id":44497219,"url":"https://github.com/hayasaka7/haya-tab","last_synced_at":"2026-04-29T08:08:32.971Z","repository":{"id":337350020,"uuid":"1153183607","full_name":"HAYASAKA7/HAYA-TAB","owner":"HAYASAKA7","description":"A lightweight music tab manager for guitarists and musicians, built with Go and Wails.","archived":false,"fork":false,"pushed_at":"2026-03-02T05:13:48.000Z","size":26670,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-02T05:17:06.634Z","etag":null,"topics":["alphatab","go","guitar","guitar-pro","guitar-tabs","musicxml","pinia","sqlite","typescript","vite","vue","wails"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/HAYASAKA7.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-02-09T02:11:03.000Z","updated_at":"2026-03-02T05:13:51.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/HAYASAKA7/HAYA-TAB","commit_stats":null,"previous_names":["hayasaka7/haya-tab"],"tags_count":58,"template":false,"template_full_name":null,"purl":"pkg:github/HAYASAKA7/HAYA-TAB","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HAYASAKA7%2FHAYA-TAB","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HAYASAKA7%2FHAYA-TAB/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HAYASAKA7%2FHAYA-TAB/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HAYASAKA7%2FHAYA-TAB/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/HAYASAKA7","download_url":"https://codeload.github.com/HAYASAKA7/HAYA-TAB/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/HAYASAKA7%2FHAYA-TAB/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30209433,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-07T05:23:27.321Z","status":"ssl_error","status_checked_at":"2026-03-07T05:00:17.256Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["alphatab","go","guitar","guitar-pro","guitar-tabs","musicxml","pinia","sqlite","typescript","vite","vue","wails"],"created_at":"2026-02-13T05:56:07.033Z","updated_at":"2026-04-29T08:08:32.963Z","avatar_url":"https://github.com/HAYASAKA7.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# HAYA-TAB\n\nA lightweight music tab manager for guitarists and musicians, built with Go and Wails.\n\n![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20macOS%20%7C%20Linux%20%7C%20iOS-blue)\n![Version](https://img.shields.io/badge/version-3.1.6-green)\n![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)\n\n## ✨ Features\n\n- **Tab Management** - Organize your PDF, Guitar Pro (.gp, .gp5, .gpx), and MusicXML (.xml, .musicxml, .mxl) tabs in one place\n- **Upload or Link** - Upload tabs to internal storage or link existing files from your filesystem\n- **Advanced Search** - **Instant Full-Text Search (FTS5)** across titles, artists, and albums with fuzzy matching\n- **Real-time Sync** - Automatically watches synced folders for changes; **Non-destructive** import (renames duplicates)\n- **Cloud Sync** - **WebDAV** integration with multi-device support via volume fingerprints; on-demand cloud file access and uploads with automatic metadata tracking\n- **PDF Annotation Layer** - Non-destructive transparent canvas annotations (pen/highlighter/eraser) stored as lightweight JSON, without modifying original PDF files; includes a compact toolbar menu with current-tool icon indicator\n- **Smart Metadata** - Auto-parse info from filenames; **Bi-directional sync** with Guitar Pro internal metadata\n- **Tag Support** - Add version/part tags (e.g., \"Lead Guitar\", \"Bass\", \"First Version\")\n- **Plugin System** - Extend functionality with JavaScript plugins (e.g., AI Metadata Enhancer)\n- **Customizable Environment** - Change storage locations for managed tabs and covers to customize your setup\n- **Album Artwork** - Automatic cover art fetching from iTunes; **High-performance** concurrent downloads\n- **Categories** - Organize tabs into virtual folders\n- **Batch Operations** - Select and move/delete multiple tabs at once\n- **Rich Internal Viewer**:\n  - **PDF:** Built-in viewer with **Auto-Scroll** and non-destructive **Annotation Layer** (pen/highlighter/eraser)\n  - **Guitar Pro:** alphaTab engine with **Looping**, **Section Playback**, **Speed Control**, and **Floating Toolbar**\n- **MIDI Pedal Support** - Control page turning, playback (Play/Pause), and **Smooth Scrolling** (via Expression Pedal) with any standard MIDI foot controller; includes **MIDI Learn** for easy mapping.\n- **Internationalization** - Full support for **English, Chinese (Simplified/Traditional), and Japanese**; **Auto-detects system language** on first launch\n- **Modern UI** - Dark/Light theme, **Auto-saving settings**, and responsive Grid/List views\n\n## 📦 Installation\n\n### Pre-built Binary\n\nDownload the latest release from the [Releases](https://github.com/HAYASAKA7/HAYA-TAB/releases) page.\n\n#### 🍎 macOS Users (Unverified Developer)\n\nSince the application is not signed with an Apple Developer account, macOS may show a warning like \"cannot be opened because the developer cannot be verified\" or \"app is damaged\".\n\nTo fix this:\n\n1. Go to **System Settings** -\u003e **Privacy \u0026 Security**.\n2. Scroll down to the Security section and click **\"Open Anyway\"** for HAYA-TAB.\n3. Alternatively, run the following command in your terminal to remove the quarantine attribute (assuming you moved the app to `/Applications`):\n   ```bash\n   xattr -cr /Applications/HAYA-TAB.app\n   ```\n\n### Build from Source\n\n1. Ensure you have [Go](https://go.dev/), [Node.js](https://nodejs.org/) (npm), and [Wails](https://v3.wails.io/getting-started/installation/) (v3) installed\n2. Clone this repository\n3. Install frontend dependencies:\n   ```bash\n   cd frontend\n   npm install\n   cd ..\n   ```\n4. Run the development server:\n   ```bash\n   wails3 task dev\n   ```\n5. To build for production:\n   ```bash\n   # Build for current platform\n   wails3 task build\n\n   # Cross-platform builds\n   wails3 task windows:build ARCH=amd64\n   wails3 task darwin:build ARCH=amd64     # macOS Intel\n   wails3 task darwin:build ARCH=arm64     # macOS Apple Silicon\n   wails3 task linux:build ARCH=amd64\n   ```\n\n   Note: when cross-compiling from a different host OS, run `wails3 task setup:docker` once first.\n\n### Testing (E2E)\n\nEnd-to-End UI integration tests are configured via Playwright. Note that your environment must support Node.js.\n\n```bash\n# Run headlessly against the Vite + Wails dev server\nnpx @go-task/cli test:e2e\n\n# Run with Playwright UI visualizer for debugging\nnpx @go-task/cli test:e2e-ui\n```\n\n## 🚀 Usage\n\n1. **Add Tabs**: Right-click on empty space → \"Upload TAB\" or \"Link Local TAB\"\n2. **Organize**: Create categories and move tabs into them\n3. **Sync Folders**: Go to Settings → Add sync paths to auto-import tabs from folders\n4. **Cloud Sync**: Configure WebDAV in Settings to access your cloud library. See [WebDAV Guide](docs/WEBDAV.md).\n5. **PDF Annotation**: In the PDF viewer, open the annotation menu from the toolbar, choose tools (selection/pen/highlighter/eraser), and draw on the non-destructive overlay layer.\n6. **View Tabs**: Click a tab to open with system default, or right-click → \"Open with Inner Viewer\"\n7. **Key Bindings**: Customize viewer controls (Loop, Auto-scroll, etc.) in Settings\n\n## 📁 Project Structure\n\n```\n├── assets_embed.go                   # Embedded frontend assets package\n├── cmd/\n│   └── haya-tab/                     # Application entry package\n│       ├── main.go                   # Application entry point\n│       ├── main_ios.go               # iOS entry shim\n│       ├── main_android.go           # Android entry shim\n│       ├── app_options_ios.go        # iOS runtime options\n│       └── app_options_default.go    # Non-iOS runtime options\n├── go.mod \u0026 go.sum                   # Go module dependencies\n├── Taskfile.yml                      # Top-level task entrypoint\n│\n├── internal/                         # Internal packages (not importable)\n│   └── app/                          # Core application logic\n│       ├── app.go                    # App struct, lifecycle management\n│       ├── app_tabs.go               # Tab CRUD operations\n│       ├── app_categories.go         # Category management\n│       ├── app_files.go              # File dialogs \u0026 sync triggers\n│       ├── app_settings.go           # Settings persistence\n│       ├── app_migration.go          # Data migration utilities\n│       ├── app_plugins.go            # Plugin management APIs\n│       ├── app_webdav.go             # WebDAV cloud operations \u0026 volume system\n│       ├── app_annotations.go        # Annotation WebDAV path mapping \u0026 sync helpers\n│       ├── app_webdav_helpers.go     # WebDAV fingerprint helpers (batch operations)\n│       ├── plugin_manager.go         # JS plugin runtime loader/executor\n│       ├── plugins/                  # Built-in/distributed plugin source\n│       ├── server.go                 # HTTP file server\n│       ├── disk_unix.go              # Unix disk operations\n│       └── disk_windows.go           # Windows disk operations\n│\n├── frontend/                         # Vue 3 + TypeScript + Vite frontend\n│   ├── src/\n│   │   ├── App.vue                   # Root component\n│   │   ├── main.ts                   # Frontend entry point\n│   │   ├── vite-env.d.ts             # Vite type definitions\n│   │   ├── assets/                   # Styles \u0026 icons\n│   │   ├── components/               # Reusable UI components\n│   │   │   ├── BatchActionBar.vue    # Batch operation controls\n│   │   │   ├── SettingsView.vue      # Settings panel\n│   │   │   ├── common/               # Generic components (ContextMenu, SearchBar, Toast)\n│   │   │   ├── grid/                 # Grid view components (TabCard, CategoryCard, TabGrid)\n│   │   │   ├── layout/               # Layout components (AppSidebar, SidebarTabItem)\n│   │   │   ├── modals/               # Modal dialogs (CloudPicker, WebDAV, Category, etc.)\n│   │   │   └── viewers/              # File viewers (PDF, Guitar Pro, MusicXML)\n│   │   ├── composables/              # Vue composables (useAlphaTab, useContextMenu, useToast)\n│   │   ├── stores/                   # Pinia state management\n│   │   │   ├── tabs.ts               # Tab state\n│   │   │   ├── settings.ts           # Application settings\n│   │   │   ├── ui.ts                 # UI state\n│   │   │   ├── viewers.ts            # Viewer state\n│   │   │   └── index.ts              # Store configuration\n│   │   ├── views/                    # Page-level components\n│   │   │   ├── HomeView.vue          # Landing page\n│   │   │   └── LibraryView.vue       # Main library interface\n│   │   ├── types/                    # TypeScript type definitions\n│   │   ├── i18n/                     # Internationalization setup\n│   │   │   └── locales/              # Translation files (EN, ZH-CN, ZH-TW, JA)\n│   │   └── bindings/                 # Auto-generated Wails v3 bindings\n│   ├── public/                       # Static assets\n│   │   ├── alphatab/                 # alphaTab library \u0026 soundfonts\n│   │   └── pdfjs/                    # PDF.js library \u0026 viewer\n│   ├── index.html                    # HTML entry point\n│   ├── package.json                  # Frontend dependencies\n│   ├── tsconfig.json                 # TypeScript configuration\n│   └── vite.config.ts                # Vite build configuration\n│\n├── pkg/                              # Shared packages\n│   ├── coverpool/                    # Concurrent download worker pool\n│   ├── logger/                       # Structured logging\n│   ├── metadata/                     # Tab metadata parsing\n│   │   ├── metadata.go               # Core metadata operations\n│   │   ├── parser_gpx.go             # Guitar Pro file parser\n│   │   ├── musicbrainz.go            # MusicBrainz API client\n│   │   ├── initial.go                # Title initial calculation\n│   │   └── gp_binary.go              # Binary format handlers\n│   ├── store/                        # SQLite database layer\n│   │   ├── database.go               # DB connection \u0026 management\n│   │   ├── database_annotations.go   # PDF annotation persistence\n│   │   ├── database_volumes.go       # Cloud volume operations\n│   │   ├── database_migration_volumes.go    # Volume system migrations\n│   │   ├── models.go                 # Data models (includes CloudVolume)\n│   │   ├── migration.go              # Schema migrations\n│   │   ├── crypto.go                 # Encryption utilities\n│   │   └── locale_*.go               # Platform-specific locale detection\n│   ├── sync/                         # File synchronization \u0026 WebDAV volume system\n│   │   ├── sync.go                   # Sync engine\n│   │   ├── webdav.go                 # WebDAV client \u0026 operations\n│   │   ├── volume.go                 # Volume fingerprinting \u0026 metadata tracking\n│   │   └── volume_sync.go            # Multi-device volume discovery \u0026 migration\n│   ├── watcher/                      # File system watcher\n│   │   └── watcher.go                # Watch folders for changes\n│   └── worker/                       # Background workers\n│       └── mb_worker.go              # MusicBrainz async worker\n│\n├── build/                            # Wails build output \u0026 assets\n│   ├── darwin/                       # macOS build resources\n│   └── windows/                      # Windows build resources\n│\n├── docs/                             # Documentation\n│   ├── WEBDAV.md                     # WebDAV setup guide\n│   ├── API.md                        # Backend API reference\n│   ├── ARCHITECTURE.md               # System architecture overview\n│   └── CONTRIBUTING.md               # Contribution guidelines\n│\n├── README.md                         # This file\n├── CHANGELOG.md                      # Version history\n├── LICENSE                           # Apache 2.0 License\n├── NOTICE                            # Attribution notices\n│\n├── .github/                          # GitHub configuration (workflows, etc.)\n├── .git/                             # Git repository metadata\n├── .gitignore \u0026 .gitattributes       # Version control settings\n└── frontend/package-lock.json        # Frozen frontend dependencies\n```\n\n## 🛠️ Tech Stack\n\n- **Backend**: Go + Wails v3\n- **Frontend**: Vue 3 + TypeScript + Vite\n- **State Management**: Pinia\n- **Internationalization**: vue-i18n\n- **Database**: SQLite (via modernc.org/sqlite) + FTS5\n- **Viewer Engine**: PDF.js \u0026 alphaTab\n\n## ⚖️ License \u0026 Legal Notice\n\nHAYA-TAB is open-sourced software licensed under the **Apache License 2.0**.\n\n### Terms and Conditions\n\nThis project is free for personal and commercial use, modification, and distribution, provided that:\n\n1. **License \u0026 Copyright**: You include a copy of the Apache 2.0 license and the original copyright notice in any substantial portion of the software.\n2. **State Changes**: You explicitly state significant changes made to the files.\n3. **No Liability**: The software is provided \"as is\", without warranty of any kind.\n\nSee the [LICENSE](LICENSE) file for the full legal text and [NOTICE](NOTICE) for attribution requirements.\n\n## 👤 Author\n\n**HAYASAKA7** - [cyanluxury267@gmail.com](mailto:cyanluxury267@gmail.com)\n\n![Stats from the past 12 weeks](https://repopulse-l41y.onrender.com/api/status?repo=HAYASAKA7/HAYA-TAB\u0026period=weekly\u0026count=12)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhayasaka7%2Fhaya-tab","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhayasaka7%2Fhaya-tab","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhayasaka7%2Fhaya-tab/lists"}