Skip to content

Development Guide

This guide covers setting up a development environment for contributing to Kerminal.

Prerequisites

Ensure you have the following installed:

ToolVersionPurpose
Node.js20+Frontend development
RustLatest stableBackend (Tauri)
Tauri CLILatestBuild tooling

Install Rust

bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

Install Tauri CLI

bash
cargo install tauri-cli

Platform-Specific Dependencies

Linux (Debian/Ubuntu)

bash
sudo apt update
sudo apt install libwebkit2gtk-4.1-dev \
    build-essential \
    curl \
    wget \
    file \
    libxdo-dev \
    libssl-dev \
    libayatana-appindicator3-dev \
    librsvg2-dev

Linux (Arch Linux)

bash
sudo pacman -S webkit2gtk \
    base-devel \
    curl \
    wget \
    file \
    openssl \
    appmenu-gtk-module \
    libappindicator-gtk3 \
    librsvg

Linux (Fedora)

bash
sudo dnf install webkit2gtk4.1-devel \
    openssl-devel \
    curl \
    wget \
    file \
    libxdo-devel \
    libappindicator-gtk3-devel \
    librsvg2-devel

macOS

bash
xcode-select --install

Windows

Install Visual Studio Build Tools with C++ workload.

Getting Started

Clone Repository

bash
git clone https://github.com/klpod221/kerminal.git
cd kerminal

Install Dependencies

bash
npm install

Development Mode

bash
npm run tauri dev

This will:

  1. Start the Vite dev server (hot reload)
  2. Compile the Rust backend
  3. Launch the Tauri window

Production Build

bash
npm run tauri build

Output will be in src-tauri/target/release/bundle/.

Project Structure

kerminal/
├── src/                    # Vue 3 frontend
│   ├── components/         # Vue components
│   ├── stores/             # Pinia stores
│   ├── views/              # Page views
│   ├── composables/        # Vue composables
│   └── assets/             # Static assets
├── src-tauri/              # Rust backend
│   ├── src/
│   │   ├── commands/       # Tauri commands
│   │   ├── models/         # Data models
│   │   ├── services/       # Business logic
│   │   └── main.rs         # Entry point
│   ├── Cargo.toml          # Rust dependencies
│   └── tauri.conf.json     # Tauri configuration
├── docs/                   # VitePress documentation
├── public/                 # Public assets
└── package.json            # Node.js dependencies

Key Technologies

Frontend

TechnologyPurpose
Vue 3UI framework
TypeScriptType safety
PiniaState management
xterm.jsTerminal emulation
TailwindCSSStyling

Backend

TechnologyPurpose
Tauri v2Desktop framework
TokioAsync runtime
russhSSH implementation
SQLxDatabase access
AES-GCMEncryption

Code Style

Frontend (TypeScript/Vue)

  • Use Composition API with <script setup>
  • Follow Vue 3 style guide
  • Use Prettier for formatting
bash
npm run pretty

Backend (Rust)

  • Follow Rust idioms
  • Use cargo fmt for formatting
  • Run cargo clippy for lints
bash
cargo fmt
cargo clippy

Testing

Frontend Tests

bash
# Coming soon
npm run test

Backend Tests

bash
cd src-tauri
cargo test

Contributing

Workflow

  1. Fork the repository
  2. Create a feature branch
    bash
    git checkout -b feature/amazing-feature
  3. Make your changes
  4. Run tests and linting
  5. Commit with descriptive message
    bash
    git commit -m 'Add amazing feature'
  6. Push to your fork
    bash
    git push origin feature/amazing-feature
  7. Open a Pull Request

Commit Messages

Follow conventional commits:

  • feat: New feature
  • fix: Bug fix
  • docs: Documentation
  • style: Formatting
  • refactor: Code refactoring
  • test: Tests
  • chore: Maintenance

Pull Request Guidelines

  1. Clear description of changes
  2. Link related issues
  3. Include screenshots for UI changes
  4. Update documentation if needed
  5. Ensure all checks pass

Debugging

Frontend

Use Vue DevTools browser extension for Vue debugging.

Backend

Enable debug logging:

bash
RUST_LOG=debug npm run tauri dev

Network

For SSH debugging, enable verbose SSH output in development builds.

Building for Release

All Platforms

bash
npm run tauri build

Specific Platform

bash
# Linux
npm run tauri build -- --target x86_64-unknown-linux-gnu

# Windows
npm run tauri build -- --target x86_64-pc-windows-msvc

# macOS (Intel)
npm run tauri build -- --target x86_64-apple-darwin

# macOS (Apple Silicon)
npm run tauri build -- --target aarch64-apple-darwin

Resources

Released under the MIT License.