Skip to content

Libre-Closet #2433

Open
Open

Description

@gianlazz

Name of the Script

Libre-Closet

Script Type

CT (LXC Container)

Script path

No response

Where does it run?

None

Does this script support arm64?

arm64 not tested

Tested on

  • Proxmox VE
  • Incus

📋 Script Details

App: Libre Closet - free, open-source, self-hosted wardrobe organizer: catalog clothes, upload photos, build outfits on a calendar, installable as an offline-ready PWA.

Script type: CT (LXC), bare-metal - no Docker. The ct/ script builds the Node app from source:

  • Node.js 22 via setup_nodejs
  • fetch the app tag (fetch_and_deploy_gh_tag) → npm ci → npm run build → node dist/main
  • runs under a libre-closet.service systemd unit
  • state lives in /opt/libre-closet_data (SQLite + uploads); update_script() re-fetches and rebuilds in place, leaving the data directory untouched

Resources: 1 vCPU, 2 GB RAM (1 GB OOMs the npm ci build, exit 137), 8 GB disk (4 GB is ~81% full after the build and blocks updates). OS Debian 13. Interface port 3000.

Tested on Proxmox VE 8.4.21 (kernel 6.8.4-2-pve, x86_64, Debian 13 LXC):

  • default install completes; libre-closet.service is active; UI answers HTTP 200 on http://<ip>:3000
  • update_script() re-fetch → rebuild → restart verified with the data directory preserved (no data loss)
  • the advanced-mode wizard was not run (needs the Proxmox console / TTY); the container-side install script is identical in both modes

arm64: not tested. It is a pure-Node build so it should work, but it has not been verified on arm64 - leaving the box unticked.

Version pinning: the app now publishes GitHub Releases for its tags; os is Debian 13. Metadata slug is libre-closet.

Open questions for maintainers:

  1. Category - currently the Miscellaneous placeholder; happy to move it if you prefer another.
  2. logo - currently points at the app icon on GitHub; should it use a selfhst/icons entry instead?
  3. app_vars - left undeclared: the app has no first-run account (auth is off by default), so there is nothing to collect during install. OK, or would you prefer an explicit AUTH_ENABLED variable?

Files (ready on fork branch Lazztech/DevScripts:add-libre-closet, 3 files, nothing else):

  • ct/libre-closet.sh
  • install/libre-closet-install.sh
  • json/libre-closet.json

Disclosure: this proposal is AI-assisted (model: deepseek-v4.1-flash via opencode); the script was reviewed by the app author and tested end-to-end on a real PVE 8.4.21 host before submitting. I, @gianlazz, also performed my own manual testing after the fact to confirm.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions