Skip to content

Commit 5d7a26e

Browse files
committed
docs: add comprehensive roadmap for TinyTools - Add version 2026.2.0 plans (template validation, caching, better errors) - Add version 2026.3.0 plans (includes, macros, async services) - Add version 2026.4.0 plans (VS extension, CLI tool, source generators) - Document what we won't do to stay tiny - Add breaking changes policy and release cadence - Add community request tracking
1 parent af2eaf6 commit 5d7a26e

1 file changed

Lines changed: 277 additions & 0 deletions

File tree

roadmap.md

Lines changed: 277 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,277 @@
1+
# TinyTools Roadmap
2+
3+
This document outlines the planned features, improvements, and direction for LowlandTech.TinyTools.
4+
5+
> **Philosophy**: TinyTools stays **tiny** by design. We prioritize simplicity, performance, and zero dependencies over feature bloat.
6+
7+
---
8+
9+
## Current Version: 2026.1.0
10+
11+
**Status**: ? Stable
12+
**Released**: January 2026
13+
14+
### Core Features
15+
- ? Simple string interpolation (`{PropertyName}`)
16+
- ? Template engine with control flow (`@if`, `@foreach`)
17+
- ? Variable interpolation (`${Context.xxx}`)
18+
- ? Null coalescing (`${expr ?? "default"}`)
19+
- ? Pipe helpers (string, date, number, collection)
20+
- ? Hierarchical execution context
21+
- ? Template services (extensibility)
22+
- ? IoC/DI integration support
23+
- ? .NET 8, 9, 10 support
24+
25+
---
26+
27+
## Version 2026.2.0 (Q2 2026)
28+
29+
**Theme**: Enhanced Developer Experience
30+
31+
### Planned Features
32+
33+
#### ?? Template Validation
34+
- **Pre-render validation** - Catch syntax errors before rendering
35+
- **Template analysis** - Detect unused variables, missing properties
36+
- **Type-safe templates** - Optional strongly-typed template compilation
37+
38+
```csharp
39+
// Validate template syntax
40+
var errors = engine.Validate(template);
41+
if (errors.Any())
42+
{
43+
foreach (var error in errors)
44+
Console.WriteLine($"Line {error.Line}: {error.Message}");
45+
}
46+
```
47+
48+
#### ?? Template Caching
49+
- **Compiled template cache** - Parse once, render many times
50+
- **Performance boost** - 10-50x faster for repeated renders
51+
52+
```csharp
53+
// Cache compiled template
54+
var compiledTemplate = engine.Compile(template);
55+
56+
// Render many times (fast!)
57+
for (int i = 0; i < 1000; i++)
58+
{
59+
var result = compiledTemplate.Render(context);
60+
}
61+
```
62+
63+
#### ?? Improved Error Messages
64+
- **Line/column information** - Pinpoint errors in templates
65+
- **Syntax highlighting** in error messages (console/terminal)
66+
- **Helpful suggestions** for common mistakes
67+
68+
#### ?? Additional Pipe Helpers
69+
- `slice:start,end` - Extract substring by index
70+
- `match:pattern` - Regex matching
71+
- `contains:value` - Check if string/collection contains value
72+
- `split:separator` - Split string into array
73+
74+
### Performance Improvements
75+
- ? 20% faster variable resolution
76+
- ? Reduce allocations in tight loops
77+
- ? Optimize pipe helper chaining
78+
79+
---
80+
81+
## Version 2026.3.0 (Q3 2026)
82+
83+
**Theme**: Advanced Templating
84+
85+
### Planned Features
86+
87+
#### ?? Template Includes/Partials
88+
- **Reusable template fragments**
89+
- **Nested templates** with isolated contexts
90+
91+
```csharp
92+
var template = """
93+
@include("header.tmpl")
94+
95+
Content here
96+
97+
@include("footer.tmpl")
98+
""";
99+
```
100+
101+
#### ?? Template Macros/Functions
102+
- **Define reusable blocks** within templates
103+
- **Parameters and return values**
104+
105+
```csharp
106+
var template = """
107+
@macro FormatUser(user)
108+
${user.FirstName} ${user.LastName} (${user.Email})
109+
@endmacro
110+
111+
@foreach (var u in Context.Users)
112+
@FormatUser(u)
113+
@endforeach
114+
""";
115+
```
116+
117+
#### ?? Async Template Services
118+
- **Support async transformations**
119+
- **Useful for API calls, database lookups**
120+
121+
```csharp
122+
context.RegisterServiceAsync("translate",
123+
async input => await translationService.TranslateAsync(input));
124+
125+
var template = "${Context.Services('translate')('Hello')}";
126+
```
127+
128+
#### ?? Enhanced Collection Helpers
129+
- `where:condition` - Filter collections
130+
- `orderby:property` - Sort collections
131+
- `groupby:property` - Group collections
132+
- `distinct` - Remove duplicates
133+
134+
---
135+
136+
## Version 2026.4.0 (Q4 2026)
137+
138+
**Theme**: Ecosystem & Tooling
139+
140+
### Planned Features
141+
142+
#### ?? Visual Studio Extension
143+
- **Syntax highlighting** for `.tmpl` files
144+
- **IntelliSense** for context properties
145+
- **Live preview** of template output
146+
- **Error highlighting** in templates
147+
148+
#### ?? Source Generator Templates
149+
- **Compile templates** into C# code at build time
150+
- **Type-safe, zero-runtime overhead**
151+
- **Perfect for embedded templates**
152+
153+
```csharp
154+
// Template file: EmailTemplate.tmpl
155+
// Generated: EmailTemplate.g.cs with type-safe methods
156+
157+
var email = EmailTemplate.Render(new { Name = "John", Order = "12345" });
158+
```
159+
160+
#### ?? Template Library/Registry
161+
- **NuGet packages** with pre-built templates
162+
- **Community templates** for common scenarios
163+
- **Template discovery** and reuse
164+
165+
#### ?? CLI Tool
166+
- **Render templates** from command line
167+
- **Watch mode** for development
168+
- **Batch processing**
169+
170+
```bash
171+
dotnet tinytools render --template email.tmpl --data data.json --output email.txt
172+
dotnet tinytools watch --template *.tmpl
173+
```
174+
175+
---
176+
177+
## Future Considerations (2027+)
178+
179+
### Under Consideration
180+
181+
#### ?? Localization/Internationalization
182+
- **Built-in i18n** support
183+
- **Resource file integration**
184+
185+
#### ?? Template Debugging
186+
- **Breakpoints** in templates
187+
- **Step-through execution**
188+
- **Variable inspection**
189+
190+
#### ?? Performance Mode
191+
- **Unsafe code** for extreme performance
192+
- **Memory pooling** and recycling
193+
- **SIMD optimizations** where applicable
194+
195+
#### ?? Alternative Syntax Modes
196+
- **Mustache-style** `{{variable}}`
197+
- **Liquid-style** `{{ variable | filter }}`
198+
- **Custom delimiter** configuration
199+
200+
---
201+
202+
## What We Won't Do
203+
204+
To keep TinyTools **tiny**, we explicitly **won't** add:
205+
206+
? **HTML/View Rendering** - Use Razor for that
207+
? **JavaScript Execution** - Use a JavaScript engine
208+
? **Heavy Dependencies** - Stays lightweight
209+
? **Complex DSL** - Keep it simple and readable
210+
? **Everything to Everyone** - Focus on core use cases
211+
212+
---
213+
214+
## Breaking Changes Policy
215+
216+
### Semantic Versioning
217+
- **YEAR.MINOR.PATCH** format (e.g., 2026.1.0)
218+
- **Breaking changes** only in YEAR increments
219+
- **MINOR versions** add features, maintain compatibility
220+
- **PATCH versions** fix bugs only
221+
222+
### Deprecation Process
223+
1. **Mark as obsolete** with warning
224+
2. **Keep for one YEAR** (e.g., 2026.x)
225+
3. **Remove in next YEAR** (e.g., 2027.0)
226+
4. **Document** in changelog and migration guide
227+
228+
---
229+
230+
## Community Requests
231+
232+
**Want to influence the roadmap?** We welcome:
233+
234+
- ?? **Bug reports** - [GitHub Issues](https://github.com/lowlandtech/tinytools/issues)
235+
- ?? **Feature requests** - [GitHub Discussions](https://github.com/lowlandtech/tinytools/discussions)
236+
- ?? **Pull requests** - See [CONTRIBUTING.md](CONTRIBUTING.md)
237+
- ?? **Feedback** - [@wendellmva on Twitter](https://twitter.com/wendellmva)
238+
239+
### Top Community Requests
240+
1. Template validation (? **Planned for 2026.2**)
241+
2. Template caching (? **Planned for 2026.2**)
242+
3. Better error messages (? **Planned for 2026.2**)
243+
4. Visual Studio extension (? **Planned for 2026.4**)
244+
5. Template includes (**Under consideration**)
245+
246+
---
247+
248+
## Release Cadence
249+
250+
- **Quarterly releases** (4 per year)
251+
- **Patch releases** as needed for critical bugs
252+
- **Preview releases** for early feedback
253+
- **LTS support** for previous YEAR versions (1 year)
254+
255+
---
256+
257+
## Version Support Matrix
258+
259+
| Version | Released | End of Support | Status |
260+
|---------|----------|----------------|--------|
261+
| 2026.x | Jan 2026 | Dec 2027 | ? Current |
262+
| 2025.x | Jan 2025 | Dec 2026 | ?? Maintenance |
263+
| 2024.x | Jan 2024 | Dec 2025 | ? End of Life |
264+
265+
---
266+
267+
## Contributing to the Roadmap
268+
269+
This roadmap is a living document. If you have ideas, suggestions, or feedback:
270+
271+
1. **Open a discussion** on GitHub
272+
2. **Vote on features** using ?? reactions
273+
3. **Share your use cases** to help us prioritize
274+
4. **Contribute code** to help ship features faster
275+
276+
**Last Updated**: January 2026
277+
**Next Review**: April 2026

0 commit comments

Comments
 (0)