Digging deeperDigging deeper API reference PHP public API Changelog Deprecations Debugging Debug modeIdentifying errorsDebugging variablesUsing a PHP debugger (XDebug)Debugging JavaScriptDebugging HTML and templatesUsing alternative app directories Classloader PSR-4 autoloading Continuous Integration LintingStatic analysis Nextcloud FlowJavaScript APIs npm packagesEventsGlobal variables NPM npm buildnpm run dev, npm run watchnpm testnpm run lint (optional) NotificationsPerformance considerations Database performanceGetting help PSR PSR-0: AutoloadingPSR-3: Logger InterfacePSR-4: AutoloadingPSR-11: Container Interface Public Pages ConceptImplementing an API called from a public share pageImplementing an authenticated public page Repair steps Creating a repair stepRegister a repair-stepRepair-step types REST APIs Modifying the CORS headers Search Concept overviewSearch providersProvider registrationHandling search requests Settings Settings formSectionRegistering Settings and Sections Two-factor providers Implementing a simple two-factor auth providerRegister the provider stateRegistering a two-factor auth providerProviding an icon (optional)Provide personal settings (optional)Make a provider activatable by the admin (optional)Make a provider deactivatable by the admin (optional) User management Creating usersModifying usersUser session information Dashboard Register a dashboard widgetProvide a user interface Web Host Metadata Writing a handlerHandler registration