npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

rapikan

v1.1.2

Published

Simple CLI tool to organize files into folders based on their date (cross-platform compatible, CLI parameter path, and automatic duplicate renaming).

Readme

Rapikan - File Organizer Tool

Tool sederhana berbasis TypeScript dan Bun untuk merapikan file di dalam folder target dengan cara mengelompokkannya secara otomatis ke dalam subfolder berdasarkan tanggal (YYYY-MM-DD).

Tool ini sangat berguna untuk merapikan file media seperti hasil rekaman drone (misalnya DJI), kamera, atau handphone.


🚀 Fitur Utama

  • Deteksi Tanggal Pintar (4 Lapisan Prioritas):
    1. 📋 Nama File — Pola seperti DJI_20260622_... langsung dideteksi.
    2. 📷 EXIF Metadata Foto (Baru!) — Baca tanggal asli rekaman dari header file JPEG/TIFF/HEIC. Akurat meski file sudah dikopi atau dikompresi.
    3. 🎬 Metadata Video (Baru!) — Baca creation_time dari header atom MP4/MOV/M4V. Tanggal asli drone/kamera, bukan tanggal file.
    4. 🗓️ Metadata Sistem — Fallback ke birthtime/mtime dari sistem operasi.
  • Mode Simulasi / Dry-Run (Baru!):
    • Tampilkan rencana pemindahan lengkap tanpa benar-benar memindahkan satu file pun. Aman untuk preview sebelum eksekusi.
  • Fitur Undo / Pembatalan (Baru!):
    • Setiap proses merapikan menyimpan log riwayat .rapikan-history.json. Jalankan --undo untuk memindahkan semua file kembali ke lokasi asalnya.
  • Pencegahan Overwrite (Deduplikasi):
    • Jika nama file sama di folder tujuan, otomatis direname menjadi nama_(1).ext, nama_(2).ext, dst.
  • Kompatibel Lintas OS (Multi-Platform):
    • Berjalan di Windows (PowerShell/CMD) maupun Linux/macOS dengan normalisasi path otomatis.
  • Keamanan File Proyek:
    • Secara otomatis mengabaikan index.ts, package.json, .git, .agents, dll.

📦 Instalasi

🚀 One-line Install (Recommended for Linux/macOS)

curl -fsSL https://raw.githubusercontent.com/dwirx/rapikan/main/install-curl.sh | bash

📦 Package Managers

NPM / Yarn / PNPM

npm install -g rapikan
# Atau menggunakan Yarn
yarn global add rapikan
# Atau menggunakan PNPM
pnpm add -g rapikan

Bun (Recommended)

bun install -g rapikan

🪟 Windows Support

Tool ini sepenuhnya kompatibel dengan PowerShell, CMD, Git Bash, dan WSL.

npm install -g rapikan
# Atau dengan Bun
bun install -g rapikan

Scoop (Windows)

scoop bucket add dwirx https://github.com/dwirx/scoop-rapikan
scoop install rapikan

🍎 macOS & Linux Alternative (Homebrew / AUR)

Homebrew (macOS/Linux)

brew tap dwirx/rapikan
brew install rapikan

Arch Linux (AUR)

yay -S rapikan-bin

📥 Manual Download

Unduh standalone binary langsung dari rilis GitHub:

Setelah diunduh (macOS/Linux):

chmod +x rapikan-linux-x64
sudo mv rapikan-linux-x64 /usr/local/bin/rapikan

💻 Cara Penggunaan

Perintah Dasar

Jalankan di folder saat ini (Menu Interaktif)

rapikan

Jalankan pada folder tertentu

rapikan ./path/ke/folder

Jalankan tanpa konfirmasi (Auto-Confirm)

rapikan ./path/ke/folder -y

🔍 Mode Simulasi (Dry-Run) (Fitur Baru)

Tampilkan rencana lengkap pemindahan file tanpa benar-benar memindahkan file apapun. Sangat berguna untuk memverifikasi hasil sebelum benar-benar mengeksekusi.

# Simulasi di folder saat ini
rapikan --dry-run

# Simulasi pada folder tertentu
rapikan ./folder-drone --dry-run

# Bisa dikombinasikan dengan path
rapikan /mnt/sdcard/DCIM --dry-run

Contoh Output:

🔍 MODE SIMULASI (DRY-RUN) AKTIF - Tidak ada file yang akan dipindahkan.

Ditemukan 5 file untuk dirapikan:

 - DJI_20260620_123015.mp4               -> /2026-06-20/ [Nama File]
 - DJI_20260620_154522.mp4               -> /2026-06-20/ [Nama File]
 - liburan.jpg                           -> /2026-06-22/ [EXIF Foto]
 - video_trip.mov                        -> /2026-06-21/ [Metadata Video]
 - IMG_3421.jpg                          -> /2026-06-18/ [EXIF Foto]

✅ Simulasi selesai. Tidak ada file yang dipindahkan (mode --dry-run).
   Hapus flag --dry-run untuk benar-benar merapikan file.

↩️ Fitur Undo (Pembatalan) (Fitur Baru)

Setiap kali rapikan memindahkan file, ia secara otomatis menyimpan riwayat pemindahan ke file .rapikan-history.json di dalam folder target.

Gunakan --undo untuk mengembalikan semua file ke lokasi asalnya sebelum dirapikan.

# Batalkan hasil rapikan di folder saat ini
rapikan --undo

# Batalkan hasil rapikan di folder tertentu
rapikan ./folder-drone --undo

Contoh Output:

Ditemukan 5 file dalam riwayat terakhir:
Dicatat pada: 2026-06-28T11:00:00.000Z

 - /2026-06-20/DJI_20260620_123015.mp4  -> kembali ke /DJI_20260620_123015.mp4
 - /2026-06-20/DJI_20260620_154522.mp4  -> kembali ke /DJI_20260620_154522.mp4
 - /2026-06-22/liburan.jpg              -> kembali ke /liburan.jpg

Kembalikan semua file ke lokasi semula? (y/n, default n): y

[OK] Dikembalikan: 2026-06-20/DJI_20260620_123015.mp4
...

UNDO SELESAI
Berhasil dikembalikan : 5 file

Catatan: File .rapikan-history.json akan direset setelah --undo berhasil dijalankan. Undo hanya bisa dilakukan sekali untuk setiap sesi merapikan.


📷 Deteksi Tanggal dari EXIF & Video (Fitur Baru)

Rapikan kini mampu membaca tanggal asli rekaman dari dalam file media, tanpa menggunakan library pihak ketiga apapun — semua diproses secara native.

Mengapa ini penting? Ketika file foto atau video dikopi ke komputer lain, tanggal sistem file (mtime/birthtime) sering kali berubah menjadi tanggal hari ini. Dengan membaca metadata internal file, rapikan mendapatkan tanggal asli saat foto/video diambil.

Format yang didukung: | Tipe | Format | Sumber Data | |------|--------|-------------| | Foto | .jpg, .jpeg, .tiff, .heic, .heif | EXIF DateTimeOriginal | | Video | .mp4, .mov, .m4v, .m4a, .3gp | QuickTime creation_time atom |

Contoh Output (terlihat di preview/dry-run):

 - foto_liburan.jpg    -> /2026-05-14/ [EXIF Foto]
 - DJI_clip.mp4        -> /2026-06-20/ [Metadata Video]
 - old_photo.jpg       -> /2023-12-25/ [EXIF Foto]

📋 Referensi Flag Lengkap

| Flag | Alias | Deskripsi | |------|-------|-----------| | (tidak ada) | | Mode interaktif — tampilkan menu pilihan folder | | ./path | | Tentukan folder target langsung | | -y | --yes | Auto-konfirmasi, tidak perlu tekan y | | -d | --dry-run | Mode simulasi — preview saja, tidak ada file dipindah | | --undo | | Kembalikan file ke lokasi semula berdasarkan riwayat terakhir |


📝 Contoh Ilustrasi Struktur Folder

Sebelum dirapikan:

📂 folder-media/
 ┣ 📄 DJI_20260620_123015.mp4
 ┣ 📄 DJI_20260620_154522.mp4
 ┣ 📄 DJI_20260621_091500.mp4
 ┗ 📄 liburan.jpg  (EXIF: diambil 25 Juni 2026)

Setelah dijalankan:

📂 folder-media/
 ┣ 📂 2026-06-20/
 ┃ ┣ 📄 DJI_20260620_123015.mp4
 ┃ ┗ 📄 DJI_20260620_154522.mp4
 ┣ 📂 2026-06-21/
 ┃ ┗ 📄 DJI_20260621_091500.mp4
 ┗ 📂 2026-06-25/
   ┗ 📄 liburan.jpg
 ┗ 📄 .rapikan-history.json  (riwayat untuk --undo)

🛠️ Pengembangan (Development / Clone)

Jika Anda men-clone repositori ini untuk mengembangkannya secara lokal:

  1. Pasang dependensi: bun install
  2. Lakukan build: bun run build
  3. Jalankan TypeScript: bun run index.ts
# Contoh penggunaan saat development
bun run index.ts ./folder-test --dry-run
bun run index.ts ./folder-test -y
bun run index.ts ./folder-test --undo