File System Structure
Understanding how Tanka Docs organizes and processes files is essential for creating well-structured documentation projects. This guide explains the file system conventions, directory structures, and file types used by Tanka Docs.
Project Root Structure
A typical Tanka Docs project follows this structure:
my-project/
├── tanka-docs.yml # Main site configuration
├── docs/ # Documentation section
│ ├── tanka-docs-section.yml # Section configuration
│ ├── index.md # Section index page
│ ├── getting-started.md # Documentation files
│ └── advanced/ # Subdirectories for organization
│ └── configuration.md
├── api-reference/ # Another documentation section
│ ├── tanka-docs-section.yml
│ ├── index.md
│ └── classes/
│ └── myclass.md
├── _partials/ # Shared content snippets
│ ├── tanka-docs-section.yml
│ └── common-notice.md
├── ui-bundle/ # Custom UI templates (optional)
│ ├── layouts/
│ └── partials/
└── src/ # Source code (for includes)
└── MyProject/
└── Program.cs
Configuration Files
tanka-docs.yml (Site Configuration)
This is the main configuration file that must be placed at the root of your project. It defines:
- Site metadata (title, description)
- Content sources (Git repositories, branches, tags)
- Output settings (build directory, output directory)
- UI bundle configuration
Location: Project root Format: YAML Required: Yes
tanka-docs-section.yml (Section Configuration)
Each documentation section requires this configuration file in its root directory. It defines:
- Section identity (ID, title, type)
- Navigation structure
- Index page specification
- Section-specific settings
Location: Root of each section directory Format: YAML Required: Yes (for each section)
Content Organization
Sections
Sections are the primary organizational unit in Tanka Docs. Each section:
- Has its own directory with a
tanka-docs-section.ymlfile - Contains related documentation on a specific topic
- Can have its own navigation structure
- Supports versioning independently
Common section types:
docs- General documentationpartials- Shared content snippets (prefixed with_)api- API reference documentation
File Types
Markdown Files (.md)
- Purpose: Documentation content
- Processing: Converted to HTML with Tanka Docs extensions
- Features: Support for
\#include::directives andxref://links - Naming: Use kebab-case (e.g.,
getting-started.md)
Include Sources
Any text-based file can be included in documentation:
- Code files:
.cs,.js,.py,.yaml, etc. - Markdown snippets: Reusable content blocks
- Configuration examples: Sample configuration files
- Text files: Plain text content
Directory Naming Conventions
Section Directories
- Use descriptive names that reflect the content
- Avoid spaces; use hyphens for separation
- Consider future organization and growth
Good examples:
getting-started/api-reference/user-guide/_partials/(for shared content)
Avoid:
docs/(too generic if you have multiple sections)section1/(non-descriptive)my docs/(spaces)
File Organization
Within sections, organize files logically:
user-guide/
├── tanka-docs-section.yml
├── index.md # Section home
├── installation.md # Top-level topics
├── configuration.md
├── advanced/ # Grouped topics
│ ├── custom-templates.md
│ ├── performance.md
│ └── security.md
└── examples/ # Supporting materials
├── basic-config.yml
└── advanced-config.yml
Path Resolution
Relative Paths
Tanka Docs resolves paths relative to the configuration file location:
- Working directory: Directory containing
tanka-docs.yml - Section paths: Relative to the working directory
- Include paths: Resolved using
xref://syntax - Asset paths: Relative to the section directory
Cross-References
Use xref:// syntax for maintainable internal links:
[Link to same section](xref://other-page.md)
[Link to different section](xref://section-id:page.md)
[Link to specific version](xref://section-id@1.0.0:page.md)
Special Directories
Build Directory
- Purpose: Temporary files during generation
- Default:
_build/ - Contents: Processed content before final output
- Cleanup: Can be safely deleted
Output Directory
- Purpose: Final generated static site
- Default:
gh-pages/or configured intanka-docs.yml - Contents: HTML, CSS, JS, and assets
- Deployment: This directory is what you deploy
Cache Directory
- Purpose: Caches downloaded Git content and processed files
- Location: Within build directory
- Benefit: Faster subsequent builds
- Cleanup: Safe to delete to force fresh build
File Processing Pipeline
- Discovery: Scan for configuration files and sections
- Content Loading: Read Markdown and source files
- Preprocessing: Process
\#include::directives - Cross-Reference Resolution: Process
xref://links - Markdown Processing: Convert to HTML
- Template Application: Apply UI bundle templates
- Asset Copying: Copy static assets
- Output Generation: Write final files to output directory
Best Practices
Organization
- Group related content in subdirectories
- Use consistent naming conventions
- Keep section directories focused and cohesive
- Separate shared content into
_partialssections
File Naming
- Use lowercase with hyphens (kebab-case)
- Make names descriptive and searchable
- Avoid special characters and spaces
- Use consistent file extensions (
.mdfor Markdown)
Path Management
- Use
xref://for all internal links - Keep include paths relative to section roots
- Organize includes logically (by type or feature)
- Document your file organization in a README
Performance
- Avoid deeply nested directory structures
- Keep individual files reasonably sized
- Use includes to break up large documents
- Clean build directories periodically
Troubleshooting
Common Issues
Files not found during build:
- Check file paths are correct
- Verify
xref://syntax - Ensure files exist at specified locations
Includes not working:
- Verify include syntax:
\#include::xref://... - Check that referenced files exist
- Use
--debugflag to see detailed processing
Navigation problems:
- Check
tanka-docs-section.ymlnavigation configuration - Verify file references in navigation match actual files
- Ensure proper YAML syntax in configuration files