Skip to content
/
Try

Packages: add languages, language servers, themes and fonts

A package adds a language, a language server, a theme, a font or a Lua script. Ten languages are built in; everything else is one command away.

Terminal window
skink --install kotlin

When you open a file Skink has no grammar for, a toast says which package to get: No grammar for .kt: :install kotlin.

Browse them all on the package list.

Inside Skink From a shell Does
:install NAME skink --install NAME Install a verified package by its short name
:install . skink --install . Install what this project needs (asks first; -y says yes)
:uninstall NAME skink --uninstall NAME Remove the package and everything it placed
:packages skink --list Show what is installed
skink --search TEXT Search the package index
skink --update-packages Update every installed package
:packages disable NAME Turn a package off without removing it (enable turns it back on)

Short names only install verified packages. Anything else installs from where it lives:

Terminal window
skink --install owner/repo # the repo's latest GitHub release
skink --install owner/repo/pkg@v1.2 # one package of a repo, at a tag
skink --install ./my-package # a folder with a skink-package.toml

skink --install . looks at the project and offers the packages that match its files, with the reason (“3 files (.kt, .kts)”). It respects .gitignore and stops after 20,000 files.

To pin the list instead, add .skink/packages.json to the project:

{ "packages": ["kotlin", "font-pack"] }
Part When it applies
Grammar (syntax colours) At once. Loaded the first time a file needs it
Language server and tools Next start. Downloaded for your platform and checked against a pinned SHA-256
Theme At once. Pick it with :theme
Font Copied to your user font folder; choose it in your terminal’s settings
Lua script Next start, after you trust it (asked once per version)

Downloaded tools are on the PATH of language servers and terminal tabs only, never your own shell.

Every install says what it added and what to do next, for example Adds colours for .kt .kts · kotlin language server (next start). The notes stay in :messages. An install that can’t place everything fails and keeps the old version: a font pack whose download lacks one of its font files installs nothing.

Skink draws text with your terminal’s font, so a font package only copies the files. Pick the font in your terminal’s settings, then restart the terminal. On Windows, open each font in the folder Skink names and choose Install.

:reload reloads installed packages along with your settings and key bindings.

Built in: Rust, TypeScript and TSX, JavaScript, Python, Go, JSON, TOML, Bash, Markdown and YAML.

As packages: Zig, Dart, HTML, CSS, Lua, Make, INI, diff and XML/SVG, plus kits for Kotlin, Java, C and C++, C#, Ruby, PHP, Swift, Elixir, Haskell, Scala, Nix, Svelte and SQL, four themes and a Nerd Font pack.

A package grammar uses memory only while a file of that language is open: 6 to 12 MB for a small one like CSS or Java, about 30 MB for Kotlin and about 50 MB for Swift. The built-in languages cost nothing extra.

To build every grammar into the binary instead:

Terminal window
cargo install --git https://github.com/xuckless/skink skink --features all-langs
What Linux, macOS Windows
Packages ~/.local/share/skink/packages %LOCALAPPDATA%\skink\data\packages
Downloaded tools ~/.local/share/skink/tools %LOCALAPPDATA%\skink\data\tools
Fonts ~/.local/share/fonts (Linux), ~/Library/Fonts (macOS) %LOCALAPPDATA%\Microsoft\Windows\Fonts

$SKINK_DATA_DIR moves the data folder ($XDG_DATA_HOME/skink is used when set). On Windows, Skink copies fonts to that folder and tells you to install them from there. SKINK_INDEX_URL points search and short names at another index.

Next: write your own package.