npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

joplin-plugin-google-docs

v1.0.6

Published

Sync Joplin notes with Google Docs

Downloads

989

Readme

Google Docs Sync - Plugin

Installation

From .jpl file: In Joplin, go to Settings > Plugins > Install from file and select the .jpl from publish/.

Development mode: Set the path to this plugin/ directory in Settings > Plugins > Advanced > Development plugins, then restart Joplin.

Configuration

Setup wizard

Run Tools > Google Docs: Setup Wizard for guided OAuth configuration. The wizard walks through:

  1. Creating a Google Cloud project
  2. Enabling required APIs
  3. Configuring OAuth consent screen
  4. Entering client credentials
  5. Authorizing the plugin
  6. Setting up a sync folder

Configuration (GUI)

Use the setup wizard above, or enter Client ID and Client Secret in Settings > Google Docs Sync and complete authorization when prompted.

Manual fallback: In the plugin data directory (e.g. ~/.config/joplin-desktop/plugins/io.github.albertbaubledeem.joplin.google-docs/), you can place .env (with GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, GOOGLE_REDIRECT_URI) and .token.json (OAuth tokens) instead.

OAuth scopes

Enable these APIs in your Google Cloud project:

  • Drive API (drive.file) -- files created by the plugin or explicitly selected
  • Docs API (documents) -- read/write document content
  • Cloud Storage API (devstorage.full_control) -- optional, for image sync

Formatting configuration

User-customizable formatting lives in md-mapping.json in the plugin data directory. The plugin copies a default from config/md-mapping.json on first run. Edit the copy to customize:

  • Heading styles and list markers
  • Code blocks: font family (code.monoFont), font size in pt (code.fontSize), and foreground color (code.foregroundColor, hex e.g. #333333). Use 0 or empty for defaults.

Multi-tab Google Docs

Importing a Doc with multiple tabs (via Tools > Google Docs Sync: Import/Bind) creates a Joplin notebook with one note per tab; each note syncs with its tab. The Google Docs API does not support creating tabs, so "Export Notebook" on such a notebook creates separate Google Docs in a folder, not a single multi-tab document. The import-complete dialog explains this.

Import behaviour

When pulling a Google Doc into Joplin, consecutive paragraphs that form a single code block in the Doc are merged into one fenced code block in Markdown. Tables are converted to Markdown tables; multiline cells use <br>.

Planned: Pulling images from Google Doc on pull when the image is not already present in Joplin.

Changelog

1.0.6

  • Table stability rewrite: Reverse table insertion on push, in-place IR processing on pull, batched cell fills. Fixes table drift on roundtrip and avoids write quota limits on larger documents.

1.0.4

  • Table roundtrip: Markdown tables sync to Google Docs and back; multiline cells use <br> in Markdown.

1.0.3

  • Fix: OAuth tokens survive plugin reinstalls. Tokens and credentials are now stored in the persistent data directory instead of the ephemeral install cache.
  • Fix: multi-tab push targets the correct tab. Previously all pushes went to the first tab regardless of binding; the Google Docs API request traversal now correctly injects tabId.
  • Fix: metadata fetch errors no longer overwrite local edits. When the poller cannot retrieve document metadata it now skips the note instead of force-pulling.
  • Fix: imported documents no longer cause "File not found" during polling. Added Shared Drive support to metadata lookups.
  • Added Google Doc screenshot to the plugin listing.

1.0.2

  • Initial public release on npm.

Troubleshooting

  • Commands not visible: Quit and restart Joplin completely (File > Quit). Delete the plugin cache folder if needed.
  • Auth errors after token expiry: Run Tools > Google Docs: Re-authorize or delete .token.json and re-run the setup wizard.
  • Push fails with index errors: Ensure you're running the latest build (npm run dist). List index calculation has been fixed for documents with multiple nested lists.