
Page generated from: QuickStart_v4.4.md
Learn SET Files in 5 minutes
SET Files are Human and AI - readable text files, for storing settings and configuration data.
One flexible format with two flavors:
Q-Set (.qset ) - Quick SET files, the baseline standard
myconfig.qset
That's the filename on the first line. That's it, no data yet but it's a valid SET file.
Groups are sections that hold related data. Start with [GROUPNAME]:
myconfig.qset
[DATABASE]
Host|localhost
Port|5432
User|admin
Rules:
[NAME]| to separate fieldsThat's a valid Q-Set file. You can read it, edit it, parse it.
[SETTINGS]
AppName|My App
Theme|dark
Language|en-US
Protocol|RS232|9600|8|N|1
Use for: Configuration, preferences, simple settings
[USERS]
{id|name|email}
1|Alice|alice@example.com
2|Bob|bob@example.com
3|Carol|carol@example.com
The {field|names} line is optional but helpful for documentation.
Use for: Lists, tables, structured data
For long text (descriptions, licenses, etc.), use text groups:
myapp.qset
[APP_INFO]
Name|My Application
Description|[{APP_DESCRIPTION}]
[{APP_DESCRIPTION}]
This is my application.
It does many things across
multiple lines of text.
No escaping needed!
Pipes | are literal!
Backslashes \ too!
Text groups:
[{NAME}][{NAME}] in regular fields[EOG] needed (groups end automatically)___CODEBLOCK_5___
Use the secondary delimiter ! for arrays within fields:
[MENU]
{id|label|items}
1|File|New!Open!Save!Exit
2|Edit|Undo!Redo!Cut!Copy
3|View|Zoom In!Zoom Out
Parse on | first to get fields, then split on ! to get nested items.
Use for: Menus, categories, multi-value fields
If your data contains a pipe |, just add a backslash: \|
[DATA]
Expression|value > 10 \| value < 5
Path|C:\\Program Files\\MyApp
\| becomes a literal pipe in the dataAny text outside groups is a comment:
myconfig.qset
This is a comment.
It explains what this file does.
[SETTINGS]
Port|8080
Comments immediately before a group are considered documentation for that group.
myconfig.qset
Application configuration
Created: 2025-01-22
[DATABASE]
Host|localhost
Port|5432
Database|myapp
[SETTINGS]
Theme|dark
Language|en-US
MaxUsers|50
[USERS]
{id|name|email}
1|alice|alice@example.com
2|bob|bob@example.com
[MENU]
File|New!Open!Save!Exit
Edit|Undo!Redo!Cut!Copy
[{WELCOME_MESSAGE}]
Welcome to My Application!
Get started by configuring your settings above.
[EOG]
python
# Read the file
lines = read_file("myconfig.qset")
# Find groups
for line in lines:
if line.startswith('[{'):
# Text group - collect everything until next group
text_block_name = extract_name(line)
# No escaping, all literal
elif line.startswith('['):
# Regular group
group_name = extract_name(line)
# Collect data until blank line or next group
elif in_group:
# Split on | for fields
fields = line.split('|')
# Optionally split fields on ! for nested arrays
That's it. Split lines on | (pipe-delimited array), store in a dictionary or object.
With just these Q-Set basics you can:
One-Page Summary:
When you need features beyond Q-Set baseline:
X-Set adds optional extensions:
; or : instead of |[THIS-FILE] Group at the top (if used, it is always the first Group)X-SET|extension:version!another:version.xset
advanced.xset
[THIS-FILE]
X-SET|Delimiters:2.1!SetQL:3.6
[DELIMITERS]
Primary|#
[CONFIG]
Path#C:\Program Files\MyApp
Expression#value > 10 | value < 5
See X-Set Overview for details.
Q-Set Essentials:
[NAME] (no spaces to the left of [)[{NAME}]| pipe! secondary delimiter\|myfile.qset[SETTINGS]Key|Value pairs
myfile.qset
[SETTINGS]
AppName|My App
Version|1.0.0
Configuration file:
[DATABASE]
Host|localhost
Port|5432
[APP]
Name|MyApp
Debug|false
Data table:
[PRODUCTS]
{id|name|price}
1|Widget|10.00
2|Gadget|25.00
With documentation:
[INFO]
Name|MyApp
License|[{LICENSE}]
[{LICENSE}]
MIT License
Copyright (c) 2025...
[EOG]
Learn More: