Security
You are about to let a command line tool, and possibly an AI agent, write files into your project. That deserves a straight answer about what it can reach and what leaves your computer.
Short version: the code runs on your machine, it installs files from our catalog or from a source you name explicitly, nothing inside a pack ever executes, and your source never comes to us.
Who is behind it
Hype Stack is built by BetterTyped, which has been shipping open source for years.
| Project | Where it is used |
|---|---|
| react-zoom-pan-pinch | Around 1.8 million downloads a week |
| HyperFetch | Typed API framework, used in this stack too |
| BetterTyped | The org, close to 2 million downloads a week |
The starter itself is public at github.com/BetterTyped/hype-stack. Public code, public issues, and a track record you can read before you trust anything here.
Your code stays on your machine
The CLI is a local program. It downloads packs from our API and writes files into the folder you point it at. It does not upload your project, read files outside that folder, or keep a copy of anything you write.
Once a pack is installed, your app has no runtime link to us. It does not call our servers and it does not import our packages. Delete the CLI and everything keeps running.
What it can install
By default, only what is in the Hype Stack catalog. compose and template never fetch a random repository or a
package someone posted online.
Community packs are the one exception, and they are opt-in by design. They go
through their own command, hype-stack community add, or the --community flag on compose, and you name the source
yourself: a folder on disk, a git repository, an npm package, or a registry you configured in stack.json. Anything
that is not a local folder gets a confirmation that defaults to no, worded as what it is: code we did not write or
review. Every install is recorded with its source in stack.json, so community list always tells you whose code is in
the project.
Whatever the source, a pack is source files plus a manifest that describes the edits to make: which routes to register, which environment variables to add, which Prisma models to merge. Those edits are applied by our code reading that description. A pack cannot ship a script that runs on your machine. There is no install hook, a file path that escapes the pack is rejected before anything is written, and a registry that answers with a redirect is refused so your credential never travels to a host you did not configure.
The CLI does run a few commands, and they are the same fixed list every time:
| Command | When |
|---|---|
pnpm install | Right after a new project is scaffolded |
pnpm add <packages> | For the npm packages a pack declares it needs |
git init and one commit | So the scaffold lands as clean history |
npx skills add | The agent skills from skills.sh, skipped with --no-skills |
docker compose up -d | Optional local databases, only if you say yes |
prisma generate / migrate dev | Optional, only if you say yes |
a git download / npm pack | Only for a community pack you pointed at a git repo or an npm package |
fly, railway, eas, web-ext | Only from deploy, against accounts you are already logged into |
What the MCP server may run
When your editor drives the CLI through MCP, scaffolding and installing never start Docker or touch a
database. Those steps live in one separate tool, setup_project, which the agent has to call on its own, and the server
tells it to ask you before the first run in a session. Everything else that needs a human answer comes back to you as
text.
It will not overwrite your work
If an install would land on a file you already have, it stops and shows you the list instead of writing over it. You decide what to keep. Everything that does get written lands as a normal change in your repository, so you can read the whole diff before you commit it.
What we log
Three events, and only these three:
| Event | When it fires |
|---|---|
project_create | You scaffold a new project |
pack_download | A pack is downloaded |
template_install | A template is installed |
Each one records the pack or template name, whether it was free or paid, whether the download was allowed or denied and why, your CLI version, your operating system and Node version, whether the request came from the CLI or the MCP server, and a device id. If you are logged in, it also records your account so we can honour your license.
The device id is a hash, not a name or an identifier we can trace back to a person. Location is stored as country and region only.
What is never collected: your source code, file contents, file names, project names, the commands you type, or your IP address. IP addresses are used momentarily to work out a country and are not written to our database.
Accounts and keys
- Passwords are not ours to lose. Sign-in runs through WorkOS. We never store a password. Google and GitHub sign-in are available if you would rather not have one at all.
- Sessions live in an httpOnly, secure cookie. JavaScript on the page cannot read them.
- API keys are shown once. We keep a SHA-256 hash of the key and its last four characters, nothing else. If a key leaks, revoke it from the API keys page and it stops working immediately.
- Keys can expire. Choose 30, 90, or 365 days when you create one, or never if that suits the machine better.
- The CLI login token is written to a config file in your user directory with owner-only permissions
(
~/Library/Application Support/hype-stackon macOS,~/.config/hype-stackon Linux,%APPDATA%\hype-stackon Windows), and it is never written into your project.hype-stack logoutrevokes it on our side too, so a stolen laptop is not a permanent key. AHYPE_STACK_TOKENin the environment wins over the stored login, which is how CI runs without a browser. - Paid packs are checked before any bytes move. The server verifies your license first. There is no client-side check to bypass.
Payments
Checkout runs on Polar, on their pages. Card numbers never reach our servers, and we could not store one if we wanted to. We keep the order and the license record that comes back.
Rate limiting in generated apps
The Hype Stack template and packs do not ship API rate limiting. Protecting your own routes (auth, checkout,
webhooks) is on you once you leave the starter. Prefer a reverse-proxy or edge limit in production, or add middleware in
apps/backend for sensitive endpoints. The marketplace API itself is rate-limited; that does not carry into projects
you scaffold.
Found something?
Email contact@hype-stack.dev. If it is a vulnerability, say so in the subject line and we will get back to you before we do anything else that day.
Every purchase and sponsorship funds my 8+ years of work on open source given freely to the community. It keeps the lights on, funds new packs, and keeps the ecosystem alive. Even a small tier means a lot. Thank you!
