
Security News
The Code You Didn't Write Is Still Yours to Defend
AI agents are pulling packages into environments no scanner is watching, creating exposure before security teams can see it.
@tact-lang/tact-language-server
Advanced tools
Developed by TON Studio, powered by the community.
Features • Installation • Community • Troubleshooting
This language server and an extension for VSCode-based editors provide support for the Tact programming language. Tact is a next-generation programming language for building secure, scalable, and maintainable smart contracts on TON blockchain.
In addition to Tact, the extension provides support for Fift assembly, TL-B, and TON Bag-of-Cells (BoC) files.
initOf and struct initializationThe easiest way to get started with Tact is to use VS Code or editors based on it:
The extension automatically detects your Tact compiler installation. If you need to work with multiple Tact versions or custom-builds, check out the toolchain management guide.

.vsix file from releases from
VS Code marketplace
or from Open VSX RegistryCtrl+Shift+P or Cmd+Shift+P).vsix fileInstall the language server via NPM:
npm install -g @tact-lang/tact-language-server
After installation, you can use tact-language-server executable to run the language server.
Configure your editor to use the language server (see editor-specific instructions below).
[!NOTE] If for some reason your editor rejects
tact-language-serverexecutable, runwhere tact-language-serverto find the path to the executable and then configure your editor to runnode <path-to-js-file>.
tact-language-server-*.tar.gz for Linux/macOStact-language-server-*.zip for WindowsIf you want to build the language server yourself:
git clone https://github.com/tact-lang/tact-language-server
cd tact-language-server
yarn install
yarn build
To obtain the .vsix package with the VS Code extension, additionally run:
yarn package
Then run either of those to install the extension from the .vsix package:
# VSCode, replace VERSION with the actual version from package.json
code --install-extension vscode-tact-VERSION.vsix
# VSCodium, replace VERSION with the actual version from package.json
codium --install-extension vscode-tact-VERSION.vsix
Install LSP package:
Ctrl+Shift+P or Cmd+Shift+P)For syntax highlighting, install the Tact package via Package Control
in a similar manner:
Ctrl+Shift+P or Cmd+Shift+P)Add the following configuration to your LSP settings (Preferences > Package Settings > LSP > Settings):
{
"clients": {
"tact": {
"enabled": true,
// If you installed the language server via NPM, use the following command:
"command": ["tact-language-server", "--stdio"],
// If you installed the language server manually, use the following command:
"command": ["node", "path/to/language-server/dist/server.js", "--stdio"],
"selector": "source.tact",
},
},
"inhibit_snippet_completions": true,
"semantic_highlighting": true,
}
Add the following setting to your settings to enable highlighting of Tact code blocks in hover documentation (
Preferences > Settings):
{
// ...
"mdpopups.sublime_user_lang_map": {
"tact": [["tact"], ["Tact/package/Tact"]],
},
}
Create a new file or open an existing file with the .tact extension to verify the setup
Prerequisites:
Setup steps:
Add tact.lua to your lua/lspconfig/server_configurations directory with the following content:
local util = require 'lspconfig.util'
return {
default_config = {
-- If you installed the language server via NPM, use the following command:
cmd = { 'tact-language-server', '--stdio' },
-- If you installed the language server manually, use the following command:
cmd = { 'node', '/absolute/path/to/language-server/dist/server.js', '--stdio' },
filetypes = { 'tact' },
root_dir = util.root_pattern('package.json', '.git'),
},
docs = {
description = [[
Tact Language Server
https://github.com/tact-lang/tact-language-server
]],
default_config = {
root_dir = [[root_pattern("package.json", ".git")]],
},
},
}
Add the following to your init.lua:
require'lspconfig'.tact.setup {}
Prerequisites:
Recommended, but not required:
Setup steps:
Install the tact.vim if it hasn't already been installed. Use a non-built-in plugin manager to simplify the update process.
Install the vim-lsp plugin if it isn't already installed. For that,
use vim-plug or the built-in package manager of Vim 8+, see
:help packages.
If it wasn't installed before, you should set up basic keybindings with the language client. Add the following to your
~/.vimrc (or ~/_vimrc if you're on Windows):
function! s:on_lsp_buffer_enabled() abort
setlocal omnifunc=lsp#complete
setlocal signcolumn=yes
if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
nmap <buffer> gd <plug>(lsp-definition)
nmap <buffer> gs <plug>(lsp-document-symbol-search)
nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
nmap <buffer> gr <plug>(lsp-references)
nmap <buffer> gi <plug>(lsp-implementation)
nmap <buffer> gt <plug>(lsp-type-definition)
nmap <buffer> <leader>rn <plug>(lsp-rename)
nmap <buffer> [g <plug>(lsp-previous-diagnostic)
nmap <buffer> ]g <plug>(lsp-next-diagnostic)
nmap <buffer> K <plug>(lsp-hover)
nnoremap <buffer> <expr><c-f> lsp#scroll(+4)
nnoremap <buffer> <expr><c-d> lsp#scroll(-4)
let g:lsp_format_sync_timeout = 1000
autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync')
" Refer to the doc to add more commands:
" https://github.com/prabirshrestha/vim-lsp#supported-commands
endfunction
augroup lsp_install
au!
" call s:on_lsp_buffer_enabled only for languages that have the server registered.
autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
augroup END
Add the following to your ~/.vimrc (or ~/_vimrc if you're on Windows):
if executable('node')
au User lsp_setup call lsp#register_server({
\ 'name': 'tact',
# If you installed the language server via NPM, use the following command:
\ 'cmd': {server_info->['tact-language-server', '--stdio']},
# If you installed the language server manually, use the following command:
\ 'cmd': {server_info->['node', '/absolute/path/to/language-server/dist/server.js', '--stdio']},
\ 'allowlist': ['tact'],
\ })
endif
Add the following configuration to your ~/.config/helix/languages.toml:
[[language]]
name = "tact"
language-servers = ["tact-language-server"]
[language-server.tact-language-server]
# If you installed the language server via NPM, use the following command:
command = "tact-language-server"
args = ["--stdio"]
# If you installed the language server manually, use the following command:
command = "node"
args = ["/absolute/path/to/language-server/dist/server.js", "--stdio"]
Replace path/to/language-server with the actual path where you cloned the repository
Restart Helix for changes to take effect
@tactlang on Telegram - Main community chat and discussion group.@tactlang_ru on Telegram (Russian)@tact_kitchen on Telegram - Channel with updates from the team.@tact_language on X/Twittertact-lang organization on GitHub@ton_studio on Telegram@thetonstudio on X/TwitterSee TROUBLESHOOTING.md.
MIT
FAQs
Language Server for Tact
The npm package @tact-lang/tact-language-server receives a total of 9 weekly downloads. As such, @tact-lang/tact-language-server popularity was classified as not popular.
We found that @tact-lang/tact-language-server demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
AI agents are pulling packages into environments no scanner is watching, creating exposure before security teams can see it.

Security News
GitHub Actions checkout now blocks risky pull_request_target checkouts by default to help prevent pwn request supply chain attacks.

Product
Socket now supports Custom Roles and Repository Access Permissions so organizations can control who can access specific repositories and actions.