diff --git a/docs/admin/overview.mdx b/docs/admin/overview.mdx
index 8a959e2ebdb..3882d6071cf 100644
--- a/docs/admin/overview.mdx
+++ b/docs/admin/overview.mdx
@@ -257,16 +257,17 @@ const config = buildConfig({
The following options are available:
-| Option | Default route | Description |
-| ----------------- | -------------------- | ----------------------------------------- |
-| `account` | `/account` | The user's account page. |
-| `createFirstUser` | `/create-first-user` | The page to create the first user. |
-| `forgot` | `/forgot` | The password reset page. |
-| `inactivity` | `/logout-inactivity` | The page to redirect to after inactivity. |
-| `login` | `/login` | The login page. |
-| `logout` | `/logout` | The logout page. |
-| `reset` | `/reset` | The password reset page. |
-| `unauthorized` | `/unauthorized` | The unauthorized page. |
+| Option | Default route | Description |
+| ----------------- | -------------------- | ----------------------------------------------------------------------------------------- |
+| `account` | `/account` | The user's account page. |
+| `createFirstUser` | `/create-first-user` | The page to create the first user. |
+| `forgot` | `/forgot` | The password reset page. |
+| `inactivity` | `/logout-inactivity` | The page to redirect to after inactivity. |
+| `login` | `/login` | The login page. |
+| `logout` | `/logout` | The logout page. |
+| `reset` | `/reset` | The password reset page. |
+| `systemInfo` | `/system-info` | The system information page. Set to `false` to disable. [More details](#system-info-page) |
+| `unauthorized` | `/unauthorized` | The unauthorized page. |
**Note:** You can also swap out entire _views_ out for your own, using the
@@ -274,6 +275,47 @@ The following options are available:
Views](../custom-components/custom-views) for more information.
+### System Info Page
+
+The System Info page displays important technical information about your Payload installation and runtime environment. This page is accessible from the settings menu (gear icon) in the bottom left corner of the navigation, above the logout button.
+
+The following information is displayed on the System Info page:
+
+**Version Information:**
+
+- Payload version
+- Next.js version
+- Node.js version
+
+**Configuration:**
+
+- Environment (NODE_ENV)
+- Server URL
+- Database Adapter (MongoDB, PostgreSQL, SQLite, or Cloudflare D1 SQLite)
+
+**Current Session:**
+
+- Logged-in user information
+
+#### Disabling the System Info Page
+
+If you want to disable the System Info page entirely, you can set `admin.routes.systemInfo` to `false`:
+
+```ts
+import { buildConfig } from 'payload'
+
+const config = buildConfig({
+ // ...
+ admin: {
+ routes: {
+ systemInfo: false, // highlight-line
+ },
+ },
+})
+```
+
+When disabled, the System Info page will not be accessible and will not appear in the settings menu.
+
## I18n
The Payload Admin Panel is translated in over [30 languages and counting](https://github.com/payloadcms/payload/tree/main/packages/translations). Languages are automatically detected based on the user's browser and used by the Admin Panel to display all text in that language. If no language was detected, or if the user's language is not yet supported, English will be chosen. Users can easily specify their language by selecting one from their account page. See [I18n](../configuration/i18n) for more information.
@@ -312,19 +354,19 @@ const config = buildConfig({
timezones: {
supportedTimezones: [
{
- label: "Europe/Dublin",
- value: "Europe/Dublin",
+ label: 'Europe/Dublin',
+ value: 'Europe/Dublin',
},
{
- label: "Europe/Amsterdam",
- value: "Europe/Amsterdam",
+ label: 'Europe/Amsterdam',
+ value: 'Europe/Amsterdam',
},
{
- label: "Europe/Bucharest",
- value: "Europe/Bucharest",
+ label: 'Europe/Bucharest',
+ value: 'Europe/Bucharest',
},
],
- defaultTimezone: "Europe/Amsterdam",
+ defaultTimezone: 'Europe/Amsterdam',
},
},
})
diff --git a/packages/next/src/elements/Nav/SettingsMenuButton/DefaultSystemInfoItem.tsx b/packages/next/src/elements/Nav/SettingsMenuButton/DefaultSystemInfoItem.tsx
new file mode 100644
index 00000000000..649b51b5c87
--- /dev/null
+++ b/packages/next/src/elements/Nav/SettingsMenuButton/DefaultSystemInfoItem.tsx
@@ -0,0 +1,20 @@
+'use client'
+import { PopupList, useConfig } from '@payloadcms/ui'
+import React from 'react'
+
+export const DefaultSystemInfoItem: React.FC = () => {
+ const {
+ config: {
+ admin: {
+ routes: { systemInfo },
+ },
+ routes: { admin: adminRoute },
+ },
+ } = useConfig()
+
+ return (
+
+ System Info
+
+ )
+}
diff --git a/packages/next/src/elements/Nav/SettingsMenuButton/SettingsDivider.tsx b/packages/next/src/elements/Nav/SettingsMenuButton/SettingsDivider.tsx
new file mode 100644
index 00000000000..5d506f58021
--- /dev/null
+++ b/packages/next/src/elements/Nav/SettingsMenuButton/SettingsDivider.tsx
@@ -0,0 +1,7 @@
+'use client'
+import { PopupList } from '@payloadcms/ui'
+import React from 'react'
+
+export const SettingsDivider: React.FC = () => {
+ return
+}
diff --git a/packages/next/src/elements/Nav/index.tsx b/packages/next/src/elements/Nav/index.tsx
index 4862c99a2dc..85083527726 100644
--- a/packages/next/src/elements/Nav/index.tsx
+++ b/packages/next/src/elements/Nav/index.tsx
@@ -8,7 +8,9 @@ import React from 'react'
import { NavHamburger } from './NavHamburger/index.js'
import { NavWrapper } from './NavWrapper/index.js'
+import { DefaultSystemInfoItem } from './SettingsMenuButton/DefaultSystemInfoItem.js'
import { SettingsMenuButton } from './SettingsMenuButton/index.js'
+import { SettingsDivider } from './SettingsMenuButton/SettingsDivider.js'
import './index.scss'
const baseClass = 'nav'
@@ -93,7 +95,13 @@ export const DefaultNav: React.FC = async (props) => {
},
})
- const renderedSettingsMenu =
+ // Include the default System Info menu item only if not disabled
+ const defaultSystemInfoItem =
+ payload.config.admin.routes.systemInfo !== false ? (
+
+ ) : null
+
+ const customSettingsMenuItems =
settingsMenu && Array.isArray(settingsMenu)
? settingsMenu.map((item, index) =>
RenderServerComponent({
@@ -117,6 +125,18 @@ export const DefaultNav: React.FC = async (props) => {
)
: []
+ // Reorganize settings menu: user-defined items first, then divider (if custom items exist), then System Info
+ const settingsDivider =
+ customSettingsMenuItems.length > 0 && defaultSystemInfoItem ? (
+
+ ) : null
+
+ const renderedSettingsMenu = [
+ ...customSettingsMenuItems,
+ settingsDivider,
+ defaultSystemInfoItem,
+ ].filter(Boolean)
+
return (