An addon's configuration is split across several files, each with a distinct job. Settings/config.php holds the metadata shown in the addon manager — display name, vendor, type, logo, slider images, version, base route prefix, and licensing (license_type of native, marketplace, remote, or free, plus native_addon_name when native). A new_version_url returning JSON with version, changelog, and release date enables automatic update checks. module.json is the manifest: name (must match the directory), lowercase alias, load priority, the service providers to register, PHP files to autoload, and requires for dependencies on other addons (dependencies load first).
Runtime settings live in Config/config.php, accessed via config('youralias.key') and overridable through php artisan vendor:publish --tag=youralias-config; use env() for API keys and other secrets. menu.json defines sidebar navigation — each entry has a title, HTML icon, relative URL (or # for parents), hidden, hasChild, and a childrens array for submenus. composer.json declares PHP dependencies, merged into the main app by composer-merge-plugin (run composer update from the project root). webpack.mix.js compiles Resources/assets/ sources into the addon's own public/ directory.
For user-configurable settings, store values in a dedicated database table with a small settings model exposing static get/set helpers, optionally keyed per user — don't write user settings into config files.