Color Selection
Use Sufficient Contrast
Ensure text is readable against backgrounds:- AA (minimum): 4.5:1 for normal text, 3:1 for large text
- AAA (enhanced): 7:1 for normal text, 4.5:1 for large text
Choose a Cohesive Color Palette
Start with a base color and derive others:Use Semantic Naming
Name colors by purpose, not appearance:Limit Your Palette
Too many colors create visual noise:Syntax Highlighting
Follow Language Conventions
Use colors that match user expectations:- Keywords: Red, pink, or magenta
- Strings: Green or blue
- Comments: Gray or muted colors
- Functions: Purple or yellow
- Numbers: Cyan or orange
Distinguish Similar Elements
Ensure different token types are visually distinct:Test with Real Code
Create test files with different languages:Typography
Respect Shared Font Variables
Don’t override these unless you have a good reason:Use Appropriate Font Weights
Inkdown provides semantic font weight variables:- Normal text: 400-500
- Headings: 600-800
- Bold: 600-700
Layout and Spacing
Don’t Override Spacing Variables
Spacing should be consistent across themes:Use Variable References
Reference spacing variables instead of hardcoding:Performance
Minimize Custom CSS
Only define variables you need to change:Avoid Complex Selectors
Keep selectors flat and simple:Use Variable References for Consistency
Reuse colors through references:Testing
Test with Comprehensive Content
Create a test document that includes:Lists
- Unordered
- List
- Nested
- Items
- Ordered
- List
- Nested
- Items
Blockquotes
This is a quote with multiple lines
Tables
| Header 1 | Header 2 |
|---|---|
| Cell 1 | Cell 2 |
Callouts
[!NOTE] This is a note callout
[!WARNING] This is a warning callout
Versioning
Use Semantic Versioning
Follow semver (MAJOR.MINOR.PATCH):- MAJOR: Breaking changes (complete redesign)
- MINOR: New features (add light mode)
- PATCH: Bug fixes (fix heading color)
Document Changes
Maintain a CHANGELOG.md:Common Mistakes to Avoid
1. Hardcoding Colors
2. Insufficient Testing
Don’t just test with simple content:- Test complex nested structures
- Test with very long content
- Test with empty states
3. Ignoring Accessibility
Accessibility isn’t optional:- Check contrast ratios
- Test with keyboard navigation
- Ensure focus indicators are visible
4. Overcomplicating
Simpler themes are often better:- Don’t use 20 different colors
- Don’t override every variable
- Don’t create overly specific selectors
5. Not Supporting Both Modes
If possible, support both light and dark:- More users can use your theme
- Shows attention to detail
- Demonstrates theme versatility
Inspiration and Resources
Color Palette Generators
- Coolors - Color scheme generator
- Adobe Color - Color wheel and palettes
- Paletton - Color scheme designer
Theme Inspiration
- VS Code Themes - Thousands of editor themes
- Dracula Theme - Popular dark theme
- Nord Theme - Arctic color palette
- Catppuccin - Soothing pastel theme
Accessibility Tools
- Contrast Ratio Calculator
- Color Blind Simulator
- Who Can Use - Contrast checker with simulations
Checklist
Before publishing your theme:- All text has sufficient contrast (4.5:1 minimum)
- Tested with comprehensive markdown content
- Both light and dark modes (if supported)
- README with screenshots and installation instructions
- Semantic versioning in manifest.json
- No hardcoded colors (uses variables)
- Syntax highlighting tested with real code
- UI elements (buttons, inputs, etc.) are styled
- Callouts are readable and distinct
- Tables are properly styled
- Links are visible and distinguishable
- Focus indicators are visible
- Theme name is unique and descriptive
- License file included
- No JavaScript or executable code
Next Steps
Quick Start
Create your first theme
Community Themes
Publish and share your theme
CSS Variables
Complete variable reference
CSS Architecture
Understand theme structure
