Warm Architectural Dark
Interfaces are constructed from layered dark values, simulating physical depth. We avoid harsh #000 black and bright white borders.
Accent as Focus
Gold is used sparingly as a high-contrast focus and status color. It draws the eye to running operations, active lines, and key indicators.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 366.00 132.00" width="366.00" height="132.00">
<path d="M48.5000 104.3000L48.5000 114Q34 110.7000 26.0500 100.5000Q18.1000 90.3000 18.1000 75L18.1000 57Q18.1000 41.7000 26.0500 31.5000Q34 21.3000 48.5000 18L48.5000 27.6000Q42.2000 29.1000 37.6000 33.1500Q33 37.2000 30.5000 43.3000Q28 49.4000 28 57L28 75Q28 82.6000 30.5000 88.6500Q33 94.7000 37.6000 98.7500Q42.2000 102.8000 48.5000 104.3000" fill="#c8a855" />
<path d="M93.2000 102.8000L88.8000 102.8000Q79.4000 102.8000 74.2000 98.6000Q69 94.4000 69 86.8000L78.8000 86.8000Q78.8000 90.4000 81.4500 92.4500Q84.1000 94.5000 88.8000 94.5000L93.2000 94.5000Q98.1000 94.5000 100.7500 92.4000Q103.4000 90.3000 103.4000 86.5000Q103.4000 79.8000 96.8000 79L82 76.9000Q76.1000 76 72.9000 72.0500Q69.7000 68.1000 69.7000 61.8000Q69.7000 54.4000 74.7000 50.3000Q79.7000 46.2000 88.7000 46.2000L93.1000 46.2000Q101.5000 46.2000 106.7000 50.2000Q111.9000 54.2000 112.2000 60.8000L102.2000 60.8000Q102 58 99.6000 56.1500Q97.2000 54.3000 93.1000 54.3000L88.7000 54.3000Q84.2000 54.3000 81.7500 56.3000Q79.3000 58.3000 79.3000 61.7000Q79.3000 67.2000 84.8000 67.9000L98.7000 69.9000Q113 71.8000 113 86.5000Q113 94.3000 107.8500 98.5500Q102.7000 102.8000 93.2000 102.8000 M152 103Q142.1000 103 136.0500 97.1000Q130 91.2000 130 81L130 68Q130 57.8000 136.0500 51.9000Q142.1000 46 152 46Q158.6000 46 163.5500 48.6500Q168.5000 51.3000 171.2500 56.0500Q174 60.8000 174 67.1000L174 77L139.7000 77L139.7000 81.8000Q139.7000 87.8000 143 91.2000Q146.3000 94.6000 152 94.6000Q156.8000 94.6000 159.9000 92.8000Q163 91 163.6000 87.8000L173.5000 87.8000Q172.5000 94.8000 166.6000 98.9000Q160.7000 103 152 103M139.7000 67.1000L139.7000 69.7000L164.3000 69.7000L164.3000 67.1000Q164.3000 60.8000 161.1000 57.4000Q157.9000 54 152 54Q146.1000 54 142.9000 57.4000Q139.7000 60.8000 139.7000 67.1000 M197.7000 102L188.7000 102L188.7000 47L197.1000 47L197.1000 54.5000L197.4000 54.5000Q197.8000 50.7000 200.2500 48.3500Q202.7000 46 206.5000 46Q210.2000 46 212.7000 48.2000Q215.2000 50.4000 216.3000 54.1000Q216.9000 50.3000 219.4000 48.1500Q221.9000 46 225.7000 46Q230.9000 46 234.1000 49.9500Q237.3000 53.9000 237.3000 60.2000L237.3000 102L228.3000 102L228.3000 60.3000Q228.3000 57.2000 226.7500 55.3500Q225.2000 53.5000 222.6000 53.5000Q220 53.5000 218.5000 55.3000Q217 57.1000 217 60.3000L217 102L209 102L209 60.3000Q209 57.2000 207.5000 55.3500Q206 53.5000 203.4000 53.5000Q200.8000 53.5000 199.2500 55.3000Q197.7000 57.1000 197.7000 60.3000 M268.9000 103Q260.4000 103 255.4500 98.2500Q250.5000 93.5000 250.5000 85.8000Q250.5000 78.1000 255.6500 73.4000Q260.8000 68.7000 269.2000 68.7000L285.3000 68.7000L285.3000 64.5000Q285.3000 54.4000 274.1000 54.4000Q269.1000 54.4000 266.0500 56.2500Q263 58.1000 262.8000 61.4000L253 61.4000Q253.5000 54.7000 259.1000 50.3500Q264.7000 46 274.1000 46Q284.2000 46 289.7000 50.8000Q295.2000 55.6000 295.2000 64.3000L295.2000 102L285.5000 102L285.5000 91.9000L285.3000 91.9000Q284.6000 97 280.2500 100Q275.9000 103 268.9000 103M271.5000 94.7000Q277.8000 94.7000 281.5500 91.6500Q285.3000 88.6000 285.3000 83.3000L285.3000 76L270.1000 76Q265.8000 76 263.1500 78.5500Q260.5000 81.1000 260.5000 85.3000Q260.5000 89.6000 263.4000 92.1500Q266.3000 94.7000 271.5000 94.7000" fill="#ffffff" />
<path d="M316.5000 114L316.5000 104.3000Q322.8000 102.8000 327.4000 98.7500Q332 94.7000 334.5500 88.6500Q337.1000 82.6000 337.1000 75L337.1000 57Q337.1000 49.4000 334.5500 43.3000Q332 37.2000 327.4000 33.1500Q322.8000 29.1000 316.5000 27.6000L316.5000 18Q331 21.3000 339 31.5000Q347 41.7000 347 57L347 75Q347 90.3000 339 100.5000Q331 110.7000 316.5000 114" fill="#c8a855" />
</svg>Subtle / Footer Logo Variant
A monochrome variant using fill="currentColor" that inherits its color from the parent container. Designed for footers, secondary branding, and visual environments that require low contrast.
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 366 132" style="width: 100%; height: auto; display: block;">
<path d="M48.5000 104.3000L48.5000 114Q34 110.7000 26.0500 100.5000Q18.1000 90.3000 18.1000 75L18.1000 57Q18.1000 41.7000 26.0500 31.5000Q34 21.3000 48.5000 18L48.5000 27.6000Q42.2000 29.1000 37.6000 33.1500Q33 37.2000 30.5000 43.3000Q28 49.4000 28 57L28 75Q28 82.6000 30.5000 88.6500Q33 94.7000 37.6000 98.7500Q42.2000 102.8000 48.5000 104.3000" fill="currentColor" opacity="0.6" />
<path d="M93.2000 102.8000L88.8000 102.8000Q79.4000 102.8000 74.2000 98.6000Q69 94.4000 69 86.8000L78.8000 86.8000Q78.8000 90.4000 81.4500 92.4500Q84.1000 94.5000 88.8000 94.5000L93.2000 94.5000Q98.1000 94.5000 100.7500 92.4000Q103.4000 90.3000 103.4000 86.5000Q103.4000 79.8000 96.8000 79L82 76.9000Q76.1000 76 72.9000 72.0500Q69.7000 68.1000 69.7000 61.8000Q69.7000 54.4000 74.7000 50.3000Q79.7000 46.2000 88.7000 46.2000L93.1000 46.2000Q101.5000 46.2000 106.7000 50.2000Q111.9000 54.2000 112.2000 60.8000L102.2000 60.8000Q102 58 99.6000 56.1500Q97.2000 54.3000 93.1000 54.3000L88.7000 54.3000Q84.2000 54.3000 81.7500 56.3000Q79.3000 58.3000 79.3000 61.7000Q79.3000 67.2000 84.8000 67.9000L98.7000 69.9000Q113 71.8000 113 86.5000Q113 94.3000 107.8500 98.5500Q102.7000 102.8000 93.2000 102.8000 M152 103Q142.1000 103 136.0500 97.1000Q130 91.2000 130 81L130 68Q130 57.8000 136.0500 51.9000Q142.1000 46 152 46Q158.6000 46 163.5500 48.6500Q168.5000 51.3000 171.2500 56.0500Q174 60.8000 174 67.1000L174 77L139.7000 77L139.7000 81.8000Q139.7000 87.8000 143 91.2000Q146.3000 94.6000 152 94.6000Q156.8000 94.6000 159.9000 92.8000Q163 91 163.6000 87.8000L173.5000 87.8000Q172.5000 94.8000 166.6000 98.9000Q160.7000 103 152 103M139.7000 67.1000L139.7000 69.7000L164.3000 69.7000L164.3000 67.1000Q164.3000 60.8000 161.1000 57.4000Q157.9000 54 152 54Q146.1000 54 142.9000 57.4000Q139.7000 60.8000 139.7000 67.1000 M197.7000 102L188.7000 102L188.7000 47L197.1000 47L197.1000 54.5000L197.4000 54.5000Q197.8000 50.7000 200.2500 48.3500Q202.7000 46 206.5000 46Q210.2000 46 212.7000 48.2000Q215.2000 50.4000 216.3000 54.1000Q216.9000 50.3000 219.4000 48.1500Q221.9000 46 225.7000 46Q230.9000 46 234.1000 49.9500Q237.3000 53.9000 237.3000 60.2000L237.3000 102L228.3000 102L228.3000 60.3000Q228.3000 57.2000 226.7500 55.3500Q225.2000 53.5000 222.6000 53.5000Q220 53.5000 218.5000 55.3000Q217 57.1000 217 60.3000L217 102L209 102L209 60.3000Q209 57.2000 207.5000 55.3500Q206 53.5000 203.4000 53.5000Q200.8000 53.5000 199.2500 55.3000Q197.7000 57.1000 197.7000 60.3000 M268.9000 103Q260.4000 103 255.4500 98.2500Q250.5000 93.5000 250.5000 85.8000Q250.5000 78.1000 255.6500 73.4000Q260.8000 68.7000 269.2000 68.7000L285.3000 68.7000L285.3000 64.5000Q285.3000 54.4000 274.1000 54.4000Q269.1000 54.4000 266.0500 56.2500Q263 58.1000 262.8000 61.4000L253 61.4000Q253.5000 54.7000 259.1000 50.3500Q264.7000 46 274.1000 46Q284.2000 46 289.7000 50.8000Q295.2000 55.6000 295.2000 64.3000L295.2000 102L285.5000 102L285.5000 91.9000L285.3000 91.9000Q284.6000 97 280.2500 100Q275.9000 103 268.9000 103M271.5000 94.7000Q277.8000 94.7000 281.5500 91.6500Q285.3000 88.6000 285.3000 83.3000L285.3000 76L270.1000 76Q265.8000 76 263.1500 78.5500Q260.5000 81.1000 260.5000 85.3000Q260.5000 89.6000 263.4000 92.1500Q266.3000 94.7000 271.5000 94.7000" fill="currentColor" />
<path d="M316.5000 114L316.5000 104.3000Q322.8000 102.8000 327.4000 98.7500Q332 94.7000 334.5500 88.6500Q337.1000 82.6000 337.1000 75L337.1000 57Q337.1000 49.4000 334.5500 43.3000Q332 37.2000 327.4000 33.1500Q322.8000 29.1000 316.5000 27.6000L316.5000 18Q331 21.3000 339 31.5000Q347 41.7000 347 57L347 75Q347 90.3000 339 100.5000Q331 110.7000 316.5000 114" fill="currentColor" opacity="0.6" />
</svg>Cormorant — Editorial & Headings
JetBrains Mono — Syntax & Code
Inter — UI & Body Prose
“Wait — a Lisp?”
You won't write most of it anyway.
Your coding agent will. And a Lisp is the language with the least surface for an agent to be wrong about—see the open-source repository to review the complete language specifications.
- Sixty years of training data. Lisp predates nearly everything else in the corpus. Scheme, Common Lisp, Clojure, Racket — your agent has read all of it, and a Lisp is a Lisp. Review the design philosophy.
- The whole language fits in context. Point your agent at llms.txt — where Sema diverges from the dialects it already knows, and nothing else. Constraints, not a textbook.
- Minimal footprint. The entire compiler and VM is a single statically linked binary with zero external runtime dependencies.
- Instant startup. VM boots in less than 1ms. Fast enough for serverless functions and ephemeral CLI invocations.
:root {
--gold: #c8a855;
--gold-dim: rgba(200, 168, 85, 0.5);
--gold-glow: rgba(200, 168, 85, 0.08);
--gold-soft: rgba(200, 168, 85, 0.14);
--bg: #131110;
--bg-elevated: #181512;
--bg-editor: #1c1916;
--bg-output: #0f0d0c;
--text-primary: #e9e3d6;
--text-secondary: #968c79;
--text-tertiary: #6b6354;
--border: #2b2620;
--border-focus: #c8a855;
--success: #6a9955;
--error: #c85555;
}| Color | Variable | Values / Formats | Role & Application |
|---|---|---|---|
| Accent & Opacity Scales | |||
--gold | hex: #c8a855oklch: oklch(73.57% 0.144 85.34)rgba: rgba(200, 168, 85, 1) | Primary accent, CTA, links, active states, key keywords. | |
--gold-dim | hex: rgba(200, 168, 85, 0.5)oklch: oklch(73.57% 0.144 85.34 / 0.5)rgba: rgba(200, 168, 85, 0.5) | Transparent borders, stale/inactive indicators. | |
--gold-glow | hex: rgba(200, 168, 85, 0.08)oklch: oklch(73.57% 0.144 85.34 / 0.08)rgba: rgba(200, 168, 85, 0.08) | Hover backgrounds on interactive rows. | |
--gold-soft | hex: rgba(200, 168, 85, 0.14)oklch: oklch(73.57% 0.144 85.34 / 0.14)rgba: rgba(200, 168, 85, 0.14) | Selection overlay background. | |
| Background Hierarchy | |||
--bg | hex: #131110oklch: oklch(10.57% 0.007 68.32)rgba: rgba(19, 17, 16, 1) | Page canvas, sidebar background, main window. | |
--bg-elevated | hex: #181512oklch: oklch(12.21% 0.012 71.95)rgba: rgba(24, 21, 18, 1) | Cards, toolbars, raised surfaces, modals. | |
--bg-editor | hex: #1c1916oklch: oklch(13.75% 0.014 74.45)rgba: rgba(28, 25, 22, 1) | Code editing areas, text inputs, focused blocks. | |
--bg-output | hex: #0f0d0coklch: oklch(8.65% 0.006 68.32)rgba: rgba(15, 13, 12, 1) | Deepest level. Output panels, read-only consoles. | |
| Typography & Text | |||
--text-primary | hex: #e9e3d6oklch: oklch(91.31% 0.021 78.43)rgba: rgba(233, 227, 214, 1) | Body copy on marketing pages, primary headings. | |
--text-secondary | hex: #968c79oklch: oklch(60.91% 0.025 80.24)rgba: rgba(150, 140, 121, 1) | Standard UI labels, secondary headings, editor text. | |
--text-tertiary | hex: #6b6354oklch: oklch(44.89% 0.022 79.52)rgba: rgba(107, 99, 84, 1) | Muted comments, captions, disabled states. | |
| Structure & Borders | |||
--border | hex: #2b2620oklch: oklch(19.34% 0.015 76.51)rgba: rgba(43, 38, 32, 1) | Default borders, dividers, subtle structure. | |
--border-focus | hex: #c8a855oklch: oklch(73.57% 0.144 85.34)rgba: rgba(200, 168, 85, 1) | Highlighted/focused borders. | |
| Semantic Status | |||
--success | hex: #6a9955oklch: oklch(60.67% 0.117 138.83)rgba: rgba(106, 153, 85, 1) | Success indicators, green highlights. | |
--error | hex: #c85555oklch: oklch(53.25% 0.163 24.31)rgba: rgba(200, 85, 85, 1) | Error messages, validation alerts. | |
Elevation Levels
Border Radius Scale
Spacing Scale
Buttons & Actions
Cards, Tags & Notebook Elements
Tail-Call Optimized
Trampoline-based tree evaluator. Execute deeply recursive functions without heap exhaustion.
Comparison Code Panes
Code specimens rendering on the website. Features two variations: a standard/accentless pane (used for standard Python or foreign SDKs) and an accented, active gold glow pane (used for Sema native files).
import anthropic
client = anthropic.Anthropic()
resp = client.messages.create(
model="claude-3-5-sonnet",
max_tokens=1024,
messages=[{"role": "user", "content": "hello"}]
)#2b2620) and standard raised background (#181512) without glows. (defagent coder
{:system "You are a coding assistant."
:tools [read-file run-command]
:max-turns 10})var(--gold-line)) and a subtle gold ambient shadow glow. Website Style
Playground Style
| Token | Website | Playground | Canonical Target | Convergence Rationale |
|---|---|---|---|---|
| Comment | #5a5a4a | #6b6354 | #6b6354 | Unified with tertiary typography scale |
| Keyword | #d4a052 | #c8a855 | #c8a855 | Use standard gold variable for core special forms |
| String | #8aaa6a | #a8c47a | #a8c47a | Brighter green provides better contrast on warm darks |
| Number | #d08a60 | #d19a66 | #d19a66 | Consistent with modern dark editor configurations |
| Keyword Lit | #c89050 | #7aacb8 | #7aacb8 | Muted blue distinguishes :symbols and options from core code |
| Paren | #444438 | #6a6258 | #6a6258 | Clear layout structure without distracting visual clutter |
Cross-Platform App Icon Guidelines
When packaging Sema integrations, extensions, or applications for various marketplaces, adhere to the following platform specifications:
App Store (iOS / macOS)
- iOS: Must be flat square PNG (1024x1024). Transparency is forbidden; the system dynamically masks corners using a squircle.
- macOS: Transparency and subtle drop shadows are permitted. Recommends a tilted, dimensional sheet style.
Google Play (Android)
- Adaptive Icons: Requires separate background (512x512, safe zone 66%) and foreground layers to allow system-level parallax.
- Masking: Flat square uploads are automatically masked to circles, squircles, or rounded rects.
VS Code Extension Marketplace
- Proportions: 128x128px (or larger square e.g., 256x256). Transparent backgrounds are highly recommended.
- Contrast: Design must remain highly visible against both the default light and dark theme header colors.
JetBrains Marketplace
- Plugin Icon: 40x40px (or 80x80px for high-DPI). Vector SVG format is preferred.
- Style: Simple, high-contrast flat shapes. Avoid tiny text or highly detailed ornaments.
Public Surfaces
| Surface | URL / Identifier | Role & Deployment |
|---|---|---|
| Website | sema-lang.com | Marketing site and documentation (VitePress, deployed via Vercel) |
| Playground | sema.run | Interactive browser REPL and debugger (vanilla JS, deployed via Vercel) |
| Package Registry | pkg.sema-lang.com | Community package registry API (Rust, Axum, SQLite) |
| GitHub Repository | github.com/HelgeSverre/sema | Primary codebase repository (Cargo multi-crate workspace) |
| Homebrew Crate | helgesverre/tap/sema-lang | Formula for standard macOS command-line installation |
| Cargo Crate | sema-lang | crates.io package hosting the main CLI executable and local REPL |
Crate Workspace Structure
| Crate Name | Responsibility & Architectural Layer |
|---|---|
| sema-core | NaN-boxed Value primitive, Environment (Rc+RefCell), Env callbacks, thread-local VFS. |
| sema-reader | Lexer and S-Expression reader. Handles f-strings, short lambdas, and regex literals. |
| sema-vm | Bytecode compiler and stack VM — the sole evaluator. Lowerer, optimizers, stack resolution, inline cache. |
| sema-eval | Interpreter driver: VM-native macro expansion, module load/import system, prelude, eval/call callback wiring. |
| sema-stdlib | Native stdlib functions (450+ total), higher-order dispatch loops. |
| sema-llm | Model traits, Anthropic/OpenAI/Gemini/Ollama clients, pricing database, local fallback. |
| sema-lsp | LSP Language Server (tower-lsp). Completions, definitions, hover metadata. |
| sema-dap | Debug Adapter Protocol server. Frame inspector, stepped walk, breakpoint registry. |
| sema-fmt | Custom code formatter and formatter CLI. |
| sema-notebook | Jupyter-inspired notebook: .sema-nb format, shared-env evaluation engine, HTTP server, embedded UI. |
| sema-docs | Canonical structured docs for builtins/special forms; generates the JSON index used by the LSP and REPL. |
| sema-mcp | Model Context Protocol server exposing Sema evaluation and tooling to agents. |
| sema-wasm | Wasm bindings for parsing and running Sema code inside the client playground. |
| sema | Main CLI entrypoint. Invokes lsp, dap, REPL, run file, compile bytecode. |
1. No Drop Shadows
Represent visual depth entirely through color values. Higher levels use lighter warm-neutrals (e.g. #181512), while background canvas layers use deeper tones (e.g. #131110).
2. Rigid Font Boundaries
Monospace text (JetBrains Mono) is strictly reserved for executable s-expressions, code outputs, inline code tags, and technical labels. All descriptive prose must use Inter.
3. Gold is an Accent, Not a Paint
The primary gold (#c8a855) is reserved for highlighting primary active elements, selected menu items, cursor lines, and primary call-to-action buttons. Never scatter decorative gold borders.
4. Single-Pixel Borders
Default borders must be exactly 1px solid with color #2b2620. Focus boundaries and active editor highlights use 2px or 3px solid gold.
A. Homepage Preview (1200×630)

B. Documentation / Reference Page Preview (1200×630)
