From fc2c2a6c162e922b5a25cdfe7ef8ed0ecf3740d8 Mon Sep 17 00:00:00 2001 From: Tiago <70700766+tiagorangel1@users.noreply.github.com> Date: Tue, 22 Apr 2025 13:01:57 +0100 Subject: [PATCH] improve readme and fix license --- LICENSE.md | 15 --------- README.md | 79 +++++++++++++++++++++++++++++++--------------- assets/banner.png | Bin 0 -> 36478 bytes 3 files changed, 53 insertions(+), 41 deletions(-) delete mode 100644 LICENSE.md create mode 100644 assets/banner.png diff --git a/LICENSE.md b/LICENSE.md deleted file mode 100644 index c849f18..0000000 --- a/LICENSE.md +++ /dev/null @@ -1,15 +0,0 @@ -Cap — A modern, lightning-quick PoW captcha -Copyright © 2025 Tiago Rangel - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU Affero General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU Affero General Public License for more details. - -You should have received a copy of the GNU Affero General Public License -along with this program. If not, see . \ No newline at end of file diff --git a/README.md b/README.md index 9c0ea31..fa58c7d 100644 --- a/README.md +++ b/README.md @@ -1,39 +1,66 @@ -Cap logo +

+ Cap — lightweight, modern open-source CAPTCHA +

-# cap — modern, lightning-quick PoW captcha +
+ Documentation +   •   + Quickstart +   •   + Demo +   •   + Issues +
+
-cap is a lightweight, modern open-source CAPTCHA alternative designed using SHA-256 PoW. +### [Read the docs →](https://capjs.js.org) -| [documentation →](https://capjs.js.org) | [demo](https://cap-starter.glitch.me) -|----------|----------| +## What is Cap? +Cap is a lightweight, modern open-source CAPTCHA alternative using SHA-256 proof-of-work. It's fast, private, and extremely simple to integrate. Learn more about proof-of-work here. -[![npm @cap.js/server](https://img.shields.io/badge/@cap.js/-server-CB0200?logo=npm)](https://www.npmjs.com/package/@cap.js/server) [![npm @cap.js/widget](https://img.shields.io/badge/@cap.js/-widget-CB0200?logo=npm)](https://www.npmjs.com/package/@cap.js/widget) [![npm @cap.js/solver](https://img.shields.io/badge/@cap.js/-solver-CB0200?logo=npm)](https://www.npmjs.com/package/@cap.js/solver) [![OpenSSF Best Practices](https://www.bestpractices.dev/projects/9920/badge)](https://www.bestpractices.dev/projects/9920) +Cap is built into 2 main parts: -Cap captcha +- **[@cap.js/widget](https://capjs.js.org/guide/widget.html)**: A small JavaScript library that renders the CAPTCHA and handles solving it using Web Workers and WASM. -## why Cap? +- **[@cap.js/server](https://capjs.js.org/guide/server.html)**: An extremely simple, zero-dependencies library that handles creating and validating challenges. -- ⚡️ **250x smaller than hCaptcha** - cap's widget library is extremely small, only 12kb minified and brotli'd. -- 🔒️ **Private** - cap's usage of proof-of-work eliminates the need for any tracking, fingerprinting or data collection. -- 🌈 **Fully customizable** - cap is self-hostable so you can customize both the backend & frontend — or you can just use CSS variables -- 🤖 **PoW-based** - cap uses proof-of-work instead of complex puzzles, making it easier for humans and harder for bots -- 🧩 **Standalone mode** - cap offers a standalone mode with Docker, allowing you to use it with languages other than JS. -- 💨 **Invisible mode** - cap can run invisibly in the background using a simple JS API. -- ☁️ **Floating mode** - floating mode keeps your CAPTCHA hidden until it's needed -- 🌳 **Fully FOSS** - completely open source under the Apache license 2.0 license +There are also some other helpful packages: + +- **[@cap.js/solver](https://capjs.js.org/guide/solver.html)**: Server-side solver for the CAPTCHA in case you want to use machine-to-machine. + +- **[Standalone mode](https://capjs.js.org/guide/standalone.html)**: Docker image that helps you use Cap with any language or framework. It runs a simple REST API that can be used to create and validate challenges and an interactive UI to manage your keys. + +It's designed to be a drop-in replacement for existing CAPTCHA solutions, with a focus on performance and UX. + + +Cap is built with JavaScript, runs on any JS runtime (Bun, Node.js, Deno), and has no dependencies. If you're not using any JS runtime, you can also use the standalone mode with Docker, which relies entirely on a simple REST API to create and validate challenges. + +## Why Cap? + +- **250x smaller than hCaptcha** + `@cap.js/widget` is extremely small, only 12kb minified and brotli'd. +- **Private** + Cap's usage of proof-of-work eliminates the need for any tracking, fingerprinting or data collection. +- **Fully customizable** + Cap's self-hostable so you can customize both the backend & frontend — or you can just use CSS variables +- **Proof-of-work** + Cap uses proof-of-work instead of complex puzzles, making it easier for humans and harder for bots +- **Standalone mode** + Cap offers a standalone mode with Docker, allowing you to use it with languages other than JS. +- **Invisible mode** + Cap can run invisibly in the background using a simple JS API. +- **Floating mode** + Cap's floating mode keeps your CAPTCHA hidden until it's needed. +- **Fully FOSS** + Completely open source under the Apache license 2.0 license. + +## License +Cap is licensed under the Apache License 2.0. See [LICENSE](LICENSE) for more information. ## star history [![Star History Chart](https://api.star-history.com/svg?repos=tiagorangel1/cap&type=Date)](https://www.star-history.com/#tiagorangel1/cap&Date) -*** +--- -Cap - A lightweight, modern open-source captcha | Product Hunt \ No newline at end of file +Cap - A lightweight, modern open-source captcha | Product Hunt diff --git a/assets/banner.png b/assets/banner.png new file mode 100644 index 0000000000000000000000000000000000000000..16083e1201494f3083bc5bdf31f28231c0c2efca GIT binary patch literal 36478 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 z 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