{"id":42521693,"url":"https://github.com/1ay1/vibe","last_synced_at":"2026-01-28T15:32:55.840Z","repository":{"id":318768532,"uuid":"1076482680","full_name":"1ay1/vibe","owner":"1ay1","description":"VIBE - A human-friendly configuration format with minimal syntax and fast parsing. No YAML nightmares, no JSON comma catastrophes - just smooth, readable config 🌊","archived":false,"fork":false,"pushed_at":"2025-11-12T19:50:02.000Z","size":1174,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-12T21:20:25.330Z","etag":null,"topics":["c","c11","config-files","configuration","configuration-management","data-serialization","json","json-alternative","parser","vibe","yaml-alternative"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/1ay1.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-14T23:37:39.000Z","updated_at":"2025-11-12T19:50:06.000Z","dependencies_parsed_at":"2025-10-15T11:43:28.351Z","dependency_job_id":"cecec473-d2ea-4c86-b729-8c8f315497c7","html_url":"https://github.com/1ay1/vibe","commit_stats":null,"previous_names":["1ay1/vibe"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/1ay1/vibe","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1ay1%2Fvibe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1ay1%2Fvibe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1ay1%2Fvibe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1ay1%2Fvibe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/1ay1","download_url":"https://codeload.github.com/1ay1/vibe/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/1ay1%2Fvibe/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28846343,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-28T15:15:36.453Z","status":"ssl_error","status_checked_at":"2026-01-28T15:15:13.020Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c","c11","config-files","configuration","configuration-management","data-serialization","json","json-alternative","parser","vibe","yaml-alternative"],"created_at":"2026-01-28T15:32:55.059Z","updated_at":"2026-01-28T15:32:55.832Z","avatar_url":"https://github.com/1ay1.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VIBE 🌊\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![C11](https://img.shields.io/badge/C-11-blue.svg)](https://en.wikipedia.org/wiki/C11_(C_standard_revision))\n[![Version](https://img.shields.io/badge/version-1.0-green.svg)](https://github.com/1ay1/vibe)\n\n**VIBE** (Values In Bracket Expression) is a hierarchical configuration file format designed for human readability and fast machine parsing. It combines the visual clarity of structured formats with the simplicity of minimal syntax.\n\n\u003e Like its namesake, VIBE aims to create good vibes in your development workflow by eliminating the frustration of complex configuration formats. No more YAML indentation nightmares or JSON comma catastrophes - just smooth, readable config that flows naturally.\n\n## ✨ Features\n\n- 🎯 **Simple Syntax** - Only 5 token types, minimal punctuation\n- 👀 **Visual Hierarchy** - Structure is immediately apparent\n- ⚡ **Fast Parsing** - Single-pass O(n) with no backtracking\n- 🔒 **Unambiguous** - One canonical way to represent data\n- 💬 **Comments** - Built-in support with `#`\n- 🌍 **Unicode Support** - UTF-8 strings with proper escaping\n- 🎨 **Flexible Whitespace** - No significant indentation rules\n- 🔧 **Type Inference** - Automatic detection of integers, floats, booleans, strings\n- 🛡️ **Stability by Design** - Arrays of objects are forbidden, forcing stable named entities (see [Philosophy](docs/Stability_Paradox.md))\n\n## 📖 Quick Example\n\n```vibe\n# Application configuration\napplication {\n  name \"My Awesome App\"\n  version 2.1.0\n  debug false\n}\n\nserver {\n  host localhost\n  port 8080\n\n  ssl {\n    enabled true\n    cert_path /etc/ssl/cert.pem\n  }\n}\n\n# Server pool\nservers [\n  prod1.example.com\n  prod2.example.com\n  prod3.example.com\n]\n\n# Feature flags\nfeatures {\n  new_ui true\n  beta_api false\n  analytics true\n}\n```\n\n## 🚀 Quick Start\n\n### Installation\n\n```bash\ngit clone https://github.com/1ay1/vibe.git\ncd vibe\nmake\n```\n\n### 🎮 Interactive Parsing Tool\n\nVIBE includes a powerful **interactive parsing tool** with a beautiful TUI (Terminal User Interface) that visualizes the parsing process step-by-step:\n\n![VIBE Parser Tool Screenshot](docs/parser_tool_ss.png)\n\n```bash\nmake parser_tool\n./vibe_parser_tool examples/simple.vibe\n```\n\n**Features:**\n- 📊 Real-time visualization of parsing steps\n- 🎯 Current line highlighting with yellow background\n- 🔍 Token stream analysis with color-coded types\n- 📚 Interactive VIBE spec tutorial that teaches as you parse\n- 🔄 API call tracing with detailed parameters and results\n- 💾 Memory and performance statistics\n- ⏮️ Step forward/backward navigation\n- 🎨 Modern card-based UI with ASCII art\n\n**Keyboard Controls:**\n- `SPACE/N` - Step forward\n- `B` - Step backward\n- `Shift+B` - Fast backward (rewind to start)\n- `F` - Fast forward (jump to end)\n- `P` - Play/Pause auto-play mode\n- `R` - Reset to beginning\n- `Q` - Quit\n\nPerfect for learning VIBE syntax, debugging configs, and understanding how the parser works!\n\n### Basic Usage\n\n**Step 1:** Create a VIBE config file (`config.vibe`):\n\n```vibe\n# My application config\napplication {\n  name \"My Awesome App\"\n  version 1.0\n  debug false\n}\n\nserver {\n  host localhost\n  port 8080\n\n  ssl {\n    enabled true\n    cert /etc/ssl/cert.pem\n  }\n}\n\nservers [\n  prod1.example.com\n  prod2.example.com\n  prod3.example.com\n]\n```\n\n**Step 2:** Parse and use it in C (`myapp.c`):\n\n```c\n#include \"vibe.h\"\n#include \u003cstdio.h\u003e\n\nint main() {\n    // 1. Create parser\n    VibeParser* parser = vibe_parser_new();\n\n    // 2. Parse the config file\n    VibeValue* config = vibe_parse_file(parser, \"config.vibe\");\n\n    if (!config) {\n        VibeError error = vibe_get_last_error(parser);\n        fprintf(stderr, \"Error at line %d: %s\\n\", error.line, error.message);\n        vibe_parser_free(parser);\n        return 1;\n    }\n\n    // 3. Access values using dot notation paths\n    //    Format: \"object.nested_object.key\"\n    const char* name = vibe_get_string(config, \"application.name\");\n    int64_t port = vibe_get_int(config, \"server.port\");\n    bool debug = vibe_get_bool(config, \"application.debug\");\n    bool ssl = vibe_get_bool(config, \"server.ssl.enabled\");\n\n    printf(\"Application: %s\\n\", name ? name : \"Unknown\");\n    printf(\"Port: %lld\\n\", (long long)port);\n    printf(\"Debug mode: %s\\n\", debug ? \"ON\" : \"OFF\");\n    printf(\"SSL: %s\\n\", ssl ? \"enabled\" : \"disabled\");\n\n    // 4. Access arrays\n    VibeArray* servers = vibe_get_array(config, \"servers\");\n    if (servers) {\n        printf(\"\\nServers (%zu total):\\n\", servers-\u003ecount);\n        for (size_t i = 0; i \u003c servers-\u003ecount; i++) {\n            VibeValue* server = servers-\u003evalues[i];\n            if (server-\u003etype == VIBE_TYPE_STRING) {\n                printf(\"  %zu. %s\\n\", i + 1, server-\u003eas_string);\n            }\n        }\n    }\n\n    // 5. Clean up (frees entire config tree)\n    vibe_value_free(config);\n    vibe_parser_free(parser);\n\n    return 0;\n}\n```\n\n**Step 3:** Compile and run:\n\n```bash\ngcc -o myapp myapp.c vibe.c -std=c11\n./myapp\n```\n\n**Output:**\n```\nApplication: My Awesome App\nPort: 8080\nDebug mode: OFF\nSSL: enabled\n\nServers (3 total):\n  1. prod1.example.com\n  2. prod2.example.com\n  3. prod3.example.com\n```\n\n## 📚 Documentation\n\n### Full API Reference\n\nFor complete API documentation with detailed examples, see **[docs/API.md](docs/API.md)**\n\n**Quick Links:**\n- [Parser Management](docs/API.md#parser-management) - Creating and managing parsers\n- [Parsing Functions](docs/API.md#parsing-functions) - Parse strings and files\n- [Value Access](docs/API.md#value-access) - Access values with dot notation\n- [Object Operations](docs/API.md#object-operations) - Working with objects\n- [Array Operations](docs/API.md#array-operations) - Working with arrays\n- [Memory Management](docs/API.md#memory-management) - Cleanup and freeing\n- [Error Handling](docs/API.md#error-handling) - Handling parse errors\n- [Complete Examples](docs/API.md#usage-examples) - Full working examples\n\n### Syntax Overview\n\n#### Simple Assignment\n```vibe\nkey value\n```\n\n#### Objects\n```vibe\ndatabase {\n  host localhost\n  port 5432\n}\n```\n\n#### Arrays\n```vibe\nports [8080 8081 8082]\n\nservers [\n  server1.com\n  server2.com\n  server3.com\n]\n```\n\n#### Data Types\n\n- **Integers**: `42`, `-17`\n- **Floats**: `3.14`, `-0.5`\n- **Booleans**: `true`, `false`\n- **Strings**: `\"quoted\"` or `unquoted` (for simple values)\n\n#### Comments\n```vibe\n# Full line comment\nkey value  # Inline comment\n```\n\n#### String Escaping\n```vibe\nmessage \"Hello \\\"World\\\"\"\npath \"C:\\\\Users\\\\Name\"\nunicode \"Hello 世界\"\n```\n\n### API Reference\n\n#### Parser Management\n```c\nVibeParser* vibe_parser_new(void);\nvoid vibe_parser_free(VibeParser* parser);\n```\n\n#### Parsing Functions\n```c\nVibeValue* vibe_parse_string(VibeParser* parser, const char* input);\nVibeValue* vibe_parse_file(VibeParser* parser, const char* filename);\n```\n\n#### Value Access\n```c\nVibeValue* vibe_get(VibeValue* root, const char* path);\nconst char* vibe_get_string(VibeValue* value, const char* path);\nint64_t vibe_get_int(VibeValue* value, const char* path);\ndouble vibe_get_float(VibeValue* value, const char* path);\nbool vibe_get_bool(VibeValue* value, const char* path);\nVibeArray* vibe_get_array(VibeValue* value, const char* path);\nVibeObject* vibe_get_object(VibeValue* value, const char* path);\n```\n\n#### Object \u0026 Array Operations\n```c\nvoid vibe_object_set(VibeObject* obj, const char* key, VibeValue* value);\nVibeValue* vibe_object_get(VibeObject* obj, const char* key);\nvoid vibe_array_push(VibeArray* arr, VibeValue* value);\nVibeValue* vibe_array_get(VibeArray* arr, size_t index);\n```\n\n#### Cleanup\n```c\nvoid vibe_value_free(VibeValue* value);\n```\n\n#### Error Handling\n```c\nVibeError vibe_get_last_error(VibeParser* parser);\nvoid vibe_error_free(VibeError* error);\n```\n\n### Full Specification\n\nFor the complete format specification, see [SPECIFICATION.md](SPECIFICATION.md).\n\n## 🎯 Why VIBE?\n\n| Feature | VIBE | JSON | YAML | TOML |\n|---------|------|------|------|------|\n| Human Readable | ✅ | ❌ | ✅ | ✅ |\n| Minimal Syntax | ✅ | ❌ | ✅ | ✅ |\n| Visual Hierarchy | ✅ | ✅ | ❌ | ❌ |\n| Fast Parsing | ✅ | ✅ | ❌ | ✅ |\n| No Indentation Rules | ✅ | ✅ | ❌ | ✅ |\n| Comments | ✅ | ❌ | ✅ | ✅ |\n| Single Pass Parse | ✅ | ✅ | ❌ | ✅ |\n| No Reserved Words | ✅ | ❌ | ❌ | ❌ |\n\n**Choose VIBE when:**\n- Configuration files need to be human-readable and editable\n- Fast parsing is important\n- Visual structure clarity is valued\n- Simple syntax is preferred\n- You want to avoid indentation sensitivity (YAML) or verbosity (JSON/XML)\n\n## 🔨 Building \u0026 Testing\n\n### Build\n```bash\nmake                 # Build everything\nmake clean           # Clean build artifacts\n```\n\n### Run Examples\n```bash\nmake demo            # Quick demo\nmake test            # Run all tests\n./vibe_example simple.vibe\n./vibe_example config.vibe\n```\n\n### Integration\n\nTo use VIBE in your C project:\n\n1. Copy `vibe.h` and `vibe.c` to your project\n2. Add `vibe.c` to your build system\n3. Include `vibe.h` in your source files\n4. Link and compile with C11 support\n\n```bash\ngcc -std=c11 -c vibe.c\ngcc -std=c11 -o myapp myapp.c vibe.o\n```\n\n## 📋 Examples\n\nCheck out the `examples/` directory for more usage examples:\n- `simple.vibe` - Basic configuration with simple arrays\n- `config.vibe` - Complex nested structure using named objects\n- `web_server.vibe` - Web server configuration example\n- `database.vibe` - Database configuration with replicas\n- `example.c` - Complete C usage example\n\n## 🤝 Contributing\n\nContributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n### Areas for Contribution\n- Additional language implementations (Python, Rust, Go, JavaScript)\n- Schema validation tools\n- Editor plugins (VS Code, Vim, Emacs)\n- Conversion tools (JSON↔VIBE, YAML↔VIBE, TOML↔VIBE)\n- Performance optimizations\n- More comprehensive test suite\n\n## 📜 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## 🗺️ Roadmap\n\n- [x] Core parser implementation (C)\n- [x] Complete specification\n- [ ] Python bindings\n- [ ] Rust implementation\n- [ ] JavaScript/Node.js implementation\n- [ ] Go implementation\n- [ ] VS Code syntax highlighting extension\n- [ ] Schema validation support\n- [ ] Format converter tools\n- [ ] Benchmark suite\n\n## 📞 Support\n\n- 📖 Read the [Specification](SPECIFICATION.md)\n- 💬 Open an [Issue](https://github.com/1ay1/vibe/issues)\n- 🌟 Star the project if you find it useful!\n\n## 🎉 Acknowledgments\n\nInspired by the need for a configuration format that's:\n- Simpler than YAML\n- More readable than JSON\n- Faster to parse than both\n- More flexible than TOML\n\n---\n\n**Keep calm and VIBE on!** 🌊\n\n*Configuration doesn't have to be complicated. Sometimes the best solution is the one that just feels right.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F1ay1%2Fvibe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F1ay1%2Fvibe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F1ay1%2Fvibe/lists"}