Skip to content

Commit e49ee25

Browse files
committed
docs: publish blog entry about language server.
1 parent e5328f7 commit e49ee25

3 files changed

Lines changed: 85 additions & 0 deletions

File tree

836 KB
Loading
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
---
2+
title: "Introducing the YARA language server"
3+
description: "Introducing an official Language Server for YARA, implemented on top of YARA-X"
4+
summary: ""
5+
date: 2026-02-03T00:00:00+01:00
6+
lastmod: 2026-02-03T00:00:00+01:00
7+
draft: false
8+
weight: 50
9+
categories: [ ]
10+
tags: [ ]
11+
contributors: [ "Victor M. Alvarez" ]
12+
pinned: false
13+
homepage: false
14+
seo:
15+
title: "" # custom title (optional)
16+
description: "" # custom description (recommended)
17+
canonical: "" # custom canonical URL (optional)
18+
noindex: false # false (default) or true
19+
---
20+
From the very beginning of the YARA-X project, our goal was not only to modernize the YARA engine itself but also to
21+
revolutionize the entire experience of writing YARA rules. We knew that performance and expressiveness were critical,
22+
but we also recognized that the day-to-day workflow of security researchers and developers needed a significant
23+
upgrade. Today, we are thrilled to announce a major step towards that vision: the official YARA-X Language Server.
24+
25+
### What is a Language Server?
26+
27+
For those unfamiliar with the term, a Language Server is a dedicated background process that acts as a "brain" for
28+
a specific language. Your favorite code editor (like VS Code, Sublime Text, or Vim) communicates with this server
29+
to provide intelligent, context-aware features. This approach, based on the Language Server Protocol (LSP), means
30+
that we can build a single, powerful engine for YARA-X and have it work across a wide range of editors without
31+
having to write a new extension from scratch for each one.
32+
33+
### A Smarter Way to Write YARA Rules
34+
35+
So, what does the YARA-X Language Server mean for you? Here are some of the key features available today:
36+
37+
* **Real-time Diagnostics:** Say goodbye to the slow feedback loop of writing a rule, saving it, and running
38+
it through a compiler only to find a simple syntax error. The language server analyzes your code as you type,
39+
highlighting mistakes and providing descriptive errors on the fly.
40+
41+
* **Advanced Autocompletion:** The server provides intelligent suggestions for module identifiers
42+
(e.g., `pe.`, `cuckoo.`), keywords, and more. This not only speeds up your writing but also helps you discover
43+
the rich features available in YARA-X without constantly referencing documentation.
44+
45+
* **Go to Definition:** Working with large, complex rule sets that span multiple files? You can now instantly jump
46+
to the definition of a rule or pattern, making it easier to navigate and understand your rules.
47+
48+
* **Automatic Formatting:** Keep your YARA rules consistent and clean with automatic code formatting. The language
49+
server can automatically format your code according to best practices, saving you time and ensuring readability.
50+
51+
![demo.gif](demo.gif)
52+
53+
### Get Started Today
54+
55+
The YARA-X Language Server is now available for Visual Studio Code. It's currently in beta, but you can install
56+
it from the [Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=virustotal.yara-x-ls) and
57+
start using it already.
58+
59+
This is just the beginning. We plan to continue enhancing the language server with more powerful features, and we
60+
encourage the community to integrate it with other editors.
61+
62+
We are incredibly excited to get this into your hands. Try it out, and let us know what you think by opening an
63+
issue on our [GitHub repository](https://github.com/VirusTotal/yara-x). Happy hunting!

site/hugo_stats.json

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,8 +338,11 @@
338338
"TableOfContents",
339339
"__init__relaxed_re_syntaxfalse",
340340
"a-quick-refresher-what-are-atoms",
341+
"a-smarter-way-to-write-yara-rules",
341342
"a-smarter-yara-x-for-everyone",
342343
"absint",
344+
"accessflag",
345+
"accessflagspecial",
343346
"add_include_dirpath",
344347
"add_sourcestring-originnone",
345348
"aligning-metadata-and-patterns",
@@ -364,15 +367,20 @@
364367
"calculate_checksum",
365368
"certificate",
366369
"characteristics",
370+
"checksum",
367371
"checksum32offset-size",
368372
"checksum32string",
369373
"choosing-the-number-of-spaces-for-indentation",
370374
"class",
375+
"classitem",
371376
"comments",
372377
"compile",
373378
"compileerror",
374379
"compiler",
375380
"conclusion",
381+
"contains_class",
382+
"contains_method",
383+
"contains_string",
376384
"converting-ndjson-to-standard-json",
377385
"countbyte-offset-size",
378386
"countersignature",
@@ -392,9 +400,11 @@
392400
"crc32string",
393401
"data-consistency-in-overlapping-blocks",
394402
"define_globalidentifier-value",
403+
"deserialize_fromfile",
395404
"deviationoffset-size-mean",
396405
"deviationstring-mean",
397406
"device_type",
407+
"dexheader",
398408
"differences-in-base64-patterns",
399409
"directoryentry",
400410
"direntry",
@@ -451,6 +461,7 @@
451461
"fat_header",
452462
"fatarch",
453463
"fewer-timeouts",
464+
"fielditem",
454465
"file",
455466
"file-size",
456467
"file_flag",
@@ -466,6 +477,7 @@
466477
"function",
467478
"functions",
468479
"further-reading",
480+
"get-started-today",
469481
"getting-started-with-the-configuration-file",
470482
"global-rules",
471483
"go-api",
@@ -529,6 +541,8 @@
529541
"logmessage-string",
530542
"logstring",
531543
"machine",
544+
"mapitem",
545+
"maplist",
532546
"mask_64bit",
533547
"match",
534548
"match-lengths",
@@ -542,6 +556,7 @@
542556
"metadata",
543557
"metadata-validation",
544558
"method",
559+
"methoditem",
545560
"minint-int",
546561
"minversion",
547562
"modeoffset-size",
@@ -577,7 +592,9 @@
577592
"pattern",
578593
"patterns",
579594
"percentagebyte-offset-size",
595+
"permhash",
580596
"private-rules",
597+
"protoitem",
581598
"query",
582599
"reading-data-at-a-given-offset",
583600
"referencing-other-rules",
@@ -618,6 +635,7 @@
618635
"segmenttype",
619636
"serial_correlationoffset-size",
620637
"serial_correlationstring",
638+
"serialize_intofile",
621639
"set_globalidentifier-value",
622640
"set_timeoutseconds",
623641
"sets-of-patterns",
@@ -660,13 +678,15 @@
660678
"toc",
661679
"trackerdata",
662680
"type",
681+
"typecode",
663682
"usage",
664683
"using-xor-and-fullword-together",
665684
"version",
666685
"versioninfoentry",
667686
"warnings",
668687
"what-are-unsatisfiable-expressions",
669688
"what-changes-for-our-users",
689+
"what-is-a-language-server",
670690
"whats-next",
671691
"whats-the-current-state-of-yara-x",
672692
"when-smarter-backfires",
@@ -691,6 +711,7 @@
691711
"yrx_compiler_ignore_module",
692712
"yrx_compiler_new_namespace",
693713
"yrx_compiler_warnings_json",
714+
"yrx_console_callback",
694715
"yrx_finalize",
695716
"yrx_import_callback",
696717
"yrx_last_error",
@@ -727,6 +748,7 @@
727748
"yrx_scanner_destroy",
728749
"yrx_scanner_finish",
729750
"yrx_scanner_iter_slowest_rules",
751+
"yrx_scanner_on_console_log",
730752
"yrx_scanner_on_matching_rule",
731753
"yrx_scanner_scan",
732754
"yrx_scanner_scan_block",

0 commit comments

Comments
 (0)