Skip to content

nikokevin29/cashier-printer

Repository files navigation

Print Paste Order (PPO)

Aplikasi desktop ringan untuk kasir toko kecil — input pesanan, cetak struk termal, simpan riwayat, dan sinkron otomatis antar kasir dalam satu jaringan.
Dibuat dengan Tauri 2 · Svelte 5 · Rust · SQLite — berjalan 100% offline, tanpa server, tanpa internet.


Download

Unduh versi terbaru untuk platform Anda di halaman Releases:

Platform File Keterangan
Windows 64-bit *_x64-setup.exe Setup installer NSIS, tidak perlu hak admin
macOS Intel *_x64.dmg macOS 10.15 (Catalina) ke atas
macOS Apple Silicon *_aarch64.dmg M1 / M2 / M3
Linux 64-bit *.AppImage Portable — tidak perlu install

Cara Install

Windows

Jalankan .exe → Next → Next → Finish

macOS

Buka .dmg → Drag "Print Paste Order" ke folder Applications

Linux

chmod +x Print.Paste.Order_*.AppImage
./Print.Paste.Order_*.AppImage

Fitur

Fitur Keterangan
Pesanan baru Input nama pelanggan + isi pesanan, cetak dengan satu klik atau Ctrl+Enter
Riwayat pesanan Cari, lihat preview, edit, cetak ulang, hapus — paginasi 25 per halaman
Preview 1:1 Preview struk di layar cocok persis dengan hasil cetak (font & layout sama)
Edit pesanan Ubah nama atau isi, simpan saja atau simpan & cetak ulang
Ukuran font isi 4 ukuran fisik ESC/POS: Normal · Tinggi · Lebar · Besar
Pengaturan printer Selector tipe koneksi (USB/CUPS · Serial/COM · Jaringan) — hanya tampilkan field yang relevan
Test print Cetak halaman uji coba langsung dari menu pengaturan
Sinkron LAN Auto-discover & sinkron pesanan antar PC dalam satu WiFi/LAN — tanpa konfigurasi
Retensi data Riwayat disimpan selama 1 tahun, dihapus otomatis saat aplikasi dibuka

Printer yang Didukung

Printer Ukuran Koneksi
RPP02 58 mm USB / Serial (9600 baud default)
EPSON TM-U220 75 mm USB / Serial (19200 baud) — ada yang tanpa cutter
EPSON TM-T82X 80 mm USB / LAN (IP:9100)
Printer ESC/POS lainnya 58 / 75 / 80 mm USB (CUPS) / Serial / Jaringan

Konfigurasi Koneksi

Buka halaman Pengaturan → Printer, pilih jenis koneksi:

Tipe Field yang muncul Contoh
USB / CUPS Dropdown daftar printer dari OS EPSON TM-T82X
Serial / COM Dropdown port serial + pilihan baud rate /dev/tty.usbserial-1234 · COM3
Jaringan (LAN) Input alamat IP:port 192.168.1.100:9100

TM-U220 tanpa cutter — matikan toggle Auto-cut di Pengaturan.


Sinkron LAN

Semua PC yang menjalankan PPO dalam satu jaringan WiFi/LAN akan saling menemukan dan menyinkronkan pesanan secara otomatis — tanpa pengaturan IP, tanpa server pusat.

  • Perangkat yang terdeteksi muncul di Pengaturan → Sinkronisasi LAN
  • Sinkron berjalan di latar belakang setiap 30 detik
  • Tombol Sync Sekarang untuk sinkron manual
  • Deduplication via UUID — pesanan yang sama tidak disalin dua kali

Tampilan Struk

================================
          TOKO MAKMUR JAYA
================================
  DK PASAR                      ← nama pelanggan (tebal, 2× tinggi)
  Tanggal  : 24/04/26 10:32
--------------------------------
2 sak beras........................ [ ]
1 sak terigu....................... [ ]
40 kg minyak goreng kemasan
besar ekonomis..................... [ ]
5 karton teh botol sosro........... [ ]
--------------------------------
    Terima kasih atas pesanan Anda!
       TOKO MAKMUR JAYA
PC: Kasir 1
================================
[CUT]
  • Titik-titik (dot leaders) memudahkan pencoretan manual
  • Kotak [ ] untuk centang saat barang disiapkan
  • Nama pelanggan dicetak dua kali lebih besar untuk mudah dibaca

Pengaturan Detail

Ukuran Kertas

Pilihan Lebar cetak Printer
58 mm 32 karakter RPP02
75 mm 40 karakter EPSON TM-U220
80 mm 48 karakter EPSON TM-T82X (default)

Ukuran Font Isi Pesanan

Pilihan Keterangan
Normal 1× tinggi, 1× lebar — standar
Tinggi 2× tinggi, 1× lebar
Lebar 1× tinggi, 2× lebar — kolom teks jadi separuh
Besar 2× tinggi, 2× lebar — kolom teks jadi separuh

Template Cetak

Field Keterangan
Nama Toko Muncul di header dan footer struk, teks terpusat
Footer Baris pesan di atas nama toko (misal: "Terima kasih atas pesanan Anda!")
Nama PC / Kasir Muncul di baris paling bawah struk dan di kolom riwayat
Baris Kosong Setelah Cetak Tambah 1–5 baris jika tulisan terakhir tidak keluar dari kepala cetak

Build dari Source

Prasyarat

Langkah

# Clone repositori
git clone https://github.com/nikokevin29/cashier-printer.git
cd cashier-printer

# Install dependensi frontend
bun install

# Jalankan mode development
bun run tauri dev

# Build production (platform saat ini)
bun run tauri build

Output binary ada di src-tauri/target/release/bundle/.

Menjalankan Unit Test

cd src-tauri
cargo test

Struktur Proyek

cashier-printer/
├── src/
│   ├── lib/
│   │   ├── api.ts               # Wrapper typed untuk invoke() Tauri
│   │   ├── stores.svelte.ts     # Toast & state global (Svelte 5 runes)
│   │   ├── types.ts             # Order, AppSettings, PrinterInfo, PeerInfo
│   │   └── GuidedTextarea.svelte # Textarea dengan garis batas kolom
│   └── routes/
│       ├── +layout.svelte       # Navigation Rail MD3 + toast overlay
│       ├── new/                 # Form pesanan baru
│       ├── history/             # Riwayat + search + pagination + preview
│       ├── edit/[id]/           # Edit pesanan
│       └── settings/            # Pengaturan printer, template & LAN sync
└── src-tauri/src/
    ├── db/
    │   ├── mod.rs               # Inisialisasi SQLite + schema + migrasi
    │   ├── orders.rs            # CRUD pesanan + sync order
    │   └── settings.rs          # Key-value settings + device ID
    ├── print/
    │   ├── builder.rs           # VecDriver + layout struk ESC/POS
    │   └── driver.rs            # Dispatch: CUPS → Serial → Jaringan
    ├── sync/
    │   ├── mod.rs               # Orkestrasi LAN sync
    │   ├── discover.rs          # UDP broadcast peer discovery
    │   ├── server.rs            # HTTP server (GET /sync, POST /push)
    │   └── client.rs            # HTTP client sinkron dari peer
    ├── commands/                # Tauri commands (order, print, settings, sync)
    ├── error.rs                 # AppError dengan serde + thiserror
    └── lib.rs                   # Tauri builder + state init

CI / CD

Setiap tag v* yang di-push ke main akan otomatis men-trigger GitHub Actions untuk:

  1. Build untuk 4 platform (macOS Intel, macOS ARM, Windows x64, Linux x64)
  2. Membuat GitHub Release dengan file siap unduh

Lihat .github/workflows/release.yml.


Lisensi

Copyright © 2026 CV Rejeki Amerta Jaya. All rights reserved.

About

Aplikasi cetak struk pesanan untuk toko kecil — offline, ringan, tanpa server. Tauri 2 + Svelte 5 + Rust.

Topics

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors