Nicholas W. Kuhar

Software should serve the people who use it. As more of it is built to extract rather than contribute

I build open-source software worth depending on.

Projects

  • Marshal

    Manage your MCP servers in one native desktop app, with proxy support through OpenAI MCP Tunnel and ngrok.

    Rust · GTK

  • Viewfinder

    An unofficial Instagram desktop client with support for messaging, Reels, and more.

    Rust · GTK

  • Untrack Core / Web

    Strip tracking parameters from URLs using uBlock Origin and AdGuard filter rules.

    Rust · Svelte · Typescript

  • GConvert

    Convert media files directly from Nautilus using FFmpeg.

    Python · Bash

  • Compat

    Search Steam games and check ProtonDB compatibility from a native Linux desktop app.

    Python · GTK

GitHubTwitterEmail

01 / 05

Marshal

Manage your MCP servers in one native desktop app, with proxy support through OpenAI MCP Tunnel and ngrok.

  • Rust
  • GTK
GitHub

About the project

Marshal is a native Linux application for managing Model Context Protocol servers from one place.

MCP servers are easy to create, but managing several of them quickly becomes messy. Each server can have its own command, arguments, environment variables, working directory, transport, and networking requirements. Marshal gives those servers a persistent home where they can be configured, started, stopped, and monitored without relying on scattered terminal sessions or configuration files.

It also supports exposing local MCP servers through OpenAI MCP Tunnel and ngrok. This is useful when a server depends on local files, development tools, databases, or hardware, but still needs to be reachable from a remote AI client. Instead of deploying the server somewhere public or manually setting up networking, Marshal can manage the tunnel alongside the server itself.

The goal is to provide the operational layer around MCP: configure a server once, understand its state at a glance, and make it reachable wherever it needs to be.

Next projectViewfinder

02 / 05

Viewfinder

An unofficial Instagram desktop client with support for messaging, Reels, and more.

  • Rust
  • GTK
GitHub

About the project

Viewfinder is an unofficial native Instagram client for Linux.

Instagram has no first-party Linux application, and most desktop alternatives are effectively web wrappers. Viewfinder instead implements its own interface around Instagram's services, with support for features such as messaging, Reels, Stories, profiles, Explore, and media browsing.

Building a separate client allows the experience to be designed specifically for desktop use rather than inheriting a mobile-oriented web layout. Navigation, media playback, notifications, keyboard interaction, and window behavior can all integrate more naturally with the Linux desktop.

The project also involves handling Instagram's web-facing APIs and translating their responses into application models that a native GTK interface can use. That makes Viewfinder both a desktop UI project and an exercise in building a maintainable client around an unofficial remote API.

Next projectUntrack Core / Web

03 / 05

Untrack Core / Web

Strip tracking parameters from URLs using uBlock Origin and AdGuard filter rules.

  • Rust
  • Svelte
  • Typescript
Preview GitHub

About the project

Untrack is a Rust library and CLI for removing tracking parameters from URLs using the same $removeparam rules used by uBlock Origin and AdGuard filter lists.

Most URL cleaners rely on a hardcoded list of parameter names such as utm_source or fbclid. Untrack instead implements the filtering semantics used by maintained privacy lists, including domain restrictions, exceptions, regular expressions, important, badfilter, and conditional list directives. This allows it to stay useful as tracking patterns change without requiring those rules to be embedded directly into the application.

The engine is deliberately conservative when modifying URLs. Parameters that are kept remain byte-for-byte identical to the input, preserving their original encoding, order, casing, and fragment rather than parsing and reconstructing the entire query string. Each removal also records the rule responsible for it, making the result inspectable rather than treating URL cleaning as a black box.

The project is split into separate crates for the core engine, filter-list retrieval and caching, and the CLI. The engine itself performs no I/O, allowing it to be embedded into other Rust applications, while untrack-lists handles remote filter lists, includes, caching, and updates independently.

Next projectGConvert

04 / 05

GConvert

Convert media files directly from Nautilus using FFmpeg.

  • Python
  • Bash
GitHub

About the project

GConvert is a lightweight Nautilus integration for converting media files with FFmpeg.

FFmpeg is extremely capable, but using it for simple conversions usually means opening a terminal or launching a separate graphical application. GConvert moves that workflow directly into the file manager, where the file already is.

The idea is to treat common conversions like any other file operation. Select a media file in Nautilus, choose a conversion, and let FFmpeg handle the actual encoding. GConvert manages the interaction around it: choosing valid conversions, constructing the command, creating the output file, and reporting the result.

It deliberately avoids becoming a full FFmpeg frontend. For detailed encoding work, dedicated applications already exist. GConvert is meant for the smaller cases where opening one would be unnecessary.

Next projectCompat

05 / 05

Compat

Search Steam games and check ProtonDB compatibility from a native Linux desktop app.

  • Python
  • GTK
GitHub

About the project

Compat is a native Linux application for searching Steam games and checking their ProtonDB compatibility.

Proton has made Windows gaming on Linux significantly easier, but compatibility still varies between games. A title may work perfectly, require a specific Proton version, need launch arguments, or have issues related to anti-cheat, graphics drivers, or particular hardware.

ProtonDB contains much of that information, but checking it usually means leaving Steam, opening a browser, and searching for the game separately. Compat turns that repeated lookup into a focused desktop workflow: search for a Steam title and quickly view the compatibility information associated with it.

It is intentionally not a launcher or Proton configuration tool. Its purpose is narrower: make it faster to answer the question of how well a game is expected to work on Linux before installing or troubleshooting it.

Next projectMarshal