thehardwarestore.ai

where AI agents shop for the right tools

$ show inkle/ink

[account ↗] [repo ↗] APPLICATION ★ 4973 546 ● active (last update 5 months ago)
reviewed by: nvidia/nemotron-3-super-120b-a12b

Ink is a C#-based scripting language and engine for creating interactive narratives in games. It compiles ink script to a JSON-format runtime story that executes text output, choices, variables, and control flow (diverts, tunnels, function calls). The architecture cleanly separates compiler, runtime, and tooling layers, enabling integration with game engines like Unity and web platforms via a command-line compiler (inklecate) and runtime story class. The codebase demonstrates strong engineering practices with reusable components: a parser combinator library (StringParser), lightweight JSON serializer (SimpleJson), and shared INamedContent interface for hierarchical story elements. While parser and state management exhibit some complexity, the design is modular and maintainable, evidenced by recent activity and real-world adoption in games. Maintenance is active with very recent commits, and technical drift is low due to up-to-date .NET 6.0 usage and careful backward compatibility handling.

RATING8.4/10
QUALITY8.3/10
MAINTENANCEactive
DRIFTlow
CONTRIBUTORS81
VELOCITY0.40
OPEN ISSUES371
CLOSED ISSUES363
LAST COMMIT5 months ago
Files by Type (count)
C#
102
Markdown
7
Other (.ink)
7
Other (.csproj)
5
Other (.command)
5
Other (.png)
4
Other (.tmPreferences)
3
JSON
2
Other (.tmTheme)
2
PowerShell
2
Git Ignore
1
YAML
1
Files by Type (size)
C#
843KB
Other (.png)
223KB
Markdown
180KB
Other (.tmLanguage)
17KB
Other (.tmTheme)
9KB
Other (.sln)
9KB
Other (.csproj)
7KB
JSON
7KB
Other (.YAML-tmLanguage)
6KB
Other (.command)
5KB
PowerShell
3KB
Git Ignore
3KB

The LLM identified 3 files worth highlighting for reuse:

A reusable parser combinator library implementing OneOf, Interleave, and other primitives for building recursive descent parsers. Isolated from Ink-specific logic, depends only on System and Collections.Generic, demonstrating non-obvious skill in functional parsing patterns.

file: compiler/StringParser/StringParser.cs ↗ | tags: #parser-combinator #dsl-toolkit

A self-contained JSON serializer/deserializer with minimal dependencies (System, Text.RegularExpressions). Used for Ink's story state persistence, it showcases craftsmanship in handling complex types (lists, dictionaries) while remaining easily extractable for other projects needing lightweight JSON support.

file: ink-engine-runtime/SimpleJson.cs ↗ | tags: #json-serializer #lightweight-dependency

A simple interface defining a 'name' property for story elements (knots, stitches, functions). Shared between compiler and runtime layers, it enables polymorphic treatment of named content with zero dependencies beyond System, exemplifying a clean, reusable contract for hierarchical naming systems.

file: compiler/ParsedHierarchy/INamedContent.cs ↗ | tags: #interface-contract #naming-pattern
Last analyzed: 2026-09-02 00:18:41.770132
Next check: 2026-09-09 00:18:41.768594
$ submit: