Skip to content

jaysen/WikiTool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

104 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WikiTool

A .NET library, CLI tool, and desktop application for working with various wiki formats.

Features

  • WikidPad Support: Read and parse WikidPad .wiki files
  • Obsidian Support: Read and parse Obsidian .md files
  • Markdown Wiki Support: Read and parse using Markdown links
  • Format Conversion: Convert between wikis - WikidPad to Obsidian done.
  • CLI Tool: Command-line interface for easy conversions
  • Desktop GUI: Cross-platform Avalonia-based desktop application - Converter done

Requirements

  • .NET 10.0 SDK

Development Setup

Option 1: Distrobox (Linux)

For GUI development and testing on your actual wikis, use distrobox:

# Create container
./.distrobox/create-container.sh

# Enter container
distrobox enter dotnetbox

# Run setup script
./.distrobox/setup.sh

# Optional: Install VS Code inside container (recommended)
./.distrobox/install-vscode.sh

The VS Code installation script installs VS Code inside the container and exports it to your host, giving you full access to .NET SDK and all development tools

Option 2: DevContainer

Open this repository in VS Code with the Dev Containers extension, or use GitHub Codespaces.

Option 3: Local Installation

Install .NET 10.0 SDK on your system directly.

Building

dotnet restore
dotnet build

Running Tests

dotnet test

Usage

Desktop Application

Run the GUI application:

dotnet run --project src/WikiTool.Desktop

The desktop application provides a visual interface for converting WikidPad wikis to Obsidian format:

  • Browse for source WikidPad folder
  • Browse for destination Obsidian folder
  • Options: Toggle category tag conversion
  • Convert button to start the conversion
  • Live progress indicator during conversion
  • Conversion log showing results and any errors

The GUI is built with Avalonia and runs cross-platform on Windows, Linux, and macOS.

CLI Tool

Convert a WikidPad wiki to Obsidian format:

dotnet run --project src/WikiTool.CLI -- convert \
  --from wikidpad \
  --to obsidian \
  --source /path/to/wikidpad \
  --dest /path/to/obsidian

Or using short aliases:

dotnet run --project src/WikiTool.CLI -- convert \
  -f wikidpad \
  -t obsidian \
  -s /path/to/wikidpad \
  -d /path/to/obsidian

Conversion Details

The converter handles the following WikidPad syntax:

WikidPad Format Obsidian Format Example
Headers Markdown headers + Header# Header
Bare WikiWords Double brackets WikiWord[[WikiWord]]
Single bracket links Double brackets [Link with Spaces][[Link with Spaces]]
Tags Hashtags [tag:example]#example
Categories (opt-in) Hashtags CategoryName#Name
Attributes Obsidian attributes [author: John][author:: John]
Aliases YAML frontmatter [alias:Name]aliases: in frontmatter
File extension Markdown .wiki.md

Notes:

  • WikidPad automatically links CamelCase words (WikiWords) without any brackets. Links with spaces or non-CamelCase text use single square brackets [like this]. The converter transforms both formats to Obsidian's double-bracket syntax [[like this]].
  • Only WikiWords starting with uppercase are converted (e.g., WikiWord but not camelCase or iPhone).
  • WikidPad special attributes like [icon=date] are preserved unchanged.
  • Category conversion is disabled by default. Enable with --convert-categories flag or ConvertCategoryTags = true.

Alias Conversion

WikidPad aliases are converted to Obsidian YAML frontmatter:

Input (WikidPad):

[alias:FirstAlias] [alias:SecondAlias]
+ My Page
Content here

Output (Obsidian):

---
aliases:
  - FirstAlias
  - SecondAlias
---
# My Page
Content here

Library Usage

using WikiTool;
using WikiTool.Converters;

// Read a WikidPad wiki
var wiki = new WikidpadWiki("/path/to/wikidpad");
var pages = wiki.GetAllPages();

// Convert to Obsidian
var converter = new WikidPadToObsidianConverter(
    "/path/to/wikidpad",
    "/path/to/obsidian"
);

// Optional: Enable Category to hashtag conversion (disabled by default)
converter.ConvertCategoryTags = true;

converter.ConvertAll();

Project Structure

WikiTool/
├── src/
│   ├── WikiTool/                # Core library
│   │   ├── Pages/               # Page implementations
│   │   ├── Wikis/               # Wiki implementations
│   │   └── Converters/          # Format converters
│   ├── WikiTool.CLI/            # Command-line interface
│   └── WikiTool.Desktop/        # Avalonia desktop GUI
│       ├── Services/            # UI services (folder picker, etc.)
│       ├── ViewModels/          # MVVM ViewModels
│       └── Views/               # XAML views
├── tests/
│   └── WikiTool.Tests/          # Unit tests
├── docs/                        # Documentation
└── .distrobox/                  # Distrobox development environment

License

See LICENSE file for details.

About

a multiplatform tool for working with and between multiple local and online wikis - in dotnet

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors