Go to Sign up
Note: Your files never leave your device. We don't upload, transfer, or store your data.
|
|
|
|
|---|---|---|
|
|
|
The Markdown To INI Converter on A.Tools transforms Markdown pipe-delimited tables into INI configuration file format. The conversion is automatic — paste your table, edit if needed, and generate key-value pairs ready for .ini files. All processing runs in your browser. No data leaves your device.
INI files are one of the oldest and most widely supported configuration formats. From Windows desktop.ini to Python configparser, from PHP php.ini to Git .gitconfig, the INI format remains a universal standard for application settings.
Click Enter Data to paste a Markdown table into the input area, or click Choose File to drag and drop a .md file. Press Sample to load example data.
Once parsed, an interactive spreadsheet appears. Use the toolbar to:
Add or delete rows and columns
Transpose the table (swap rows and columns)
Remove duplicate rows
Delete empty rows and columns
Change text case (UPPERCASE, lowercase, Capitalize)
Find and replace values — supports case-sensitive search and regex
Toggle First Row as Header to define field names
Right-click any cell for context-menu operations.
Click Convert to generate INI output. Use Copy to Clipboard or Download File to save as a .ini file.
Two input modes: Paste Markdown directly or upload a .md file via drag-and-drop
Full table editor: Edit, transpose, deduplicate, find-and-replace before converting
Automatic conversion: No configuration needed — table columns map directly to INI keys and values
Client-side processing: Files never leave the browser — zero data upload
Undo/Redo: Full edit history with revert support
Context menu: Right-click for quick row/column/cell operations
Header toggle: Treat the first row as field names or regular data
Validation indicator: Real-time feedback on input validity
Given this Markdown input:
| key | value |
|-----------|----------------|
| host | localhost |
| port | 8080 |
| debug | true |
| log_level | info |
The converter generates:
host = localhost
port = 8080
debug = true
log_level = info
When the table has three columns, the first column becomes the section name, the second becomes the key, and the third becomes the value:
| section | key | value |
|------------|-----------|----------------|
| database | host | localhost |
| database | port | 5432 |
| database | name | myapp |
| server | host | 0.0.0.0 |
| server | port | 8080 |
| server | debug | true |
Output:
[database]
host = localhost
port = 5432
name = myapp
[server]
host = 0.0.0.0
port = 8080
debug = true
If the first column starts with # or ;, the row is treated as a comment:
| key | value |
|-------------|--------------|
| # Database | settings |
| db_host | localhost |
| db_port | 3306 |
| ; Cache | settings |
| cache_enabled | true |
Output:
; Database settings
db_host = localhost
db_port = 3306
; Cache settings
cache_enabled = true
INI is a plain-text configuration format introduced with Windows 3.x in the early 1990s. Despite its age, it remains one of the most portable and human-readable config formats. An INI file consists of:
Sections — Headings in square brackets: [section_name]
Keys and values — Pairs separated by = or :: key = value
Comments — Lines starting with ; or #: ; this is a comment
| Element | Syntax | Example |
|---|---|---|
| Section | [name] | [database] |
| Key-value pair | key = value | host = localhost |
| Comment | ; text or # text | ; database config |
| Blank line | (empty) | Separates sections visually |
| Inline comment | key = value ; comment | `port = 8080 ; HTTP port |
| Feature | INI | JSON | YAML | TOML |
|---|---|---|---|---|
| Sections | [section] | Nested objects | Nested maps | [section] |
| Key-value | key = value | "key": "value" | key: value | key = "value" |
| Comments | ; or # | Not supported | # | # |
| Nested data | Not supported | Full support | Full support | Full support |
| Arrays | Not supported | Full support | Full support | Full support |
| Types | Strings only | All types | All types | All types |
| Readability | Excellent | Good | Good | Excellent |
| Portability | Universal | Universal | Requires parser | Growing support |
INI is best suited for flat key-value configurations. It does not natively support:
Nested sections — Only one level of grouping
Arrays or lists — Values are always strings
Typed values — Numbers, booleans, and null are all strings
Multiline values — Each value must be on a single line
For complex configurations, consider using Markdown To TOML or Markdown To YAML instead.
| Application | File | Purpose |
|---|---|---|
| Python | setup.cfg, tox.ini | Package and test configuration |
| PHP | php.ini | Runtime configuration |
| Git | .gitconfig | User preferences |
| Windows | desktop.ini, win.ini | System and folder settings |
| Ansible | ansible.cfg | Automation settings |
| MySQL | my.ini | Database server config |
| PHPUnit | phpunit.xml attributes | Test runner configuration |
| Supervisor | supervisord.conf | Process manager settings |
| Mercurial | .hgrc | Version control settings |
| AWS CLI | credentials, config | Cloud authentication |
| Scenario | How This Tool Helps |
|---|---|
Create Python setup.cfg | Convert a spec table into INI sections |
| Generate application config | Turn a settings spreadsheet into .ini |
| Configure Ansible | Build ansible.cfg from documentation tables |
| Set up Git config | Create .gitconfig entries from a key-value list |
| Document server settings | Keep settings in Markdown, export to INI for deployment |
| Create Docker-like configs | Generate INI files for container configuration |
| PHP configuration | Build custom php.ini overrides from tabular data |
| Test fixtures | Generate INI test data for unit tests |
import configparser
config = configparser.ConfigParser()
config.read("settings.ini")
host = config["database"]["host"]
port = config["database"].getint("port")
$config = parse_ini_file("settings.ini", true);
$host = $config["database"]["host"];
$port = $config["database"]["port"];
[user]
name = Jane Doee
mail = [email protected]
[core]
editor = vim
autocrlf = false
[push]
default = current
[defaults]
inventory = hosts
remote_user = ansible
host_key_checking = False
retry_files_enabled = False
[privilege_escalation]
become = True
become_method = sudo
No. All file parsing and conversion runs in your browser using JavaScript. Your data stays on your device. A.Tools never receives, stores, or transmits your file contents.
The tool supports standard pipe-delimited Markdown tables following the CommonMark specification, including tables with or without leading/trailing pipes and alignment indicators.
For a two-column table, the first column becomes the key and the second becomes the value: key = value. For a three-column table, the first column becomes the section name, the second becomes the key, and the third becomes the value: [section] then key = value.
No. The INI format supports only one level of sections. For nested configurations, consider using Markdown To TOML or Markdown To YAML instead.
No. All values in INI files are plain strings. Parsers like Python's configparser provide methods (.getint(), .getboolean(), .getfloat()) to convert strings to typed values at read time.
Use .ini for standard INI files. Some applications use .cfg, .conf, or .config — the format is the same.
Yes. After parsing, the full table editor lets you modify cells, add or remove rows and columns, transpose, deduplicate, change text case, and find-and-replace values.
Processing is client-side, so the limit depends on your browser's memory. Tables with tens of thousands of rows work reliably on modern browsers.