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

printtally

v0.5.0

Published

Per-job print cost accounting for Canon imagePROGRAF printers

Readme

Print Tally

Print Tally keeps a permanent record of every print from a Canon imagePROGRAF printer: the ink used on each channel, the paper, the size and when it was printed. Record what you paid for paper and ink, and it works out what each print cost.

Why it exists

Canon's own Accounting Manager does not run on macOS 27. Print Tally reads the same job history directly from the printer over the network, so it needs no Canon software. The printer only keeps a limited number of recent jobs (220 on the PRO-1100); Print Tally keeps every job it has ever collected.

Supported printers and systems

Tested on the imagePROGRAF PRO-1100 under macOS. See COMPATIBILITY.md for tested printers, firmware and operating systems, and how to report a new one.

Getting started

You need the printer on your network with a fixed IP address, and the printer's administrator password. Then either:

  • run bunx printtally (needs Bun 1.3.9 or newer), which starts Print Tally and opens it in your browser, or
  • install the Print Tally desktop app for Macs with Apple silicon: open the .dmg, drag Print Tally to Applications and open it from there. It includes everything it needs, so you don't need Bun. Keep it in /Applications for updates to install; running it from the disk image won't let it replace itself.

Both show the same setup screen:

  1. Find your printer, or type its IP address.
  2. Compare the certificate fingerprint Print Tally shows with the one on the printer's control panel (Printer information > System information > Root cert. thumbprint (SHA-256)), and confirm only if they match.
  3. Enter the administrator password. It's kept in your system's credential store (Keychain on macOS), never in a file.

Your jobs appear straight away. From then on, Print Tally collects new jobs when it starts and every 15 minutes while it's running. If more jobs were printed than the printer keeps while Print Tally wasn't running, the Jobs screen says which ones may have been missed.

Running printtally again, or opening the desktop app while it's running, uses the Print Tally that's already running on this computer, so there's only ever one ledger. It uses port 4318; if another program has that port, Print Tally stops with an error rather than picking a different one. Use --port to choose another.

Print Tally keeps its ledger in a data folder: ~/Library/Application Support/printtally on macOS, ~/.printtally on Linux and %APPDATA%\printtally on Windows (--data-dir to use another).

Commands

| Command | What it does | |---|---| | printtally | Opens Print Tally in your browser, starting it if it isn't running | | printtally serve [--host] | Runs Print Tally without opening a browser; --host lets other devices pair with it | | printtally pair [--label NAME] | Makes a single-use pairing link and QR code for another device | | printtally sessions | Lists paired devices; printtally sessions revoke <id> unpairs one | | printtally collect | Collects new jobs from your printers now |

Moving from an earlier version

printer.json, the certificate file and the probe, password, import, annotate and summary commands are gone. Your ledger is kept; set the printer up again in the setup screen and enter its password there. Back up the data folder first: the upgrade rebuilds some of the ledger's tables the first time it runs. The old Keychain items (service print-accounting, accounts starting printer:mac: and api:) are no longer used, and you can delete them in Keychain Access.

Using Print Tally from other devices

Keep Print Tally running on a computer that stays near the printer, and use it from your other devices:

printtally serve --host

This prints the addresses other devices can use, and a warning that Print Tally is now reachable from your network. On the host, make a pairing link for each device:

printtally pair --label "iPad"

Open the link, or scan the QR code, on the device. It works once and expires after 5 minutes; the device then stays signed in until you revoke it with printtally sessions revoke <id>. On a Mac with the desktop app, open the printtally:// link it prints instead, or choose "Connect to it" on the setup screen.

Other devices can use any name for the host that resolves to one of its own addresses, as well as the addresses it prints. With Tailscale, both its 100.x address and its MagicDNS name (such as http://studio-mac.your-tailnet.ts.net:4318) work.

Print Tally doesn't encrypt traffic between devices. Use remote access only on a network you trust, such as your home network, or across Tailscale, which encrypts it for you. Never forward the port to the internet. Remote access is off unless you start the host with --host, and the desktop app never offers it.

Development

bun install
bun run typecheck && bun test

bun run dev runs the server and the web UI with hot reload, and bun run dev:desktop the desktop app; both use your real data folder and port 4318. For UI work, use a throwaway ledger instead:

bun run seed:dev                    # or: bun run seed:dev path/to/a-copy-of/jobs.json
PRINTTALLY_MEMORY_SECRETS=1 bun apps/server/src/cli.ts serve --port 4400 --data-dir <folder it printed>
PRINTTALLY_API=http://127.0.0.1:4400 bun run dev:web

The seed imports a snapshot (the synthetic tests/fixtures/reference.json by default) and adds papers, stock items (including a deckle sheet and a roll), purchases, ink cartridges and write-offs. Its printer is at a TEST-NET address (192.0.2.10), so collection fails without reaching a real printer. PRINTTALLY_MEMORY_SECRETS=1 keeps printer passwords in memory instead of Keychain; use it only for development.

bun run build:web builds the UI into apps/web/dist, which the server serves when run from source.

docs/build.md covers building the npm package and the desktop app, signing, and local builds, which keep to their own data folder and port. docs/release.md covers how the backend and the app are versioned and released.

Licence and disclaimer

Released under the MIT License.

Print Tally is an independent project. It is not affiliated with, endorsed by or sponsored by Canon Inc. or its subsidiaries. Canon, imagePROGRAF and related marks are trademarks of Canon Inc., used here only to identify compatible printers. Canon software is not included or required. The printer protocol was implemented for interoperability. Use it at your own risk: it is provided without warranty, and ink, paper and cost figures should be checked before billing or accounting decisions rely on them.