Skip to content
NotCoffee418Public

Repository files navigation

Labelgood

A label editor for label printers such as the Brother QL series. Design labels with text, lines, rectangles and images, then print them directly or save them as PDF. Labels save as .labelgood files, with auto save and crash recovery. Runs on Windows and Linux.

Labelgood preview

Installation

Windows

  • Installer: x64 · ARM64
  • Or in PowerShell:
    irm https://raw.githubusercontent.com/NotCoffee418/Labelgood/main/install.ps1 | iex

Linux

  • Debian/Ubuntu: x64 · ARM64
  • Fedora/openSUSE: x64 · ARM64
  • AppImage: x64 · ARM64
  • Or any distro:
    curl -fsSL https://raw.githubusercontent.com/NotCoffee418/Labelgood/main/install.sh | bash

MSI, portable builds and checksums are on the releases page.

Printing

Labelgood prints through the system's own printer drivers, so no extra tools are needed:

  • Windows: any installed printer. Options such as cutting come from the driver's own settings.
  • Linux: CUPS. Use the permanent queue for your printer (e.g. QL-810W); temporary auto-discovered queues don't report their options.

The print dialog shows whatever options the selected printer's driver offers (cutting, quality, media type, …) and remembers your choices per printer.

Supported Devices

Confirmed Working

  • Brother QL-810W (Windows, Linux)

Expected to Work

  • Any label printer with a CUPS driver, on Linux

See SUPPORTED_DEVICES.md for details, and to report a printer that isn't listed.

Label Files

Labels save as .labelgood files (File > Save), with images embedded, so one file is the whole label. The installer, the .deb/.rpm packages and install.sh register the file type, so double-clicking a label opens it in Labelgood. Dropping a label onto the window opens it too.

  • Auto Save (File menu, on by default) saves a label that already has a file shortly after each change.
  • Crash recovery: while a label has unsaved changes, a copy is kept in the app's data folder. If Labelgood closes without saving them (a crash, power loss), the next start offers to restore it. Leftovers are under File > Recover Unsaved Labels.

Development

Prerequisites

Getting Started

npm install          # install dependencies
npm run tauri dev    # run the app in development mode
npm run tauri build  # build the app and its installers/packages

Project Structure

  • src/ - Svelte frontend
    • routes/+page.svelte - the app's single page, composed from the components below
    • lib/components/ - UI components (toolbar, canvas, settings panel, print dialog, ...)
    • lib/state/ - shared state (runes in .svelte.ts modules) and the editor's behaviour: elements, undo, mouse gestures, keyboard shortcuts, clipboard, printing, settings
    • lib/ - helpers without app state: types, label formats, rich text editing, rendering for print, and typed wrappers for the Rust commands
  • src-tauri/ - Rust backend (printing, PDF generation, fonts, label files, crash recovery)
    • linux/ - desktop entry template, file type definition and AppStream metadata for the Linux packages
  • static/ - Static assets
  • .vscode/ - Editor settings and recommended extensions

Recommended editor: VS Code with the Svelte, Tauri and rust-analyzer extensions.

Release Workflow

Pushing a version tag builds and publishes a release:

git tag v1.0.0
git push origin v1.0.0

Tags must be plain vMAJOR.MINOR.PATCH. The tag is the only place the version comes from: the version in Cargo.toml and package.json is a 0.0.0 placeholder that marks development builds, so there's nothing to bump by hand.

The label file format has its own version (FILE_VERSION in src/lib/state/document.svelte.ts), which only changes when the file format does; see the comment there.

The workflow runs the tests, then builds with Tauri's bundler:

  • Windows (x64 and ARM64): installer, MSI and portable executable
  • Linux (x86_64 and ARM64): .deb, .rpm, AppImage and plain binary

and creates a GitHub release for the tag with all of them. Linux ARM64 is built natively on GitHub's ARM runners; Windows ARM64 is cross-compiled on x64 Windows.

Releases

Packages

Used by

Contributors

Languages