Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Nova Images Laravel Package

sbing/nova-images

sbing/nova-images is a Laravel Nova package for uploading and managing images on your resources, with support for multiple image uploads, previews, and configurable storage. It simplifies adding image fields and handling file storage in Nova admin panels.

View on GitHub
Deep Wiki
Context7

Getting Started

Before installing anything, do the thing that the star count is telling you to do: open the repository and read composer.json and src/. With zero stars and zero dependents, sbing/nova-images is effectively an unvetted, likely unmaintained package, and your first "getting started" step is due diligence rather than composer require.

That said, the shape of a Nova image package is predictable. Typically you will:

  1. Add the package via Composer in your Nova application (it is a Nova field/tool, so it belongs in the same project as your app/Nova resources):
    composer require sbing/nova-images
    
  2. Check whether it ships a service provider that needs registering in config/app.php (Laravel 5.5+ auto-discovery usually handles this, but verify the provider exists).
  3. Publish any front-end assets if the package bundles compiled JS/CSS: php artisan vendor:publish --provider="Sbing\NovaImages\..." — confirm the provider name from source, since Nova packages frequently require nova:publish or a Nova::script() call.
  4. Look first at src/ for a class extending Laravel\Nova\Fields\Field (or Image). That class's component(), rules(), and default attributes tell you everything about the API surface — property names like disk(), path(), dimensions(), or prunable() are the usual suspects.

The first realistic use case is replacing Nova's stock Image field when you need multi-image uploads, custom storage disks, or a gallery-style editor on a resource like Product or Post. Try it on one throwaway resource first:

use Sbing\NovaImages\NovaImages;

public function fields(Request $request)
{
    return [
        NovaImages::make('Gallery')
            ->disk('public')
            ->path('products'),
    ];
}

Match class and method names to the actual source before committing to this; treat the snippet above as a template to verify, not documentation.

Implementation Patterns

Single field, single image. The safest integration is treating the package as a drop-in for Nova's Image field, which means your model just needs a string column and your resource a field call. Confirm the field resolves the stored value into a URL server-side; if it does, you avoid a custom resolver in NovaServiceProvider.

Gallery / multi-image. Most packages of this name store a JSON array on the column. If so, cast the attribute on the model ('gallery' => 'array') and render front-end with a loop. Check whether the field handles deletions itself or leaves orphan cleanup to you — the latter is common and means a model deleting observer is your responsibility.

Disk strategy. Standardize on one disk (public or S3) via config/filesystems.php and pass it at the field level rather than relying on the package default. If the package hardcodes public_path() writes, that kills S3 compatibility — read store()-adjacent code before you build a workflow around it.

Integration with validation. Chain Nova's standard rules:

NovaImages::make('Cover')
    ->rules('image', 'max:4096')
    ->creationRules('required'),

If the package exposes its own dimension rules (->dimensions('min_width=800')), prefer Nova rules where possible for consistent error messaging.

Combining with your existing media handling. If you already use Spatie Media Library or a custom upload pipeline, do not introduce a second source of truth. Either let the package own the column entirely, or skip it. Hybrid setups (package writes paths, your code writes media records) are where most debugging time goes.

Gotchas and Tips

  • Version compatibility is the top risk. Nova's field API changed meaningfully across v3 → v4 → v5. Check the package's composer.json constraints against your Nova major version before anything else. A stale nova constraint of ^3.0 will silently break compiled components.
  • Compiled assets may not be committed. If dist/js is missing from the repo, the field renders blank in the browser. Run npm run prod inside the package or fall back to your own field.
  • Zero dependents means no community answers. When something breaks, Stack Overflow will not help. Budget time to read the Vue component (resources/js/components/) — that is where upload behaviour, preview logic, and delete handling actually live.
  • Orphaned files. Almost every Nova image package leaks files on record delete. Add a deleting model event to unlink Storage::disk($disk)->delete($path) for each stored path, and test it.
  • Storage visibility. Files stored via public_path() won't appear on S3 and vice versa. If the field returns broken thumbnails in production but works locally, this is the cause nine times out of ten.
  • Debugging blank fields. In order: (1) is the component path registered (Nova::script)? (2) did vendor:publish run? (3) check the browser console — Vue prop mismatches usually surface there as undefined attributes.
  • Extension point to prefer. If the package doesn't fit, its field class is usually thin enough to subclass. Overriding resolve() and fill() in your own class is safer than patching vendor code, and it survives composer update.

Bottom line: treat this as a prototype-grade dependency. Read every line before shipping it to production, pin the exact version in composer.lock, and have a fallback plan — Nova's built-in Image/File fields cover most single-image needs without the maintenance risk.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment
uni-method/symfony-lib