# Renderer outputs

Renderers convert the same `QRCodeMatrix` into different output values. Choose by the value your
application needs, then install the owning package.

| Output                                                          | Renderer                      | Return type         | Package              | Runtime                     | Best use case                                  |
| --------------------------------------------------------------- | ----------------------------- | ------------------- | -------------------- | --------------------------- | ---------------------------------------------- |
| [SVG string](/reference/renderers/svg/)                         | `QRCodeSVGRenderer`           | `string`            | `@qrcodesdk/core`    | Any Core-compatible runtime | Scalable web, email, print, and server output  |
| [Terminal text](/reference/renderers/text/)                     | `QRCodeTextRenderer`          | `string`            | `@qrcodesdk/core`    | UTF-8 text environment      | Terminals, logs, CLIs, and snapshots           |
| [Canvas element](/reference/renderers/canvas/)                  | `QRCodeCanvasRenderer`        | `HTMLCanvasElement` | `@qrcodesdk/browser` | Browser DOM                 | Drawing, compositing, and manual raster export |
| [PNG-backed Image element](/reference/renderers/image/)         | `QRCodeImageRenderer`         | `HTMLImageElement`  | `@qrcodesdk/browser` | Browser DOM                 | Accessible DOM image and CSS workflows         |
| [SVG browser download](/reference/renderers/browser-downloads/) | `QRCodeDownloadSVGRenderer`   | `void`              | `@qrcodesdk/browser` | Browser DOM                 | User-triggered scalable file download          |
| [PNG browser download](/reference/renderers/browser-downloads/) | `QRCodeDownloadImageRenderer` | `void`              | `@qrcodesdk/browser` | Browser DOM                 | User-triggered raster file download            |
| [PNG Buffer](/reference/renderers/png/)                         | `QRCodePNGRenderer`           | `Buffer`            | `@qrcodesdk/node`    | Node.js-compatible runtime  | Files, HTTP responses, and attachments         |

Framework packages wrap the same output families in components: see
[React and Next.js](/packages/react/), [Vue](/packages/vue/), [Svelte](/packages/svelte/), or
[Angular](/packages/angular/). To produce another return type, implement the
[custom renderer contract](/reference/custom-renderers/).
