Download the PHP package crazy-goat/scanmephp without Composer

On this page you can find all versions of the php package crazy-goat/scanmephp. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package scanmephp

ScanMePHP

The fastest pure PHP QR code generator with optional native C++ acceleration.

Generate QR codes in PHP without dependencies β€” then go 100Γ— faster with a single C++ library. Zero bloat, maximum speed, production-ready.

QR encoding algorithms are based on Nayuki's QR Code generator.

Why ScanMePHP?

πŸš€ Blazing Fast β€” 3-Tier Performance

Auto-selects the fastest encoder available β€” no configuration needed.

πŸ“¦ Zero Dependencies

🎨 8 Output Formats SVG, PNG (pure PHP, 1-bit), HTML (div/table), ASCII (3 styles). Works in terminals, browsers, emails, and print.

πŸ”§ Full QR Spec Support

Features

Installation

Binary Auto-Download

When you install or update the package via Composer, the library will automatically:

  1. Detect your platform (Linux glibc/musl, macOS Intel/ARM)
  2. Try to download and install the PHP extension (scanmeqr) β€” fastest option (190–360Γ— faster)
  3. Fall back to FFI library if extension is not available β€” 90–130Γ— faster
  4. Use pure PHP encoder as final fallback β€” works everywhere

If no binary matches your platform β€” arm64 Linux, an unusual PHP build β€” the extension can be compiled on the spot with PIE: pie install crazy-goat/qrcode-ext.

Checksum Verification

A downloaded binary is hashed with SHA-256 right after the transfer, compared with the checksum the installer expects, and deleted again when it does not match. A binary that is already in vendor/crazy-goat/scanmephp/{ext,ffi}-binaries/ is checked the same way whenever the plugin runs, that is when ScanMePHP is installed or updated β€” not on a plain composer install that leaves the installed version alone. Verification is fail-closed: without a checksum for the requested version and binary, nothing is kept and the plugin prints which binary it wanted.

Checksums are read from extra.scanmephp.checksums in your composer.json β€” the installer never trusts a digest it fetched next to the binary it is checking. Every release publishes the digests of all its binaries in checksums.txt, so pinning the one for your platform is a copy-paste. That file exists from the first release that ships this feature; earlier releases have none, so there is nothing to copy from them and the pure PHP encoder is used until the release you install has one.

Copy the 64-character digest only. A whole sha256sum line pasted as the value is a pin that never matches, so every install deletes the binary and then refuses to download it again.

The same file verifies a manual download; check just what you have with sha256sum -c --ignore-missing checksums.txt (Linux) or shasum -a 256 -c checksums.txt (macOS).

Until you pin a digest, composer install installs no native code and the pure PHP encoder is used.

PHP Extension Installation (Recommended)

The PHP extension provides the best performance. The Composer plugin will attempt to download it automatically.

Auto-Download

During composer install or composer update, the plugin will:

  1. Check if the scanmeqr extension is already loaded
  2. Download the appropriate prebuilt binary for your platform
  3. Provide instructions to enable it in php.ini

Manual Installation

  1. Download the appropriate binary from GitHub Releases:
Platform PHP 8.2 PHP 8.3 PHP 8.4
Linux (glibc) php-ext-linux-glibc-x86_64-php82.so php-ext-linux-glibc-x86_64-php83.so php-ext-linux-glibc-x86_64-php84.so
Linux (musl/Alpine) php-ext-linux-musl-x86_64-php82.so php-ext-linux-musl-x86_64-php83.so php-ext-linux-musl-x86_64-php84.so
macOS Intel php-ext-macos-x86_64-php82.so php-ext-macos-x86_64-php83.so php-ext-macos-x86_64-php84.so
macOS Apple Silicon php-ext-macos-arm64-php82.so php-ext-macos-arm64-php83.so php-ext-macos-arm64-php84.so

Note: Binaries are built for specific PHP versions due to ABI compatibility. Make sure to download the binary matching your PHP version (check with php -v).

  1. Copy to your PHP extensions directory:

  2. Add to your php.ini:

  3. Restart your web server or PHP-FPM:

  4. Verify installation:

Installing with PIE

The extension is published as a PIE package, which builds it from source for whatever PHP you are running β€” including platforms no prebuilt binary covers, such as arm64 Linux:

Both halves are needed: the extension builds a CrazyGoat\ScanMePHP\Matrix and can only throw without the library loaded. Building needs a C++20 compiler and takes a few seconds; there is nothing else to install, since the C++ core is compiled into the extension rather than linked against libscanme_qr.

crazy-goat/qrcode-ext is generated from php-ext/ and clib/ by bin/build-ext-mirror.sh β€” issues and pull requests belong in this repository.

Building from Source

Requirements:

Then add extension=scanmeqr.so to your php.ini.

CMake is only needed for the FFI library and the C++ test suite; the extension does not use it.

FFI Library Installation

If the PHP extension is not available, the plugin will download the FFI library instead.

Requirements for Auto-Download

Manual Binary Installation

If auto-download doesn't work, you can manually download binaries from the GitHub releases page and place them in your project directory.

Prebuilt FFI library binaries are available for:

Platform Binary
Linux (glibc) libscanme_qr-linux-glibc-x86_64.so
Linux (musl/Alpine) libscanme_qr-linux-musl-x86_64.so
macOS Intel libscanme_qr-macos-x86_64.dylib
macOS Apple Silicon libscanme_qr-macos-arm64.dylib

Windows: no prebuilt binaries are published. ScanMePHP still works β€” it falls back to the pure-PHP encoder, which needs no extension and no FFI. For native speed on Windows, build clib/ from source with MSVC and point FfiEncoder at the resulting scanme_qr.dll.

Quick Start

Renderers

ScanMePHP ships with 8 renderers. Each implements RendererInterface and can be passed as the engine parameter.

Renderer Output Constructor Options
FullBlocksRenderer ASCII β–ˆ blocks sideMargin (int, default: 0)
HalfBlocksRenderer ASCII β–€β–„β–ˆ compact sideMargin (int, default: 0)
SimpleRenderer ASCII ● dots sideMargin (int, default: 0)
SvgRenderer SVG XML moduleSize (int, default: 10)
PngRenderer PNG image (1-bit) moduleSize (int, default: 10), compressionLevel (int 0–9, default: 1)
HtmlDivRenderer HTML <div> grid moduleSize (int, default: 10), fullHtml (bool, default: false)
HtmlTableRenderer HTML <table> moduleSize (int, default: 10), fullHtml (bool, default: false)

ASCII β€” FullBlocksRenderer (default)

Example: qrcode_fullblocks.txt

ASCII β€” HalfBlocksRenderer

Example: qrcode_halfblocks.txt

Compact output β€” two rows per character using β–€β–„β–ˆ half-block characters.

ASCII β€” SimpleRenderer

Example: qrcode_simple.txt

Uses ● dots. Works in terminals without full Unicode block support.

SVG β€” SvgRenderer

Examples: qrcode_with_label.svg

PNG β€” PngRenderer

Examples: qrcode_high_ecc.png

Generates valid PNG files in pure PHP β€” no GD, no Imagick, no external libraries. Black and white only, 1-bit monochrome. Ideal for email attachments, API responses, and print. Repeated pixel rows are stored with the PNG Up filter, so the default zlib level 1 already gives ~2 KB files in ~0.1 ms; pass compressionLevel: 6 for the smallest output.

Note: Labels are not supported in PNG output (no font engine). Passing a label will throw a RenderException.

HTML β€” HtmlDivRenderer

Examples: qrcode_div_label.html

Renders QR as a <div> flexbox grid with inline styles. No external CSS needed.

HTML β€” HtmlTableRenderer

Examples: qrcode_table_label.html

Same as above but uses <table> with <td> elements.

Configuration

All options are set via QRCodeConfig:

Dark Mode (Inverted)

For SVG/HTML renderers, set explicit colors:

Output Methods

Custom Renderer

Implement RendererInterface:

Performance

ScanMePHP includes four encoder implementations. QRCode auto-selects the fastest available:

Encoder Versions Requirements Relative Speed
NativeEncoderExt v1–v40 64-bit PHP + scanmeqr extension 7–9Γ— faster (a v10 code in ~7 Β΅s)
FfiEncoder v1–v40 64-bit PHP + FFI + libscanme_qr.so 6–8Γ— faster (a v10 code in ~8 Β΅s)
FastEncoder v1–v27 64-bit PHP baseline (bitset fast path)
Encoder v1–v40 64-bit PHP 8.2+ baseline β€” same fast path for v1–v27, scalar pipeline for v28–v40

Capacity (Byte Mode)

Maximum data length for URL/text encoding (Byte mode) at different QR versions:

Version Size L (Low) M (Medium) Q (Quartile) H (High)
v1 21Γ—21 17 14 11 7
v10 57Γ—57 271 213 151 119
v27 125Γ—125 1465 1125 805 625
v40 177Γ—177 2953 2331 1663 1273

Note: FastEncoder supports up to v27 (1465 bytes max). For larger data, the portable Encoder's v28–v40 pipeline is automatically used.

Benchmark Results

Measured on PHP 8.5 (opcache.jit=tracing) / Apple M-series, 500 iterations per case, median latency:

Test case Encoder FastEncoder FfiEncoder NativeEncoderExt Speedup (Encoder/Ext)
v1 (21Γ—21) L 0.016 ms 0.015 ms 0.003 ms 0.002 ms 7Γ—
v5 (37Γ—37) L 0.031 ms 0.031 ms 0.004 ms 0.004 ms 8Γ—
v10 (57Γ—57) L 0.061 ms 0.060 ms 0.008 ms 0.009 ms 7Γ—
v20 (97Γ—97) L 0.195 ms 0.200 ms 0.025 ms 0.030 ms 6.5Γ—

Before the 2026-08 optimisation pass pure PHP took 0.425 ms (v1) and 3.2 ms (v10); the pure-PHP encoders are now 20–50Γ— faster, so the native tiers matter mostly for high-volume generation. Without the JIT pure PHP is ~4Γ— slower.

The C++ library alone encodes v1 in ~1.5 Β΅s, v10 in ~6 Β΅s and v40 in ~80 Β΅s (clib/bench/scanme_bench); the rest is the PHP boundary.

All four encoders produce identical, spec-compliant QR codes verified against nayuki's reference implementation.

Run the benchmark yourself:

See BENCHMARK.md for full results, the C++-only benchmark and a description of the SIMD mask-selection kernel.

Building the C++ Library (optional)

The native C++ encoder is optional β€” ScanMePHP works without it. To enable FfiEncoder:

Then pass the library path when creating the encoder:

Or let QRCode auto-detect it (looks for clib/build/libscanme_qr.so in the project root).

Prebuilt Binaries

Prebuilt binaries are available from GitHub Releases. Download the appropriate binary for your platform:

PHP Extension Binaries (Recommended)

Platform Binary Download
Linux (glibc) php-ext-linux-glibc-x86_64.so Latest Release
Linux (musl/Alpine) php-ext-linux-musl-x86_64.so Latest Release
macOS Intel php-ext-macos-x86_64.so Latest Release
macOS Apple Silicon php-ext-macos-arm64.so Latest Release

FFI Library Binaries

Platform Binary Download
Linux (glibc) libscanme_qr-linux-glibc-x86_64.so Latest Release
Linux (musl/Alpine) libscanme_qr-linux-musl-x86_64.so Latest Release
macOS Intel libscanme_qr-macos-x86_64.dylib Latest Release
macOS Apple Silicon libscanme_qr-macos-arm64.dylib Latest Release

Windows: no prebuilt binaries are published. ScanMePHP still works β€” it falls back to the pure-PHP encoder, which needs no extension and no FFI. For native speed on Windows, build clib/ from source with MSVC and point FfiEncoder at the resulting scanme_qr.dll.

Place the downloaded binary in your project directory. The FfiEncoder will automatically detect and load it.

Requirements

Testing

Examples

See the examples/ directory. Run any example:

Generated output files are saved to examples/generated-assets/.

License

MIT β€” see LICENSE.

Contributing

See CONTRIBUTING.md.


All versions of scanmephp with dependencies

PHP Build Version
Package Version
Requires php Version ^8.2
composer-plugin-api Version ^2.0
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package crazy-goat/scanmephp contains the following files

Loading the files please wait ...