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

canvasdoc-cli

v0.3.2

Published

Local Canvasdoc setup and persistent Codex connector

Readme

Canvasdoc

Run npx canvasdoc-cli --origin https://your-canvas.example once (npx.cmd in Windows PowerShell). It creates ~/Documents/Canvasdoc (or uses --folder), installs the local connector as a background service that starts when you sign in, adds the Canvasdoc menu bar (macOS) or tray (Windows) app, registers the Chrome bridge, and exits. Close the terminal afterwards. Later runs update the service and resume the same main agent. After setup, the service updates itself: when a newer Canvasdoc extension connects, it downloads the canvasdoc-cli release with the same version, waits until no turn is running, and reruns setup with --update. If the new release does not start, setup restores the previous service and the panel falls back to showing the setup command. No administrator rights are needed on either platform.

The Canvasdoc app shows whether the service is running, starts and stops it, and opens the log. --stop stops the service the same way: it stays off across sign-ins until the app or setup starts it. The app also handles the canvasdoc://open link behind the panel's Open Canvasdoc button, and offers a folder chooser when the Canvasdoc folder moved. Setup assembles the app from the official Electron release (version pinned by this package, checksum-verified by @electron/get), renames and re-icons it, and on macOS signs it ad hoc. It is unsigned, so it never hosts the connector or reads the Canvasdoc folder: the connector stays on the signed Node.js, which keeps macOS folder permissions across updates and passes Windows Smart App Control. Smart App Control does block the app itself; Canvasdoc then runs without the tray icon.

On macOS the service is a launchd user agent; the app is ~/Applications/Canvasdoc.app, opened at login by a second agent. On Windows the service is a per-user Scheduled Task named Canvasdoc that runs at sign-in in your desktop session (Computer Use needs it) under conhost --headless, falling back to a minimized window when that console host cannot run it; the app is %LOCALAPPDATA%\Programs\Canvasdoc\Canvasdoc.exe, started by the per-user Run key. The task runs a wrapper written to %LOCALAPPDATA%\Canvasdoc\service\<install>\ with the connector's environment; it restarts a failed connector after 15 seconds, and removing its running file stops the connector cleanly. The bridge, private state, and logs live under %LOCALAPPDATA%\Canvasdoc, with private Codex homes in workspaces/<workspaceId>/codex-home.

Requires Node.js 22.13 or later. On a Mac without Node.js, curl -fsSL https://canvasdoc-public.vercel.app/install.sh | bash installs a private copy first and then runs this package. The bundled Codex is used; a codex on your PATH is only a fallback, and CANVASDOC_CODEX_BIN overrides both. Codex sign-in happens from the Canvasdoc panel in Canvas: the connector starts signed out, and the Sign in button opens the Codex login page in your browser. The panel warns immediately when the signed-in ChatGPT tier does not include Codex, or when included usage is currently paused, with links to the student Plus and credit offers.

The service runs from a private copy under ~/Library/Application Support/Canvasdoc/runtime/ (%LOCALAPPDATA%\Canvasdoc\runtime\ on Windows) rather than the npx cache, with logs in ~/Library/Logs/Canvasdoc/connector.log (%LOCALAPPDATA%\Canvasdoc\Logs\connector.log), trimmed to a bounded tail at each start on macOS and rotated to connector.log.1 past 5 MB on Windows. On macOS the bridge manifest is registered for every installed Chromium browser (Chrome, Chrome Beta and Canary, Chromium, Brave, Edge, Arc, Vivaldi, Opera); on Windows, for Chrome through its per-user registry key. If the connector is not running, the bridge asks the service manager to start it (launchctl kickstart or schtasks /Run); the bridge then tells the panel whether the service was stopped, never came up, or refused to start, reading the reason from the log, so the panel can offer the matching remedy. A service that no browser has connected to for three weeks exits at its next start instead of lingering as a login item, logging why; starting it from the app or rerunning setup reinstates it. --foreground runs the connector in the terminal instead, for development.

Canvasdoc is in early development. The Canvasdoc browser UI must already be installed on your Canvas site. This package does not install a browser extension or modify your school's Canvas deployment. On macOS and Windows, the launcher registers the Chrome Web Store extension with Chrome's native host automatically. Pass --extension-id <id> to also register an unpacked development build, or --no-extension to skip registration and pair the development UI with a token, which is the only mode on Linux.

npx canvasdoc-cli
npx canvasdoc-cli --folder ~/Documents/Canvasdoc --origin https://your-canvas.example
npx canvasdoc-cli --help

Settings live in ~/.config/canvasdoc/settings.json. Coursework files live in the chosen folder. Browser storage remains primary for chats, drafts, and tasks. The connector does not upload your folder to a hosted sandbox.

On macOS, each workspace has a private Codex home under ~/Library/Application Support/Canvasdoc/workspaces/<workspaceId>/, beside its lock, delivery journal, connection token, and automatic recovery exports. Keeping these out of Documents means iCloud sync never sees SQLite files or credentials. The launcher moves any older in-folder state there on its next run. The launcher and companion override inherited CODEX_HOME and CODEX_SQLITE_HOME for their Codex processes. Canvasdoc's threads stay out of the desktop app's default history, so ChatGPT can remain open. Materials, outputs, and .agents/skills/ stay in the workspace. Skills and settings installed only in your personal Codex home are separate.

A missing remembered folder causes an error rather than creating a replacement. Restore the folder to its original location to resume. For a moved folder, choose its new location from the Canvasdoc app, or run npx canvasdoc-cli --folder /new/location --relocate; both preserve its workspace identity and resume its existing agent.

The connector listens on loopback port 3218. CANVASDOC_CONNECTOR_PORT, CANVASDOC_CODEX_BIN, and CANVASDOC_CONFIG_DIR can override defaults. --no-open suppresses opening your browser.

Chat attachments support files up to 5 MB each. The connector saves attached files in uploads/ inside the selected Canvasdoc folder so the main agent can read them.

Workspace lists files from your Canvasdoc folder and previews text, PDFs, images, sandboxed HTML, and React artifacts (.tsx files bundled locally with react and react-dom only). Preview and download are limited to 25 MiB per file; text rendering is capped at 256 KiB. Hidden directories, dependency folders, and symlinks are excluded from the listing; files outside the chosen folder are not exposed.

Canvasdoc defaults to the newest GPT Sol model (GPT-6.1 Sol today) with medium reasoning. Available choices come from the connected Codex runtime. Your saved model selection takes precedence; selecting a different model applies to the next turn while retaining the same main-agent thread and Canvasdoc folder. If the selected model is unavailable, choose another model from the selector.

Course materials

Canvasdoc's browser extension reads course materials using your existing Canvas login. The companion receives source files through authenticated, verified transfers and writes them under courses/<account>/<course-name>--<id>/. It never needs a Canvas API token or browser cookies.

The extension owns the material index and checks for updates while Canvas is open. Connect this companion to download new or changed materials. Course pages, syllabus content, assignment instructions, module indexes, announcements, and accessible files appear in the workspace Sources panel. Synced source files are separate from work/ folders; locally edited sources are preserved and reported as conflicts. Files are limited to 100 MB each; preview limits are separate. External publisher content remains linked rather than automatically downloaded.

Coursework procedures

The companion bundles assignment review, study preparation, and document/code artifact procedures. Codex discovers them in your Canvasdoc folder's .agents/skills/ and loads applicable instructions on demand. Procedures use available sources and installed authoring tools; they do not add a required authoring tool stack.

Existing skills and edited bundled files are preserved. Canvasdoc updates only files whose contents still match its ownership record in .canvasdoc/bundled-skills.json. To restore a bundled procedure after editing it, remove that procedure's SKILL.md and restart the companion. These procedures are maintained with the application; they do not learn or import skills automatically.

Computer Use and Chrome control

Canvasdoc lets the agent use desktop apps and your signed-in Chrome whenever a desktop app provides OpenAI's Computer Use runtime: the ChatGPT desktop app on macOS, or ChatGPT from the Microsoft Store, published by OpenAI, on Windows. Install the app and sign in, then turn on Computer Use in its settings. On macOS, turn on its Chrome plugin for Chrome control. On Windows, turn on its Chrome option, add the ChatGPT extension when asked, and sign in to ChatGPT in Chrome. Then start Canvasdoc as usual. Each setup run and each start of the service registers the app's runtime as cua_repl in the workspace's private Codex configuration, adds Chrome control once the app's Chrome plugin is on, and on Windows follows the runtime folder under %LOCALAPPDATA%\OpenAI\Codex\runtimes\cua_node when an app update moves it. After turning the app's features on, stop and start Canvasdoc from its menu bar or tray icon. The panel's Settings show whether it is on, starting, or failing to start, read from Codex's status for the cua_repl server. --no-computer-use removes it for the folder and is remembered; --computer-use turns it back on.

On macOS, Screen Recording and Accessibility permissions apply; on both platforms, the native service's app-access approvals still apply. The setup references the installed desktop runtime and requires it to remain installed. It does not copy desktop credentials, sessions, permission lists, or proprietary runtime files into Canvasdoc.

The agent can create task tab groups, open tabs in the connected signed-in Chrome profile, and inspect and interact with pages using browser controls. Existing tabs remain user-owned unless explicitly selected for a task. Website-access approvals remain enforced by the browser bridge. Credentials and browser cookies stay in Chrome; Canvasdoc keeps its private Codex home. The desktop app and its connected Chrome extension are required for this optional local integration.