DocsAccount & security
Skins
A skin is what NextOS looks like, written down. One file says what colour the ground is, how the cells are lit, which typeface the system uses, where the command strip sits and what an app's body is painted with, and the whole system follows it at once: the Field and its sky, every window's chrome, the pulse rail, the app glyphs, the phone shell, the classic desktop's wallpaper, and the palette every app reads.
Choosing one
Settings > Appearance has a Skin card at the top. It shows the skin you are on, or "None - the built-in look", and takes you to the Skins app to change it. The button next to it puts the built-in look back, whatever else you have installed.
While a skin is active it decides the light/dark setting, the accent colour and the text size, so the three controls below it in Appearance are the skin's to set. Clear the skin and yours come back exactly as you left them.
Asking for one
Open Skins and type what you want into the Describe box - a place, an object, a decade, a material, rather than a colour. "A warm paper notebook." "A 1984 green phosphor terminal." "Braun hi-fi, 1970." A designer picks the palette, the typeface, the sky, the corner radius and the shape of every app glyph, then repaints the whole system while it is still answering, so you are looking at the thing rather than at a description of it.
You can ask from anywhere, not just the app: type the same sentence into the command strip and the assistant hands it to the same designer.
To change one you already have, tick "Refine" and say what is wrong - warmer accent, less glass, strip at the top. Only what you asked for changes.
Keeping, previewing and switching
Every skin in the gallery has Preview, which applies it to the live system without saving anything and puts itself back after a few seconds. A bar across the top offers "Keep it" while it is showing.
Apply keeps it for good. Duplicate gives you a copy to change without losing the original. Export downloads it as a .skin.json file, and Import reads one back, so a skin travels by email or a chat message as easily as through the community.
Sharing yours
Press Share on a skin you made and it is proposed to the community tools repository as a pull request, with a rendered preview and its own page. Once it is merged, anyone can install it from the Community tab, and the page's "Apply in NextOS" button opens it here - previewed, with a question, never applied behind your back.
If sharing is not switched on for your deployment, the Export file is exactly what the repository needs, and the app says so rather than failing quietly.
Installing someone else's
The Community tab lists the skins other people have published. Install validates a skin against exactly the same rules a skin you wrote yourself goes through; one that does not pass is listed saying why, rather than quietly missing.
What a skin can change
- The ground and the sky. A flat colour, drifting blobs, wide aurora bands, a grid, your own image, or nothing at all.
- Cells and windows. The chrome colour and its text, the edge highlight, the body, and the same three again for apps that paint themselves dark.
- Every app's palette. The body, the text, the hairlines, the row states and the four notice colours (danger, warning, info, success), in both light and dark.
- Type. A system stack, or one family from Google Fonts. Three text sizes.
- Layout. The strip at the bottom or the top; chrome as glass, solid or flat; compact, comfortable or spacious spacing; app glyphs rounded, square or circular.
- The wallpaper the classic desktop uses.
- A little CSS of its own, for anything the list above cannot say.
What a skin cannot do
A skin is data, not code, and the system treats it that way.
- It can never run script. No
expression(), nojavascript:, no event handler hiding in an SVG. - It can never load a remote resource. The single exception is one Google Fonts stylesheet, and the address is checked to be exactly that: a look-alike domain, a different path, or anything with credentials in it is refused.
- Its own CSS only reaches the shell's own elements. A rule aimed at anything else is dropped, and so is the whole rule if it names one allowed target and one that is not.
- It cannot pin anything over the command strip or an approval dialog.
- An image it carries is inline, capped in size, and checked for script.
Everything a skin sends that the system will not accept is dropped rather than quietly allowed, and you are told what was dropped.
Readability
Every skin is checked for contrast before you can apply it: system text on the ground, a window title on its title bar, app text on an app body, and the accent against the ground. Anything that falls below the readable threshold is reported with the actual number and a suggestion for fixing it, and blocks Apply until it is fixed. Warnings - an aurora sky with only one colour, a light skin with a dark ground - are shown but never block anything.
Saving is never blocked. A skin you are halfway through is still yours to keep.
Sharing one
Press Share on a skin and it goes to the public community repository as a pull request, crediting you, with a preview rendered from the skin itself. Once a maintainer merges it, it has a page at /community/<name> that anyone can apply from, and it turns up in the Skins app's Community tab. Sharing a skin has the details, including the daily limit and what a self-hosted copy needs before the button does anything.
Between your devices
A skin you save is written to ~/Library/Skins in your files, so if you have Google Drive connected it travels with the rest of your library and turns up on your other machines. The copy with the most recent edit wins; an older copy arriving late never overwrites a change you just made.
Speed
The skin you are on is applied before the system draws its first frame, so there is no flash of the built-in look on a reload. Skins you are not using cost nothing: the gallery, the previews and the built-in skins are only loaded when you open the Skins app.