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

@txco/svelte-adapter-thankscomputer

v0.1.1

Published

SvelteKit adapter that deploys a static build to thanks.computer (txco): writes your app into a stack's FILES/ and generates the SPA-fallback op, served by txco://static.

Readme

@txco/svelte-adapter-thankscomputer

A SvelteKit adapter that deploys your app to thanks.computer (txco). It writes a fully static build into a stack's FILES/ directory — served by the built-in txco://static op with strong ETags and conditional GET — and generates a small SPA-fallback op so client routes resolve on a hard reload. Deploy the result with txco apply.

npm install -D @txco/svelte-adapter-thankscomputer

Usage

// svelte.config.js
import adapter from "@txco/svelte-adapter-thankscomputer";

export default {
  kit: {
    // REQUIRED: txco never serves a path whose segment starts with "_", so
    // SvelteKit's default appDir ("_app") would 404 every hashed asset.
    appDir: "app",
    adapter: adapter({
      out: "OPS/web", // the stack dir holding FILES/ and scope folders
    }),
  },
};

Then build and deploy:

vite build       # writes OPS/web/FILES/** and OPS/web/100/spa-fallback.txcl
txco apply       # ships the stack to your tenant

Your app is now served at the stack's hostname — assets straight from txco://static, every client route falling back to the app shell.

Why appDir matters

txco treats any request path with a _-prefixed segment as private (readable by ops, never served over HTTP — e.g. FILES/_mail/ templates). SvelteKit's default appDir is _app, so /_app/immutable/*.js — i.e. all your hashed JS/CSS — would silently fail to load. Setting appDir to a non-underscore name (app, assets, …) fixes it. The adapter throws if you leave it as _app.

How it works

  • vite build runs the adapter, which writes client assets and any prerendered pages into <out>/FILES/, plus a SPA fallback page (default index.html).
  • txco://static (the boot stack, scope 50) serves any real file under FILES/ for the routed tenant — with content-type, a content-hash ETag, and 304s.
  • txco://static also does try_files resolution: /index.html, /aboutabout.html, /blogblog/index.html. So prerendered routes and the homepage serve their own HTML directly.
  • A genuinely client-rendered route (no prerendered file) has nothing to resolve, so static falls through and the generated spa-fallback.txcl op serves the app shell — deep links and reloads still render correctly.

Options

| Option | Default | Description | | --------------- | -------------- | -------------------------------------------------------------------------------------------- | | out | "OPS/web" | Stack directory holding FILES/ and scope folders; build lands in <out>/FILES/. | | fallback | "index.html" | SPA fallback page filename, or false to disable SPA mode (serve only prerendered files). | | fallbackOp | true | Generate <out>/<fallbackScope>/spa-fallback.txcl to serve the shell for client routes. | | fallbackScope | 1000 | txcl scope for the generated fallback op. High by default so this catch-all runs last (after txco://route and any ops you add), never swallowing extension-less requests your own handlers should answer. | | apply | false | Run txco apply in the current directory after building, to deploy in one step. | | precompress | false | Precompress assets with gzip + brotli. |

Limitations (v1)

  • SPA and prerendered both work. txco://static resolves clean URLs and directory indexes (/aboutabout.html, /blogblog/index.html, /index.html), so prerendered routes serve their own HTML; the fallback op covers any remaining client-rendered routes. One edge: the fallback's WHEN matches extension-less paths, so a client route that ends in a dot-suffix (e.g. /v1.2) isn't caught — rare, and prerendering or an explicit op handles it.
  • Per-file size. Assets are capped (10 MiB on the fleet path); typical SvelteKit chunks are far under this. A single very large asset needs a CDN.
  • Whole-stack deploy. Each txco apply replaces the stack version; unchanged assets dedup by content hash, so the cost is metadata, not bytes.

License

MIT