Skip to content

HAYASAKA7/HAYA-TAB

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

242 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

HAYA-TAB

A lightweight music tab manager for guitarists and musicians, built with Go and Wails.

Platform Version License

✨ Features

  • Tab Management - Organize your PDF, Guitar Pro (.gp, .gp5, .gpx), and MusicXML (.xml, .musicxml, .mxl) tabs in one place
  • Upload or Link - Upload tabs to internal storage or link existing files from your filesystem
  • Advanced Search - Instant Full-Text Search (FTS5) across titles, artists, and albums with fuzzy matching
  • Real-time Sync - Automatically watches synced folders for changes; Non-destructive import (renames duplicates)
  • Cloud Sync - WebDAV integration with multi-device support via volume fingerprints; on-demand cloud file access and uploads with automatic metadata tracking
  • 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
  • Smart Metadata - Auto-parse info from filenames; Bi-directional sync with Guitar Pro internal metadata
  • Tag Support - Add version/part tags (e.g., "Lead Guitar", "Bass", "First Version")
  • Plugin System - Extend functionality with JavaScript plugins (e.g., AI Metadata Enhancer)
  • Customizable Environment - Change storage locations for managed tabs and covers to customize your setup
  • Album Artwork - Automatic cover art fetching from iTunes; High-performance concurrent downloads
  • Categories - Organize tabs into virtual folders
  • Batch Operations - Select and move/delete multiple tabs at once
  • Rich Internal Viewer:
    • PDF: Built-in viewer with Auto-Scroll and non-destructive Annotation Layer (pen/highlighter/eraser)
    • Guitar Pro: alphaTab engine with Looping, Section Playback, Speed Control, and Floating Toolbar
  • 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.
  • Internationalization - Full support for English, Chinese (Simplified/Traditional), and Japanese; Auto-detects system language on first launch
  • Modern UI - Dark/Light theme, Auto-saving settings, and responsive Grid/List views

πŸ“¦ Installation

Pre-built Binary

Download the latest release from the Releases page.

🍎 macOS Users (Unverified Developer)

Since 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".

To fix this:

  1. Go to System Settings -> Privacy & Security.
  2. Scroll down to the Security section and click "Open Anyway" for HAYA-TAB.
  3. Alternatively, run the following command in your terminal to remove the quarantine attribute (assuming you moved the app to /Applications):
    xattr -cr /Applications/HAYA-TAB.app

Build from Source

  1. Ensure you have Go, Node.js (npm), and Wails (v3) installed

  2. Clone this repository

  3. Install frontend dependencies:

    cd frontend
    npm install
    cd ..
  4. Run the development server:

    wails3 task dev
  5. To build for production:

    # Build for current platform
    wails3 task build
    
    # Cross-platform builds
    wails3 task windows:build ARCH=amd64
    wails3 task darwin:build ARCH=amd64     # macOS Intel
    wails3 task darwin:build ARCH=arm64     # macOS Apple Silicon
    wails3 task linux:build ARCH=amd64

    Note: when cross-compiling from a different host OS, run wails3 task setup:docker once first.

Testing (E2E)

End-to-End UI integration tests are configured via Playwright. Note that your environment must support Node.js.

# Run headlessly against the Vite + Wails dev server
npx @go-task/cli test:e2e

# Run with Playwright UI visualizer for debugging
npx @go-task/cli test:e2e-ui

πŸš€ Usage

  1. Add Tabs: Right-click on empty space β†’ "Upload TAB" or "Link Local TAB"
  2. Organize: Create categories and move tabs into them
  3. Sync Folders: Go to Settings β†’ Add sync paths to auto-import tabs from folders
  4. Cloud Sync: Configure WebDAV in Settings to access your cloud library. See WebDAV Guide.
  5. 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.
  6. View Tabs: Click a tab to open with system default, or right-click β†’ "Open with Inner Viewer"
  7. Key Bindings: Customize viewer controls (Loop, Auto-scroll, etc.) in Settings

πŸ“ Project Structure

β”œβ”€β”€ assets_embed.go                   # Embedded frontend assets package
β”œβ”€β”€ cmd/
β”‚   └── haya-tab/                     # Application entry package
β”‚       β”œβ”€β”€ main.go                   # Application entry point
β”‚       β”œβ”€β”€ main_ios.go               # iOS entry shim
β”‚       β”œβ”€β”€ main_android.go           # Android entry shim
β”‚       β”œβ”€β”€ app_options_ios.go        # iOS runtime options
β”‚       └── app_options_default.go    # Non-iOS runtime options
β”œβ”€β”€ go.mod & go.sum                   # Go module dependencies
β”œβ”€β”€ Taskfile.yml                      # Top-level task entrypoint
β”‚
β”œβ”€β”€ internal/                         # Internal packages (not importable)
β”‚   └── app/                          # Core application logic
β”‚       β”œβ”€β”€ app.go                    # App struct, lifecycle management
β”‚       β”œβ”€β”€ app_tabs.go               # Tab CRUD operations
β”‚       β”œβ”€β”€ app_categories.go         # Category management
β”‚       β”œβ”€β”€ app_files.go              # File dialogs & sync triggers
β”‚       β”œβ”€β”€ app_settings.go           # Settings persistence
β”‚       β”œβ”€β”€ app_migration.go          # Data migration utilities
β”‚       β”œβ”€β”€ app_plugins.go            # Plugin management APIs
β”‚       β”œβ”€β”€ app_webdav.go             # WebDAV cloud operations & volume system
β”‚       β”œβ”€β”€ app_annotations.go        # Annotation WebDAV path mapping & sync helpers
β”‚       β”œβ”€β”€ app_webdav_helpers.go     # WebDAV fingerprint helpers (batch operations)
β”‚       β”œβ”€β”€ plugin_manager.go         # JS plugin runtime loader/executor
β”‚       β”œβ”€β”€ plugins/                  # Built-in/distributed plugin source
β”‚       β”œβ”€β”€ server.go                 # HTTP file server
β”‚       β”œβ”€β”€ disk_unix.go              # Unix disk operations
β”‚       └── disk_windows.go           # Windows disk operations
β”‚
β”œβ”€β”€ frontend/                         # Vue 3 + TypeScript + Vite frontend
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ App.vue                   # Root component
β”‚   β”‚   β”œβ”€β”€ main.ts                   # Frontend entry point
β”‚   β”‚   β”œβ”€β”€ vite-env.d.ts             # Vite type definitions
β”‚   β”‚   β”œβ”€β”€ assets/                   # Styles & icons
β”‚   β”‚   β”œβ”€β”€ components/               # Reusable UI components
β”‚   β”‚   β”‚   β”œβ”€β”€ BatchActionBar.vue    # Batch operation controls
β”‚   β”‚   β”‚   β”œβ”€β”€ SettingsView.vue      # Settings panel
β”‚   β”‚   β”‚   β”œβ”€β”€ common/               # Generic components (ContextMenu, SearchBar, Toast)
β”‚   β”‚   β”‚   β”œβ”€β”€ grid/                 # Grid view components (TabCard, CategoryCard, TabGrid)
β”‚   β”‚   β”‚   β”œβ”€β”€ layout/               # Layout components (AppSidebar, SidebarTabItem)
β”‚   β”‚   β”‚   β”œβ”€β”€ modals/               # Modal dialogs (CloudPicker, WebDAV, Category, etc.)
β”‚   β”‚   β”‚   └── viewers/              # File viewers (PDF, Guitar Pro, MusicXML)
β”‚   β”‚   β”œβ”€β”€ composables/              # Vue composables (useAlphaTab, useContextMenu, useToast)
β”‚   β”‚   β”œβ”€β”€ stores/                   # Pinia state management
β”‚   β”‚   β”‚   β”œβ”€β”€ tabs.ts               # Tab state
β”‚   β”‚   β”‚   β”œβ”€β”€ settings.ts           # Application settings
β”‚   β”‚   β”‚   β”œβ”€β”€ ui.ts                 # UI state
β”‚   β”‚   β”‚   β”œβ”€β”€ viewers.ts            # Viewer state
β”‚   β”‚   β”‚   └── index.ts              # Store configuration
β”‚   β”‚   β”œβ”€β”€ views/                    # Page-level components
β”‚   β”‚   β”‚   β”œβ”€β”€ HomeView.vue          # Landing page
β”‚   β”‚   β”‚   └── LibraryView.vue       # Main library interface
β”‚   β”‚   β”œβ”€β”€ types/                    # TypeScript type definitions
β”‚   β”‚   β”œβ”€β”€ i18n/                     # Internationalization setup
β”‚   β”‚   β”‚   └── locales/              # Translation files (EN, ZH-CN, ZH-TW, JA)
β”‚   β”‚   └── bindings/                 # Auto-generated Wails v3 bindings
β”‚   β”œβ”€β”€ public/                       # Static assets
β”‚   β”‚   β”œβ”€β”€ alphatab/                 # alphaTab library & soundfonts
β”‚   β”‚   └── pdfjs/                    # PDF.js library & viewer
β”‚   β”œβ”€β”€ index.html                    # HTML entry point
β”‚   β”œβ”€β”€ package.json                  # Frontend dependencies
β”‚   β”œβ”€β”€ tsconfig.json                 # TypeScript configuration
β”‚   └── vite.config.ts                # Vite build configuration
β”‚
β”œβ”€β”€ pkg/                              # Shared packages
β”‚   β”œβ”€β”€ coverpool/                    # Concurrent download worker pool
β”‚   β”œβ”€β”€ logger/                       # Structured logging
β”‚   β”œβ”€β”€ metadata/                     # Tab metadata parsing
β”‚   β”‚   β”œβ”€β”€ metadata.go               # Core metadata operations
β”‚   β”‚   β”œβ”€β”€ parser_gpx.go             # Guitar Pro file parser
β”‚   β”‚   β”œβ”€β”€ musicbrainz.go            # MusicBrainz API client
β”‚   β”‚   β”œβ”€β”€ initial.go                # Title initial calculation
β”‚   β”‚   └── gp_binary.go              # Binary format handlers
β”‚   β”œβ”€β”€ store/                        # SQLite database layer
β”‚   β”‚   β”œβ”€β”€ database.go               # DB connection & management
β”‚   β”‚   β”œβ”€β”€ database_annotations.go   # PDF annotation persistence
β”‚   β”‚   β”œβ”€β”€ database_volumes.go       # Cloud volume operations
β”‚   β”‚   β”œβ”€β”€ database_migration_volumes.go    # Volume system migrations
β”‚   β”‚   β”œβ”€β”€ models.go                 # Data models (includes CloudVolume)
β”‚   β”‚   β”œβ”€β”€ migration.go              # Schema migrations
β”‚   β”‚   β”œβ”€β”€ crypto.go                 # Encryption utilities
β”‚   β”‚   └── locale_*.go               # Platform-specific locale detection
β”‚   β”œβ”€β”€ sync/                         # File synchronization & WebDAV volume system
β”‚   β”‚   β”œβ”€β”€ sync.go                   # Sync engine
β”‚   β”‚   β”œβ”€β”€ webdav.go                 # WebDAV client & operations
β”‚   β”‚   β”œβ”€β”€ volume.go                 # Volume fingerprinting & metadata tracking
β”‚   β”‚   └── volume_sync.go            # Multi-device volume discovery & migration
β”‚   β”œβ”€β”€ watcher/                      # File system watcher
β”‚   β”‚   └── watcher.go                # Watch folders for changes
β”‚   └── worker/                       # Background workers
β”‚       └── mb_worker.go              # MusicBrainz async worker
β”‚
β”œβ”€β”€ build/                            # Wails build output & assets
β”‚   β”œβ”€β”€ darwin/                       # macOS build resources
β”‚   └── windows/                      # Windows build resources
β”‚
β”œβ”€β”€ docs/                             # Documentation
β”‚   β”œβ”€β”€ WEBDAV.md                     # WebDAV setup guide
β”‚   β”œβ”€β”€ API.md                        # Backend API reference
β”‚   β”œβ”€β”€ ARCHITECTURE.md               # System architecture overview
β”‚   └── CONTRIBUTING.md               # Contribution guidelines
β”‚
β”œβ”€β”€ README.md                         # This file
β”œβ”€β”€ CHANGELOG.md                      # Version history
β”œβ”€β”€ LICENSE                           # Apache 2.0 License
β”œβ”€β”€ NOTICE                            # Attribution notices
β”‚
β”œβ”€β”€ .github/                          # GitHub configuration (workflows, etc.)
β”œβ”€β”€ .git/                             # Git repository metadata
β”œβ”€β”€ .gitignore & .gitattributes       # Version control settings
└── frontend/package-lock.json        # Frozen frontend dependencies

πŸ› οΈ Tech Stack

  • Backend: Go + Wails v3
  • Frontend: Vue 3 + TypeScript + Vite
  • State Management: Pinia
  • Internationalization: vue-i18n
  • Database: SQLite (via modernc.org/sqlite) + FTS5
  • Viewer Engine: PDF.js & alphaTab

βš–οΈ License & Legal Notice

HAYA-TAB is open-sourced software licensed under the Apache License 2.0.

Terms and Conditions

This project is free for personal and commercial use, modification, and distribution, provided that:

  1. License & Copyright: You include a copy of the Apache 2.0 license and the original copyright notice in any substantial portion of the software.
  2. State Changes: You explicitly state significant changes made to the files.
  3. No Liability: The software is provided "as is", without warranty of any kind.

See the LICENSE file for the full legal text and NOTICE for attribution requirements.

πŸ‘€ Author

HAYASAKA7 - cyanluxury267@gmail.com

Stats from the past 12 weeks