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.
skink --install kotlinWhen 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.
Commands
Section titled “Commands”| 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:
skink --install owner/repo # the repo's latest GitHub releaseskink --install owner/repo/pkg@v1.2 # one package of a repo, at a tagskink --install ./my-package # a folder with a skink-package.tomlWhat a project needs
Section titled “What a project needs”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"] }What a package can hold
Section titled “What a package can hold”| 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, and packages
Section titled “Built in, and packages”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:
cargo install --git https://github.com/xuckless/skink skink --features all-langsWhere files go
Section titled “Where files go”| 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.