<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Pinel Documentation — Pinel</title>
<meta name="description" content="Learn how to install, configure, and use Pinel.">
<link rel="stylesheet" href="/assets/css/style.css">
</head>
<body>
<nav class="navbar">
<a href="/" class="navbar-brand">Pinel</a>
<ul class="navbar-links">
<li><a href="/">Home</a></li>
<li><a href="/about/">About</a></li>
<li><a href="/docs/" class="active">Documentation</a></li>
</ul>
<div class="navbar-search" onclick="openSearch()">
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/></svg>
<input type="text" placeholder="Search..." readonly>
<kbd>⌘K</kbd>
</div>
</nav>
<main>
<div class="docs-wrapper">
<aside class="docs-sidebar" id="docsSidebar">
<nav class="sidebar-tree">
<ul>
<li><a class="sidebar-link sidebar-link-level-1" href="#1-introduction">1. Introduction</a></li>
<li><a class="sidebar-link sidebar-link-level-2" href="#1-1-what-is-pinel">1.1 What is Pinel?</a></li>
<li><a class="sidebar-link sidebar-link-level-2" href="#1-2-why-use-it-key-concepts">1.2 Why use it / key concepts</a></li>
<li><a class="sidebar-link sidebar-link-level-2" href="#1-3-architecture">1.3 Architecture</a></li>
<li><a class="sidebar-link sidebar-link-level-1" href="#2-getting-started">2. Getting Started</a></li>
<li><a class="sidebar-link sidebar-link-level-2" href="#2-1-macos">2.1 macOS</a></li>
<li><a class="sidebar-link sidebar-link-level-2" href="#2-2-windows">2.2 Windows</a></li>
<li><a class="sidebar-link sidebar-link-level-2" href="#2-3-linux">2.3 Linux</a></li>
<li><a class="sidebar-link sidebar-link-level-2" href="#2-4-package-managers">2.4 Package managers</a></li>
<li><a class="sidebar-link sidebar-link-level-2" href="#3-internal-api">3. Internal API</a></li>
<li><a class="sidebar-link sidebar-link-level-3" href="#3-1-supported-clients">3.1 Supported Clients</a></li>
<li><a class="sidebar-link sidebar-link-level-3" href="#pinel-theme-use-builtin-name">pinel.theme.use_builtin(name)</a></li>
<li><a class="sidebar-link sidebar-link-level-3" href="#pinel-theme-set-color-name-hex">pinel.theme.set_color(name, hex)</a></li>
<li><a class="sidebar-link sidebar-link-level-3" href="#pinel-ui-show-sidebar-visible">pinel.ui.show_sidebar(visible)</a></li>
<li><a class="sidebar-link sidebar-link-level-3" href="#pinel-ui-set-sidebar-width-width">pinel.ui.set_sidebar_width(width)</a></li>
<li><a class="sidebar-link sidebar-link-level-3" href="#extra-resources">Extra Resources</a></li>
<li><a class="sidebar-link sidebar-link-level-2" href="#4-basic-commands">4 Basic Commands</a></li>
<li><a class="sidebar-link sidebar-link-level-3" href="#4-1-opening">4.1 Opening</a></li>
</ul>
</nav>
</aside>
<article class="docs-content">
<h1>Pinel Documentation</h1>
<div class="docs-meta">Learn how to install, configure, and use Pinel.</div>
<h1 id="1-introduction">1. Introduction</h1>
<h2 id="1-1-what-is-pinel">1.1 What is Pinel?</h2>
<p>Pinel is a code-editor written using the Rust programming language as well as the popular <a href="https://iced.rs/">Iced Library</a> for GUI rendering.
Pinel aims to bridge some gaps between Visual Studio Code as well as editors like Neovim and Helix by being really fast and extremely customizable.</p>
<h2 id="1-2-why-use-it-key-concepts">1.2 Why use it / key concepts</h2>
<p>If you've ever found:</p>
<ul>
<li>VSCode (Visual Studio Code) too slow or too much of a gimmick</li>
<li>Neovim/Vim a bit too complicated (too high of a learning curve)</li>
</ul>
<p>And if you wanted an editor that just gets things done without throwing everything at you, Pinel might be a good choice. It is in no means a fully fledged editor that I recommend you switch over to, but it is in a decently okay state that you could use for testing and such.</p>
<p>Here are some of the features that are currently working in Pinel:</p>
<ul>
<li>Integrated terminal support<ul>
<li>If you use MacOS, your <code>zsh</code> terminal works perfectly fine in Pinel using the <code>iced-term</code> package for Rust</li>
<li>Not tested for Windows but will be tested and fixed in the next <code>@stable</code> release for Pinel. (keep an eye out on Crates and Github Releases)</li>
</ul>
</li>
<li>LSP (Language Server Protocol) support<ul>
<li>Out-of-the-box LSP support for Rust (rust-analzyer), Python (), Go, C/C++, and more!</li>
<li>Supports Autocomplete, and Hover Documentation</li>
<li>De-loads LSP for inactive files (especially useful for rust-analyzer due to memory intensity)</li>
</ul>
</li>
<li>Custom theming<ul>
<li>By using Lua you are able to theme your code-editor to your liking</li>
<li>Soon to have internal API that can be called using Lua for scripting</li>
</ul>
</li>
<li>Wakatime support<ul>
<li>Enjoy tracking time? Or part of Hack Club?</li>
<li>Set your own Wakatime URL and API key to send heartbeats to any server of your choice</li>
<li>Uses wakatime-cli</li>
</ul>
</li>
</ul>
<h2 id="1-3-architecture">1.3 Architecture</h2>
<p>Pinel uses <a href="https://iced.rs">Iced</a> for the GUI rendering due to its support for ligatures (allows uses to use nerd fonts), <a href="https://github.com/LuDog71FR/iced-code-editor">iced-code-editor</a> for core features such as LSP support and line numbers, <a href="https://github.com/Harzu/iced_term">iced-term</a> for integrated terminal support as well as many other packages and their functions mentioned under the <a href="https://github.com/kashsuks/Pinel/blob/master/CREDITS.md">CREDITS.md</a> file for Pinel. Go check them out!</p>
<h1 id="2-getting-started">2. Getting Started</h1>
<p>Pinel currently has active support for the following:</p>
<ul>
<li>Mac Silicon (M1, M2, M3, etc)</li>
<li>Arch Linux</li>
<li><a href="https://crates.io">Rust Package Manager Crates.io</a></li>
</ul>
<!-- - [Arch Linux User Repository](https://aur.archlinux.org/) -->
<p>There is planned support in the future for the following:</p>
<ul>
<li>Other Linux distros</li>
<li>Homebrew (MacOS)</li>
<li>Winget/Chocolatey</li>
</ul>
<h2 id="2-1-macos">2.1 macOS</h2>
<p>Lucky for you, I develop on MacOS therefore every version (Stable, Dev, Alpha, etc) is guaranteed to have every feature on MacOS. There have been plans to have the ability to use a .DMG file for users to easily install however that requires <code>Gatekeeper</code> access for Mac meaning I would need a developer account. </p>
<p>That aside, here is how you can install of MacOS.</p>
<p>You can use the following command and paste it in your terminal:</p>
<pre><code class="language-bash">curl -fsSL https://pinel.netlify.app/install.sh | sh
</code></pre>
<p>And the script will install the editor for usage!</p>
<p>You can also install via the <code>pinel-macos-x86_64</code> under the latest release which can be found <a href="https://github.com/kashsuks/Pinel/releases">here</a></p>
<p>Due to the extra security that MacOS has for unverified apps, you will need to grant the app some permissions (that Gatekeeper would otherwise give by default). Here are the steps to follow:</p>
<ul>
<li>Copy the path of your installation</li>
<li>Go to your terminal of choice and type in <code>chmod +x <the path to the install></code></li>
<li>Then run <code>./pinel-macos-x86_64</code></li>
</ul>
<p><em>Optional</em>: You can also add this new binary to your <code>$PATH</code> if you would like to just refer to the app as <code>Pinel</code></p>
<p><strong>For users looking for a Homebrew installation, hang tight it will be available soon</strong></p>
<h2 id="2-2-windows">2.2 Windows</h2>
<p>There is no windows installation currently due to cross-platform dependency issues. A solution will be found soon</p>
<p><strong>There is no active option for Winget or Chocolatey however they are in the works.</strong></p>
<h2 id="2-3-linux">2.3 Linux</h2>
<p>For Arch Linux users installation is simple.</p>
<p>On the most recent release, look for <code>pinel-linux-x86_64</code> and install it.</p>
<p>Once that is done, run <code>chmod +x <path of the install></code> and then run <code>./<path of the install></code>.
This will make the binary executable and then run it.</p>
<h2 id="2-4-package-managers">2.4 Package managers</h2>
<p>Pinel currently has support through the following package managers:</p>
<ul>
<li><a href="https://crates.io/crates/pinel">Crates.io</a></li>
</ul>
<pre><code class="language-bash">cargo install pinel
</code></pre>
<h2 id="3-internal-api">3. Internal API</h2>
<h3 id="3-1-supported-clients">3.1 Supported Clients</h3>
<p>The only supported client as of now would be using <code>lua</code> to invoke the API functions. Support for other languages such as <code>python</code> or <code>javascript</code> are plans for the future.</p>
<p><em>Note</em>: All configurations must be done through <code>pinel/init.lua</code> and the <code>pinel</code> folder being located in the dotfiles of your device</p>
<h3 id="pinel-theme-use-builtin-name">pinel.theme.use_builtin(name)</h3>
<p>This function allows you to use one of the builtin themes supported by pinel. They are:</p>
<ul>
<li>Nord</li>
<li>TokyoNight</li>
<li>...</li>
</ul>
<p>Example:</p>
<pre><code class="language-lua">pinel.theme.use_builtin("Nord")
</code></pre>
<p>Having this line of code in the <code>init.lua</code> file will make sure that the theme is <em>Nord</em> by default</p>
<h3 id="pinel-theme-set-color-name-hex">pinel.theme.set_color(name, hex)</h3>
<p>Allows you to override a named UI or editor colour slot with hex colour.</p>
<p>Params:</p>
<ul>
<li><code>name</code>: Name of the ui component</li>
<li><code>hex</code>: Hex value for the override</li>
</ul>
<p>Example:</p>
<pre><code class="language-lua">pinel.theme.set_color("bg_status_bar", "#101722")
pinel.theme.set_color("editor.current_line_highlight", "#7aa2f733")
</code></pre>
<p>All of the options for <code>name</code> are listed <a href="https://github.com/kashsuks/Pinel/blob/master/examples/init.lua">here</a></p>
<h3 id="pinel-ui-show-sidebar-visible">pinel.ui.show_sidebar(visible)</h3>
<p>Boolean that enables or disables the sidebar on startup</p>
<p>Example:</p>
<pre><code class="language-lua">pinel.ui.show_sidebar(false)
</code></pre>
<p>It can also be set to <code>true</code></p>
<h3 id="pinel-ui-set-sidebar-width-width">pinel.ui.set_sidebar_width(width)</h3>
<p>Sets the sidebar width in pixels on startup. Width is clamped to the editors allowed range.</p>
<p><strong>Allowed range is 20px - 120px</strong></p>
<p>Example</p>
<pre><code class="language-lua">pinel.ui.set_sidebar_width(100.0)
</code></pre>
<p><em>TODO</em>: Not allow the user to exceed these bounds/have a reminder that they cannot</p>
<h3 id="extra-resources">Extra Resources</h3>
<p>A full example file is located <a href="https://github.com/kashsuks/Pinel/blob/master/examples/init.lua">here</a> that you may refer to.</p>
<h2 id="4-basic-commands">4 Basic Commands</h2>
<p>In there future, the scripting API written for Lua will support custom keybinds and macros as well as a UI system for bindings.</p>
<h3 id="4-1-opening">4.1 Opening</h3>
<p>You can either open a file or a whole folder. These are the commands.</p>
<ul>
<li><code>Command/Control + O</code>: Opening a specific file</li>
<li><code>Command/Control + Shift + O</code>: Opening a folder</li>
</ul>
<p>The command palette is useful since it allows you to control almost everything by just typing it in. Here is how to access it.</p>
<ul>
<li><code>Command/Control + Shift + P</code>: Opens the command palette</li>
</ul>
</article>
</div>
<button class="sidebar-toggle" onclick="document.getElementById('docsSidebar').classList.toggle('open')">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M3 12h18M3 6h18M3 18h18"/></svg>
</button>
</main>
<footer class="footer">
<p>© 2026 Pinel.</p>
</footer>
<div class="search-overlay" id="searchOverlay">
<div class="search-modal">
<div class="search-input-wrapper">
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="11" cy="11" r="8"/><path d="M21 21l-4.35-4.35"/></svg>
<input type="text" id="searchInput" placeholder="Search documentation..." autofocus>
<kbd>esc</kbd>
</div>
<div class="search-results" id="searchResults">
<div class="search-empty">Start typing to search...</div>
</div>
</div>
</div>
<script>
(function() {
var searchData = [];
searchData.push({"title":"Pinel Documentation","url":"/docs/","content":"1. Introduction\n\n 1.1 What is Pinel?\n\nPinel is a codeeditor written using the Rust programming language as well as the popular Iced Libraryhttps://iced.rs/ for GUI rendering.\nPinel aims to bridge some gaps between Visual Studio Code as well as editors like Neovim and Helix by being really fast and extremely customizable.\n\n 1.2 Why use it / key concepts\n\nIf you've ever found:\n VSCode Visual Studio Code too slow or too much of a gimmick\n Neovim/Vim a bit too complicated too high of a learning curve\n\nAnd if you wanted an editor that just gets things done without throwing everything at you, Pinel might be a good choice. It is in no means a fully fledged editor that I recommend you switch over to, but it is in a decently okay state that you could use for testing and such.\n\nHere are some of the features that are currently working in Pinel:\n Integrated terminal support\n If you use MacOS, your zsh terminal works perfectly fine in Pinel using the icedterm package for Rust\n Not tested for Windows but will be tested and fixed in the next @stable release for Pinel. keep an eye out on Crates and Github Releases\n LSP Language Server Protocol support\n Outofthebox LSP support for Rust rustanalzyer, Python , Go, C/C++, and more!\n Supports Autocomplete, and Hover Documentation\n Deloads LSP for inactive files especially useful for rustanalyzer due to memory intensity\n Custom theming\n By using Lua you are able to theme your codeeditor to your liking\n Soon to have internal API that can be called using Lua for scripting\n Wakatime support\n Enjoy tracking time? Or part of Hack Club?\n Set your own Wakatime URL and API key to send heartbeats to any server of your choice\n Uses wakatimecli\n\n 1.3 Architecture\n\nPinel uses Icedhttps://iced.rs for the GUI rendering due to its support for ligatures allows uses to use nerd fonts, icedcodeeditorhttps://github.com/LuDog71FR/icedcodeeditor for core features such as LSP support and line numbers, icedtermhttps://github.com/Harzu/iced_term for integrated terminal support as well as many other packages and their functions mentioned under the CREDITS.mdhttps://github.com/kashsuks/Pinel/blob/master/CREDITS.md file for Pinel. Go check them out!\n\n 2. Getting Started\n\nPinel currently has active support for the following:\n Mac Silicon M1, M2, M3, etc\n Arch Linux\n Rust Package Manager Crates.iohttps://crates.io\n<! Arch Linux User Repositoryhttps://aur.archlinux.org/ \n\nThere is planned support in the future for the following:\n Other Linux distros\n Homebrew MacOS\n Winget/Chocolatey\n\n 2.1 macOS\n\nLucky for you, I develop on MacOS therefore every version Stable, Dev, Alpha, etc is guaranteed to have every feature on MacOS. There have been plans to have the ability to use a .DMG file for users to easily install however that requires Gatekeeper access for Mac meaning I would need a developer account. \n\nThat aside, here is how you can install of MacOS.\n\nYou can use the following command and paste it in your terminal:\ncurl fsSL https://pinel.netlify.app/install.sh | sh\n\nAnd the script will install the editor for usage!\n\nYou can also install via the pinelmacosx86_64 under the latest release which can be found herehttps://github.com/kashsuks/Pinel/releases\n\nDue to the extra security that MacOS has for unverified apps, you will need to grant the app some permissions that Gatekeeper would otherwise give by default. Here are the steps to follow:\n Copy the path of your installation\n Go to your terminal of choice and type in chmod +x <the path to the install\n Then run ./pinelmacosx86_64\n\nOptional: You can also add this new binary to your $PATH if you would like to just refer to the app as Pinel\n\nFor users looking for a Homebrew installation, hang tight it will be available soon\n\n 2.2 Windows\n\nThere is no windows installation currently due to crossplatform dependency issues. A solution will be found soon\n\nThere is no active option for Winget or Chocolatey however they are in the works.\n\n 2.3 Linux\n\nFor Arch Linux users installation is simple.\n\nOn the most recent release, look for pinellinuxx86_64 and install it.\n\nOnce that is done, run chmod +x <path of the install and then run ./<path of the install.\nThis will make the binary executable and then run it.\n\n 2.4 Package managers\n\nPinel currently has support through the following package managers:\n\n Crates.iohttps://crates.io/crates/pinel\ncargo install pinel\n\n\n 3. Internal API\n\n 3.1 Supported Clients\n\nThe only supported client as of now would be using lua to invoke the API functions. Support for other languages such as python or javascript are plans for the future.\n\nNote: All configurations must be done through pinel/init.lua and the pinel folder being located in the dotfiles of your device\n\n pinel.theme.use_builtinname\n\nThis function allows you to use one of the builtin themes supported by pinel. They are:\n Nord\n TokyoNight\n ...\n\nExample:\npinel.theme.use_builtin\"Nord\"\n\nHaving this line of code in the init.lua file will make sure that the theme is Nord by default\n\n pinel.theme.set_colorname, hex\n\nAllows you to override a named UI or editor colour slot with hex colour.\n\nParams:\n name: Name of the ui component\n hex: Hex value for the override\n\nExample:\npinel.theme.set_color\"bg_status_bar\", \"101722\"\npinel.theme.set_color\"editor.current_line_highlight\", \"7aa2f733\"\n\n\nAll of the options for name are listed herehttps://github.com/kashsuks/Pinel/blob/master/examples/init.lua\n\n pinel.ui.show_sidebarvisible\n\nBoolean that enables or disables the sidebar on startup\n\nExample:\npinel.ui.show_sidebarfalse\n\nIt can also be set to true\n\n pinel.ui.set_sidebar_widthwidth\n\nSets the sidebar width in pixels on startup. Width is clamped to the editors allowed range.\n\nAllowed range is 20px 120px\n\nExample\npinel.ui.set_sidebar_width100.0\n\n\nTODO: Not allow the user to exceed these bounds/have a reminder that they cannot\n\n Extra Resources\n\nA full example file is located herehttps://github.com/kashsuks/Pinel/blob/master/examples/init.lua that you may refer to.\n\n 4 Basic Commands\n\nIn there future, the scripting API written for Lua will support custom keybinds and macros as well as a UI system for bindings.\n\n 4.1 Opening\n\nYou can either open a file or a whole folder. These are the commands.\n\n Command/Control + O: Opening a specific file\n Command/Control + Shift + O: Opening a folder\n\nThe command palette is useful since it allows you to control almost everything by just typing it in. Here is how to access it.\n\n Command/Control + Shift + P: Opens the command palette","category":"Docs"});
var overlay = document.getElementById('searchOverlay');
var input = document.getElementById('searchInput');
var results = document.getElementById('searchResults');
window.openSearch = function() {
overlay.classList.add('active');
setTimeout(function() { input.focus(); }, 100);
};
window.closeSearch = function() {
overlay.classList.remove('active');
input.value = '';
results.innerHTML = '<div class="search-empty">Start typing to search...</div>';
};
overlay.addEventListener('click', function(e) {
if (e.target === overlay) closeSearch();
});
document.addEventListener('keydown', function(e) {
if ((e.metaKey || e.ctrlKey) && e.key === 'k') {
e.preventDefault();
if (overlay.classList.contains('active')) {
closeSearch();
} else {
openSearch();
}
}
if (e.key === 'Escape') closeSearch();
});
input.addEventListener('input', function() {
var query = this.value.toLowerCase().trim();
if (!query) {
results.innerHTML = '<div class="search-empty">Start typing to search...</div>';
return;
}
var matches = searchData.filter(function(item) {
return item.title.toLowerCase().indexOf(query) !== -1 ||
item.content.toLowerCase().indexOf(query) !== -1;
});
if (matches.length === 0) {
results.innerHTML = '<div class="search-empty">No results found for "' + query.replace(/[<>&"]/g, '') + '"</div>';
return;
}
results.innerHTML = matches.map(function(item) {
var idx = item.content.toLowerCase().indexOf(query);
var preview = '';
if (idx !== -1) {
var start = Math.max(0, idx - 40);
var end = Math.min(item.content.length, idx + query.length + 60);
preview = (start > 0 ? '...' : '') + item.content.substring(start, end) + (end < item.content.length ? '...' : '');
}
return '<a class="search-result-item" href="' + item.url + '">' +
'<div class="result-title">' + item.title + '</div>' +
(preview ? '<div class="result-preview">' + preview + '</div>' : '') +
'</a>';
}).join('');
});
})();
</script>
</body>
</html>