Skip to content
qrkude

Free and open source · Apache-2.0

QR codes that look good and still scan.

Design a QR code with your colors, shapes and logo. qrkude checks that phones can still read it, and gives you the same result in JavaScript, Python, Rust, Flutter, Qt, Arduino, LVGL and C.

No sign-up. Your codes are created in your browser and never expire.

Ready to scan· version 2Customize in the generator →

Designs

Start from a design you like

See the whole gallery →

What you can do

Everything a QR code designer needs, and checks it still works

Eleven module shapes

Squares, dots, stars, bars, and connected shapes that flow into each other.

Custom eyes

Eight frame and eight center shapes for the corner squares, each with its own color.

Color and gradients

Solid colors with transparency, linear and radial gradients, transparent backgrounds.

Logos that still scan

Clear space, module removal, and an exact measure of how much error correction the logo uses.

Frames and captions

Rounded backgrounds, borders and a "SCAN ME" caption above or below the code.

Every kind of content

Links, Wi-Fi access, contacts, calendar events, e-mail, SMS, phone numbers and map locations.

Built to scan

It tells you before your customers do

Every design is checked for what makes scanners fail: weak contrast, a missing margin, tiny modules, eye shapes that confuse readers, and logos that hide too much. For a logo, qrkude measures exactly how much of the code's error correction it uses.

What each warning means →

Ready to scan

No warnings

Low contrast

  • low-contrast

Logo too large

  • logo-unreadable

logo damage 173%

One design, every platform

Design it once, render it anywhere

A design is a small JSON document. Make it here, save it with your data, and render it on a server, in a mobile app or on a microcontroller display. The SVG is identical, byte for byte, in every library.

import { svg } from 'qrkude';

const style = {
  modules: { shape: 'liquid', color: '#1d3557' },
  eyes: { frame: 'rounded', ball: 'circle', ballColor: '#3451d1' },
};
document.querySelector('#qr').innerHTML = svg('https://qrkude.com', { style });
import qrkude

style = {
    "modules": {"shape": "liquid", "color": "#1d3557"},
    "eyes": {"frame": "rounded", "ball": "circle", "ballColor": "#3451d1"},
}
with open("qr.svg", "w") as f:
    f.write(qrkude.svg("https://qrkude.com", style))
use qrkude::StyleDocument; // feature "json"

let doc = StyleDocument::from_json(r#"{"style": {
  "modules": {"shape": "liquid", "color": "#1d3557"},
  "eyes": {"frame": "rounded", "ball": "circle", "ballColor": "#3451d1"}
}}"#)?;
let svg = doc.render_svg(b"https://qrkude.com")?;
QRKudeView(
  data: 'https://qrkude.com',
  size: 240,
  style: const {
    'modules': {'shape': 'liquid', 'color': '#1d3557'},
    'eyes': {'frame': 'rounded', 'ball': 'circle', 'ballColor': '#3451d1'},
  },
)
auto style = QRKude::Style::fromJson(R"({
  "modules": {"shape": "liquid", "color": "#1d3557"},
  "eyes": {"frame": "rounded", "ball": "circle", "ballColor": "#3451d1"}
})");
QRKude::Renderer qr(QStringLiteral("https://qrkude.com"), style);
qr.toImage(1024).save("qr.png");
QRKude qr;

void setup() {
  qr.setStyleJson(R"({
    "modules": {"shape": "liquid", "color": "#1d3557"},
    "eyes": {"frame": "rounded", "ball": "circle", "ballColor": "#3451d1"}
  })");
  qr.encode("https://qrkude.com");
  qr.draw(tft, 20, 40, 200);   // any GFX-style display
}
const char *json =
    "{\"modules\":{\"shape\":\"liquid\",\"color\":\"#1d3557\"},"
    "\"eyes\":{\"frame\":\"rounded\",\"ball\":\"circle\",\"ballColor\":\"#3451d1\"}}";
const char *text = "https://qrkude.com";
static char arena[256];
static qrk_code code;
qrk_style style;
qrk_style_default(&style);
qrk_style_from_json(json, strlen(json), &style, NULL, NULL, arena, sizeof arena);
qrk_encode_for_style(&code, text, strlen(text), NULL, &style, NULL);
qrk_svg_write(&code, &style, NULL, write_cb, file);

Install from source for now: the packages are not on the registries yet. Read the docs.

Libraries

Use it in your own software

Make your first code in a minute

Paste a link, pick a style, download SVG or PNG.