darklang/dark
47.0
Weak · 5 August 2026
56k
lines of production code
F#
with TypeScript
4
measurements over time
What this system is
Darklang is a full-stack development platform that provides a custom language, a modular backend runtime, and a comprehensive CLI and IDE tooling. The system enables users to write and execute scripts, manage packages and source control, and interact with external services like HTTP, databases, and AI models. It features a structured capability model for security, a new recursive-descent parser, and extensive tooling including an LSP server and VS Code extension.
How it got here
2016–2023 — Language server and CLI infrastructure
40 changes.
This period focused on establishing the foundational infrastructure for the Darklang CLI and VS Code extension. The backend was upgraded to .NET 10 and restructured into modular components, while a new hand-written parser and capability system improved code quality and security. Significant effort was also dedicated to implementing the Language Server Protocol (LSP) to enable robust editor integration and tooling.
2024–2025 — CLI and VS Code extension expansion
34 changes.
This period focused on significantly expanding the Darklang CLI with new commands for package management, script execution, and authentication, alongside a major overhaul of the VS Code extension with virtual document providers and tree views. The backend was refactored to support these features, including a new database layer and configuration system, while comprehensive test coverage was added for language execution and parsing.
2026 — CLI and LLM agent expansion
49 changes.
This period focused on expanding the Darklang CLI with a comprehensive suite of interactive terminal UI components, source control management tools, and an integrated LLM agent framework. The backend saw significant architectural shifts, including the introduction of binary serialization, the consolidation of built-in functions, and the addition of HTTP server capabilities. Additionally, the platform introduced AI agent capabilities and enhanced package management features.
Features
Add Anthropic Claude API bindings and integration tests
Introduces a new set of Darklang modules for interacting with the Anthropic Claude API, including model definitions, chat request/response types, content blocks, tool definitions, and batch processing endpoints. The addition includes integration tests that verify direct API calls, token counting, JSON schema structured output, and batch result parsing against the live Anthropic API.
packages/darklang/wip/ai/anthropic · high confidence
Add Branch Manager panel for managing Git branches
A new Branch Manager panel has been added to the VS Code extension, providing a user interface for managing Git branches. Users can now switch, create, delete, and rename branches, as well as perform rebase and merge operations directly from the extension's UI. The panel communicates with the language client to execute these version control actions and displays status messages for success or failure.
vscode-extension/client/src/panels/branchManager · high confidence
Add HTTP serve command with configurable port and body size limits
Introduces a new \serve\ command in the Darklang CLI that starts an HTTP server backed by a specified router. Users can now configure the listening port (default 8080) and the maximum request body size (default 30 MB) via command-line flags (\--port\ and \--max-body-bytes\). The command parses these arguments, validates them, and executes the server using the standard library's HTTP server utilities.
packages/darklang/cli/http · high confidence
Add HTTP server builtin for handling HTTP requests and responses
The HTTP server functionality is now exposed as a builtin, allowing users to handle incoming HTTP requests and construct HTTP responses. The implementation includes parsing request headers and bodies, and constructing responses with status codes, headers, and bodies. A key behavioral change is that the HTTP status code is now validated to ensure it fits within the 32-bit integer range; if an out-of-range value is provided, the server returns a 500 error instead of throwing a host exception. The HTTP server module is also reorganized into a new directory structure under \backend/src/Builtins/Builtins.Http.Server\.
backend/src/Builtins/Builtins.Http.Server · high confidence
Add LLM agent usage examples
Added a new set of example scripts in the LLM package that demonstrate various agent configurations and capabilities, including basic text queries, code assistance with file tools, concept explanation with extended thinking, git commit message generation, image description, JSON data extraction, multi-model comparison, news digesting, translation, deep research, and web page summarization.
packages/darklang/llm/examples · high confidence
Add LLM provider abstraction with Anthropic, OpenAI, and Ollama support
The LLM module now includes a provider abstraction with implementations for Anthropic, OpenAI, and Ollama. The OpenAI provider supports Azure and custom endpoints, while the Ollama provider defaults to localhost:11434. The Anthropic provider handles Claude API formatting. All providers use Int for token limits and context sizes, and the OpenAI provider supports image URLs and base64-encoded images.
packages/darklang/llm/providers · high confidence
Add LSP lifecycle message definitions
The Language Server Protocol lifecycle is now supported with new files defining the structure for the initialize, initialized, shutdown, and exit messages. This enables the server to properly handle the initial handshake, confirm readiness, and gracefully shut down connections with clients.
packages/darklang/languageServerProtocol/lifecycle · high confidence
Add LSP window notifications and requests
The language server now implements several LSP window notifications and requests, enabling richer client-server communication. Specifically, the server can now log messages (window/logMessage), display user-facing messages with action items (window/showMessage and window/showMessageRequest), request to show documents in the client (window/showDocument), and send telemetry events (telemetry/event). These additions support improved logging, user interaction, and diagnostics within the editor.
packages/darklang/languageServerProtocol/window · high confidence
Add VS Code Tree View API bindings
The VS Code extension now includes new Darklang modules for the VS Code API, specifically defining types for TreeItem, TreeItemLabel, TreeItemCollapsibleState, and related structures. These modules provide serialization to JSON, enabling the extension to construct tree view items with properties like labels, collapsible states, commands, and accessibility information for the VS Code UI.
packages/darklang/vscode · high confidence
Add basic language execution tests for variables, logic, and strings
Added new test files in the backend test suite to verify the execution of basic language features. The changes include \evariable.dark\ for variable scoping and shadowing, \eand.dark\ and \eor.dark\ for logical AND/OR operators with type checking, \estring.dark\ for string interpolation and escape handling, and \dfloat.dark\ for float arithmetic. These tests confirm that the parser and runtime correctly handle variable binding, boolean logic errors, and string formatting.
backend/testfiles/execution/language/basic · high confidence
Add eval and run-script commands to the CLI
The CLI now includes an \eval\ command for evaluating Dark expressions (including reading from stdin) and a \run-script\ command for executing Dark script files. Both commands support the \--allow-harmful\ flag to bypass deprecation halts, and the \run-script\ command additionally supports a \--sandbox\ flag to run scripts with no capabilities. Error handling for both commands has been updated to use the new \ExecutionError\ type for structured error reporting.
packages/darklang/cli/execution · high confidence
Add file system tools for LLM agents
Introduces a new file-system module for LLM agents, providing read, write, list, and search capabilities. The implementation enforces path safety by preventing directory traversal and absolute paths, and includes a file search feature that scans files for text patterns with configurable result limits.
packages/darklang/llm/tools · high confidence
Add interactive CLI views for browsing and previewing terminal dashboards
Users can now run \views\ in the CLI to open an interactive browser for navigating and previewing available terminal dashboards. The \views\ command supports three modes: \views\ opens the interactive browser, \views list\ prints a list of available views, and \views \<name\>\ renders a specific view directly. The \views\ app includes demo data for 'AI Chats' and 'Package Stats' dashboards, each with colorized output, status badges, and keyboard navigation hints.
packages/darklang/cli/apps/views · high confidence
Add interactive outliner CLI application
The CLI now includes a new \outliner\ command that provides an interactive, tree-based editor for managing documents. Users can create, rename, and delete documents, as well as edit outline nodes with features like indenting, outdenting, moving, and collapsing tree branches. The tool supports importing and exporting documents in Markdown and OPML formats, and persists state to disk.
packages/darklang/cli/outliner · high confidence
Add language tools for introspecting built-in values, functions, and representations
The backend now exposes new built-in functions to inspect the runtime environment. \getAllBuiltinValues\ and \getAllBuiltinFns\ allow users to retrieve lists of all available built-in values and functions, including their descriptions, return types, and parameters. Additionally, the \toRepr\ function has been added to convert any value into its string representation. These tools are implemented in the new \LanguageTools\, \Parser\, and \Reflection\ modules within the backend's built-in library.
backend/src/Builtins/Builtins.Language/Libs · high confidence
Add new Darklang packages for Discord, GitHub, JSON-RPC, and Tailscale
Users can now interact with Discord webhooks (including rich embeds and mention controls), fetch GitHub release information, handle JSON-RPC 2.0 messages, and manage Tailscale devices directly from Darklang. These new modules provide helper functions and types for building messages, parsing JSON-RPC requests, querying GitHub APIs, and executing Tailscale CLI commands.
packages/darklang · high confidence
Add new linting scripts for shell, YAML, and library checks
New executable scripts are added to the project's linting infrastructure: \scripts/linting/shellchecker\ runs shellcheck on bash/shell scripts while excluding specific directories and ignoring certain rules; \scripts/linting/yamllinter\ runs yamllint on all YAML files, excluding .git, rundir, and backend static/paket-files directories; and \scripts/linting/\_check-linked-libs\ verifies that shared libraries are present for a given binary. These scripts automate and standardize the validation of shell scripts, YAML configuration files, and binary dependencies.
scripts/linting · high confidence
Add package content provider for browsing Darklang packages
A new \PackageContentProvider\ class has been introduced to handle content for package browsing URLs (e.g., \dark://package/Name.Space.item\). It manages the display of package source code and a placeholder for the package browser, integrating with the language client to fetch file content via the \fileSystem/read\ request.
vscode-extension/client/src/providers/content · high confidence
Add push notification MCP server for ntfy.sh and Pushover
A new Model Context Protocol (MCP) server has been added to the Feriel package, enabling push notifications through two services: ntfy.sh and Pushover. Users can now send notifications via the 'send\_ntfy\_notification' tool, which requires a topic name and message, or the 'send\_pushover\_notification' tool, which requires environment variables for user key and app token. The server also exposes a status resource and a help prompt to guide users through setup.
packages/feriel · high confidence
Add random number and UUID generation builtins
The backend now includes new impure builtins for generating random integers and UUIDs. Users can call \int8Random\, \uint8Random\, \int16Random\, \uint16Random\, \int32Random\, \uint32Random\, \int64Random\, and \intRandom\ to get random values within a specified inclusive range. Additionally, \uuidGenerate\ creates a new v4 UUID. All these functions are marked as impure and require the 'random' capability.
backend/src/Builtins/Builtins.Random · high confidence
Added LSP document sync support for text and notebook documents
The Darklang language server now implements the LSP document synchronization protocol, enabling the server to track and manage changes to both standard text documents and interactive notebook documents. This includes handling open, close, and change notifications for text files, as well as opening, closing, and updating notebook documents and their constituent cells. The implementation defines the necessary type structures and JSON serialization logic to support these LSP methods, allowing the editor to maintain an accurate in-memory representation of the user's work.
packages/darklang/languageServerProtocol/documentSync · medium confidence
Added OPML export functionality for the Outliner app
The Darklang.Opml module was added to provide OPML (Outline Processor Markup Language) export capabilities. This new feature allows users to convert hierarchical node structures into valid OPML XML format, including proper XML escaping for special characters and recursive depth handling for nested lists.
packages/darklang/opml · high confidence
Added binary serialization for per-instance capability grants
Added new binary serializer modules for the \Capabilities\ type, enabling the serialization of per-instance capability grants that gate effectful builtins. The \Capabilities.fs\ file implements read/write logic for HTTP client/server rules, file/environment/database access scopes, execution rules, and boolean flags for stdout, stdin, random, clock, and LLM access. The \Common.fs\ file provides the low-level binary primitives (varint, string, bool, numeric types, and collection helpers) used by the serializer.
backend/src/LibSerialization/Binary/Serializers · high confidence
Added file system provider extension for LSP
The LSP extensions package now includes a new file system provider module that implements read, write, delete, and change notification methods for file system operations. This adds support for interacting with the file system through the Language Server Protocol, enabling features like file content retrieval, modification, and change detection.
packages/darklang/lsp-extensions · high confidence
Added migration helper scripts
Two new Bash scripts were added to the scripts/migrations directory: mark-not-run, which deletes entries from the system\_migrations\_v0 table, and new, which generates timestamped SQL migration files in the backend/migrations directory.
scripts/migrations · high confidence
Added parser combinator library and new parsing modules
The \stachu\ package now includes a new parser combinator library (\Stachu.Parser\) that provides basic parsing utilities like \regex\, \string\, and combinators such as \andThen\, \orElse\, and \keepLeft\. This library is used to implement a full Darklang parser (\Stachu.DarklangParser\) and a simplified tiny language parser (\Stachu.TinyLang\). Additionally, new modules for JSON handling (\Stachu.Json\) and a JSON Canvas viewer (\Stachu.JsonCanvas\) have been added, along with a temporary implementation for time spans (\Stachu.TimeSpan\).
packages/stachu · high confidence
Added repository configuration files for formatting, linting, and build isolation
The repository now includes configuration files to enforce code style and build isolation. A \.dockerignore\ file is added to exclude build artifacts, IDE settings, and local configs from Docker contexts, reducing context size. Editor and language-specific formatting is standardized via \.editorconfig\ (for whitespace and line endings), \.prettierrc.toml\ (for general code formatting), \.style.yapf\ (for Python), and \.fantomasignore\ (to exclude \.dark\ files from F\# formatting). Additionally, a \fsharplint.json\ file introduces linting rules for F\# code, and \.gitattributes\ marks specific test artifacts as generated. These changes ensure consistent formatting and cleaner builds across the monorepo.
(repo-wide) · high confidence
Adds comprehensive Language Server Protocol (LSP) type definitions
The language server now includes extensive type definitions for multiple LSP features, including call hierarchy, code actions, code lenses, color providers, completions, diagnostics, document highlights, document symbols, find references, folding ranges, formatting, and document links. These additions provide the structural foundation for implementing these LSP capabilities in the Darklang language server.
packages/darklang/languageServerProtocol/language · high confidence
Centralized builtins module for persistence, package management, and traces
A new F\# module, Builtins.Matter.Builtin, has been introduced to centralize the registration of built-in capabilities. This module aggregates functions for database persistence, package management operations (including packages, branches, rebase, merge, scripts, dependencies, and caps), tracing, and account management. The module also includes a paket.references file specifying dependencies on Ply and FSharp.Core.
backend/src/Builtins/Builtins.Matter · high confidence
Expanded CLI standard library with shell-specific configuration and daemon management
The CLI standard library now includes dedicated modules for managing shell configurations (Bash, Fish, and PowerShell), allowing users to add aliases and modify PATHs in a cross-platform way. Additionally, a new \Cli.Daemon\ module provides generic background process management, enabling users to start, stop, and monitor detached processes via PID files and log files.
packages/darklang/stdlib/cli · high confidence
Expose internal package-server HTTP router
The internal dark-packages module now exposes an HTTP router for the package-server endpoints that power wip.darklang.com/packages. The router implements GET endpoints for /ping, /ops, /stats, /search, and various type/value/function lookup routes, along with a POST /ops endpoint for ingesting package operations. A security note indicates that the /ops endpoint currently lacks authentication and should be wrapped in an auth check before public exposure.
packages/darklang/internal/dark-packages · medium confidence
Extracted core utilities and types from the monolithic Prelude into dedicated modules
The backend's \Prelude\ directory has been reorganized by extracting specific functionality into separate, dedicated files. This includes new modules for Base64, Dictionary, Exception handling, HashSet, Lazy evaluation, List, Map, NonEmptyList (NEList), NonBlockingConsole, Option, Ply (async/await utilities), Regex, ResizeArray, Result, String, Task, Telemetry, Tuple2, and UTF8 encoding. The main \Prelude.fs\ file now serves as a central hub that re-exports these types and functions, while also introducing compiler warnings to ban the use of \failwith\ and standard \printf\/\printfn\ in favor of the new \Exception\ and \NonBlockingConsole\ modules. This change improves code modularity and makes it easier to find and maintain specific utility functions.
backend/src/Prelude · high confidence
Initial LSP server infrastructure and message parsing
The Darklang language server now includes the foundational types and message parsing logic required to communicate with editors via the Language Server Protocol. This adds support for handling incoming requests and notifications, including document synchronization (open, change, save, close), completions, semantic tokens for syntax highlighting, hover information, and trace logging. The implementation defines the core data structures for LSP messages, enabling the server to parse and route client interactions.
packages/darklang/languageServerProtocol · high confidence
Initial scaffolding for the VS Code extension
The vscode-extension directory now contains the foundational build and configuration files for the extension. This includes an esbuild bundler script (esbuild.js) that handles TypeScript compilation and SVG asset loading, a TypeScript configuration (tsconfig.json) targeting ES2020 with CommonJS modules, and a language configuration file (language-configuration.json) that defines syntax highlighting rules such as comment delimiters and auto-closing pairs. Additionally, .gitignore and .vscodeignore files are added to manage build artifacts and exclude unnecessary files from the VS Code package.
vscode-extension · high confidence
Interactive capability editor for local grants
The \dark caps\ command now includes an interactive terminal UI for editing local capability grants. Users can use \dark caps edit\ to visually manage HTTP, file, environment, database, and execution rules, as well as toggle flags like \random\ or \clock\. The editor supports keyboard navigation, inline editing of rules, and applying preset profiles (e.g., \local-dev\, \read-only\). Changes are written to \\~/.darklang/capabilities.bin\ and enforced by the runtime gate.
packages/darklang/cli/caps · high confidence
Introduce AI agent for Dark CLI interactions
Added a new AI agent module for the Dark CLI that enables users to interact with large language models (LLMs) via the command line. The agent supports multiple providers (Anthropic, OpenAI, and local Ollama instances) with configurable models and write modes (read-only, confirm, or allowed). It provides a suite of CLI commands for exploration (tree, search, view), testing (run, eval), and source control (commit, branch, merge), while enforcing safety checks against unsafe characters and unauthorized write operations.
packages/darklang/cli/ai · high confidence
Introduce CLI commands for source control management
The Darklang CLI now includes a suite of commands for managing source control, including \branch\ (list, create, switch, rename, delete/archive), \commit\ (with support for partial commits via \--include=\), \discard\ (to remove uncommitted changes), \log\ (to view commit history), \merge\ (to merge branches), \rebase\ (to resolve conflicts), \show\ (to inspect specific commits), and \status\ (to view uncommitted changes). These commands allow developers to manage branches, commit code, and track history directly from the command line.
packages/darklang/cli/scm · high confidence
Introduce Cli.fs module for CLI builtin functions
Added Cli.fs, a new module defining builtin functions for building the CLI itself, including script loading, parsing, and error handling. This file introduces the CliTraceSource type for tracing CLI operations and defines the ParseError type for handling parsing failures. The module implements logic to lower a script's source items to a PTCliScriptModule, handling two-pass lowering to resolve sibling references within the same script.
backend/src/Builtins/Builtins.CliHost/Libs · high confidence
Introduce CliHost builtins and serialization utilities
The backend now includes a new CliHost module that defines function renames and combines built-in library definitions, alongside a Utils module that implements serialization (to/from Dval) for CLI script modules, including types, values, functions, submodules, and expressions. This change also adds a paket.references file specifying dependencies on Ply, FSharp.Core, Microsoft.Data.Sqlite, and Fumble.
backend/src/Builtins/Builtins.CliHost · medium confidence
Introduce LibConfig for environment-based configuration
A new LibConfig library has been added to the backend, providing a centralized way to read configuration from environment variables. This includes utilities for parsing environment variables into various types (strings, integers, booleans, UUIDs) and managing runtime directories and database names. The library also embeds a build hash for version tracking, falling back to 'dev' for local builds. This change supports the CLI and other entry points by providing adjustable config values with defaults.
backend/src/LibConfig · high confidence
Introduce LocalExec host for local script execution and benchmarking
Added a new LocalExec host that enables running local scripts with backend and F\#/dotnet libraries. This includes a CLI entry point (LocalExec.fs) with commands for reloading packages, running database migrations, exporting seeds, and running allocation/timing benchmarks. The implementation introduces new modules for loading packages from disk (LoadPackagesFromDisk.fs), generating package reference hashes (PackageRefsGenerator.fs), and managing SQLite schema migrations (Migrations.fs). Additionally, benchmarking capabilities are added via BenchmarkScenarios.fs and Benchmarks.fs, which measure allocation and timing for blob and stream code paths, with results tracked in JSONL format.
backend/src/LocalExec · high confidence
Introduce Model Context Protocol (MCP) support for Darklang
Adds a new Model Context Protocol (MCP) implementation to Darklang, enabling AI models to communicate with external tools and resources via JSON-RPC. This includes full protocol types for resources, tools, and prompts, along with a server builder API that lets developers register tools, resources, and prompts to create MCP servers.
packages/darklang/modelContextProtocol · high confidence
Introduce PackageNode type for package tree representation
A new TypeScript interface, PackageNode, has been added to define the structure for representing packages in the extension's tree view. This interface includes properties for identification (id, label), classification (type, with options for owner, module, function, type, or value), and tree state management (children, collapsibleState, contextValue, packagePath).
vscode-extension/client/src/types · high confidence
Introduce VS Code extension with LSP integration and UI components
The VS Code extension is now activated on startup, registering a custom file system provider (darkfs), text document content providers, and file decoration providers. It initializes a Language Server Protocol client to communicate with the Darklang LSP, enabling features like semantic tokens. The extension also introduces a status bar component that displays the current branch and uncommitted changes, alongside tree views for packages and SCM, and panels for the homepage and branch management. Utility functions for HTTP requests and SVG type declarations are also added to support these features.
vscode-extension/client/src · high confidence
Introduce \`dark apps\` for managing foreground apps and background daemons
A new \dark apps\ command provides a unified interface for discovering, installing, and managing Dark applications. Users can now install foreground apps (which get shell shims) and background daemons (which can be started, stopped, and monitored). The command supports an interactive browser for browsing the full catalog, adding/removing apps, and inspecting daemon status and logs. It also enables auto-starting daemons as OS services on Linux (systemd) and macOS (launchd).
packages/darklang/cli/apps · high confidence
Introduce binary serialization for package and branch operations
Added new binary serialization modules for package and branch operations, including serializers for package types, values, functions, and operations (add, deprecate, propagate updates, revert). The TypeReference serializer was expanded to support additional types such as TBlob, TStream, and TInt, and the NameResolution module was updated to include an originalName field. These changes enable the system to serialize and deserialize complex package and branch state into a compact binary format.
backend/src/LibSerialization/Binary/Serializers/PT · high confidence
Introduce binary serialization for runtime and program types
Added new modules for serializing and deserializing runtime (RT) and program (PT) types into a custom binary format. This includes support for Hash, PackageLocation, PackageType, PackageValue, PackageFn, PackageOp, BranchOp, and Toplevel types, enabling efficient binary storage and retrieval of these data structures.
backend/src/LibSerialization/Binary · high confidence
Introduce binary serialization for runtime types
Added binary serialization support for runtime types, including value types, data values, instructions, and package-level functions and types. This enables efficient storage and transmission of runtime type information, supporting features like arbitrary-precision integers, nested function definitions, and content-addressed hashing for packages and commits.
backend/src/LibSerialization/Binary/Serializers/RT · medium confidence
Introduce global CLI installation and self-update capabilities
The Darklang CLI now supports global installation to the user's home directory (e.g., \~/.darklang/bin) and automatic self-updates from GitHub releases. Users can install the CLI globally, check for updates, and uninstall the global installation. The system detects whether the CLI is running in portable mode or as a global installation, and provides appropriate status and update messages.
packages/darklang/cli/installation · high confidence
Introduce internal LLM agent loop and tool execution framework
Added an internal agent loop implementation that supports multi-turn conversations, tool execution, and extended result data (including thinking, web search results, and citations). The new module defines types for tool outputs, tool calls, and agent configuration, and provides functions to execute tools, process tool calls, and run the agent loop with retry logic. This enables users to build agents that can call external tools and maintain context across turns.
packages/darklang/llm/internal · high confidence
Introduce internal MCP server for Darklang development tools
The Darklang internal MCP server is now available to provide AI-assisted development tools, including code execution, function search, type checking, and package listing. It also exposes resources for builtins, standard library, types, configuration, logs, examples, and syntax reference, along with prompts for code review, documentation generation, type conversion, debugging, and pattern matching.
packages/darklang/internal/darklang-internal-mcp-server · high confidence
Introduce new SCM modules for branch, merge, and commit management
The SCM package now includes dedicated modules for managing branches (create, list, rename, archive, delete), merging branches with error handling, and handling package operations including WIP tracking, partial commits, and commit history. The Account module provides lookups by name and ID, while the Rebase module handles rebasing branches and detecting conflicts. These changes enable users to create and manage branches, merge changes, and commit work with full traceability.
packages/darklang/scm · high confidence
Introduce new parser modules for handling source files, CLI scripts, and expressions
The parser package now includes dedicated modules for parsing different source constructs: \canvas.dark\ handles module-level declarations (types, values, functions, expressions) for canvas modules; \cliScript.dark\ parses CLI scripts including submodules and generates package operations; \parse.dark\ provides entry points for parsing expressions and source files, including context-aware expression parsing and source file parsing with operations. These modules replace the previous monolithic parser structure with more granular, purpose-built parsing logic.
packages/darklang/languageTools/parser · high confidence
Introduce services for managing pinned and recently accessed items
Added new singleton services, PinnedItemsService and RecentItemsService, to manage user preferences for pinned items and recent activity. The PinnedItemsService handles server-synced pinning with optimistic updates and legacy data migration, while the RecentItemsService tracks and persists the last 10 recently accessed items in VS Code's global state, supporting multiple item types like branches, apps, and modules.
vscode-extension/client/src/services · high confidence
Introduce structured capability model for effectful builtins
Added a new capability system that gates access to effectful builtins (HTTP, file, environment, database, and execution) using structured, per-instance grants. The change introduces \LibExecution.Capabilities\ to define resource-domain axes (e.g., \RW\<string\>\ for file paths, \UrlScope\ for HTTP) and \LibExecution.CapabilityAnalysis\ to compute effective capabilities by walking the function call graph. \LibExecution.CapabilityCheck\ enforces precise, per-call checks against the granted capabilities, ensuring that specific resources (like a particular file path or HTTP host) are explicitly allowed. This replaces the previous unscoped or string-based permission checks with a more granular and auditable model.
backend/src/LibExecution · high confidence
Introduce structured capability model for sandboxing and built-in function gating
The language tools now include a structured capability model (defined in \capabilities.dark\) that mirrors the F\# \LibExecution.Capabilities\ to control access to effectful built-in functions and external resources. This model defines scopes for HTTP clients, file systems, environment variables, databases, and process execution, allowing the system to enforce security and sandboxing policies. The \common.dark\ file introduces a \BuiltinFunctionPurity\ classification (Pure, ImpurePreviewable, Impure) to categorize built-in functions based on their side effects, which is used by the new capability system to determine if a function can be executed in a restricted context.
packages/darklang/languageTools · high confidence
Introduce the Darklang CLI executable
Users can now run the Darklang CLI as a standalone executable. The CLI embeds a compressed SQLite database and a README, extracting them to a local \.darklang\ directory on first run. It initializes the package manager, grows the database, and executes commands, providing a self-contained environment for running Darklang scripts and managing local state.
backend/src/Cli · high confidence
Introduce virtual document providers for Darklang content and diffs
The VS Code extension now includes new providers that enable editing and viewing of Darklang content through virtual URIs. A new file system provider (darkfs://) allows editing package modules with automatic parsing and operation generation on save, while text content providers (dark://) render source and AST views for packages and branches. Additionally, a diff content provider (darklang-diff://) supports viewing before/after code changes. These providers are backed by a URL pattern router and metadata system that map URL structures to appropriate content sources and file decorations.
vscode-extension/client/src/providers · high confidence
LSP server refactored with new state, branch, and completion modules
The LSP server implementation has been restructured into new modules: a new \aaaa-state.dark\ defines the \LspState\ and \DocumentInScope\ types; \branches.dark\ adds handlers for creating, deleting, and renaming branches; \completions.dark\ implements autocomplete using the search functionality; \docSync.dark\ manages document synchronization; \diagnostics.dark\ reports syntax and name-resolution errors; \handleIncomingMessage.dark\ routes LSP requests; \hover.dark\ and \hoverInformation.dark\ provide hover details; and \initialize.dark\ sets up server capabilities. This refactoring organizes the LSP server's core functionality into distinct, manageable files.
packages/darklang/languageTools/lsp-server · high confidence
New CLI UI component library
The CLI UI package now includes a comprehensive set of reusable terminal UI components, including buttons, cards, dividers, dropdowns, forms (text input, checkbox, radio, select), labels, layout containers (grid, stack), list views, message/toast/alert notifications, and modals/confirm dialogs. These components provide the foundation for building interactive terminal-based user interfaces.
packages/darklang/cli/ui · high confidence
New CLI built-in functions for file, directory, environment, and process execution
The CLI runtime now exposes a suite of new built-in functions for interacting with the host system. File operations include \fileRead\, \fileWrite\, \fileDelete\, \fileAppendText\, and \fileExists\/\fileIsDirectory\, all of which require specific file read or write capabilities. Directory operations (\directoryCurrent\, \directoryList\) and environment variable access (\environmentGet\, \environmentGetAll\) are also available, gated by \fileRead\/\envRead\ capabilities. Process execution is handled by \cliExecute\, which runs external commands and returns their exit code, stdout, and stderr. Additionally, \cliGetOS\ identifies the operating system, and \getBuildHash\ returns the CLI build's git hash. Output and terminal control functions (\print\, \printLine\, \stdoutClear\, \debug\) and terminal dimension queries (\cliGetTerminalWidth\, \cliGetTerminalHeight\) have been added to support interactive CLI features.
backend/src/Builtins/Builtins.Cli/Libs · high confidence
New CLI commands for authentication, configuration, and script management
The CLI now includes dedicated commands for managing user identity and local state. The \login\ and \logout\ commands allow users to persist their account session in \cli-config.json\, enabling non-interactive commands to run as a specific user. A new \config\ command provides a way to get, set, and list configuration values, including automatic hints for app ports. Additionally, the \scripts\ command introduces a system for storing, editing, and running saved Darklang scripts, while the \export-seed\ command allows exporting the database to a minimal seed file. These changes restructure the CLI into modular components for better maintainability.
packages/darklang/cli · high confidence
New CLI commands for package management and navigation
The CLI now includes a suite of new commands for managing and navigating packages. Users can create and edit functions, types, and values directly from the command line using \fn\, \deprecate\, and \delete\ commands. The \db\ command allows listing, viewing, and querying databases. Navigation is enhanced with \nav\ for moving between modules and entities, \back\ to return to the previous location, and an interactive mode for browsing package contents. Additional commands include \ls\ and \tree\ for listing and viewing package structures, \find-values\ to locate values by type, and \hash\ to display content-addressed hashes for items.
packages/darklang/cli/packages · high confidence
New CLI utility modules for colors, completion, and terminal management
The CLI now includes dedicated utility modules for managing terminal output and user interaction. A new \colors.dark\ module provides semantic and standard ANSI color codes for syntax highlighting and UI elements. A \completion.dark\ module introduces an interactive completion picker with icons and descriptions, alongside a robust argument parser (\flagParser.dark\) that supports boolean and value-taking flags with aliases. Additionally, \terminal.dark\ exposes terminal dimensions and viewport calculations, while \logo.dark\ handles ASCII art rendering, and \syntaxHighlighting.dark\ applies semantic token colors to source code.
packages/darklang/cli/utils · high confidence
New HTTP client and language processing builtins introduced
The backend now includes dedicated builtin modules for HTTP client operations and language processing. The HTTP client builtin aggregates the \Libs.HttpClient\ builtins, while the language builtin combines builtins from \Libs.LanguageTools\, \Libs.Parser\, and \Libs.Reflection\. Both modules are newly added to the codebase, establishing the functional interfaces for these capabilities.
backend/src/Builtins/Builtins.Http.Client, backend/src/Builtins/Builtins.Language · high confidence
New LLM agent framework with multi-provider support
The Darklang LLM package now includes a new agent framework that allows users to build AI agents with support for Anthropic, OpenAI, and Ollama providers. Users can create agents, configure models, set system prompts, add tools, and run chat interactions through a unified interface. The framework supports provider-specific features like thinking, web search, JSON mode, and seed control. A model registry provides pre-configured models for each provider, and the system automatically selects a balanced model based on the DARKLANG\_LLM\_PROVIDER environment variable.
packages/darklang/llm · high confidence
New OpenAI API bindings for audio, chat, embeddings, images, models, and tools
The Darklang WIP AI package now includes a comprehensive set of modules for interacting with the OpenAI API. This includes \audio.dark\ for speech-to-text and text-to-speech, \chat.dark\ for chat completions with support for audio output and multi-modal content, \embeddings.dark\ for generating text embeddings, \images.dark\ for image generation and editing, \models.dark\ for listing and managing models, \tools.dark\ for defining function-calling schemas, and \responses.dark\ for the newer Responses API. These modules provide typed interfaces and helper functions to construct requests and parse responses, enabling developers to integrate OpenAI's AI capabilities directly into their applications.
packages/darklang/wip/ai/openai · high confidence
New Packages and SCM tree views for VS Code
The VS Code extension now displays a Packages tree view that supports pinning items and distinguishes between functions, types, values, and modules with specific icons. Additionally, a new SCM tree view has been added to show uncommitted changes, recent commits, and branch information, allowing users to switch branches and view commit details directly from the sidebar.
vscode-extension/client/src/providers/treeviews · high confidence
New SCM review interface for inspecting and diffing package changes
A new interactive CLI tool has been added to the SCM package, allowing users to review pending and committed changes to packages across branches. The interface displays a list of branches with uncommitted (WIP) or committed package operations, enabling users to inspect diffs for specific functions, types, and values. This feature provides a structured way to navigate through module groups and view detailed diffs of package changes.
packages/darklang/cli/scm/review · high confidence
New builtins for package manager operations and capabilities
The backend now exposes a suite of new builtin functions for the package manager, including \pmCapsGet\/\pmCapsSet\ for managing instance capability grants, \pmScripts\\ for script management, and various \scm\\ and \deps\*\ functions for branch, merge, rebase, and dependency tracking. These additions enable users to manage package state, inspect capabilities, and query dependencies directly through the language's standard library.
backend/src/Builtins/Builtins.Matter/Libs/PM · high confidence
New commands for branch, package, SCM, and script execution
The VS Code extension now exposes dedicated command handlers for branch management (switch, create, delete, rename, rebase, merge), package/module navigation (look up, open, pin/unpin, reveal in tree), source control operations (status, commit, log, discard, show commit), and script execution (run script with branch context). These commands wire up the VS Code UI to the language client requests, enabling users to manage branches, navigate and pin packages, perform SCM operations, and run scripts directly from the editor.
vscode-extension/client/src/commands · high confidence
New formatting scripts for Dark codebase
Added a new \scripts/formatting/format\ script that provides a unified way to check and format F\# (via Fantomas) and frontend assets (via Prettier) across the Dark project. The script supports \check\ and \format\ modes, with flags to target only F\# or only Prettier files. A corresponding \pre-commit-hook.sh\ is also added to automatically format staged files before committing.
scripts/formatting · high confidence
New installer scripts for .NET, executables, and archives
Added new shell scripts in the scripts/installers directory to handle the installation of .NET, generic executables, and compressed archives (tar.gz, gz, targz). These scripts automate downloading files from specified URLs, verifying their integrity using SHA256 checksums, and placing them in the appropriate system directories, with support for both arm64 and amd64 architectures.
scripts/installers · high confidence
New scripts for CLI build, extension packaging, and local execution
Added several new scripts to the scripts directory: build-and-install-cli-on-host, which builds and installs the Darklang CLI on the host machine; fetch-seed, which downloads and installs the database seed; launch-extension.sh, which sets up the VS Code extension for development; package-extension.sh, which packages the VS Code extension; run-local-exec, which executes local commands within the devcontainer; and updated run-cli, run-backend-server, and run-backend-tests scripts to support the new CLI and extension workflows.
scripts · high confidence
New time-related built-in functions
Added new built-in functions for time and system operations: \dateTimeNow\ and \dateTimeToday\ for current datetime retrieval, \timeSleep\ for delaying execution, \timeNowMs\ for monotonic timestamps, and \interpreterStatsReset\/\interpreterStatsGet\ for resetting and retrieving interpreter performance counters and timing statistics.
backend/src/Builtins/Builtins.Time/Libs · high confidence
New tracing data types and formatting utilities
The Darklang tracing package now exposes a formal type system for trace data, including TraceSummary, InputVar, FnCall, and TraceData, which define the structure of recorded executions. Additionally, a new formatting module provides generic helpers for aligning numbers, escaping strings for JSON, and compacting Dval representations, enabling consistent display of trace information across CLI and other consumers.
packages/darklang/tracing · high confidence
Redesigned homepage with sidebar navigation and dashboard
The homepage panel has been restructured to include a sidebar navigation with icons for Dashboard, Packages, Docs, Settings, and Changelog, alongside a header bar featuring a user avatar and action buttons. The main content area now renders a dashboard page displaying recent and pinned items, as well as a documentation page with topic listings and content rendering. This change introduces a new component-based architecture for the homepage, separating the header, sidebar, and page content into distinct modules, and integrates services for pinned and recent items.
vscode-extension/client/src/panels/homepage · high confidence
Refactored build and compile scripts for improved modularity and cross-compilation support
The build system has been reorganized into specialized, reusable scripts to improve maintainability and enable new build capabilities. A new Python-based server builder (\_build-server) and a .NET wrapper (\_dotnet-wrapper) provide a more structured way to compile and run the backend. The compile script has been split into focused components: compile-project handles specific project builds, while compile orchestrates the full build pipeline. A new build-release-cli-exes.sh script enables cross-compilation of the CLI executable for multiple platforms (Linux, macOS, Windows) and supports AOT (Ahead-of-Time) publishing for smaller, faster cold-start binaries. Additionally, build-sqlite.sh handles static linking of SQLite for AOT builds, and clear-builder-volumes/clear-dotnet-build provide targeted cleanup. These changes support a more modular, cross-platform, and optimized build process.
scripts/build · high confidence
Replaced the tree-sitter and FCS parsers with a new hand-written recursive-descent parser
The backend's parsing infrastructure has been replaced with a new hand-written recursive-descent parser located in the \LibParser\ module. This new parser produces a range-complete syntax tree that preserves exact source positions for all nodes, enabling improved editor tooling such as syntax highlighting, the LSP, and the code formatter. The change includes a new lexer (\Lexer.fs\) that handles tokenization and trivia (comments), a parser (\Parser.fs\) that builds the \WrittenTypes\ tree, and a name resolver (\NameResolver.fs\) that resolves identifiers against builtins and packages. The old \Parser\ module and its associated files have been removed, and the new \LibParser\ directory now contains the grammar specification (\GRAMMAR.md\), the lexer, parser, and related type definitions (\WrittenTypes.fs\, \WrittenTypesToProgramTypes.fs\).
backend/src/LibParser · high confidence
Standard library modules for JSON, crypto, HTTP, and CLI UI
The standard library now includes new modules for handling JSON parsing and building (AltJson), Base64 encoding/decoding, Blob (binary data) operations, cryptographic hashes (SHA-256, MD5, HMAC), HTTP request/response construction, and CLI user interface components (colors, progress bars, prompts, spinners, tables). These modules wrap existing built-in functions or provide new high-level APIs for common tasks, making it easier to work with external APIs, process binary data, and build interactive command-line tools.
packages/darklang/stdlib · high confidence
Stashed CLI notes and model definitions added
A new 'old\_notes' directory was added to the CLI package, containing a README and three Darklang source files (\_command.dark, \_model.dark, \_msg.dark) that define the internal state, command structure, and message types for the CLI. These files represent a collection of stashed, non-production code and design notes, including a 'status' command implementation and the core 'State' model for the CLI interface.
_packages/darklang/cli/old\notes · high confidence
Architecture
Consolidates HTTP server logic into a single module
The HTTP server implementation, previously split across multiple files, has been consolidated into a single \HttpServer.fs\ module. This change groups the request handling, header extraction, and response writing logic together, making the HTTP server's behavior easier to understand and maintain.
backend/src/Builtins/Builtins.Http.Server/Libs · high confidence
Behavioural changes
3 commits (0 fixes) modifying backend/testfiles/data
A change to existing behaviour in backend/testfiles/data — 3 commits, 6 files.
backend/testfiles/data · medium confidence · unverified
Added placeholder for runtime directory
A .gitkeep file was added to the rundir directory, ensuring the directory is tracked by version control. This supports the organizational change of moving runtime files into a separate directory outside the server.
rundir · low confidence
Automated publishing of GitHub releases and VS Code extension
Added deployment scripts to automate the release process. The new \publish-github-release\ script creates a new GitHub release with uploaded artifacts and, notably, preserves old releases instead of deleting them. The \publish-vs-code-extension\ script checks the current project version against the VS Code Marketplace and publishes the extension only when a newer version is detected.
scripts/deployment · high confidence
Consolidate legacy infrastructure into LibCloud
The legacy multi-tenant infrastructure code has been consolidated into the new LibCloud module. This includes the Account module for managing developer identities, the Toplevels module for handling user-defined datastores, and the Serialize module for DB serialization. The change also introduces file security checks in the File module and centralizes configuration in the Config module, while the README clarifies that this is legacy code being unwound.
backend/src/LibCloud · high confidence
Consolidates CLI builtins into a single module
The CLI builtins are now aggregated in a single module (Builtin.fs) that combines the builtins from various library modules (Directory, Environment, File, Execution, Output, Stdin, Terminal, and Posix). This change simplifies the structure of the CLI by centralizing the registration of built-in functions, making it easier to manage and maintain the available commands and utilities.
backend/src/Builtins/Builtins.Cli · high confidence
Devcontainer environment setup scripts
The devcontainer configuration was restructured into a set of dedicated bash scripts that handle environment initialization, including creating application and cache directories, setting up the Docker network, configuring hostnames for local development, writing environment variables, and managing build server logs. A new SQLite monitor script was added to track database availability.
scripts/devcontainer · high confidence
HTTP client builtins refactored with security and telemetry improvements
The HTTP client builtins have been refactored to improve security and observability. The implementation now enforces IP validation to close DNS-rebinding time-of-check-to-time-of-use (TOCTOU) vulnerabilities and ensures the default configuration is safe against Server-Side Request Forgery (SSRF) attacks. Additionally, the streaming HTTP client now supports body parameters, includes body-read timeouts to prevent indefinite hangs, translates stream drain errors into proper network errors, and aligns telemetry spans and tags with the buffered request path for consistent observability.
backend/src/Builtins/Builtins.Http.Client/Libs · medium confidence
Introduce arbitrary-precision Int type and migrate builtins to use it
The platform adds a new arbitrary-precision \Int\ type and migrates numerous existing builtins to use it instead of fixed-width integer types. Affected areas include \Blob.length\, \DateTime\ arithmetic, \Dict.size\, \Float\ rounding, \Char\ codepoint conversions, \AltJson\ parsing, and \List\/\String\ indexing and length functions. The change also introduces bitwise operations for the new \Int\ type and updates error handling for integer parsing to use a dedicated \ParseError\ type.
backend/src/Builtins/Builtins.Pure · high confidence
Introduce canonical hashing for content-addressable package items
The hashing logic has been refactored to use a new canonical serialization format that produces deterministic hashes by skipping identity-irrelevant fields (such as AST node IDs, descriptions, and deprecated flags). This change introduces a \Canonical\ module that handles name resolution and type reference serialization, ensuring that hash computation is stable across different internal representations. The \Hashing\ module now computes SHA-256 hashes of these canonical forms, supporting batch hashing for mutually recursive definitions via a Tarjan's SCC algorithm. This ensures that commits and package items are content-addressed, preventing collisions and improving cacheability.
backend/src/LibSerialization/Hashing · high confidence
Introduce structured pretty-printing for capabilities, runtime errors, and program types
The pretty-printing logic for capabilities, runtime errors, and program types has been moved into dedicated Dark files (capabilities.dark, runtimeError.dark, runtimeTypes.dark, programTypes.dark, cliScript.dark, common.dark, and moduleDeclaration.dark). This refactors the F\#-based pretty-printing into the Dark language, providing a single source of truth for rendering capability specs, runtime error segments, and type/value names. Users will see consistent, human-readable output in the CLI and UI, with improved error messages and type name resolution.
packages/darklang/prettyPrinter · high confidence
Move DvalReprInternalQueryable to LibSerialization
The DvalReprInternalQueryable module, which handles converting Dvals to/from Sqlite-compatible JSON blobs for internal persistence, has been moved from LibExecution to the new LibSerialization library. This change centralizes serialization logic, separating the JSON representation of data types (including blobs, streams, and all primitive/compound Dval types) from the execution runtime, while maintaining the existing round-trip behavior for database storage.
backend/src/LibSerialization · high confidence
Moved benchmark suite to benchmarks/ with structured history tracking
The micro-benchmark suite for Blob/Stream code paths has been moved to the \benchmarks/\ directory at the repository root. The suite now appends each run's snapshot to a tracked \results/history.jsonl\ file, while local artifacts like \results/latest.json\ are gitignored. A \results.md\ file is generated from the JSONL history, and the scenarios are defined in \backend/src/LocalExec/Benchmarks.fs\. This change reorganizes how benchmark data is stored and rendered, shifting from ad-hoc or test-integrated runs to a dedicated, version-controlled history of performance metrics.
benchmarks · high confidence
New test scripts and language support for floats and lists
Added three new .dark script files in the user-code/darklang/scripts directory to support testing and validation. The sample-for-testing-extension.dark file demonstrates support for Float types and literal values, while sample-for-testing-extension.dark and test.dark showcase list constants and record construction. These changes reflect the underlying grammar updates for floats and list constants, providing concrete examples of these new language features.
user-code · high confidence
Numeric operators now support all numeric types and wrap on overflow
The language's numeric operators (addition, subtraction, multiplication, division, modulo, and power) are now polymorphic across all numeric types (Int8, Int16, Int32, Int64, Int128, UInt8, UInt16, UInt32, UInt64, UInt128, Float, and BigInt). Integer overflow and underflow now wrap around using two's complement representation rather than raising an error, while integer division by zero and mixed-type operations continue to produce errors. These changes are reflected in the new test files \eapply.dark\ and \einfix.dark\.
backend/testfiles/execution/language/apply · high confidence
Refactored backend database layer into LibDB
The backend's database logic has been consolidated into the new \LibDB\ module, replacing the previous \LibCloud\ and \LibSqlite\ implementations. This change introduces new modules for managing branches, package operations, and name resolution, while removing the old \Handler\ module and \TLHandler\ arm. The refactoring also includes improvements to atomicity for branch operations and the addition of a capability grant system for per-instance access control.
backend/src/LibDB · high confidence
Reorganize builtins into a new modular structure
The backend's builtin functions have been reorganized into a new modular structure under the \Builtins.Matter.Libs\ namespace. This change introduces separate modules for account lookups (\Account.fs\), database operations (\DB.fs\), and trace querying (\Traces.fs\). This reorganization improves code maintainability and separation of concerns within the backend's built-in functionality.
backend/src/Builtins/Builtins.Matter/Libs · medium confidence
Restructured database schema and added package searchability
The database schema was reorganized into a single \schema.sql\ file for the final table definitions, with incremental changes now managed via individual SQL files in the \incremental\ directory. This change fixes a bug where identical package operations on different branches were incorrectly deduplicated due to a composite primary key issue in the \package\_ops\ table. Additionally, the \package\_types\, \package\_values\, and \package\_functions\ tables now include a \description\ column to support searchable package descriptions.
backend/migrations · high confidence
Standardized configuration structure for local and CI environments
Developers and CI pipelines now use a consistent, standardized configuration format. The \config/dev\ file provides a template for local development settings, while \config/circleci\ defines the environment for CI builds. Both files define key parameters such as database names, HTTP client timeouts, and logging levels, ensuring that local and automated test environments share the same structural conventions.
config · high confidence
Time builtins consolidated into a single module
The time-related built-in functions are now provided through a unified module that combines the time and date-time libraries, simplifying the structure of the builtins namespace.
backend/src/Builtins/Builtins.Time · medium confidence
Updated serialization artifacts for the binary-pretty format
The serialization artifacts for the oplist-binary-pretty format have been updated. This change reflects the new structure of the serialized output, which now includes additional fields and data types such as Int, char, float, and complex nested structures like NonEmptyList and Result/Option enums. This ensures that the test files accurately represent the current state of the serialization logic.
backend/testfiles/serialization-artifacts · medium confidence
Test coverage
Add comprehensive test suite for the HttpClient; Add database integration tests for records, enums, and nested field access; Add internal test harness for WT/PT conversion; Add test utility modules for expression and value construction; Added CLI integration tests; Added HTTP server test suite; Added HTTP server test suite for demo data; Added comprehensive stdlib test coverage for core modules; Added comprehensive test coverage for all integer types; Added comprehensive test suites for expression handling and shadowing; Added execution tests for if-expressions, pattern matching, and pipe operators; Added interactive CLI test and telemetry viewer; Added regression tests for language tools; Added test cases for Dark language collections (dlist, dtuple, edict); Added test coverage for CLI execution, SCM partial commits, and Tailscale integration; Added test files for custom data types and values; Added tests for the Stachu parser combinator library and a tiny language parser; Expanded execution test coverage for language features; Expanded test coverage for backend components.
Dependencies
Backend upgraded to .NET 10 LTS
The backend build system has been upgraded to target .NET 10 LTS. This update includes a new \Directory.Build.props\ file that sets the target framework to \net10.0\ and configures build output paths, while \global.json\ pins the SDK version to 10.0.102.
backend · high confidence
Upgrade to .NET 10 and restructure backend projects
The backend has been upgraded to .NET 10, with the \paket.dependencies\ file now targeting \net10.0\ and referencing updated packages such as \FSharp.Core\ 10.0.100, \System.Text.Json\ 10.0.0, and \Microsoft.Data.Sqlite\ 10.0.0. The project structure has been reorganized into a modular \Builtins/\ directory (containing \Builtins.Cli\, \Builtins.CliHost\, \Builtins.Http.Client\, \Builtins.Http.Server\, \Builtins.Language\, \Builtins.Matter\, \Builtins.Pure\, \Builtins.Random\, and \Builtins.Time\), alongside new or renamed libraries like \LibCloud\, \LibConfig\, \LibDB\, \LibExecution\, \LibParser\, and \LibSerialization\. The CLI project (\Cli.fsproj\) has been configured for AOT publishing with static SQLite linking and aggressive trimming, while the VS Code extension dependencies have been updated to include \vscode-languageclient\ 7.0.0.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Baseline
- First survey — no prior run to compare against. CAI 47.
Lenses
- Code Health 84
- Architecture 90
- Maturity 43
- Readiness 35
- Security 51
- Domain Modelling 100
Changes since last survey
- 300 commits — 236 feature/other, 64 fixes
By area
- backend/src — 112 commits
- packages/darklang — 108 commits
- (repo) — 32 commits
- backend/tests — 18 commits
- backend/testfiles — 14 commits
- backend/migrations — 3 commits
- tree-sitter-darklang/test — 3 commits
- (root) — 2 commits
- .circleci/config.yml — 1 commit
- .devcontainer/devcontainer.json — 1 commit
- backend/paket.dependencies — 1 commit
- packages/feriel — 1 commit
- scripts/dev — 1 commit
- scripts/run-backend-server — 1 commit
- scripts/run-backend-tests — 1 commit
- tree-sitter-darklang/src — 1 commit
Notable commits
- fix: Migrate LLM file-search counts to Int and fix provider maxContextTokens
- fix: Add and fix tests
- fix: Add conversions between arbitrary-precision Int and fixed-width integer types
- fix: CLI: fix raw AST dump in error output and introduce typed ExecutionError
- fix: Fix Discord embed color Int64/Int mismatch
- fix: Fix LLM example maxTokens passing Int64 literals to migrated Int param
- fix: Fix capability port conversion build error
- fix: Fix cli docs: Float has no infix operators, point at Stdlib.Float fns
- fix: Fix clipboard paste in the CLI
- fix: Fix corpus tests
- fix: Fix docs signatures resolution and eval help examples
- fix: Fix ephemeral blob lookup failure
- fix: Fix escape handling in parser and pretty-printer
- fix: Fix operator precedence between function application and infix
- fix: Fix package op merge deduplication across branches
- fix: Fix package search to match qualified queries
- fix: Fix tests
- fix: Fix tests
- fix: Fix trace view
- fix: Fix unchecked Int conversions and stale queryability in builtins
- …and 280 more
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
darklang/dark was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 5 August 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 2c093595273f71d90ec7431aa0cc3298f39fd8fe — the exact code this score is about.
- Scored under rubric-2026.08.19 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer latest.