Convert Properties to Textile

Drag and drop files here or click to select.
Max file size 100mb.
Uploading progress:

Properties vs Textile Format Comparison

Aspect Properties (Source Format) Textile (Target Format)
Format Overview
Properties
Java Properties File

The standard configuration format for Java applications and Spring Boot services. Properties files store settings as key=value pairs with dotted namespace conventions (e.g., spring.jpa.hibernate.ddl-auto). They support line comments with # or !, multi-line values with backslash continuation, and Unicode escape sequences for internationalized content.

Key-Value Pairs Configuration
Textile
Textile Markup Language

A lightweight markup language that converts plain text into styled HTML. Textile provides concise syntax for headings, bold, italic, links, images, tables, and lists. It is the native markup for Redmine project management, Textpattern CMS, and several other web platforms. Textile prioritizes readability in both source and rendered forms.

Markup Language Web Publishing
Technical Specifications
Structure: Line-oriented key=value pairs
Encoding: ISO 8859-1 (Latin-1) / UTF-8
Format: java.util.Properties specification
Compression: None
Extensions: .properties
Structure: Inline markup with special characters
Encoding: UTF-8
Format: Textile markup specification
Compression: None
Extensions: .textile, .txt
Syntax Examples

Key-value pairs with dotted notation:

# Actuator endpoints
management.endpoints.web.exposure.include=health,info,metrics
management.endpoint.health.show-details=always
management.metrics.export.prometheus.enabled=true

Textile with tables and formatting:

h2. Actuator Endpoints

|_. Property |_. Value |
| @management.endpoints.web.exposure.include@ | health,info,metrics |
| @management.endpoint.health.show-details@ | always |
| @management.metrics.export.prometheus.enabled@ | true |

*Note:* Prometheus metrics export is enabled.
Content Support
  • Key-value pairs with = or : separators
  • Comments with # or ! prefix
  • Dotted hierarchical key notation
  • Multi-line values with backslash continuation
  • Unicode escape sequences (\uXXXX)
  • Blank line separation for grouping
  • Property placeholders (${key})
  • Headings (h1. through h6.)
  • Bold (*text*), italic (_text_), code (@text@)
  • Tables with header rows and alignment
  • Ordered and unordered lists
  • Links and images
  • Block quotes and code blocks
  • CSS class and ID assignment
  • Footnotes and abbreviations
Advantages
  • Dead-simple key=value syntax
  • Native Java/JVM ecosystem support
  • Spring Boot auto-configuration
  • Easy to parse programmatically
  • Widely supported across languages
  • Minimal learning curve
  • Clean, intuitive table syntax
  • Native Redmine integration
  • Readable in both source and rendered forms
  • Built-in CSS class support
  • Compact syntax compared to HTML
  • Inline code formatting (@code@)
  • Automatic typographic quotes
Disadvantages
  • No hierarchical nesting (flat structure)
  • No data types (everything is a string)
  • No array or list support natively
  • Default encoding is Latin-1, not UTF-8
  • No standard schema validation
  • Smaller community than Markdown
  • Limited platform support outside Redmine
  • Fewer tutorials and resources available
  • No table of contents generation
  • Some syntax can be ambiguous
Common Uses
  • Spring Boot application configuration
  • Java application settings
  • Internationalization (i18n) resource bundles
  • Build tool configuration (Gradle, Maven)
  • Environment-specific deployments
  • Redmine wiki pages and tickets
  • Textpattern CMS content
  • Project documentation on Redmine
  • Issue tracker descriptions
  • Internal wiki documentation
  • Quick web content authoring
Best For
  • JVM application configuration
  • Simple key-value storage
  • Locale-specific message bundles
  • Environment variable mapping
  • Redmine project documentation
  • Wiki-based knowledge bases
  • Quick formatted web content
  • Team collaboration documents
Version History
Introduced: Java 1.0 (1996)
Current Version: Part of java.util since JDK 1.0
Status: Stable, widely used
Evolution: XML properties variant added in Java 5
Introduced: 2002 (Dean Allen)
Current Version: Textile 2 (RedCloth 4.x)
Status: Stable, maintained
Evolution: Adopted by Redmine, influenced Markdown
Software Support
Java: java.util.Properties (built-in)
Spring: @PropertySource, application.properties
IDEs: IntelliJ, Eclipse, VS Code
Other: Python configparser, Node.js properties-parser
Redmine: Native Textile rendering
Ruby: RedCloth gem
Python: textile library
Other: Textpattern CMS, Pandoc (conversion)

Why Convert Properties to Textile?

Converting Java Properties files to Textile markup creates formatted configuration documentation that integrates directly with Redmine, one of the most popular open-source project management tools. Many development teams use Redmine for issue tracking, wiki documentation, and project management. Textile-formatted configuration references can be pasted directly into Redmine wiki pages, issue descriptions, and project documentation without any additional processing.

Textile's table syntax is exceptionally clean and readable compared to alternatives. A properties table in Textile uses the simple pipe-delimited format with header markers (|_. for header cells), producing well-formatted tables that render beautifully in web browsers. Property keys formatted with @inline code@ markers display in monospaced font, making them visually distinct from descriptive text and values. This native table support makes Textile ideal for presenting key-value configuration data.

For teams managing microservice configurations in Redmine, Textile conversion enables a documentation workflow where configuration changes are tracked alongside code changes. Each microservice can have a Redmine wiki page with its current configuration reference, formatted with proper headings for each property group, tables for key-value pairs, and annotated notes for critical settings. When properties change, the Textile can be regenerated and updated on the wiki.

Textile's CSS class and ID support allows for customized styling of configuration documentation. Critical security properties can be highlighted with custom classes, deprecated settings can be styled with strikethrough, and environment-specific values can be color-coded. This styling capability, combined with Textile's clean syntax, produces configuration documentation that is both informative and visually organized.

Key Benefits of Converting Properties to Textile:

  • Redmine Native: Paste directly into Redmine wiki pages and issue descriptions
  • Clean Table Syntax: Intuitive pipe-delimited tables with header support
  • Inline Code Markers: Property keys formatted with @code@ for monospaced display
  • CSS Class Support: Custom styling for different property categories
  • Readable Source: Textile source is human-readable even before rendering
  • Quick Formatting: Headings, bold, lists, and links with minimal syntax
  • Wiki Integration: Seamless fit for wiki-based documentation workflows

Practical Examples

Example 1: Spring Boot Configuration Wiki Page

Input Properties file (application.properties):

# Application settings
spring.application.name=billing-service
server.port=8080
server.servlet.context-path=/api/billing

# Database
spring.datasource.url=jdbc:mysql://db-host:3306/billing
spring.datasource.username=billing_svc
spring.datasource.pool-size=20

Output Textile file (application_config.textile):

h1. Billing Service Configuration

h2. Application Settings

|_. Property |_. Value |
| @spring.application.name@ | billing-service |
| @server.port@ | 8080 |
| @server.servlet.context-path@ | /api/billing |

h2. Database Configuration

|_. Property |_. Value |
| @spring.datasource.url@ | @jdbc:mysql://db-host:3306/billing@ |
| @spring.datasource.username@ | billing_svc |
| @spring.datasource.pool-size@ | 20 |

p(note). Database connection pool is configured with 20 connections.
Adjust based on expected load.

Example 2: Monitoring Configuration for Redmine Ticket

Input Properties file (monitoring.properties):

# Actuator and Prometheus
management.endpoints.web.exposure.include=health,info,metrics,prometheus
management.endpoint.health.show-details=always
management.metrics.export.prometheus.enabled=true
management.metrics.tags.application=${spring.application.name}

# Health checks
management.health.db.enabled=true
management.health.redis.enabled=true
management.health.diskspace.threshold=10485760

Output Textile file (monitoring_config.textile):

h1. Monitoring Configuration

h2. Actuator Endpoints

|_. Property |_. Value |_. Description |
| @management.endpoints.web.exposure.include@ | health,info,metrics,prometheus | Exposed actuator endpoints |
| @management.endpoint.health.show-details@ | always | Show full health details |
| @management.metrics.export.prometheus.enabled@ | *true* | Prometheus export active |
| @management.metrics.tags.application@ | @${spring.application.name}@ | Auto-tagged from app name |

h2. Health Checks

|_. Check |_. Enabled |_. Threshold |
| Database | !/images/icons/true.png! Yes | - |
| Redis | !/images/icons/true.png! Yes | - |
| Disk Space | !/images/icons/true.png! Yes | 10 MB |

h3. Notes

* Prometheus scraping endpoint: @/actuator/prometheus@
* Health endpoint: @/actuator/health@
* Disk space threshold is set to *10 MB* minimum free space

Example 3: Multi-Environment Comparison Table

Input Properties file (application-dev.properties):

# Development environment
spring.profiles.active=dev
server.port=8080
logging.level.root=DEBUG
spring.datasource.url=jdbc:h2:mem:devdb
spring.h2.console.enabled=true
spring.jpa.show-sql=true

Output Textile file (dev_config.textile):

h1. Development Environment Configuration

p(%. Profile: *dev*

h2. Server Settings

|_. Property |_. Value |
| @spring.profiles.active@ | dev |
| @server.port@ | 8080 |

h2. Logging

|_. Logger |_. Level |
| Root | *DEBUG* |

p>. _Debug logging is enabled for development._

h2. Database (H2 In-Memory)

|_. Property |_. Value |
| @spring.datasource.url@ | @jdbc:h2:mem:devdb@ |
| @spring.h2.console.enabled@ | *true* |
| @spring.jpa.show-sql@ | *true* |

bq. The H2 web console is accessible at @/h2-console@ for
development database inspection. *Do not enable in production.*

h3. Development-Only Features

# H2 in-memory database (no external DB required)
# SQL logging enabled for query debugging
# H2 console available for direct database access

Frequently Asked Questions (FAQ)

Q: What is Textile markup format?

A: Textile is a lightweight markup language created by Dean Allen in 2002 for converting plain text into styled HTML. It is the native markup format for Redmine project management software and Textpattern CMS. Textile provides clean syntax for headings (h1., h2.), bold (*text*), italic (_text_), code (@text@), tables (| delimited), and lists.

Q: Can I paste the output directly into Redmine?

A: Yes, Redmine uses Textile as its default markup language. The converted output can be pasted directly into Redmine wiki pages, issue descriptions, issue comments, and project documentation. The tables, headings, and formatting will render correctly without any modifications.

Q: How are property keys formatted in Textile?

A: Property keys are wrapped in Textile's inline code markers (@property.key@), which renders them in a monospaced font with a subtle background. This makes property names visually distinct from regular text and values, improving readability in the rendered output.

Q: Does Textile support syntax-highlighted code blocks?

A: Textile supports code blocks using the bc. prefix for block code. In Redmine, you can also use <pre><code class="properties"> for syntax-highlighted blocks. The converter wraps original properties snippets in appropriate code blocks that render with proper formatting in Textile-compatible platforms.

Q: How are property groups organized in the Textile output?

A: Properties are grouped by their dotted namespace prefix and organized under Textile headings (h2., h3.). Each group is presented as a formatted table with header rows (|_. Property |_. Value |). Comments from the original file become descriptive paragraphs between sections.

Q: Is Textile similar to Markdown?

A: Textile and Markdown are both lightweight markup languages with similar goals but different syntax. Textile predates Markdown (2002 vs 2004) and offers features like CSS class assignment and more flexible table syntax. However, Markdown has a larger community. The main reason to use Textile is for Redmine and Textpattern integration.

Q: Can I convert the Textile output to other formats?

A: Yes, Pandoc can convert Textile to Markdown, HTML, PDF, DOCX, and many other formats. Ruby's RedCloth library converts Textile to HTML. This makes Textile a useful intermediate format if you need to generate multiple output formats from your properties documentation.

Q: Does the conversion preserve the original properties file structure?

A: Yes, the converter maintains the logical grouping and ordering of properties. Comments, blank lines, and property groups from the original file are reflected in the Textile output as sections, headings, and table groupings. The overall structure is preserved while adding rich formatting and organization.