makeQR es un generador de códigos QR para Windows que cabe en un ejecutable de ~3 MB y no necesita instalación. Convierte texto, URLs y tarjetas de contacto vCard en imágenes PNG listas para imprimir o compartir. Escrito en Go con la API Win32 nativa: sin Electron, sin frameworks, sin dependencias.
01 — Qué hace makeQR
La herramienta tiene dos modos de entrada y un único objetivo: producir una imagen PNG con el código QR correspondiente.
Modo texto/URL. Escribe o pega cualquier cadena de texto — una URL, un número de teléfono, un mensaje corto — en el área de texto, elige la resolución y pulsa Generar QR. El código aparece al instante en la ventana. Si te convence, Guardar como… abre el diálogo de ficheros nativo de Windows para elegir dónde guardarlo.
Modo vCard. El botón VCARD… abre un formulario con los campos estándar de una tarjeta de contacto: nombre, teléfono, email, empresa y dirección. makeQR construye el bloque BEGIN:VCARD … END:VCARD internamente y genera el QR a partir de él. Cualquier app de contactos moderna (Android, iOS, Outlook) reconoce este formato y añade el contacto directamente al escanearlo.
Las resoluciones disponibles son 200, 300, 500, 800, 1000 y 2000 píxeles. Para imprimir en papel A4 a buena calidad, 500 o 800 son más que suficientes. Para una pantalla de exposición o un cartel grande, 2000.
02 — Interfaz Win32 nativa en Go
La mayoría de herramientas de escritorio pequeñas para Windows se hacen hoy con Electron (que arrastra Node.js y Chromium) o con frameworks .NET que requieren instalar el runtime. makeQR va por otro camino: llama directamente a la API Win32 de Windows desde Go usando el paquete syscall de la biblioteca estándar.
El resultado es un ejecutable que no depende de nada externo. Windows ya incluye las DLLs de sistema que la app necesita (user32.dll, gdi32.dll, comctl32.dll). El arranque es instantáneo y el consumo de memoria es mínimo.
El grueso de la interfaz vive en gui.go: registro de la clase de ventana, bucle de mensajes Win32, creación de controles (botones, área de texto, combobox para la resolución) y renderizado del bitmap del QR en el área de previsualización. La compilación necesita CGO activo y MinGW-w64 para enlazar con las DLLs del sistema:
go build -ldflags "-H windowsgui" -o makeQR.exe .
El flag -H windowsgui indica al linker que el ejecutable es una aplicación de escritorio, no una consola: Windows no abre una ventana de terminal al lanzarlo.
La estructura del proyecto es intencionalmente plana — cuatro ficheros Go con responsabilidades claras:
- main.go — detecta si hay argumentos en la línea de comandos y decide si arranca la GUI o el modo CLI.
- gui.go — toda la ventana Win32: controles, bucle de mensajes y pintura del QR en pantalla.
- qr.go — envuelve la librería de generación QR y devuelve un
image.Image. - vcard.go — construye el texto vCard 3.0 a partir de los campos del formulario.
03 — Generación del código QR
La generación real del código QR la hace la librería skip2/go-qrcode, que implementa el estándar ISO 18004. makeQR la usa a través de qr.go, que es intencionalmente delgado:
package main
import (
"image"
qrcode "github.com/skip2/go-qrcode"
)
func generateQR(content string, size int) (image.Image, error) {
qr, err := qrcode.New(content, qrcode.Medium)
if err != nil {
return nil, err
}
return qr.Image(size), nil
}
El nivel de corrección de errores elegido es Medium (≈15 % de recuperación). Es un compromiso razonable: los códigos son más compactos que con nivel High pero siguen siendo legibles si el papel se dobla un poco o la imagen tiene algo de ruido.
El QR generado es un image.Image estándar de Go. gui.go lo convierte a un HBITMAP de Win32 para mostrarlo en la ventana; el guardado como PNG usa el paquete estándar image/png.
04 — Tarjetas de contacto vCard 3.0
El estándar vCard 3.0 (RFC 2426) es el formato que usan los teléfonos para intercambiar contactos. Un QR que contiene un bloque vCard válido lo pueden leer directamente la cámara de Android, iOS y la mayoría de lectores QR modernos, que ofrecen al usuario añadir el contacto a su agenda.
vcard.go construye el bloque a partir de los campos del formulario:
package main
import "fmt"
func buildVCard(name, phone, email, org, address string) string {
return fmt.Sprintf(
"BEGIN:VCARD\r\nVERSION:3.0\r\nFN:%s\r\nTEL:%s\r\nEMAIL:%s\r\nORG:%s\r\nADR:;;%s\r\nEND:VCARD",
name, phone, email, org, address,
)
}
El salto de línea obligatorio en vCard es \r\n (CRLF), no solo \n. Algunos lectores son permisivos, pero para máxima compatibilidad con dispositivos más antiguos vale la pena respetar el estándar.
05 — Modo CLI para scripts
Además de la GUI, makeQR tiene un modo de línea de comandos útil para generar códigos QR desde scripts PowerShell o CMD sin abrir ninguna ventana:
makeQR.exe "https://coletas.es" salida.png 500
Los tres argumentos son: el texto a codificar, el fichero de salida y el tamaño en píxeles. main.go detecta si se han pasado argumentos y llama directamente a generateQR sin inicializar la GUI.
Esto lo hace útil para automatizaciones: generar QR de URLs en lote, incluirlo en un pipeline de generación de documentos, o integrarlo en scripts que montan materiales para impresión.
06 — Compilar y descargar
El repositorio incluye un ejecutable precompilado (makeQR.exe, ~3 MB) que puedes descargar y ejecutar directamente en cualquier Windows de 64 bits sin instalar nada. Para compilarlo tú mismo necesitas Go 1.21 o superior y MinGW-w64:
git clone https://github.com/unmateria/GOQR-Maker.git cd GOQR-Maker go build -ldflags "-H windowsgui" -o makeQR.exe .
Las dependencias Go se descargan solas al compilar (go.mod ya las declara). El único requisito externo es MinGW-w64 para que CGO pueda enlazar con las DLLs de Win32. En Windows se puede instalar desde mingw-w64.org o a través de MSYS2.
El código fuente está en github.com/unmateria/GOQR-Maker bajo licencia MIT. Si no quieres compilar, descarga el ejecutable directamente:
Descargar makeQR.exe (~3 MB · Windows x64 · sin instalación)