Works with dart pub, unchanged
Your team keeps running the commands they already know. dart pub get, dart pub add, dart pub publish — all work, just pointed at your CLUB server.
CLUB is a private package repository for Dart and Flutter teams. Same commands your developers already use — dart pub get, dart pub add, dart pub publish — pointed at a server you own.
dependencies:
acme_ui:
hosted: https://club.acme.com
version: ^2.4.0 $ dart pub get
+ acme_ui 2.4.0 (from club.acme.com)
Changed 1 dependency. $ club publish
✓ uploading acme_ui-2.4.1.tar.gz
✓ 2.4.1 live at club.acme.com CLUB plugs into the workflow dart and flutter developers already have. Point `hosted:` at your server and every command keeps working.
Your team keeps running the commands they already know. dart pub get, dart pub add, dart pub publish — all work, just pointed at your CLUB server.
Log in, publish, add dependencies, manage publishers, and run admin tasks from one club CLI. Pairs with dart pub, doesn't replace it.
Use the club CLI in any pipeline. A first-party GitHub Action is included for publishing and installing packages from CI.
Your packages, your users, your download counts — all live on infrastructure you control. CLUB has no telemetry, no analytics pixel, no third-party SDK. It is open source, end to end.
Unlist a version. Retract a mis-publish. Transfer a package. Delete what you don't need. It's your registry — act like it.
Full lifecycle control over every version. Mis-publish something sensitive? Fix it. Deprecate a package? Do it. You're actually in charge.
Sometimes a published tarball is just wrong. CLUB lets you replace a version in place when you need to — with auditability.
Move packages between publishers as teams and projects change. No database surgery, no tickets to the provider.
There is no telemetry. No analytics pixels. No third-party SDKs. It's open source — audit the code and see.
Drop in your own privacy and terms pages and they wire up across the UI automatically. Make it look like your company because it is.
No org charts to manage, no custom RBAC to design. Three roles your team already understands — plus named CI tokens for machines.
Runs the show.
Publishes and curates.
Browses and installs.
The actual Dart tooling pub.dev uses to score packages: scored against the same five criteria as pub.dev. Pub points measure what matters — conventions, documentation, platform support, static analysis, and dependency health.
Scoring package acme_ui...
Running dart analyze...
Running platform detection...
Running dartdoc...
Running dependency check...
Pub Points
Section Grade Max
✓ Follow Dart file conventions 30 30
✓ Provide documentation 20 20
✓ Platform support 20 20
⚠ Pass static analysis 40 50
└─ 2 warnings in lib/src/theme.dart
⚠ Support up-to-date dependencies 30 40
└─ 1 deprecated release in graph
TOTAL 140 160
elapsed: 4.7s · package scored
▍ Typed access to the design-system tokens — colors, spacing, radii, typography.
ThemeTokens(this.colors, this.space, this.radii)colors ColorSet finalspace SpaceScale finalradii RadiusScale finalcopyWith({ColorSet? colors, SpaceScale? space}) → ThemeTokensresolve(BuildContext context) → ThemePublish a package and CLUB renders its full dartdoc alongside the README — classes, methods, fields, links between them, all on your domain, no extra pipeline to maintain.
Filesystem, S3, or Firebase Storage (GCS) for package tarballs. Pick one at deploy time with a single environment variable — no code changes, no forks, no vendor lock-in. Filesystem isn't a dev-only fallback; it's a real option for teams who'd rather own their disk. Metadata lives in an embedded SQLite database — no separate service to run.
Production-ready — not just for dev.
Perfect for single-server deploys, private clusters, and any environment where you'd rather not run an object store. Block storage, filesystem snapshots, backup tooling — all the disk-level primitives you already use just work.
BLOB_BACKEND=fs Scale to any capacity.
Any S3-compatible endpoint: AWS S3, Cloudflare R2, MinIO, Wasabi, Backblaze B2 — set the endpoint and credentials and go. Tarballs stream directly to the bucket, no local spool.
BLOB_BACKEND=s3 Native for GCP shops.
For teams already running on Google Cloud — uses Firebase Storage (which is GCS under the hood) with service-account auth. Same IAM, same monitoring, same billing line.
BLOB_BACKEND=gcs Organize packages under publishers your team owns. Verify them against a domain you control for the verified badge, or skip the ceremony and use an unverified handle for internal-only work.
A first-class club CLI, and a GitHub Action that speaks the same protocol. dart pub still works the way it always did.
$ club login --host=club.acme.com
✓ logged in as mira@acme
$ club publish
Validating package...
✓ pubspec.yaml · CHANGELOG.md · README.md
✓ dartdoc generated (187 refs)
Uploading acme_ui-2.4.1.tar.gz
✓ 184 kB in 0.4s
✓ live: club.acme.com/packages/acme_ui/2.4.1▍ CLUB implements the same HTTP surface pub.dev does. Your clients don't need to know they're talking to a different host.
Every question we get asked, with a colored tack so you can skim by topic. No accordions, no clicking — just read.
CLUB is an open-source, self-hosted Dart and Flutter package repository. It implements the full Pub Spec v2 API, so any client that talks to pub.dev — including dart pub itself — works against your CLUB server unchanged.
Basicspub.dev is the public Dart registry, run by the Dart team. CLUB is software you run yourself. Same shape, your hardware, your packages, your rules. You can use both at once: public deps from pub.dev, private deps from CLUB.
BasicsYes — Apache 2.0. The whole server, web UI, CLI, and storage backends are in the open. There is no closed-core, no enterprise SKU, no telemetry. Read the code, fork it, ship it.
BasicsNo. They keep using dart pub get, dart pub add, and dart pub publish. The only difference is the hosted: URL in pubspec.yaml points at your CLUB server instead of pub.dev.
WorkflowUse the club CLI (or our GitHub Action) with a per-package upload token. Tokens are scoped to the package, not the user — rotate without touching any human accounts.
WorkflowYes. Every published version is scored with the same pana engine pub.dev uses, and the API reference is generated and hosted automatically alongside the README. No extra pipeline to wire up.
WorkflowYes — that's a big part of why people self-host. You can unlist, retract, force-overwrite, or fully delete versions. All of it is audit-logged and gated behind the Admin role.
Admin & controlThree roles — Admin, Editor, Viewer — applied at the publisher level. Admins do everything, Editors publish and curate, Viewers read and download. Tokens for CI are separate and scoped per-package.
Admin & controlYes. Publishers map to teams, and ownership transfers are a first-class action — no database surgery, no support ticket. Old uploaders are revoked, new ones are issued.
Admin & controlOne container. Multi-arch (linux/amd64 + linux/arm64), with the server, web UI, and dartdoc generation bundled in. SQLite + filesystem works out of the box for small teams; swap to S3 or GCS with an env var when you scale.
Run itFilesystem (default — great for dev and small deployments), Amazon S3, and Google Cloud Storage / Firebase Storage. The blob store is an interface — bringing another backend is a few hundred lines.
Run itYes. CLUB is built on shelf, drift/SQLite, and bcrypt + JWT — the same boring, audited primitives you'd reach for yourself. Stand up TLS at your ingress and you're done.
Run itNo telemetry. No analytics pixel. No third-party SDK. The only network calls the server makes are to your storage backend and to whatever you configure for SMTP. Audit the source if you want to verify.
TrustYes — drop in your /privacy and /terms pages and they wire into the UI automatically. Pair that with your TLS cert and your DNS, and the whole thing reads like your company. Because it is.
TrustCLUB is free and will stay that way. If it's been useful and you'd like to say thanks, here are two easy ways — pick whichever fits, skip both with zero guilt.
Monthly support from $5. The tier that actually changes how much time the project gets. Cancel anytime.
A quick thank-you. No account, no recurring charge — just a tip if CLUB helped you out today.
✓ 100% goes to maintenance ✓ No perks, no unlocks ✓ Apache 2.0 forever
One container. Your cloud. Five minutes to see it running, an afternoon to roll it out for the team.