{"id":323531,"date":"2026-06-15T13:37:49","date_gmt":"2026-06-15T13:37:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/docsync-wp\/"},"modified":"2026-06-16T15:48:15","modified_gmt":"2026-06-16T15:48:15","slug":"brasth-document-sync-for-google-docs","status":"publish","type":"plugin","link":"https:\/\/bal.wordpress.org\/plugins\/brasth-document-sync-for-google-docs\/","author":17969265,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.2","stable_tag":"1.0.2","tested":"7.0","requires":"6.4","requires_php":"8.1","requires_plugins":null,"header_name":"Brasth Document Sync for Google Docs","header_author":"Brasth","header_description":"Sync Google Docs into WordPress posts and pages with self-managed Google OAuth.","assets_banners_color":"447caf","last_updated":"2026-06-16 15:48:15","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/docsyncwp.com\/","header_author_uri":"https:\/\/brasth.com\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":73,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"canvilled","date":"2026-06-15 13:37:25"},"1.0.2":{"tag":"1.0.2","author":"canvilled","date":"2026-06-16 15:48:15"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3573231,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3573231,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3573231,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3573231,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3573231,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1","1.0.2"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[4121,74387,96456,17784,17785],"plugin_category":[],"plugin_contributors":[267253],"plugin_business_model":[],"class_list":["post-323531","plugin","type-plugin","status-publish","hentry","plugin_tags-blocks","plugin_tags-content-sync","plugin_tags-editorial-workflow","plugin_tags-google-docs","plugin_tags-google-drive","plugin_contributors-canvilled","plugin_committers-canvilled"],"banners":{"banner":"https:\/\/ps.w.org\/brasth-document-sync-for-google-docs\/assets\/banner-772x250.png?rev=3573231","banner_2x":"https:\/\/ps.w.org\/brasth-document-sync-for-google-docs\/assets\/banner-1544x500.png?rev=3573231","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/brasth-document-sync-for-google-docs\/assets\/icon.svg?rev=3573231","icon":"https:\/\/ps.w.org\/brasth-document-sync-for-google-docs\/assets\/icon.svg?rev=3573231","icon_2x":false,"generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Brasth Document Sync for Google Docs helps editorial teams use Google Docs as the source of truth while publishing clean WordPress content. Site owners provide their own Google OAuth web client, each WordPress user connects their own Google account, and authorized users can browse accessible Google Docs, link a document to a post or page, and sync content into WordPress.<\/p>\n\n<p>The plugin exports Google Docs as HTML ZIP packages, imports embedded images into the WordPress Media Library, rewrites image URLs, sanitizes the resulting HTML, and converts common document structures to Gutenberg block markup. If Google blocks a large HTML ZIP export, Brasth Document Sync retries through the Google Docs API fallback before changing post content.<\/p>\n\n<p>Features include:<\/p>\n\n<ul>\n<li>Self-managed Google OAuth setup wizard.<\/li>\n<li>Server-side Google Drive document browser for My Drive and shared drives.<\/li>\n<li>Advanced Google Docs URL and raw file ID linking.<\/li>\n<li>Background sync through WP-Cron with source status and diagnostic logs.<\/li>\n<li>One-way Google Docs to WordPress sync for posts, pages, and enabled public custom post types.<\/li>\n<li>Media import for images exported from Google Docs.<\/li>\n<li>Gutenberg block markup for common headings, paragraphs, lists, tables, and images.<\/li>\n<li>Uninstall cleanup for settings, encrypted user tokens, and scheduled events.<\/li>\n<\/ul>\n\n<h4>External Services<\/h4>\n\n<p>Brasth Document Sync connects to Google services only after a site administrator saves a self-managed Google OAuth client ID and client secret and a WordPress user connects their Google account.<\/p>\n\n<p>This plugin sends requests to these Google services:<\/p>\n\n<ul>\n<li>Google OAuth 2.0 endpoints, to authorize a user's Google account and refresh access tokens.<\/li>\n<li>Google Drive API, to list visible Google Docs, shared drives, folders, document metadata, and HTML ZIP exports.<\/li>\n<li>Google Docs API, to read document structure when the large-document fallback is needed.<\/li>\n<\/ul>\n\n<p>Data sent to Google can include OAuth client details supplied by the site owner, OAuth authorization codes, refresh-token requests, connected-user access tokens, Drive file IDs, folder IDs, shared-drive IDs, search text entered in the Drive browser, pagination tokens, and document export\/read requests.<\/p>\n\n<p>Data received from Google can include the connected Google account email address, OAuth tokens, Google Docs titles, metadata, modified time, version identifiers, document export content, and image content URLs needed to import media into WordPress.<\/p>\n\n<p>Google's terms and privacy documents apply to these services:<\/p>\n\n<ul>\n<li>Google Privacy Policy: https:\/\/policies.google.com\/privacy<\/li>\n<li>Google API Services User Data Policy: https:\/\/developers.google.com\/terms\/api-services-user-data-policy<\/li>\n<li>Google APIs Terms of Service: https:\/\/developers.google.com\/terms<\/li>\n<\/ul>\n\n<p>Brasth Document Sync does not send Google data to a Brasth Document Sync vendor-hosted service in this release.<\/p>\n\n<h3>Privacy<\/h3>\n\n<p>Brasth Document Sync stores site-level Google OAuth client settings, encrypted per-user Google tokens, connected Google account email addresses, linked Google document metadata, source sync status, diagnostic sync events, and imported attachment metadata in the WordPress database.<\/p>\n\n<p>During document browsing and sync, Brasth Document Sync communicates with Google OAuth, Google Drive API, and Google Docs API as described in the External Services section. Imported Google Docs images are stored in the WordPress Media Library. Synced WordPress posts and imported media remain on the site until a user with sufficient permission changes or deletes them.<\/p>\n\n<p>Uninstall removes plugin settings, encrypted user Google tokens, and scheduled cron events. Linked post metadata is retained by default; define <code>DOCSYNC_WP_FULL_UNINSTALL<\/code> or return true from the <code>docsync_wp_full_uninstall<\/code> filter to remove Brasth Document Sync post metadata. Synced posts and imported media are not deleted automatically.<\/p>\n\n<h3>Source And Build Instructions<\/h3>\n\n<p>Human-readable frontend source is included in <code>resources\/<\/code>. Built assets are included in <code>build\/<\/code>.<\/p>\n\n<p>To rebuild the admin assets from source:<\/p>\n\n<ol>\n<li>Install PHP dependencies with <code>composer install<\/code>.<\/li>\n<li>Install frontend dependencies with <code>pnpm install --frozen-lockfile<\/code>.<\/li>\n<li>Build assets with <code>pnpm build<\/code>.<\/li>\n<\/ol>\n\n<p>The build uses Vite and writes <code>build\/manifest.json<\/code>, <code>build\/manifest.post-sync.json<\/code>, and hashed CSS\/JS assets. Runtime React is provided by WordPress through <code>wp-element<\/code>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>brasth-document-sync-for-google-docs<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the plugin ZIP through Plugins &gt; Add New &gt; Upload Plugin.<\/li>\n<li>Activate Brasth Document Sync from the WordPress Plugins screen.<\/li>\n<li>In Google Cloud, create or select a project.<\/li>\n<li>Enable the Google Drive API and Google Docs API.<\/li>\n<li>Configure the OAuth consent screen for the WordPress site users.<\/li>\n<li>Create an OAuth 2.0 Web application client.<\/li>\n<li>Add the authorized redirect URI shown in the Brasth Document Sync setup wizard.<\/li>\n<li>In WordPress admin, open Brasth Document Sync and save the OAuth client ID and client secret.<\/li>\n<li>Connect a Google account, browse or paste a Google Doc, and link it to a WordPress post or page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20brasth%20document%20sync%20provide%20a%20hosted%20google%20connector%3F\"><h3>Does Brasth Document Sync provide a hosted Google connector?<\/h3><\/dt>\n<dd><p>No. Version 1.0.1 uses self-managed Google OAuth. The site owner supplies the Google Cloud project and OAuth web client.<\/p><\/dd>\n<dt id=\"which%20google%20apis%20are%20required%3F\"><h3>Which Google APIs are required?<\/h3><\/dt>\n<dd><p>Enable both the Google Drive API and Google Docs API in the same Google Cloud project used by the OAuth client.<\/p><\/dd>\n<dt id=\"which%20google%20oauth%20scope%20is%20used%3F\"><h3>Which Google OAuth scope is used?<\/h3><\/dt>\n<dd><p>Brasth Document Sync uses <code>https:\/\/www.googleapis.com\/auth\/drive.readonly<\/code> so connected users can browse and sync Google Docs their account can read.<\/p><\/dd>\n<dt id=\"does%20sync%20delete%20wordpress%20posts%3F\"><h3>Does sync delete WordPress posts?<\/h3><\/dt>\n<dd><p>No. Sync updates the linked post content, and uninstall never deletes synced posts. Full post-meta cleanup is available only through the documented full-uninstall constant or filter.<\/p><\/dd>\n<dt id=\"what%20happens%20on%20low-traffic%20sites%3F\"><h3>What happens on low-traffic sites?<\/h3><\/dt>\n<dd><p>Manual and scheduled background syncs use WP-Cron. Low-traffic sites or sites with <code>DISABLE_WP_CRON<\/code> should configure a real server cron job that calls <code>wp-cron.php<\/code>.<\/p><\/dd>\n<dt id=\"are%20google%20oauth%20secrets%20and%20user%20tokens%20stored%20safely%3F\"><h3>Are Google OAuth secrets and user tokens stored safely?<\/h3><\/dt>\n<dd><p>Brasth Document Sync encrypts the site OAuth client secret and per-user Google tokens with WordPress salts before storage. Rotating WordPress salts invalidates those credentials and users must reconnect.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Aligned plugin version metadata for the 1.0.1 GitHub release package.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial WordPress.org-ready release.<\/li>\n<li>Added self-managed Google OAuth setup.<\/li>\n<li>Added Google Drive document browser and advanced URL\/file ID linking.<\/li>\n<li>Added one-way Google Docs to WordPress sync for posts, pages, and enabled public custom post types.<\/li>\n<li>Added HTML ZIP import, image sideloading, Gutenberg block conversion, background sync, and diagnostic logs.<\/li>\n<\/ul>","raw_excerpt":"Sync Google Docs into WordPress posts and pages with self-managed Google OAuth, a Drive browser, background sync, and Gutenberg output.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/323531","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=323531"}],"author":[{"embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/canvilled"}],"wp:attachment":[{"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=323531"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=323531"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=323531"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=323531"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=323531"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/bal.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=323531"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}