Documentation Index
Fetch the complete documentation index at: https://mintlify.com/apursley2012/dev-os/llms.txt
Use this file to discover all available pages before exploring further.
BootScreen is the first thing a visitor sees when they load DevOS. It simulates a terminal boot sequence by streaming log lines one at a time, then transitions to a clean login screen with a Framer Motion spring animation. The effect takes roughly four seconds from page load to the “Login to Desktop” button — long enough to set the aesthetic tone without testing a visitor’s patience.
Props
| Prop | Type | Description |
|---|---|---|
onComplete | () => void | Callback fired when the user clicks the “Login to Desktop” button. Use this to swap BootScreen out and render the desktop. |
Boot sequence
The component holds two pieces of local state:displayedMessages (the subset of messages shown so far) and showLogin (whether to render the login screen instead of the terminal).
On mount, a setInterval fires every 400 ms:
showLogin is set to true. This gives the last message a moment to be read before the terminal dissolves into the login screen.
Each message line is rendered as an individual Framer Motion div that slides in from the left:
_ is shown at the bottom of the message list while the boot sequence is in progress.
Boot messages
ThebootMessages array in BootScreen.js controls what appears in the terminal. The defaults are:
components/system/BootScreen.js. The component automatically adapts to any number of messages — each additional entry adds 400 ms to the boot duration.
Login screen
OnceshowLogin is true, a Framer Motion div replaces the terminal output with a centred login card:
bg-black with text-os-accent green for the terminal font — the login card inherits this palette.
Clicking Login to Desktop calls the onComplete prop immediately, with no additional delay or animation from within BootScreen itself.
Integration in main.js
BootScreen is rendered inside WindowManagerProvider alongside the desktop. A single booted boolean in App gates which view is active:
booted starts as false, so the first render always shows BootScreen. When onComplete fires, setBooted(true) triggers a re-render that unmounts BootScreen and mounts the desktop and taskbar in its place. Because WindowManagerProvider wraps both branches, window state is already initialised before the desktop becomes visible.