🎉 Get development news in the blog (last update October 15th) and newsletter.
A modern plaintext data format for file-based content. More
enoauthor: Jane Doe
email: jane@eno-lang.org

-- my_content
Multi-line embedded content (e.g. markdown) here ...
-- my_content

states:
active = #fff
hover = #b6b6b6

# cities
Den Haag: 52.069961, 4.302315
Málaga: 36.721447, -4.421291
서울특별시: 37.566984, 126.977041

# cities expanded < cities
Springfield: 38.790312, -77.186418

Overview:

  • Aesthetic, intuitive and simple
  • Inclusively designed for you and your team
  • Predefined and custom type support for keys, values and comments
  • Elements and hierarchies can be copied and merged for complex usecases

Usecases:

  • Authoring blogs, up to entire websites, from the macro to the micro level
  • Generating documentation, invoices, CVs, reports, you name it
  • Large scale textfile-based databases and archives
  • Configuration files, from the simplest to the most complex

More about eno

enolib
The cross-language eno standard library. More
javascriptimport enolib from 'enolib';

const document = enolib.parse(`
  author: Jane Doe
  title:
`);

document.field('author').requiredStringValue();
  // returns 'Jane Doe'
  
document.field('title').requiredStringValue();
  // throws "The field 'title' must contain a value.
  //
  //   Line | Content
  //      1 | author: Jane Doe
  // >    2 | title:
  //

Overview:

  • Dynamically extensible query API for custom and third party type support
  • Cursor lookup API (by index or line/column) for easy authoring of rich IDE plugins
  • Querying equals validating - guaranteed data structure and type-safety
  • Fully localized, handwritten, team-friendly error messages
  • Rich error metadata: message, document snippet, cursor position, selection range

Usecases:

  • Static site generation, scalable up to massive amounts of content
  • Generating documentation, code, reports, invoices, CVs, you name it
  • Highly reliable application configuration data with minimal development effort
  • Content management tooling for apps, websites, editors, IDEs, ...

More about enolib

enotype
Functional type implementations for use with (or without) enolib. More
javascriptimport { latLng } from 'enotype';

latLng('36.721447, -4.421291');
  // returns { lat: 36.721447, lng: -4.421291 } 

enolib.register({ latLng });

document.section('cities').field('Málaga').requiredLatLngValue();
  // returns { lat: 36.721447, lng: -4.421291 }

enotype is a collection of functions that convert unsafe string input to safe, native types. It is the standard type library for enolib but can be utilized in a multitude of other contexts as well.

More about enotype

tree-sitter parser, PHP, Tcl & Java libraries, legacy resources More

tree-sitter-eno - Tree-sitter parser for eno (usable with C, C++, Rust, WebAssembly, JavaScript, Python, Ruby, Haskell)
enophp - Official PHP library (compliant with eno first, see below)
enotcl - Tcl parser
Enohar - (Incomplete) Java library for parsing and emitting Eno documents
eno first - Legacy ecosystem and documentation for eno's first specification