{"id":321670,"date":"2026-06-29T10:57:19","date_gmt":"2026-06-29T10:57:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/pb-gig-diary\/"},"modified":"2026-06-29T10:56:43","modified_gmt":"2026-06-29T10:56:43","slug":"pb-gig-diary","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/pb-gig-diary\/","author":23510113,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"3.7.38","stable_tag":"3.7.38","tested":"7.0","requires":"6.3","requires_php":"8.1","requires_plugins":null,"header_name":"PB Gig Diary","header_author":"Pure Baltic","header_description":"Band gig management with Google Calendar sync. Add venues and gigs via the admin, display them publicly via shortcode, and keep a Google Calendar in sync automatically.","assets_banners_color":"","last_updated":"2026-06-29 10:56:43","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/purebaltic.co.uk\/gigdiary","header_author_uri":"https:\/\/purebaltic.co.uk","rating":0,"author_block_rating":0,"active_installs":0,"downloads":35,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"3.7.38":{"tag":"3.7.38","author":"purebaltic","date":"2026-06-29 10:56:43"}},"upgrade_notice":{"2.7.8":"<p>Recommended update \u2014 adds branding assets and prepares for WordPress.org submission.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":{"pb-gig-diary\/next-gig":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pb-gig-diary\/next-gig","version":"1.0.0","title":"Next Gig","category":"widgets","icon":"calendar-alt","description":"Displays a compact line showing your next upcoming gig \u2014 ideal for a footer or sidebar on block-based themes.","keywords":["gig","next show","upcoming","band","music"],"textdomain":"pb-gig-diary","attributes":{"artist":{"type":"string","default":""}},"supports":{"html":false,"align":false},"editorScript":"pb-gig-diary-next-gig-block-editor","render":"file:.\/render.php"},"pb-gig-diary\/gig-list":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"pb-gig-diary\/gig-list","version":"1.3.0","title":"Gig List","category":"widgets","icon":"calendar-alt","description":"Display upcoming and past gigs from PB Gig Diary.","keywords":["gigs","shows","band","music","concerts"],"textdomain":"pb-gig-diary","attributes":{"upcomingHeading":{"type":"string","default":"Upcoming Shows"},"pastHeading":{"type":"string","default":"Past Shows"},"upcomingOnly":{"type":"boolean","default":false},"pastOnly":{"type":"boolean","default":false},"count":{"type":"number","default":0},"year":{"type":"number","default":0},"maxWidth":{"type":"string","default":""}},"supports":{"html":false,"align":["wide","full"]},"editorScript":"pb-gig-diary-block-editor","render":"file:.\/render.php"}},"tagged_versions":["3.7.38"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Public gig listing \u2014 upcoming and past shows displayed automatically with venue details, status badges and setlist links","2":"Gig diary admin \u2014 manage all your gigs with sortable columns, fee tracking, and quick actions","3":"Setlist builder \u2014 drag-and-drop setlist with song library, timing calculator and projected end time","4":"Songs library \u2014 full catalogue with musical keys, durations and original artists","5":"Licence settings \u2014 tier badges, credit usage, pricing grid with Buy Now links","6":"Public setlist page \u2014 clean shareable setlist page with sets, songs and durations"}},"plugin_section":[],"plugin_tags":[12700,269460,4743,218,55698],"plugin_category":[50],"plugin_contributors":[269461],"plugin_business_model":[],"class_list":["post-321670","plugin","type-plugin","status-publish","hentry","plugin_tags-band","plugin_tags-gig-diary","plugin_tags-google-calendar","plugin_tags-music","plugin_tags-setlist","plugin_category-media","plugin_contributors-purebaltic","plugin_committers-purebaltic"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/pb-gig-diary.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>PB Gig Diary<\/strong> is a WordPress plugin built by working musicians, for working musicians. It keeps your gig diary, setlists, song library, and Google Calendar in sync \u2014 from a single, straightforward admin interface.<\/p>\n\n<p>Whether you're a solo artist managing your own bookings or a booking agency handling multiple acts, PB Gig Diary brings everything together in one place. No spreadsheets, no double-entry, no missed dates.<\/p>\n\n<h4>Free features<\/h4>\n\n<ul>\n<li><strong>Gig listings shortcode<\/strong> \u2014 add <code>[pb_gig_diary]<\/code> to any page to display upcoming and past gigs automatically<\/li>\n<li><strong>Venue management<\/strong> \u2014 store venue details, addresses, and contact information<\/li>\n<li><strong>Artist management<\/strong> \u2014 manage one artist per free install<\/li>\n<li><strong>Status tracking<\/strong> \u2014 confirmed, provisional, cancelled, and private gig statuses<\/li>\n<li><strong>Hide from website<\/strong> \u2014 keep gigs in your diary without publishing them publicly<\/li>\n<\/ul>\n\n<h4>Premium features (paid licence required)<\/h4>\n\n<p><strong>Starter<\/strong> \u2014 Google Calendar sync, artist shortcodes, import\/export<\/p>\n\n<p><strong>Pro<\/strong> \u2014 Unavailability tracking, hidden fees and private notes, style editor<\/p>\n\n<p><strong>Studio<\/strong> \u2014 Songs library, setlist builder with drag-and-drop, public setlist pages, timing calculator, share setlist with band<\/p>\n\n<p><strong>Agency<\/strong> \u2014 All Studio features for up to 5, 15, or 50 artists from a single install, REST API for publishing to band websites<\/p>\n\n<h4>Key features (paid)<\/h4>\n\n<ul>\n<li><strong>Google Calendar sync<\/strong> \u2014 add or update a gig and the calendar updates automatically. Cancellations handled too.<\/li>\n<li><strong>Setlist builder<\/strong> \u2014 build setlists with drag-and-drop ordering, copy sets between gigs, mark songs as played or dropped<\/li>\n<li><strong>Timing calculator<\/strong> \u2014 enter your start time, gap between songs, and break between sets \u2014 projected finish time updates live<\/li>\n<li><strong>Public setlist pages<\/strong> \u2014 every gig with a public setlist gets its own shareable page at <code>\/setlist\/{id}\/<\/code><\/li>\n<li><strong>Songs library<\/strong> \u2014 full song catalogue with keys, durations, and original artists. Publish your repertoire via shortcode.<\/li>\n<li><strong>Share setlist<\/strong> \u2014 one click generates a formatted text setlist ready to paste into WhatsApp or email<\/li>\n<li><strong>Import \/ Export<\/strong> \u2014 CSV import and export for gigs, venues, artists, and songs<\/li>\n<li><strong>Style editor<\/strong> \u2014 customise colours, fonts, and layout of your public gig listings without touching code<\/li>\n<li><strong>Multi-artist<\/strong> (Agency) \u2014 manage multiple acts from one install with full data separation<\/li>\n<\/ul>\n\n<h4>Shortcodes<\/h4>\n\n<ul>\n<li><code>[pb_gig_diary]<\/code> \u2014 full upcoming and past gig listing<\/li>\n<li><code>[pb_gig_diary upcoming_only=\"yes\"]<\/code> \u2014 upcoming gigs only<\/li>\n<li><code>[pb_gig_diary past_only=\"yes\"]<\/code> \u2014 past gigs only<\/li>\n<li><code>[pb_gig_diary count=\"5\"]<\/code> \u2014 next 5 upcoming gigs<\/li>\n<li><code>[pb_gig_diary year=\"2025\"]<\/code> \u2014 all gigs from a specific year<\/li>\n<li><code>[pb_gig_diary artist=\"haarlem\"]<\/code> \u2014 filter by artist slug (Agency)<\/li>\n<li><code>[pb_artist_repertoire]<\/code> \u2014 full song repertoire (Studio+)<\/li>\n<li><code>[pb_artist_setlist gig_id=123]<\/code> \u2014 embed a setlist on any page (Studio+)<\/li>\n<\/ul>\n\n<h4>For booking agencies<\/h4>\n\n<p>PB Gig Diary Agency lets you manage all your acts from a single WordPress install. Each artist's data is fully separate. Gig listings and repertoires can be published to individual band websites via the REST API and free companion plugin.<\/p>\n\n<p>Add a gig once \u2014 it appears on your agency site, the artist's own website, and their Google Calendar automatically.<\/p>\n\n<h4>Privacy<\/h4>\n\n<p>PB Gig Diary does not collect any personal data from your website visitors. Licence validation communicates with api.keygen.sh to verify your licence key. No visitor data is sent to any third party.<\/p>\n\n<h3>External Services<\/h3>\n\n<p>PB Gig Diary (free version) does not connect to any external service, API, or third party. All gig, venue, and artist data is stored entirely in your WordPress database. No data is sent anywhere outside your own site.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>pb-gig-diary<\/code> folder to <code>\/wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin through the <strong>Plugins<\/strong> menu in WordPress<\/li>\n<li>Navigate to <strong>Gig Diary \u2192 Gigs<\/strong> to add your first gig<\/li>\n<li>Add <code>[pb_gig_diary]<\/code> to any page to display your gig listings<\/li>\n<li>To unlock premium features, purchase a licence at <a href=\"https:\/\/purebaltic.co.uk\/gigdiary\">purebaltic.co.uk\/gigdiary<\/a> and enter your key under <strong>Gig Diary \u2192 Settings \u2192 Licence<\/strong><\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20the%20plugin%20work%20without%20a%20licence%3F\"><h3>Does the plugin work without a licence?<\/h3><\/dt>\n<dd><p>Yes \u2014 the free version includes the core gig listings shortcode with no licence required. Purchase a licence to unlock Google Calendar sync, setlists, songs library, and more.<\/p><\/dd>\n<dt id=\"will%20my%20plugin%20stop%20working%20when%20the%20licence%20expires%3F\"><h3>Will my plugin stop working when the licence expires?<\/h3><\/dt>\n<dd><p>No. Your plugin continues to work indefinitely. After 12 months, updates and new features require a renewal at 50% of the original price \u2014 but everything you have keeps working.<\/p><\/dd>\n<dt id=\"can%20i%20use%20the%20plugin%20on%20multiple%20sites%3F\"><h3>Can I use the plugin on multiple sites?<\/h3><\/dt>\n<dd><p>Each licence covers one WordPress installation. For multiple sites, purchase a licence per site, or consider an Agency licence which supports multiple artists.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20i%20need%20to%20move%20to%20a%20new%20server%3F\"><h3>What happens if I need to move to a new server?<\/h3><\/dt>\n<dd><p>Deactivate your licence in the plugin settings, then reactivate it on your new server. Licences are machine-based and can be transferred.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20my%20theme%3F\"><h3>Does it work with my theme?<\/h3><\/dt>\n<dd><p>Yes \u2014 PB Gig Diary works with any WordPress theme. The gig listings use minimal styling that inherits from your theme, with optional style customisation available on Pro and above.<\/p><\/dd>\n<dt id=\"what%20version%20of%20wordpress%20and%20php%20do%20i%20need%3F\"><h3>What version of WordPress and PHP do I need?<\/h3><\/dt>\n<dd><p>PB Gig Diary requires WordPress 6.3 or above and PHP 8.1 or above.<\/p><\/dd>\n<dt id=\"is%20there%20a%20trial%3F\"><h3>Is there a trial?<\/h3><\/dt>\n<dd><p>A 14-day full-feature trial is available. In the meantime, the free version gives you a taste of the plugin with no licence required.<\/p><\/dd>\n<dt id=\"how%20does%20google%20calendar%20sync%20work%3F\"><h3>How does Google Calendar sync work?<\/h3><\/dt>\n<dd><p>You connect a Google Calendar during setup using a Google service account. When you add or update a gig in WordPress, PB Gig Diary automatically creates or updates the corresponding event in your calendar. Cancellations are handled too.<\/p><\/dd>\n<dt id=\"where%20can%20i%20get%20support%3F\"><h3>Where can I get support?<\/h3><\/dt>\n<dd><p>Visit <a href=\"https:\/\/purebaltic.co.uk\/gigdiary\">purebaltic.co.uk\/gigdiary<\/a> for documentation and support, or use the support forum on WordPress.org.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>3.7.38<\/h4>\n\n<ul>\n<li>Fixed: two false-positive \"unescaped DB parameter\" warnings (class-gig-repository.php's get_upcoming\/get_past, uninstall.php's table-drop loop) that had already been diagnosed and suppressed in the commercial build, but never propagated to this build \u2014 found via a fresh Plugin Check run, confirmed by cross-checking suppression-comment counts between both builds for every shared file.<\/li>\n<\/ul>\n\n<h4>3.7.37<\/h4>\n\n<ul>\n<li>Added: one-time, idempotent migration carrying over existing values from the mr_-prefixed options renamed in 3.7.36 to their new pbgd_-prefixed names<\/li>\n<li>(includes\/class-activator.php)<\/li>\n<\/ul>\n\n<h4>3.7.36<\/h4>\n\n<ul>\n<li>Fixed: iCal feed's UID line and the gig-listing widget's time fragment were missing context-appropriate escaping \u2014 found in WP.org's second review round. The UID now uses the same ical_escape() helper already applied to SUMMARY\/LOCATION\/DESCRIPTION elsewhere in the same feed; the widget time is now wrapped in esc_html().<\/li>\n<li>Changed: all remaining mr_-prefixed option names and form-field\/HTML-id names renamed to the pbgd_ prefix (mr_artist_name, mr_default_age_restriction, mr_default_country, plus several more found via a full sweep, not just the three the reviewer named as examples). No existing installs affected \u2014 confirmed with no live customers on these option names before renaming.<\/li>\n<li>(includes\/class-feeds.php, public\/class-widget.php, admin\/class-admin-settings.php, admin\/views\/page-settings.php, admin\/class-admin-page.php, includes\/class-config.php, includes\/class-activator.php, uninstall.php)<\/li>\n<\/ul>\n\n<h4>3.7.35<\/h4>\n\n<ul>\n<li>Changed: setlist \"Start time\" control (dead code in this build, but kept in sync with the commercial build for consistency) updated to match the same fix \u2014 read-only, live-derived from the gig's Start time field rather than an independently-editable, never-actually-saved snapshot<\/li>\n<\/ul>\n\n<h4>3.7.34<\/h4>\n\n<ul>\n<li>Changed: four global functions (gd_render_table, gd_map_url, gd_address_line, gd_extras in public\/views\/gig-table.php and gig-helpers.php) renamed to the pbgd_ prefix \u2014 found via a fresh Plugin Check run, missed by the earlier prefix rename since that pass specifically targeted pb_-prefixed names and never searched for gd_-prefixed ones<\/li>\n<li>Changed: suppressed a \"development function\" warning on the intentional, gated error_log() call added for uninstall.php's failure logging, with an explanatory comment rather than removing the diagnostic<\/li>\n<\/ul>\n\n<h4>3.7.33<\/h4>\n\n<ul>\n<li>Fixed: a failed DROP TABLE during uninstall (e.g. a database user without DROP privilege) now logs to debug.log instead of failing silently \u2014 found via a real install where the mr_gigs\/mr_venues\/mr_artists tables survived a full deactivate+delete cycle while most options were correctly removed, which only makes sense if the table drop failed without anyone knowing<\/li>\n<\/ul>\n\n<h4>3.7.32<\/h4>\n\n<ul>\n<li>Fixed: uninstall.php wasn't cleaning up several option rows (mr_default_song_gap, mr_default_set_break, plus a few defensive entries) \u2014 found via a real install, confirmed the uninstall mechanism itself works correctly, this was specifically about two settings orphaned by the 3.7.30 removal that were never added to the cleanup list<\/li>\n<\/ul>\n\n<h4>3.7.31<\/h4>\n\n<ul>\n<li>Changed: Help tab no longer references any feature absent from this build \u2014 removed the Google Calendar Setup and Import sections (both reduced to a one-line \"requires a paid licence\" message anyway), removed Fee\/Private notes\/Unavailability rows from reference tables, removed a Google Calendar mention from the Getting Started steps and the artist name field's description, and removed the now-pointless tier badge from the Shortcodes table since every remaining shortcode is free<\/li>\n<\/ul>\n\n<h4>3.7.30<\/h4>\n\n<ul>\n<li>Critical: Fee, Private notes, and Band Members Unavailability tracking removed entirely from this free version, rather than left unrestricted as in 3.7.27. Per the agreed feature set, these are Starter-tier-and-above features in the commercial product and should not appear in the free version at all \u2014 distinct from, and a step beyond, simply ensuring they weren't tier-gated.<\/li>\n<li>Removed: the \"Add Unavailability\" button, the Unavailability tab on the Gigs list, and the per-gig \"Who is unavailable\" member picker (and its now-unused settings field)<\/li>\n<li>Removed: two orphaned Setlist-only settings (\"Default gap between songs\", \"Default break between sets\") that had no working consumer in this version<\/li>\n<li>Fixed: a stale admin notice that still referenced unavailability tracking and hidden fees as Pro-exclusive \u2014 both are correctly Starter-tier and the wording was out of sync with the commercial build<\/li>\n<\/ul>\n\n<h4>3.7.29<\/h4>\n\n<ul>\n<li>Fixed: gig form's Age restriction dropdown was missing the \"All Ages\/Licensed\" preset, even though it's the site-wide default set in Settings \u2014 new gigs were defaulting into the free-text \"Other\u2026\" field instead of a clean preset match<\/li>\n<\/ul>\n\n<h4>3.7.28<\/h4>\n\n<ul>\n<li>Changed: AJAX action\/hook names renamed to use the same distinctive prefix (pbgd_) as the rest of the plugin's identifiers \u2014 completes the naming-consistency work from 3.7.27<\/li>\n<\/ul>\n\n<h4>3.7.27<\/h4>\n\n<ul>\n<li>Critical: removed all tier-based gating of built-in functionality (hidden fees\/private notes fields, unavailability tracking, and a leftover free-tier artist restriction) in response to WordPress.org review feedback \u2014 none of this plugin's functionality is restricted by licence tier<\/li>\n<li>Removed: passwordless \"magic login\" link feature entirely \u2014 Gig Editor role now uses standard WordPress login only<\/li>\n<li>Fixed: explicit sanitisation added on an admin notice value (output was already escaped, but input sanitisation was missing)<\/li>\n<li>Fixed: all inline <code>&lt;script&gt;<\/code>\/<code>&lt;style&gt;<\/code> tags moved to properly enqueued external files<\/li>\n<li>Changed: internal function and constant names renamed to use a longer, more distinctive prefix (pbgd_\/PBGD_) to avoid any possible naming collision with other plugins \u2014 no functional or stored-data changes, this is a code-level rename only<\/li>\n<\/ul>\n\n<h4>3.7.26<\/h4>\n\n<ul>\n<li>Fixed: \"Translation loading triggered too early\" notice (WordPress 6.7+) \u2014 plugin bootstrap moved from the <code>plugins_loaded<\/code> hook to <code>init<\/code><\/li>\n<\/ul>\n\n<h4>3.7.25<\/h4>\n\n<ul>\n<li>Changed: Fee and Private notes fields on the gig form are now a Starter-tier feature, matching the commercial version \u2014 they no longer appear in this free version, and any value submitted for them is not saved. If you were already using these fields, that data is preserved in the database but will be cleared the next time you save that gig while running this free version.<\/li>\n<li>Changed: comparison table updated to show Hidden fees &amp; private notes under Starter rather than Pro<\/li>\n<\/ul>\n\n<h4>3.7.24<\/h4>\n\n<ul>\n<li>Fixed: removed leftover premium-feature code that should not have shipped in the free version, including a reference that could trigger an error if accessed directly<\/li>\n<li>Added: new \"Go Premium\" tab under Settings, with a feature comparison table and links to the free trial and pricing<\/li>\n<li>Added: \"Go Premium\" link in the main menu<\/li>\n<li>Changed: Unavailability tracking now correctly shown as a Starter-tier feature, not Pro<\/li>\n<li>Improved: input sanitisation and nonce handling across several admin screens<\/li>\n<\/ul>\n\n<h4>3.7.23<\/h4>\n\n<ul>\n<li>Help tab: CSS Class Reference is now collapsed by default<\/li>\n<li>Settings: artist-filter shortcode example correctly limited to tiers that support it<\/li>\n<\/ul>\n\n<h4>3.7.21<\/h4>\n\n<ul>\n<li>Added: new \"Next Gig\" Gutenberg block for block-based themes that don't have the classic Widgets screen \u2014 available on every tier, same data as the existing shortcode\/widget<\/li>\n<\/ul>\n\n<h4>3.7.20<\/h4>\n\n<ul>\n<li>Fixed: Gig List block failing to appear in the block inserter on some block-based themes<\/li>\n<\/ul>\n\n<h4>3.7.0<\/h4>\n\n<ul>\n<li>WP Plugin Checker compliance pass: bundled third-party JS\/CSS locally instead of loading from a CDN; various output-escaping fixes<\/li>\n<\/ul>\n\n<h4>3.6.4 \u2014 3.6.9<\/h4>\n\n<ul>\n<li>Fixed iCal feed time labels showing an incorrect hour offset<\/li>\n<li>Added bulk delete for gigs and venues<\/li>\n<\/ul>\n\n<h4>2.9.0<\/h4>\n\n<ul>\n<li>Gig list period filter \u2014 All, Upcoming, Past with correct sort order<\/li>\n<li>Default age restriction dropdown in General settings<\/li>\n<li>Artist name in General settings now syncs to Artists table<\/li>\n<li>DB schema fixed for fresh installs<\/li>\n<\/ul>\n\n<h4>2.8.4<\/h4>\n\n<ul>\n<li>Self-hosted update mechanism \u2014 automatic updates via purebaltic.co.uk<\/li>\n<li>Flatpickr date\/time picker bundled locally (WP.org compliance)<\/li>\n<li>All translatable strings corrected<\/li>\n<li>readme.txt and LICENSE.txt added<\/li>\n<\/ul>\n\n<h4>2.8.0<\/h4>\n\n<ul>\n<li>WordPress.org compliance fixes<\/li>\n<li>Pure Baltic branding \u2014 admin menu icon and page heading icons<\/li>\n<li>WordPress.org banner and icon assets<\/li>\n<\/ul>\n\n<h4>2.7.5<\/h4>\n\n<ul>\n<li>Stripe\/Keygen commercial infrastructure<\/li>\n<li>Pricing grid with Buy Now buttons on licence tab<\/li>\n<li>Upgrade and downgrade warnings<\/li>\n<\/ul>\n\n<h4>2.6.x<\/h4>\n\n<ul>\n<li>Setlist timing calculator \u2014 start time, gap between songs, break between sets, projected end time<\/li>\n<li>Recording URL field with YouTube and SoundCloud auto-embed on public setlist page<\/li>\n<li>Share setlist button in admin setlist builder<\/li>\n<li>Feature gating per tier (Starter\/Pro\/Studio\/Agency)<\/li>\n<li>Automatic permalink flush on version change<\/li>\n<\/ul>\n\n<h4>2.5.x<\/h4>\n\n<ul>\n<li>Public setlist pages at \/setlist\/{gig_id}\/<\/li>\n<li>View setlist link on public gig listings<\/li>\n<li>Repertoire shortcode [pb_artist_repertoire]<\/li>\n<li>Setlist shortcode [pb_artist_setlist gig_id=123]<\/li>\n<li>Artist slug field in General settings<\/li>\n<\/ul>\n\n<h4>2.4.x<\/h4>\n\n<ul>\n<li>Setlist builder with drag-and-drop ordering<\/li>\n<li>Copy set between gigs<\/li>\n<li>Position-aware song insertion<\/li>\n<li>Set label editing<\/li>\n<\/ul>\n\n<h4>2.3.x<\/h4>\n\n<ul>\n<li>Songs library \u2014 full CRUD with active\/inactive filter<\/li>\n<li>Songs import and export via CSV<\/li>\n<li>Song duration in H:MM:SS format<\/li>\n<\/ul>\n\n<h4>2.2.x<\/h4>\n\n<ul>\n<li>Google Calendar colour palette corrected to match Google API<\/li>\n<li>Unavailability tracking with band member assignment<\/li>\n<li>Inline venue editing with fee and timing columns<\/li>\n<\/ul>\n\n<h4>2.0.x<\/h4>\n\n<ul>\n<li>Multi-artist support with agency licence<\/li>\n<li>Per-artist Google Calendar configuration<\/li>\n<li>Artist filter on gig listings<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<\/ul>","raw_excerpt":"Gig management for working musicians. Publish gig listings, build setlists, sync to Google Calendar \u2014 all from your WordPress admin.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/321670","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=321670"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/purebaltic"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=321670"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=321670"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=321670"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=321670"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=321670"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=321670"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}