Site: create.secondlife.io
Base Path: /script/
This document defines the information architecture for the scripting section of Second Life's creation documentation site. The structure supports both LSL (Linden Scripting Language) and Lua (Lua for Second Life).
-
Progressive Learning Path: Getting Started → Learn → Guides → Recipes → Reference
- Beginners start with "getting-started" and follow tutorials in "learn"
- Intermediate users jump to "guides" for deeper topics
- All users reference "recipes" for quick solutions
- "reference" is comprehensive API documentation
-
Language-Agnostic Structure: Most top-level sections work for both LSL and Lua
- Only "learn" section splits by language since fundamentals differ
- Functions/events/constants are shared (with Lua-specific additions)
- Guides and recipes can include code examples in both languages using tabs
-
Flat, Discoverable Hierarchy: Maximum 3 levels deep
- Easier navigation and search
- Clear mental model for users
- Better for SEO and linking
-
Clear Content Types:
- Getting Started: Onboarding for absolute beginners
- Learn: Systematic language tutorials
- Guides: Topic-deep dives (vehicles, HTTP, pathfinding)
- Recipes: Task-focused solutions (door, chair, teleporter)
- Reference: Comprehensive API docs
-
Migration-Friendly: Lua includes "from-lsl" subsection to help LSL scripters transition
script/
├── index.md # Scripting portal landing page
│
├── getting-started/
│ ├── index.md # Quick intro for beginners
│ ├── your-first-script.md # Tutorial: Hello World
│ ├── editor-setup.md # VS Code extension setup
│ └── lsl-vs-lua.md # Choosing your language
│
├── learn/
│ ├── lsl/ # LSL Language Tutorial
│ │ ├── index.md # LSL overview
│ │ ├── basics.md # Variables, types, operators
│ │ ├── control-flow.md # if, while, for, do-while
│ │ ├── functions.md # Defining functions
│ │ ├── states-events.md # State machines & events
│ │ └── lists-strings.md # Working with lists & strings
│ │
│ └── lua/ # Lua Language Tutorial
│ ├── index.md # Lua overview & why Lua
│ ├── basics.md # Variables, types, operators
│ ├── control-flow.md # if, while, for, repeat
│ ├── functions.md # Function definitions
│ ├── tables.md # Tables & arrays
│ ├── metatables.md # Metatables & OOP
│ ├── error-handling.md # pcall, error handling
│ ├── libraries.md # Standard Lua libraries
│ ├── ll-events.md # LLEvents
│ ├── ll-timers.md # LLTimers
│ └── from-lsl/ # Migration guides
│ ├── index.md # Migration overview
│ ├── datatypes.md # Type differences
│ ├── operators.md # Operator differences
│ ├── control-flow.md # Loop differences
│ ├── functions.md # Function differences
│ ├── events.md # Event handling
│ ├── lists.md # Lists vs tables
│ └── strings.md # String handling
│
├── guides/ # Long-form topic guides
│ ├── index.md # Guides overview
│ ├── http-requests.md # Working with HTTP
│ ├── vehicle-physics.md # Scripting vehicles
│ ├── pathfinding.md # Pathfinding & navigation
│ ├── experience-tools.md # Experience permissions
│ ├── mesh-animation.md # Animating mesh
│ └── inventory-management.md # Managing inventory
│
├── recipes/ # Short, focused how-tos
│ ├── index.md # Recipes overview
│ ├── door.md # How to script a door
│ ├── chair.md # How to script a chair
│ ├── teleporter.md # How to script a teleporter
│ ├── chat-commands.md # Adding chat commands
│ ├── touch-giver.md # Creating a vendor/giver
│ └── particle-effects.md # Particle effect presets
│
└── reference/ # API Reference
├── lsl/
│ ├── index.md # LSL reference overview
│ ├── functions/ # Individual function pages
│ │ ├── index.md # Functions overview (searchable/filterable)
│ │ ├── llSay.mdx
│ │ ├── llListen.mdx
│ │ └── ... # (auto-generated from lsl_definitions.yaml)
│ ├── events/
│ │ ├── index.md # Events overview
│ │ ├── state_entry.md
│ │ ├── touch_start.md
│ │ └── ...
│ └── constants/
│ ├── index.md # Constants overview (searchable)
│ ├── agent.md # AGENT_* constants
│ ├── permissions.md # PERMISSION_* constants
│ └── ... # Grouped by prefix/category
│
└── lua/
├── index.md # Lua reference overview
├── functions/ # ll* functions (same as LSL)
├── events/ # Event handling reference
├── constants/ # Constants reference
└── libraries/ # Lua-specific libraries
├── index.md
├── ll-events.md # LLEvents API
├── ll-timers.md # LLTimers API
└── luau.md # Luau standard library
Landing page with the goal of routing users to their destination as quickly as possible. Features:
- Quick links for different user types (beginner, LSL scripter, experienced)
- Recent updates and new features
- Popular guides and recipes
- Search functionality
Onboarding content for absolute beginners:
- No prior scripting knowledge assumed
- Step-by-step first script tutorial
- Editor setup instructions
- Guidance on choosing LSL vs Lua
Systematic language tutorials teaching fundamentals:
- LSL section: State-based scripting, LSL-specific patterns
- Lua section: Lua fundamentals, modern scripting concepts
- Lua from-lsl: Migration guides leveraging existing LSL knowledge
- Progressive difficulty within each section
- Hands-on examples and exercises
Long-form, topic-focused articles explaining complex concepts:
- Deep dives into specific domains (vehicles, HTTP, pathfinding)
- Multiple approaches and best practices
- Advanced techniques and optimizations
- Both LSL and Lua examples (using tabs)
- Example: "Scripting Vehicles" covers Physical Linden Vehicles, raycast vehicles, custom physics, non-physical movement, wearable vehicles
Short, task-focused how-tos with working examples:
- Single, specific task (e.g., "How to script a door")
- Copy-paste-ready code with explanations
- Beginner-friendly
- Both LSL and Lua versions
- Quick solutions for common needs
Comprehensive API documentation:
- Functions: Auto-generated from
lsl_definitions.yamlwith custom examples - Events: Complete event reference with parameters and usage
- Constants: Searchable/filterable constant reference, grouped by category
- Lua Libraries: Documentation for LLEvents, LLTimers, Luau standard library
- Searchable and filterable overview pages
- Consistent formatting across all entries
- Primary navigation shows all top-level sections
- Section index pages provide secondary navigation within that section
- Breadcrumbs for deep pages
- Related content links at bottom of pages
- Use Starlight's
<Tabs>and<TabItem>components for LSL/Lua side-by-side - Syntax highlighting for both languages
- Copy buttons on all code blocks
- Link to relevant reference pages from examples
- Full-text search across all content
- Tag-based filtering (topics: physics, communication, inventory, etc.)
- Function/event/constant search on reference index pages
- Related content suggestions
- Function reference pages generated from
context/lsl_definitions.yaml - Custom content preservation between generations ( markers)
- Consistent metadata and formatting
- Learn pages link to relevant reference pages
- Guides link to related recipes
- Recipes link to guides for deeper understanding
- All content links to reference documentation
- Reference pages include "See also" sections
This taxonomy is designed to scale:
/build/section can follow similar patterns (getting-started, learn, guides, recipes, reference)/avatar/section for avatar creation content- Top-level structure remains consistent across domains
- Extract and modernize wiki content
- Convert MediaWiki markup to Markdown/MDX
- Update examples and best practices
- Distribute to appropriate sections (guides, recipes, learn)
- language1.md, language2.md →
/learn-lua/tutorial pages - moving-*.md →
/learn-lua/from-lsl/migration guides - scripts-*.md →
/recipes/or/guides/depending on complexity - Modernize formatting and integrate with site design
- Auto-generate
/reference/lsl/functions/pages - Extract constants for
/reference/lsl/constants/ - Extract events for
/reference/lsl/events/ - Maintain generation script in
/scripts/
A successful taxonomy enables users to:
- Find content quickly: Clear labels, logical grouping, effective search
- Learn progressively: Natural path from beginner to advanced
- Solve problems: Recipes for quick solutions, guides for deep understanding
- Reference easily: Fast lookup of functions, events, constants
- Transition smoothly: LSL scripters can migrate to Lua with clear guidance