@lupinum/vue-photo

Vue components, composables, and photo utilities for Nuxt Photo.
972 1
Install
npm install @lupinum/vue-photo
Latest Version:0.2.0
Vue:3
License:MIT
Last Updated:Oct 24, 2026
Links: GitHub  ·  npm
Maintainer: lupinum

Nuxt Photo icon

Nuxt Photo

Build responsive photo galleries, shared lightboxes, and carousels from one predictable photo model.

npm version CI status MIT license Discord Ask DeepWiki

[!WARNING] Nuxt Photo 1.0 is in beta. Install it from the next npm tag.

Why use Nuxt Photo?

Nuxt Photo gives albums, carousels, and custom triggers one shared photo model and one lightbox. It uses known image dimensions to create stable layouts during server rendering. You can start with complete components and use lower-level Vue primitives when you need a custom interface.

You do not need to connect separate gallery, carousel, gesture, focus, and lightbox libraries.

When to use it

Use Nuxt Photo when your application has image URLs, stable IDs, widths, and heights. It is useful when you need accessible keyboard and gesture controls, server-rendered layouts, or optional Nuxt Image providers.

Nuxt Photo is not suitable when you only need a plain image grid. It is also not an image CMS, optimizer, or asset pipeline.

Requirements

  • Node.js 22.18 or 24.11 and later maintenance releases
  • Nuxt 4.4.8 or later for @lupinum/nuxt-photo
  • Vue 3.5 or later for @lupinum/vue-photo
  • Image dimensions before render

Installation

Install the Nuxt package:

pnpm add @lupinum/nuxt-photo@next

Add the module:

export default defineNuxtConfig({
  modules: ['@lupinum/nuxt-photo'],
  nuxtPhoto: {
    css: 'all',
  },
})

The default css: 'structure' option includes layout CSS only. Use css: 'all' for the included visual theme.

Quick start

<script setup lang="ts">
import type { PhotoItem } from '@lupinum/nuxt-photo/app'

const photos: PhotoItem[] = [
  {
    id: 'landscape',
    src: '/photos/landscape.jpg',
    width: 1280,
    height: 800,
    alt: 'A mountain landscape',
  },
  {
    id: 'portrait',
    src: '/photos/portrait.jpg',
    width: 960,
    height: 1200,
    alt: 'A portrait photograph',
  },
]
</script>

<template>
  <PhotoAlbum :photos="photos" layout="rows" />
</template>

Select a photo to open the shared lightbox. The same array works with albums, groups, carousels, and custom triggers.

Discord

Join the Lupinum OSS community to discuss Nuxt Photo, ask questions, and share what you build.

Join the Lupinum OSS Discord

Core concepts

  • Known dimensions prevent layout shifts before images load.
  • One provider coordinates focus, keyboard controls, gestures, and transitions.
  • Ready-made components cover common photo experiences.
  • Vue composables and primitives support custom lightbox interfaces.
  • Nuxt Image integration is optional. Native image rendering remains available.

Packages

  • @lupinum/nuxt-photo provides the Nuxt module, auto-imports, components, and CSS integration.
  • @lupinum/vue-photo provides framework-level Vue components, composables, types, and utilities.

Nuxt applications normally install only @lupinum/nuxt-photo.

Documentation

Read the Nuxt Photo documentation. Start with Get started.

Working with a coding agent? The package ships its docs for the installed version; follow Agent setup in the package README. AI coding agents lists every option.

The changelogs of @lupinum/nuxt-photo and @lupinum/vue-photo record release changes.

Contributing and development

Read CONTRIBUTING.md before you open a pull request. The OSS handbook covers dependency updates, releases, rollback, and incident response.

Run the normal handoff gate before you request review:

pnpm verify

Support and security

Open a GitHub issue for bugs and focused feature requests. Join the Lupinum OSS Discord for community support.

Do not report vulnerabilities in public issues. Follow SECURITY.md to send a private report.

License

Nuxt Photo is developed by Lupinum OG and released under the MIT License.

Related Packages

@lupinum/nuxt-photo

Photo galleries, lightboxes, and provider-aware image rendering for Nuxt.

938 1
vue-tinybox

A slick, yet tiny lightbox gallery for Vue.js

38,510 92
sweet-album

A framework-agnostic web photo album: justified layout, virtual scrolling, year/...

1,025 2
vue-cool-lightbox

A pretty Vue.js component to display an image gallery lightbox inspired by fancy...

229,123 339
vue-image-lightbox

A Vue.js package to display an image gallery lightbox

157,508 344

Version History

Version Released Vue License
0.2.0 ^3.5.0 MIT
Pre-releases (7)
Version Released Vue License
1.0.0-beta.8 ^3.5.0 MIT
1.0.0-beta.6 ^3.5.0 MIT
1.0.0-beta.5 ^3.5.0 MIT
1.0.0-beta.4 ^3.5.0 MIT
1.0.0-beta.3 ^3.5.0 MIT