Navigation and Account - rogers-group-inc/polaris GitHub Wiki
Getting around
The shell
Every page shares one layout: a sidebar on the left, a page header with a search box and your user badge on the right, and the page's own content below.
Sidebar
| Entry | Needs |
|---|---|
| Dashboard | nothing β everyone sees it, widgets gate themselves |
| Device Map | deviceMap:read |
| Application Map | applicationMap:read |
| Path Monitor | pathChecks:read |
| IP Management | ipBlocks:read or subnets:read |
| Assets | assets:read |
| Events | events:read |
| Automations | automationManagement:read |
| Integrations | integrations:read |
| Users | admin only |
| Server Settings (bottom) | serverSettingsSystem:read; or credentials:write for the Credentials tab alone, or firmware:read for the Firmware tab alone |
A nav entry you cannot see is a page you cannot open. The sidebar gate and the server-side page gate are kept in lockstep, so a typed URL for a page your role lacks bounces rather than loading an empty list.
Below Server Settings sits the theme band and the version line.
The Events entry carries the sidebar's one alert dot: red for pending discovery conflicts, yellow for stale-reservation alerts or queued pushes, red winning when both apply.
Above Server Settings, panels appear only while there is something to say:
| Panel | Shows when |
|---|---|
| New user(s) logged in | admins β someone signed in for the first time and their role wants review; each row has its own dismiss |
| Integration(s) not reachable | an integration's latest connection test failed β click through to Integrations |
| Consider bypassing the FortiManager proxy | the fleet behind a FortiManager has grown past what proxy mode serves well; dismissable, and returns as the fleet grows |
| Agent code signing failed | the last agent build shipped unsigned Windows binaries; dismissable per failure |
| Applying update / Update β restarting | an in-app update is running β it names the current step and clicks through to Server Settings β Maintenance |
| Capacity β Immediate Attention | a critical capacity reason (disk near full, autovacuum stalled, database far larger than RAM); cannot be dismissed |
Changing pages crossfades rather than cutting: the sidebar holds still while the page beside it fades from one to the next. This needs a current Chrome, Edge or Safari; other browsers load each page as a plain page load, and it is off when your system asks for reduced motion. Signing in is a plain page load β the crossfade is only between pages of the app. Each page still fetches its own data after it appears, so tables and widgets fill in a moment later.
Global search
The search box searches everything at once and groups hits by kind: IPs, Blocks, Networks, Reservations, Assets, Device Map sites, and IPsec / VPN. Prefixes narrow it:
| Prefix | Short | Searches |
|---|---|---|
block: |
b: |
IP blocks only |
network: |
n: |
networks (subnets) only |
asset: |
a: |
assets only |
reservation: |
r: |
reservations only |
map: |
m: |
pinned firewalls (Device Map) only |
tag: |
t: |
tag substrings across networks and assets |
ipsec: or vpn: |
v: |
IPsec tunnels and VPN connections only |
IPsec / VPN hits are what a firewall's IPsec tab lists: its tunnels, and the ADVPN spokes, dial-up peers and FortiClient / SSL-VPN users connected through them. Type a tunnel name, a peer's address, a peer id or a VPN user name. Each hit names the firewall the tunnel lives on and, when Polaris knows the device at the far end, that device too, with the tunnel's state as a pill. Clicking one opens the firewall's IPsec tab. An address that is nobody's primary IP is often exactly a tunnel's remote gateway, so an address search shows these beside the asset hits.
An asset hit carries a coloured dot when it has a live alert, before the monitor pill β the alert is the reason to look, the monitor state is the detail, and a device can carry both since an alerting device is often up. The monitor pill reads exactly as the Assets list's Status column does: a device in a maintenance window shows Maintenance, not whatever its last probe said before polling paused.
The theme band
Three selectable themes in two families: Morning and Noon (light), Nightfall (dark). The control is a band, not a menu β one click steps to the next theme and slides a 24-hour clockface along to bring that theme's hour to the centre of the band. It is the same control the phone app carries on its More tab, so the two screens read alike.
The band travels one way only β forward through the day, never back β and the palette crossfades through a fourth, unselectable waypoint: Noon β Nightfall passes through Afternoon, so the room goes near-white β golden hour β indigo in one gesture. The transit palette is applied but never saved, so a reload mid-sweep lands on a real theme.
Each theme also lights the page differently, and the light moves with the turn:
| Theme | Its light |
|---|---|
| Morning | a sunrise glowing up from the bottom edge |
| Noon | a soft sunlight wash across the top |
| Nightfall | a moonlight-blue glow across the top |
Morning β Noon climbs the sun from the bottom edge to the top, rounding out as it rises. Noon β Nightfall lifts the sunlight off the top while nightfall's moonlight glow slides in from the left as a growing circle that settles into a wide oval as it lands. Nightfall β Morning reverses it: the oval rounds back into a circle and slides out to the right, shrinking, as the sunrise comes up. The palette itself takes 1.6 s for Noon β Nightfall and Nightfall β Morning and 0.8 s for Morning β Noon; the light takes a moment longer to settle. Only a click on the band animates anything: opening a page just paints the theme's light.
prefers-reduced-motion is honoured throughout the app: the alert strobe drops
to a steady rendering, and the title text always carries the whole message β
colour and motion never carry information on their own.
The account menu
Click your username, top right. What appears depends on your account:
| Entry | Shown when |
|---|---|
| Notifications: β¦ | always β names your current delivery preference and opens the three-way chooser |
| Timezone: β¦ | always |
| Layout: β¦ | always β names the page layout in force and opens the three-way chooser |
| Change password | local accounts only |
| Set up two-factor auth | local accounts only |
| Passkeys | local accounts, where the install allows them and the browser can host one |
| Logout | always |
Notification preference
Email, Push, or Email and push. This is an account setting, not a
browser switch (rule 39): every client reconciles its own
subscription to your stored preference at boot, which is what makes "prefer
push" mean push on every device you use.
Four things follow from that:
- The boot-time reconcile never prompts β a page load has no user activation β so it can only enroll a browser that has already granted notification permission. A browser that has never been asked is instead asked once, the first time you sign in on it while your account prefers push: a short dialog offering Enable or Not now. Enable raises the browser's own permission prompt and enrolls that browser; dismissing it β by either button, Escape or clicking away β is final on that browser, and this row is the way back. You are asked separately on each browser, and a second person signing in on the same browser is asked in their turn.
- Polaris does not ask on iPhone or iPad outside the installed app. Apple grants push only to a home-screen app, so add Polaris to your Home Screen first (More β Add to Home Screen) and the offer follows.
- The preference is saved even if this browser refuses, because it belongs to the account. Your phone may honour what this laptop cannot.
- A preference never deletes an alert. If you prefer push but have no enrolled device, you still get the email.
An automation only consults your preference when its action group offers both methods. In a single-method group the preference would delete the alert rather than route it, so it is ignored.
Timezone
Sets the zone every timestamp in the Polaris UI is drawn in, for you. The
default is auto, which the browser reports. This is the one /me/* route with
no permission gate at all: what zone a timestamp renders in changes nothing
about which data you can reach.
Alert emails are not affected. An alert is one message to everyone the automation names (rule 25), so it is written on the Polaris server's clock and names that zone in its footer β "Times shown in CDT (America/Chicago)". Rendering per reader would mean a separate copy per zone, and a copy per zone is a To line that no longer shows you who else is on the alert.
Layout
How wide Polaris may grow in your browser window:
| Layout | What you get |
|---|---|
| 16:9 (default) | a 16:9 column centred in the window β on a wider monitor the sidebar, tables and slide-overs keep to that column and the sides stay empty |
| 16:10 | the same idea with a slightly narrower column, since 16:10 is squarer than 16:9 β it fills a 16:10 monitor exactly and leaves a thin margin at each side of anything wider |
| Auto | fills the window, however wide it is β on an ultrawide the sidebar sits at the far left, tables use the full width and slide-overs open at the far right edge |
The choice applies straight away and is kept per browser, not per account. The right answer depends on the monitor, so you can use Auto on an ultrawide at your desk and 16:9 on a laptop. The Dash wallboard and the phone app ignore this setting.
Change password
Local accounts only β every other provider's credential belongs to its directory, and the endpoint refuses with that reason.
Two things happen that are worth knowing (rule 61):
- Every other session on your account is ended. A new password is worthless while whoever learned the old one still holds a live cookie. Your own session is rotated but kept, so you are not logged out of the page you are on.
- It is rate-limited at the login ceiling (10 attempts / 15 min), because a body carrying your current password is the login surface again.
Two-factor (TOTP)
Local accounts only. Enroll, scan, confirm, and save the backup codes. The row relabels itself β Set up / Finish setup (a minted but unconfirmed secret) / Disable.
An admin can reset someone else's TOTP from the Users page; nobody can read it.
Passkeys
WebAuthn credentials, local accounts only. What a passkey is for is decided by the install, at Users β Authentication:
| Mode | Means |
|---|---|
off |
no passkeys |
login |
passwordless sign-in |
second-factor |
a passkey replaces TOTP as the second step |
both |
default β enabling passkeys refuses nothing; passwords keep working and registration is opt-in per user |
Under any mode including second-factor, registering a passkey makes your
login two-step, exactly as enrolling TOTP does.
The login page's Sign in with a passkey button appears only once at least one local account has registered a passkey. Until then it could only fail. The first passkey is set up from this menu after signing in with a password.
Two deployment shapes cannot host passkeys at all and say so rather than
throwing a browser error: plain HTTP off localhost, and an install reached by IP
address. Two more are misconfigured proxies wearing those refusals β TLS
terminated at a proxy with TRUST_PROXY unset, and a proxy that rewrites the
Host header. See rule 64 and
Troubleshooting.
Help
The ? button left of your username, on every page. It opens this wiki on GitHub, in a new tab, at the page for the screen you are on β and on Automations, Events and Integrations, at the page for the open tab (Delivery Channels, Maintenance Windows, Polaris Agentβ¦). It is a link out, not a page Polaris serves, so it needs internet access β an air-gapped install will not reach it. Nothing in Polaris depends on it.
Modals, slide-overs and the lock
Most detail in Polaris opens in a slide-over (a panel from the right) or a modal. Two conventions:
- Every one carries a lock toggle. Locked means a backdrop click will not dismiss it β useful when you are reading an asset panel and clicking around. The asset panel's Edit button never closes the panel, locked or not: the edit modal opens over it, and Cancel or Save brings you back to the panel (refreshed after a save).
- The asset slide-over has back / forward history (βΉ / βΊ in the header, or Alt+Left / Alt+Right). A dependency-tree row, an HA peer, an LLDP neighbour, a MAC-table match and the Application Map rail all pivot the open panel to another asset in place, and the arrows walk you back.
- Every slide-over opens on every page. An asset, a network or a block opens in place over the page you are on β from a search result, a dashboard row, an Events conflict card, a credential's usage list, the network panel's hostname link, an interface's Open network, or a block's network list β instead of taking you to the Assets or IPAM page. Panels stack: the one opened last is on top, and Escape closes one panel at a time, top first. Ctrl-click or middle-click a link to open it in a new tab instead.
Keyboard
| Key | In a confirmation | In a stepped wizard |
|---|---|---|
| Enter | Confirm | Next, while there is a next step β it saves only on the last one |
| Escape | Cancel | Close the wizard |
| β / β | β | Next / Back |
| Tab | Moves between the buttons | Moves through the fields |
A confirmation opens with Confirm focused, so Enter confirms it β but Tab to Cancel and Enter cancels instead, because the key belongs to the button you picked. Holding Enter down from whatever opened the dialog does nothing: the repeat is ignored so a held key cannot confirm something you have not read.
In a wizard (New automation, New discovery, New map rule) Enter means next rather than save, so a form is never submitted from a step you are still filling in β on the last step, where there is no Next button, Enter saves. The arrows move between steps whenever you are not typing in a field; inside a text box or a dropdown they belong to the cursor and the options, so use Enter or Tab out first.
Saved views
Several list pages remember how you had them set up, per user and per browser or per account depending on the thing:
| Thing | Scope | Where |
|---|---|---|
| Column order | per view tab | Assets and other list pages |
| Column widths and visibility | per screen | same |
| Sort and inline filters | per view tab | same |
| Saved filters | server-side, private or shared | Assets β Filters βΎ |
| View tabs | server-side, follow you across browsers | Assets, above the bulk bar |
| Saved dashboards | server-side, private or public | Dashboard |
Publishing a saved filter needs assets:write; deleting someone else's needs
assets:fullwrite.
Because inline filters are remembered, every filterable list β Assets, Events, IPAM's IP Blocks and Networks, Automations and Users β carries a Clear Filters button that empties every column filter in one click (and forgets them). It sits beside Refresh / the page-size select (25 / page β¦), or in the page header on Users, and it stays there when a filter matches nothing. On Assets it reads Reset Filter while the view tab has a base filter, and returns to that instead.