Claude Code Quick Start Guide
Welcome to Claude Code! This powerful AI programming assistant can help you improve programming efficiency and automate development tasks.
1. Installation & Configuration
1.1 System Requirements
- Operating System: macOS 10.15+, Ubuntu 20.04+/Debian 10+, or Windows via WSL
- Hardware: 4GB+ RAM
- Software: Node.js 18+
- Network: Internet connection required for authentication and AI processing
1.2 Installation Steps
Install globally using npm:
npm install -g @anthropic-ai/claude-code
Important: Don't use sudo npm install -g
, which may cause permission issues and security risks.
After installation, navigate to your project directory and start Claude Code:
cd your-awesome-project
claude
2. API Key Acquisition & Configuration
2.1 Register Account
- Visit https://coultra.blueshirtmap.com
- Click the register button to create a new account
- Fill in the necessary registration information
2.2 Create API Key
- After successful login, go to the API key management page
- Create a new API key group
- Select "ClaudeCode" as the group name
- Generate and copy your API key
3. Configuration File Setup
3.1 API Key Configuration
Configuration File Setup Method
Create or edit configuration file:
# User settings (global)
~/.claude/settings.json
# Project settings (project level)
.claude/settings.json
Configuration file example:
{
"env": {
"ANTHROPIC_API_KEY": "Your-API-Key",
"ANTHROPIC_BASE_URL": "https://coultra.blueshirtmap.com",
"CLAUDE_CODE_MAX_OUTPUT_TOKENS":64000,
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC":1,
"CLAUDE_MODEL": "Claude-Model-Name"
},
"permissions": {
"allow": [],
"deny": []
}
}
3.2 Permission Settings (Optional)
Claude Code adopts a conservative permission policy, requiring user confirmation for operations that may modify the system by default. You can customize the allowed tools list:
- Use
/permissions
command to add or remove tools - Edit
settings.json
file for batch configuration - Use
--allowedTools
CLI flag to set session-specific permissions
3.3 Working Directory Configuration (Optional)
Configure additional working directories that Claude can access:
{
"permissions": {
"additionalDirectories": ["../docs/", "../shared/"]
}
}
3.4 Quick Setup - One-Click Script
After purchasing the API, you only need to modify line 8 of this script readonly API_KEY=""
, fill in your API key (token), save this script as claudecode.sh
, then open terminal:
chmod +x claudecode.sh
./claudecode.sh
Just follow the prompts.
#!/bin/bash
# ==============================================================================
# 🔧 Configuration Area - Please set your API configuration here
# ==============================================================================
# 🔑 API Key - Please fill in your API key
readonly API_KEY=""
# 🌐 API Base URL - Please fill in your API base URL (e.g.: "https://coultra.blueshirtmap.com")
readonly API_BASE_URL="https://coultra.blueshirtmap.com"
# ==============================================================================
# Do not modify the content below
# ==============================================================================
# Script constants
readonly CLAUDE_COMMAND="claude"
readonly NPM_PACKAGE="@anthropic-ai/claude-code"
readonly CLAUDE_DIR="$HOME/.claude"
readonly SETTINGS_FILE="$CLAUDE_DIR/settings.json"
# Detect operating system
detect_os() {
case "$(uname -s)" in
Darwin)
echo "macos"
;;
Linux)
echo "linux"
;;
*)
echo "unknown"
;;
esac
}
# Check if configuration is complete
check_config() {
if [ -z "$API_KEY" ] || [ -z "$API_BASE_URL" ]; then
echo "❌ Configuration incomplete! Please edit the script and fill in the following information:"
echo " - API_KEY: Your API key"
echo " - API_BASE_URL: API base address (e.g.: https://coultra.blueshirtmap.com )"
exit 1
fi
}
# Install Homebrew (macOS only)
install_homebrew() {
if ! command -v brew &> /dev/null; then
echo "Installing Homebrew..."
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# Add Homebrew to PATH
if [[ -f "/opt/homebrew/bin/brew" ]]; then
eval "$(/opt/homebrew/bin/brew shellenv)"
elif [[ -f "/usr/local/bin/brew" ]]; then
eval "$(/usr/local/bin/brew shellenv)"
fi
echo "✅ Homebrew installation completed"
else
echo "ℹ️ Homebrew already installed"
fi
}
# Install packages on macOS
install_macos_packages() {
install_homebrew
# Install Node.js (includes npm)
if ! command -v node &> /dev/null; then
echo "Installing Node.js..."
brew install node
echo "✅ Node.js installation completed"
else
echo "ℹ️ Node.js already installed"
fi
# Install jq
if ! command -v jq &> /dev/null; then
echo "Installing jq..."
brew install jq
echo "✅ jq installation completed"
else
echo "ℹ️ jq already installed"
fi
# Install Python3
if ! command -v python3 &> /dev/null; then
echo "Installing Python3..."
brew install python3
echo "✅ Python3 installation completed"
else
echo "ℹ️ Python3 already installed"
fi
}
# Install packages on Linux
install_linux_packages() {
# Detect Linux distribution
if command -v apt-get &> /dev/null; then
# Ubuntu/Debian
echo "Detected Ubuntu/Debian system"
# Update package manager
echo "Updating package manager..."
sudo apt-get update
# Install Node.js
if ! command -v node &> /dev/null; then
echo "Installing Node.js..."
# Install NodeSource repository
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
echo "✅ Node.js installation completed"
else
echo "ℹ️ Node.js already installed"
fi
# Install jq
if ! command -v jq &> /dev/null; then
echo "Installing jq..."
sudo apt-get install -y jq
echo "✅ jq installation completed"
else
echo "ℹ️ jq already installed"
fi
# Install Python3
if ! command -v python3 &> /dev/null; then
echo "Installing Python3..."
sudo apt-get install -y python3 python3-pip
echo "✅ Python3 installation completed"
else
echo "ℹ️ Python3 already installed"
fi
elif command -v yum &> /dev/null; then
# CentOS/RHEL
echo "Detected CentOS/RHEL system"
# Install Node.js
if ! command -v node &> /dev/null; then
echo "Installing Node.js..."
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo yum install -y nodejs
echo "✅ Node.js installation completed"
else
echo "ℹ️ Node.js already installed"
fi
# Install jq
if ! command -v jq &> /dev/null; then
echo "Installing jq..."
sudo yum install -y jq
echo "✅ jq installation completed"
else
echo "ℹ️ jq already installed"
fi
# Install Python3
if ! command -v python3 &> /dev/null; then
echo "Installing Python3..."
sudo yum install -y python3 python3-pip
echo "✅ Python3 installation completed"
else
echo "ℹ️ Python3 already installed"
fi
elif command -v pacman &> /dev/null; then
# Arch Linux
echo "Detected Arch Linux system"
# Install Node.js
if ! command -v node &> /dev/null; then
echo "Installing Node.js..."
sudo pacman -S --noconfirm nodejs npm
echo "✅ Node.js installation completed"
else
echo "ℹ️ Node.js already installed"
fi
# Install jq
if ! command -v jq &> /dev/null; then
echo "Installing jq..."
sudo pacman -S --noconfirm jq
echo "✅ jq installation completed"
else
echo "ℹ️ jq already installed"
fi
# Install Python3
if ! command -v python3 &> /dev/null; then
echo "Installing Python3..."
sudo pacman -S --noconfirm python python-pip
echo "✅ Python3 installation completed"
else
echo "ℹ️ Python3 already installed"
fi
else
echo "❌ Unsupported Linux distribution, please manually install the following packages:"
echo " - Node.js (including npm)"
echo " - jq"
echo " - python3"
exit 1
fi
}
# Install Claude Code
install_claude_code() {
if command -v "$CLAUDE_COMMAND" &> /dev/null; then
echo "ℹ️ Claude Code already installed"
else
echo "Installing Claude Code..."
if ! command -v npm &> /dev/null; then
echo "❌ npm not installed, cannot install Claude Code"
exit 1
fi
if ! npm install -g "$NPM_PACKAGE"; then
echo "❌ Claude Code installation failed"
exit 1
fi
echo "✅ Claude Code installation completed"
fi
}
# Configure Claude Code
configure_claude_code() {
echo "Configuring Claude Code..."
# Create .claude directory
if [ ! -d "$CLAUDE_DIR" ]; then
mkdir -p "$CLAUDE_DIR"
fi
# Backup original configuration (if exists)
if [ -f "$SETTINGS_FILE" ]; then
cp "$SETTINGS_FILE" "$SETTINGS_FILE.backup"
echo "ℹ️ Original configuration backed up as settings.json.backup"
fi
# Create new configuration file
cat > "$SETTINGS_FILE" << EOF
{
"env": {
"ANTHROPIC_API_KEY": "$API_KEY",
"ANTHROPIC_BASE_URL": "$API_BASE_URL",
"CLAUDE_CODE_MAX_OUTPUT_TOKENS": 64000,
"CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": 1
},
"permissions": {
"allow": [],
"deny": []
},
"apiKeyHelper": "echo '$API_KEY'"
}
EOF
echo "✅ Configuration file creation completed"
}
# Main function
main() {
echo "🚀 Claude Code Automatic Installation and Configuration Script"
echo "============================================================="
# Check configuration
check_config
# Detect operating system
OS=$(detect_os)
echo "Detected operating system: $OS"
# Install dependencies based on operating system
case "$OS" in
"macos")
install_macos_packages
;;
"linux")
install_linux_packages
;;
*)
echo "❌ Unsupported operating system: $OS"
exit 1
;;
esac
# Install Claude Code
install_claude_code
# Configure Claude Code
configure_claude_code
echo "🎉 All configuration completed!"
echo "Configuration file location: $SETTINGS_FILE"
echo "You can now use the 'claude' command!"
}
# Run main function
main "$@"
4. Basic Usage
4.1 Launch Methods
Interactive Mode
claude
Launch with Initial Prompt
claude "explain this project"
Non-interactive Mode
claude -p "explain this function"
Process Pipeline Input
cat logs.txt | claude -p "explain"
4.2 Common Commands
claude update
- Update to latest versionclaude -c
- Continue recent conversationclaude -r <session-id>
- Restore specific sessionclaude mcp
- Configure MCP server
4.3 Keyboard Shortcuts
General Control
Ctrl+C
: Cancel current input or generationCtrl+D
: Exit Claude Code sessionCtrl+L
: Clear terminal screenUp/Down
: Browse command historyEsc + Esc
: Edit previous message
Multi-line Input
\ + Enter
: Works for all terminalsOption+Enter
: macOS defaultShift+Enter
: Available after executing/terminal-setup
5. Advanced Features
5.1 CLI Reference
Claude Code provides rich command-line options to customize its behavior:
Basic CLI Commands
Command | Description | Example |
---|---|---|
claude | Start interactive REPL | claude |
claude "query" | Start REPL with initial prompt | claude "explain this project" |
claude -p "query" | Query via SDK then exit | claude -p "explain this function" |
claude -c | Continue recent conversation | claude -c |
claude update | Update to latest version | claude update |
Important CLI Flags
Flag | Description | Example |
---|---|---|
--allowedTools | List of allowed tools | --allowedTools "Bash(git log:*)" "Read" |
--verbose | Enable verbose logging | claude --verbose |
--model | Set model to use | claude --model claude-sonnet-4 |
--permission-mode | Specify permission mode | claude --permission-mode plan |
--dangerously-skip-permissions | Skip permission prompts (use with caution) | claude --dangerously-skip-permissions |
5.2 Interactive Mode
Vim Mode
Enable vim-style editing:
/vim
Mode Switching
Esc
: Enter NORMAL modei
: Insert before cursora
: Insert after cursoro
: Create new line below
Navigation (NORMAL mode)
h/j/k/l
: Left/Down/Up/Right movementw
: Next word0
: Line beginning$
: Line endgg
: Text beginningG
: Text end
5.3 Slash Commands
Claude Code provides various slash commands to enhance interaction:
Basic Commands
Command | Description | Example |
---|---|---|
/help | Show help information | /help |
/clear | Clear conversation history | /clear |
/config | Manage configuration | /config |
/permissions | Manage permissions | /permissions |
/vim | Enable vim mode | /vim |
Advanced Commands
Command | Description | Function |
---|---|---|
/init | Initialize project | Auto-generate CLAUDE.md file |
/terminal-setup | Setup terminal | Configure keyboard shortcuts |
/project:<command> | Project-specific commands | Run custom project commands |
5.4 Custom Slash Commands
You can create custom slash commands:
- Create Markdown files in
.claude/commands/
directory - File name becomes command name
- Content serves as command template, can use
$ARGUMENTS
placeholder
Example: .claude/commands/fix-github-issue.md
Please analyze and fix GitHub issue: $ARGUMENTS.
Follow these steps:
1. Use `gh issue view` to get issue details
2. Understand the problem description
3. Search related code files
4. Implement necessary fixes
5. Write and run tests
6. Ensure code passes lint checks
7. Create descriptive commit message
8. Push and create PR
6. Practical Tutorials
6.1 Understanding New Codebase
Quick Codebase Overview
If you just joined a new project and want to quickly understand its structure:
- Enter project root directory:
cd /path/to/project
- Start Claude Code:
claude
- Request codebase overview:
> Give me a codebase overview
- Dive deeper into specific components:
> Explain the main architectural patterns used here
> What are the key data models?
> How is authentication handled?
Tips:
- Start with broad questions, then gradually focus on specific areas
- Ask about coding conventions and patterns used in the project
- Request a glossary of project-specific terminology
Finding Relevant Code
When you need to locate code related to a specific feature:
- Ask Claude to find related files:
> Find files that handle user authentication
- Get context on component interactions:
> How do these auth files work together?
- Understand execution flow:
> Trace the login process from frontend to database
Tips:
- Be specific about what you're looking for
- Use domain-specific language from the project
6.2 Efficient Bug Fixing
Diagnosing Error Messages
When encountering errors, find and fix issues through:
- Share error message with Claude:
> I'm seeing an error when running npm test
- Request fix suggestions:
> Provide ways to fix the @ts-ignore in user.ts
- Apply fixes:
> Update user.ts with the null checks you suggested
Tips:
- Tell Claude the command used to reproduce the issue and provide stack trace
- Mention any steps to reproduce the error
- Specify if the error is intermittent or consistent
6.3 Code Refactoring
Modernizing Legacy Code
When updating old code with modern programming patterns:
- Identify code to refactor:
> Find deprecated APIs in our codebase
- Request refactoring suggestions:
> Suggest how to refactor utils.js using modern JavaScript features
- Apply changes safely:
> Refactor utils.js with ES2024 features while maintaining original behavior
- Validate refactoring:
> Run tests on the refactored code
Tips:
- Ask Claude about benefits of modern approaches
- Request backward compatibility when needed
- Perform small, testable incremental refactoring
6.4 Handling Tests
Adding Test Coverage
To add tests for uncovered code:
- Identify untested code:
> Find uncovered functions in NotificationsService.swift
- Generate test framework:
> Add tests for notification service
- Add meaningful test cases:
> Add test cases for edge cases in notification service
- Run and validate tests:
> Run new tests and fix any failures
Tips:
- Request tests covering edge cases and error conditions
- Ask for unit tests and integration tests as needed
- Have Claude explain testing strategy
6.5 Creating Pull Requests
Generating Comprehensive PRs
When creating a well-documented pull request:
- Summarize changes:
> Summarize the changes I made to the auth module
- Generate PR with Claude:
> Create a PR
- Review and enhance description:
> Enhance the PR description with more info about security improvements
- Add testing information:
> Add information about how to test these changes
Tips:
- Ask Claude to create a PR directly
- Review Claude-generated PR before submission
- Request Claude to highlight potential risks or considerations
6.6 Handling Documentation
Generating Code Documentation
To add or update code documentation:
- Identify code without proper JSDoc comments:
> Find functions without proper JSDoc comments in auth module
- Generate documentation:
> Add JSDoc comments to uncommented functions in auth.js
- Review and enhance documentation:
> Improve generated documentation with more context and examples
- Validate documentation:
> Check if documentation meets our project standards
Tips:
- Specify required documentation style (JSDoc, docstrings, etc.)
- Request examples in documentation
- Ask for documentation of public APIs, interfaces, and complex logic
6.7 Working with Images
Analyzing Images and Screenshots
To work with images or have Claude analyze image content:
Add image to conversation:
- Drag image into Claude Code window
- Copy and paste image to CLI (ctrl+v)
- Provide image path:
> Analyze this image: /path/to/your/image.png
Request Claude to analyze image:
> What does this image show?
> Describe the UI elements in this screenshot
> What's wrong with this chart?
Use images for context:
> This is a screenshot of the error, what's causing it?
> This is the current database schema, how do we need to modify it for new features?
Get code suggestions from images:
> Generate CSS to match this design mockup
> What HTML structure could recreate this component?
Tips:
- Use images when text descriptions are unclear or verbose
- Provide screenshots of errors, UI designs, or diagrams for better context
- Use multiple images in conversation when needed
6.8 Setting Up Project Memory
Creating Effective CLAUDE.md Files
To store important project information, conventions, and common commands:
Initialize CLAUDE.md file for your codebase: > /init
Tips:
- Include common commands (build, test, lint) to avoid repeated searches
- Document code style preferences and naming conventions
- Add project-specific important architectural patterns
You can add CLAUDE.md files to the folder where you run Claude, parent directories (Claude auto-reads these), or subdirectories (Claude pulls these as needed).
6.9 Unix-style Utilities
Adding to Validation Process
Add Claude to your build scripts:
// package.json
{
...
"scripts": {
...
"lint:claude": "claude -p 'You are a code linter, please review the diff against main branch and report any issues related to typos. Each issue should have filename and line number on one line, description on the second line. Return no other text.'"
}
}
Piping Input/Output
Pipe data through Claude:
cat build-error.txt | claude -p 'Concisely explain the root cause of this build error' > output.txt
6.10 MCP Server Configuration
Configuring MCP Servers
To enhance Claude's capabilities by connecting to specialized tools and external servers:
Add MCP Stdio server:
- Basic syntax:
claude mcp add <name> <command> [args...]
- Example adding local server:
claude mcp add my-server -e API_KEY=123 -- /path/to/server arg1 arg2
- Basic syntax:
Manage MCP servers:
- List all configured servers:
claude mcp list
- Get details of specific server:
claude mcp get my-server
- Remove server:
claude mcp remove my-server
- List all configured servers:
Tips:
- Use
-s
or--scope
flag withproject
(default) orglobal
to specify where configuration is stored - Use
-e
or--env
flag to set environment variables (e.g.,-e KEY=value
) - MCP follows client-server architecture, Claude Code (client) can connect to multiple specialized servers
Connecting to Postgres MCP Server
To give Claude read-only access to query PostgreSQL database and inspect schema:
- Add Postgres MCP server:
claude mcp add postgres-server /path/to/postgres-mcp-server --connection-string "postgresql://user:pass@localhost:5432/mydb"
- Use Claude to query database:
> Describe the schema of our users table
> What are the most recent orders in the system?
> Show the relationship between customers and invoices
Tips:
- Postgres MCP server provides read-only access for security
- Claude can help explore database structure and run analytical queries
- Use it to quickly understand database schema in unfamiliar projects
- Ensure your connection string uses credentials with minimum required permissions
7. Advanced Features
7.1 IDE Integration
Claude Code supports connections to mainstream IDEs:
- You can see Claude Code changes directly in IDE and interact with it
- Claude Code now supports VSCode and JetBrains
- If you use Linux/macOS, you can use the plugin directly
- For VSCode, invoke Claude Code in VSCode's built-in terminal and plugin will auto-install
- For JetBrains, download via this link: Claude Code [Beta] - IntelliJ IDEs Plugin
- You may need to manually specify IDE or check IDE connection with:
> /ide
- If using VSCode+WSL, please install WSL plugin from VSCode marketplace first
- For more usage, refer to Claude Code's official documentation
7.2 Model Switching and Configuration
Claude Code supports flexible switching between Claude 4 Opus and Claude 4 Sonnet:
- We strongly recommend using Claude 4 Sonnet - experience is similar to Claude 4 Opus but billing rate is only 1/5
- We default to Claude 4 Sonnet, you can modify this in configuration after login
- If you haven't disabled "Force Sonnet" in site settings, model switching in /model won't take effect
- Switch models in Claude Code with:
> /model
7.3 Context Management
Claude Code supports context compression to save credits:
- Claude Code typically has long context, we recommend using this slash command to compress and save credits
- Longer context often requires more credits
/compact [Your description]
7.4 Conversation Recovery
Claude Code can restore previous conversations:
- Use this command to restore your last conversation:
claude --continue
- This immediately restores your most recent conversation without prompts
- To display timestamps, use:
claude --resume
- This shows an interactive conversation selector displaying:
- Conversation start time
- Initial prompt or conversation summary
- Message count
- Use arrow keys to navigate and press Enter to select conversation
7.5 Image Processing
Claude Code can process image information:
- You can use any of these methods:
- Drag and drop image into Claude Code window (on macOS)
- Copy image and paste with Ctrl+v into CLI (on macOS)
- Provide image path:
> Analyze this image: /path/to/your/image.png
- You can request work using natural language:
> This is an error screenshot. What's causing it?
> What does this image show?
> Describe the UI elements in this screenshot
> Generate CSS to match this design mockup
> What HTML structure could recreate this component?
7.6 Deep Thinking
Claude Code supports deep thinking:
- You need to request deep thinking through natural language
> I need to implement a new authentication system using OAuth2 for our API. Think deeply about the best approach to implement this in our codebase.
> Think about potential security vulnerabilities in this approach
> Think more deeply about edge cases we should handle
- Recommended for complex problems, but consumes significant credits
7.7 Advanced Git Operations
Claude Code supports natural language Git operations:
> Commit my changes
> Create a PR
> Which commit added markdown tests last December?
> Rebase on main branch and resolve any merge conflicts
Using Git Worktrees
You can use worktrees to create isolated coding environments:
- If you need to work on multiple tasks simultaneously with complete code isolation between Claude Code instances
- Git worktrees allow you to check out multiple branches from the same repository into separate directories
- Each worktree has its own working directory with isolated files while sharing the same Git history
- Create new worktree:
# Create worktree with new branch
git worktree add ../project-feature-a -b feature-a
# Or create worktree with existing branch
git worktree add ../project-bugfix bugfix-123
- Run Claude Code in each worktree:
# Navigate to your worktree
cd ../project-feature-a
# Run Claude Code in this isolated environment
claude
7.8 Other Advanced Features
Claude Code supports various advanced features:
- Claude Code can be used as Unix-like tool
- Claude Code supports custom slash commands
- Claude Code supports adding command arguments with $ARGUMENTS
- Claude Code supports advanced settings configuration
- Claude Code supports GitHub Actions integration
- Claude Code supports SDK development
- Claude Code supports Model Context Protocol (MCP)
8. Troubleshooting
8.1 Memory Storage Issues
How does Claude Code store memory?
Claude Code stores memory in ~/.claude
. Unless specifically required, please don't delete this directory.
8.2 Model Name Issues
Why does it occasionally reply with wrong model name?
TryAllAI promises not to replace your requested model and never mix in other models. This is because Claude Code doesn't use Claude 4 series models for simple tasks.
8.3 Command Line Errors
How to handle command line parameter execution errors?
These issues are common on WSL and are Agent-related errors. We recommend using macOS/Ubuntu, which typically have fewer issues.
8.4 Cleaning Claude Code
How to completely clean Claude Code?
You can execute the following command to clean Claude Code login information:
rm ~/.claude* -rf
8.5 API Errors
How to handle API Error, Tools Error?
This is usually a network issue. Please exit and re-execute with claude -c
. If the problem persists, contact support.
8.6 OAuth Verification Errors
OAuth verification error solutions
- Ensure no proxy is configured in environment variables before login verification
- If the problem persists, ignore the popup browser and copy the terminal link to open, verify through verification code method
8.7 Response Timeout Issues
What to do when there's no response for a long time?
- We recommend pressing ctrl+c and restarting Claude Code, this is often a network issue
- If command line is still unresponsive, we recommend killing the process and starting a new session, this won't affect your work progress
- You can restore the last session with:
claude -c
9. Conclusion
Claude Code is a powerful AI programming assistant that can significantly improve your development efficiency through proper configuration and usage. We recommend:
- Start with basic features and gradually explore advanced capabilities
- Customize configuration according to project needs
- Use CLAUDE.md files to record project-specific information
- Use permission management reasonably to ensure security
- Explore MCP and custom command extension features
Enjoy using Claude Code! For questions, please refer to official documentation or community support.