Go to Sign up
Note: Your files never leave your device. We don't upload, transfer, or store your data.
Textile is a lightweight text-to-HTML markup language created by Dean Allen in 2002. It converts plain-text shorthand into structured HTML without requiring users to write HTML tags directly. Textile uses simple punctuation-based syntax for headings, lists, links, images, emphasis, and tables.
Textile is used by several platforms and tools:
| Platform / Tool | Use Case |
|---|---|
| Redmine | Issue tracking and project management — issue descriptions, comments, and wiki pages use Textile |
| Textpattern | CMS — article body and excerpt fields use Textile |
| Basecamp Classic | Project management (legacy) — message formatting uses Textile |
| Publify | Blogging platform — content formatting |
| Movable Type | CMS — optional Textile text filter |
Textile's table syntax is more compact than HTML tables and uses pipe | characters, similar to Markdown, but with additional modifiers for alignment, headers, row spans, and column spans.
JSON (JavaScript Object Notation) is a lightweight data-interchange format defined by RFC 8259. It represents structured data as arrays and key-value objects. REST APIs, configuration files, and data pipelines commonly output data as JSON.
Understanding Textile table syntax helps you configure the tool's options correctly.
|_. Column A |_. Column B |_. Column C |
| Cell 1 | Cell 2 | Cell 3 |
| Cell 4 | Cell 5 | Cell 6 |
| Modifier | Meaning | Example |
|---|---|---|
|_. | Header cell | |_. Name | renders as <th>Name</th> |
|_. | Regular cell | | Value | renders as <td>Value</td> |
| ` | ^. ` | Top-aligned cell |
| ` | -. ` | Structural row marker |
_. prefix | Row header (bold first cell) | _. | Name | makes the first cell a <th> |
{color}. | CSS styling | ` |
| Modifier | Alignment | Placement |
|---|---|---|
< | Left | After opening pipe: ` |
= | Center | After opening pipe: ` |
> | Right | After opening pipe: ` |
| Use Case | Benefit |
|---|---|
| Redmine issue templates | Paste structured data as Textile tables in Redmine tickets and wiki pages |
| Textpattern content | Insert tabular data into CMS articles without writing HTML |
| Basecamp Classic messages | Format project communications with clean tables |
| Data migration | Convert JSON exports into Textile for import into Textile-based platforms |
| Technical documentation | Write tables in Textile syntax for platforms that support it |
| Wiki content | Populate wiki pages with structured data |
Manually converting JSON to Textile tables is tedious, especially with many rows or columns. This tool automates the conversion instantly in your browser.
File Upload: Drag and drop or select a .json file.
Code Editor: Paste or type raw JSON into the built-in code editor with syntax highlighting and real-time validation.
Toggle to escape Textile special characters (|, ., -, ^) within cell values. When your JSON data contains these characters, they can be misinterpreted as Textile formatting commands. Enabling this option prevents format conflicts.
Example — Escape Off:
|_. name |_. value |
| price: $9.99 | available |
Example — Escape On:
|_. name |_. value |
| price: \$9\.99 | available |
Adds the _. prefix to the first row's cells, turning them into <th> header elements in the rendered HTML. Use this when your JSON data's first row should serve as column headers.
Example — Row Header Off:
| name | role | location |
| Alice | Engineer | Berlin |
Example — Row Header On:
|_. name |_. role |_. location |
| Alice | Engineer | Berlin |
Adds |^. and |-. structural markers to create proper <thead> and <tbody> HTML sections. This is useful for accessibility and when the rendered table needs semantic HTML structure.
Example — Table Head Syntax On:
|^. |_. name |_. role |_. location |
|-. | Alice | Engineer | Berlin |
|-. | Bob | Designer | Tokyo |
All processing runs entirely in your browser. No data is uploaded to any server. The tool works offline after the initial page load.
Choose one of two input methods:
Upload a file: Click "Choose File" and select a .json file from your computer, or drag the file into the upload area.
Paste data: Click "Enter Data" to switch to the code editor. Paste or type your JSON array. The editor validates syntax in real time — a green "Valid JSON" badge confirms correct formatting.
Use the Properties panel on the right:
Escape Characters: Enable if your data contains |, ., -, or ^ characters that could conflict with Textile syntax.
Row Header: Enable to add |_. prefix to the first row (makes it a header row).
Table Head Syntax: Enable to add |^. and |-. structural markers for proper <thead> / <tbody> HTML semantics.
Click the Convert button. The Textile table output appears in the "Output Data" panel.
Click Copy to Clipboard to paste the result into your Redmine ticket, Textpattern article, or other Textile-supported platform.
Premium users can click Download File to save the output.
[
{"name": "Alice", "role": "Engineer", "location": "Berlin"},
{"name": "Bob", "role": "Designer", "location": "Tokyo"},
{"name": "Carol", "role": "Manager", "location": "New York"}
]
|^. |_. name |_. role |_. location |
|-. | Alice | Engineer | Berlin |
|-. | Bob | Designer | Tokyo |
|-. | Carol | Manager | New York |
| name | role | location |
|---|---|---|
| Alice | Engineer | Berlin |
| Bob | Designer | Tokyo |
| Carol | Manager | New York |
|_. name |_. role |_. location |
| Alice | Engineer | Berlin |
| Bob | Designer | Tokyo |
| Carol | Manager | New York |
| name | role | location |
| Alice | Engineer | Berlin |
| Bob | Designer | Tokyo |
| Carol | Manager | New York |
| Feature | Textile | Markdown |
|---|---|---|
| Header cells | |_. prefix | First row separated by --- |
| Cell alignment | <, =, > modifiers | :---, :---:, ---: in separator |
| Structural markers | ` | ^. / |
| Row spans / col spans | /\2. and \2. syntax | Not supported |
| CSS styling | {color:red}. inline | Not supported |
| Platforms | Redmine, Textpattern, Basecamp Classic | GitHub, GitLab, Jupyter, most static sites |
Choose Textile when your target platform is Redmine, Textpattern, or any system that renders Textile markup. Choose Markdown for GitHub, GitLab, Jupyter, or any CommonMark-compatible renderer.
JSON arrays of objects (most common): [{"key": "value"}, ...]
JSON arrays of arrays: [["value1", "value2"], ...]
Nested JSON objects (flattened to dot-notation keys)
No. All conversion happens locally in your browser using JavaScript. Your data never leaves your device.
Textile is a lightweight markup language that converts plain-text shorthand into HTML. It is used by Redmine, Textpattern, Basecamp Classic, and other platforms.
Redmine issue descriptions and wiki pages, Textpattern CMS articles, Basecamp Classic messages, and any platform that renders Textile markup.
It adds the |_. prefix to the first row of cells, rendering them as <th> header elements in the output HTML. Without this option, all rows render as regular <td> data cells.
It adds |^. markers before the header row and |-. markers before body rows. These create proper <thead> and <tbody> HTML sections for accessibility and semantic structure.
It escapes Textile special characters (|, ., -, ^) in cell values to prevent them from being interpreted as Textile formatting commands.
Yes. The output is compatible with Redmine's Textile renderer. Paste the generated table directly into Redmine issue descriptions, comments, or wiki pages.
The tool processes data entirely in your browser. Files up to 10 MB typically convert without issues on modern hardware.
Yes. The tool is responsive and works on smartphones and tablets.