Changes for version 0.199_003 - 2026-09-01
- GH-272 - Document the public facade - new `YATT::Lite::Site` pod (execution contracts), Factory.pod DESCRIPTION, readme CLI section
- GH-270 - Modularize yatt.genperl as `YATT::Lite::CLI::GenPerl`
- GH-269 - Unify yatt.lint onto Inspector::lint - default output is now `FILE:LINE: MESSAGE` (old shape via `--format=old`); fix dropped multi-error lines and line off-by-one
- GH-268 - Add `YATT::Lite::CLI` base class for yatt.* tools; rewrite yatt.render on the Site facade
- GH-267 - chdir becomes a restoring guard and now applies to the render path too (Compatibility option: `no_chdir`); add `$CON->system`
- GH-266 - Add `YATT::Lite::Site` - public facade API (`load` / `request` / `render_file`) with `YATT::Lite::Response`
Changes for version 0.199_002 - 2026-08-31
- GH-264 - New parser option `allow_bare_entity_in_decl` - quotes around entities in declarations are now omissible
- GH-262 - Fix EntNS confliction regression - base <-> widget-use circular references work again (drop eager base compile in declare_base)
- GH-260 - Lexically normalize app_root/doc_root (fix silently broken sibling config_dir when app_root ends with `..`)
- GH-259 - `mkquery($CON)` no longer reproduces POST body parameters (Compatibility option: `mkquery_with_body_params`)
- GH-258 - Fix body boundary of action/entity parts swallowing a following `<!yatt:argmacro>` declaration
- GH-256 - Add `<!yatt:import>` declaration (widget/page/action/entity/argmacro)
- GH-255 - Fix two `<!yatt:base>` inheritance bugs - first-hit dispatch failure and stale caller-side arg mapping
- GH-254 - `<yatt:foo if="COND">` / `unless=` now generates conditional call (port from yatt-pm)
- GH-252 - `app.yml` can now be placed in the sibling config dir (`*.config.d/`) too
- GH-251 - better URL generation methods/entities, add raise_redirect alias.
- GH-250 - trim trailing `/` of `&yatt:script_name;`
- GH-249 - Add `yatt:foreach` alternate syntax `var=value`
- GH-248 - Fix inspector to correctly locate inline entity
- GH-247 - `<!yatt:base>` is now always checked during refresh
- GH-246 - extend `&yatt:value_checked();` `&yatt:value_selected();`
- GH-244 - Fix line number glitch for suppressed default widget
- GH-243 - genperl now works with `<!yatt:base>`
- GH-242 - Restrict `<!yatt:...` linestart only
- GH-241 - `:mkhidden(name[])`, `:param(name[])` works as expected (for nested_query)
- GH-239 - LSP: textDocument/completion (partial support)
- GH-233 - Drop `cf_` prefix
Documentation
Loose but Recursive XML (LRXML) format.
Extended Header Fields (XHF) フォーマットの構文定義
Extended Header Fields (XHF) format.
perl プログラマー向け yatt 内部構造解説(日本語版)
programmer's guide for YATT
初めにお読み下さい (日本語版)
Introduction to YATT::Lite
課題の一覧
or Modern use of fields.pm and %FIELDS.
なんでやっとやんの?
Perl Monger のための yatt (YATT::Lite) ガイド
yatt 構文マニュアル (日本語版)
yatt syntax manual
plackup alike for yatt_lite
Modules
Template with "use strict"
Loader for YATT::Lite
Language Server for YATT::Lite
fields for multiple inheritance.
fields based, Tcl/Tk like object
public facade API of YATT::Lite
define inner types at compile time.
output buffer with request properties
(Revised) Session support for YL
PSGI Handler for yatt
Loader for XHF format
Serializer for XHF format
Provides
in Lite/Breakpoint.pm
in Lite/CGen.pm
in Lite/CGen/ArgMacro.pm
in Lite/CGen/Perl.pm
in Lite/CLI.pm
in Lite/CLI/GenPerl.pm
in Lite/CLI/Lint.pm
in Lite/CLI/Render.pm
in Lite.pm
in Lite/Connection.pm
in Lite/Constants.pm
in Lite/Core.pm
in Lite/Entities.pm
in Lite/Error.pm
in Lite/Inc.pm
in Lite/Inspector.pm
in Lite/LRXML.pm
in Lite/LRXML/ParseBody.pm
in Lite/LRXML/ParseEntpath.pm
in Lite/LRXML/AltTree.pm
in Lite/LRXML/FormatEntpath.pm
in Lite/LRXML/ParseBody.pm
in Lite/LRXML/ParseEntpath.pm
in Lite/LanguageServer/Generic.pm
in Lite/LanguageServer/Protocol.pm
in Lite/LanguageServer/Spec2Types.pm
in Lite/LanguageServer/SpecParser.pm
in Lite/MFields.pm
in Lite/Macro.pm
in Lite/NSBuilder.pm
in Lite/PSGIEnv.pm
in Lite/Partial.pm
in Lite/Partial/AppPath.pm
in Lite/Partial/ErrorReporter.pm
in Lite/Partial/Gettext.pm
in Lite/Partial/MarkAfterNew.pm
in Lite/RegexpNames.pm
in Lite/Response.pm
in Lite/Response.pm
in Lite/Site/Registry.pm
in Lite/Test/TestFCGI.pm
in Lite/Test/TestUtil.pm
in Lite/Test/XHFTest.pm
in Lite/Test/XHFTest2.pm
in Lite/Test/XHFTest.pm
in Lite/Types.pm
in Lite/Util.pm
in Lite/Util/AllowRedundantSprintf.pm
in Lite/Util/AsBase.pm
in Lite/Util/CGICompat.pm
in Lite/Util/CmdLine.pm
in Lite/Util/CycleDetector.pm
in Lite/Util/Enum.pm
in Lite/Util/File.pm
in Lite/Util/FindMethods.pm
in Lite/VFS.pm
in Lite/VarMaker.pm
in Lite/VarTypes.pm
in Lite/VarTypes.pm
in Lite/VarTypes.pm
in Lite/Walker.pm
in Lite/WebMVC0/DBSchema.pm
in Lite/WebMVC0/DBSchema/DBIC.pm
in Lite/WebMVC0/DBSchema/DBIC.pm
in Lite/WebMVC0/DirApp.pm
in Lite/WebMVC0/Partial/LangSwitch.pm
in Lite/WebMVC0/Partial/Session.pm
in Lite/WebMVC0/Partial/Session3.pm
in Lite/WebMVC0/SiteApp/CGI.pm
in Lite/WebMVC0/SiteApp/FCGI.pm
in Lite/WebMVC0/SiteApp/CGI.pm
in Lite/WebMVC0/SiteApp/FCGI.pm
in Lite/WebMVC0/SubRoutes.pm
in Lite/XHF/StoreDir.pm
Examples
- samples/README
- samples/basic/1/.symlinks
- samples/basic/1/app.psgi
- samples/basic/1/html/envelope.ytmpl
- samples/basic/1/html/foo.ydo
- samples/basic/1/html/foobar.yatt
- samples/basic/1/html/index.yatt
- samples/basic/1/html/noncode.ydo
- samples/basic/1/html/perlerr.yatt
- samples/basic/1/html/varerr.yatt
- samples/basic/1/t/.htaccess
- samples/basic/1/t/1-basic.xhf
- samples/basic/1/t/fcgi_offline.t
- samples/basic/1/t/http_localhost.t
- samples/basic/1/t/lntests.zsh
- samples/basic/1/t/offline.t
- samples/basic/1/t/psgi_offline.t
- samples/basic/1/t/t_lib.pl
- samples/basic/10/app.psgi
- samples/basic/10/app.xhf
- samples/basic/10/html/dot.htaccess
- samples/basic/10/html/index.html
- samples/basic/10/t/.htaccess
- samples/basic/10/t/1-basic.xhf
- samples/basic/10/t/fcgi_offline.t
- samples/basic/10/t/http_localhost.t
- samples/basic/10/t/offline.t
- samples/basic/10/t/psgi_offline.t
- samples/basic/11/app.psgi
- samples/basic/11/html/base1.ytmpl
- samples/basic/11/html/base2/bar.ytmpl
- samples/basic/11/html/t1.yatt
- samples/basic/11/html/t2.yatt
- samples/basic/11/t/.htaccess
- samples/basic/11/t/1-basic.xhf
- samples/basic/11/t/fcgi_offline.t
- samples/basic/11/t/http_localhost.t
- samples/basic/11/t/offline.t
- samples/basic/11/t/psgi_offline.t
- samples/basic/12/app.psgi
- samples/basic/12/html/.htyattconfig.xhf
- samples/basic/12/html/.htyattrc.pl
- samples/basic/12/html/index.yatt
- samples/basic/12/t/.htaccess
- samples/basic/12/t/1-basic.xhf
- samples/basic/12/t/fcgi_offline.t
- samples/basic/12/t/http_localhost.t
- samples/basic/12/t/offline.t
- samples/basic/12/t/psgi_offline.t
- samples/basic/12/ytmpl/.htyattrc.pl
- samples/basic/12/ytmpl/part.ytmpl
- samples/basic/13/app.psgi
- samples/basic/13/html/index.yatt
- samples/basic/13/t/.htaccess
- samples/basic/13/t/1-mkhidden.xhf
- samples/basic/13/t/fcgi_offline.t
- samples/basic/13/t/http_localhost.t
- samples/basic/13/t/offline.t
- samples/basic/13/t/psgi_offline.t
- samples/basic/2/.symlinks
- samples/basic/2/app.psgi
- samples/basic/2/html/index.yatt
- samples/basic/2/t/.htaccess
- samples/basic/2/t/.symlinks
- samples/basic/2/t/1-basic.xhf
- samples/basic/2/t/fcgi_offline.t
- samples/basic/2/t/http_localhost.t
- samples/basic/2/t/offline.t
- samples/basic/2/t/psgi_offline.t
- samples/basic/2/ytmpl/.htaccess
- samples/basic/2/ytmpl/error.ytmpl
- samples/basic/2/ytmpl/show_expr.yatt
- samples/basic/2/ytmpl/std.ytmpl/envelope.ytmpl
- samples/basic/2/ytmpl/warn.ytmpl
- samples/basic/3/.symlinks
- samples/basic/3/app.psgi
- samples/basic/3/html/.htyattconfig.xhf
- samples/basic/3/html/index.yatt
- samples/basic/3/t/.htaccess
- samples/basic/3/t/.symlinks
- samples/basic/3/t/1-basic.xhf
- samples/basic/3/t/fcgi_offline.t
- samples/basic/3/t/http_localhost.t
- samples/basic/3/t/offline.t
- samples/basic/3/t/psgi_offline.t
- samples/basic/5/.symlinks
- samples/basic/5/app.psgi
- samples/basic/5/html/dot.htaccess
- samples/basic/5/html/error.ytmpl
- samples/basic/5/html/varerr.yatt
- samples/basic/5/t/.htaccess
- samples/basic/5/t/.symlinks
- samples/basic/5/t/1-basic.xhf
- samples/basic/5/t/fcgi_offline.t
- samples/basic/5/t/http_localhost.t
- samples/basic/5/t/offline.t
- samples/basic/5/t/psgi_offline.t
- samples/basic/5/ytmpl/.htaccess
- samples/basic/5/ytmpl/error.ytmpl
- samples/basic/5/ytmpl/show_expr.yatt
- samples/basic/5/ytmpl/std.ytmpl/envelope.ytmpl
- samples/basic/5/ytmpl/warn.ytmpl
- samples/basic/6/.symlinks
- samples/basic/6/app.psgi
- samples/basic/6/html/.htyattconfig.xhf
- samples/basic/6/html/index.yatt
- samples/basic/6/t/.htaccess
- samples/basic/6/t/.symlinks
- samples/basic/6/t/1-basic.xhf
- samples/basic/6/t/fcgi_offline.t
- samples/basic/6/t/http_localhost.t
- samples/basic/6/t/offline.t
- samples/basic/6/t/psgi_offline.t
- samples/basic/7/.symlinks
- samples/basic/7/app.psgi
- samples/basic/7/app.xhf
- samples/basic/7/html/index.yatt
- samples/basic/7/t/.htaccess
- samples/basic/7/t/.symlinks
- samples/basic/7/t/1-basic.xhf
- samples/basic/7/t/fcgi_offline.t
- samples/basic/7/t/http_localhost.t
- samples/basic/7/t/offline.t
- samples/basic/7/t/psgi_offline.t
- samples/basic/8/.symlinks
- samples/basic/8/app.psgi
- samples/basic/8/extlib/t_undef_error.pm
- samples/basic/8/html/index.yatt
- samples/basic/8/t/.symlinks
- samples/basic/8/t/1-basic.xhf
- samples/basic/8/t/fcgi_offline.t
- samples/basic/8/t/http_localhost.t
- samples/basic/8/t/offline.t
- samples/basic/8/t/psgi_offline.t
- samples/basic/9/app.psgi
- samples/basic/9/extlib/ToyApp1.pm
- samples/basic/9/html/subapp1/.htyattconfig.yml
- samples/basic/9/html/subapp1/index.yatt
- samples/basic/9/t/1-basic.xhf
- samples/basic/9/t/fcgi_offline.t
- samples/basic/9/t/http_localhost.t
- samples/basic/9/t/offline.t
- samples/basic/9/t/psgi_offline.t
- samples/basic/README.md
- samples/basic/addtest.zsh
- samples/benchmarks/readme
- samples/benchmarks/results/author.txt
- samples/benchmarks/runall.zsh
- samples/benchmarks/template/base.mt
- samples/benchmarks/template/base.tx
- samples/benchmarks/template/base.yatt
- samples/benchmarks/template/child.mt
- samples/benchmarks/template/child.tx
- samples/benchmarks/template/child.yatt
- samples/benchmarks/template/include.cs
- samples/benchmarks/template/include.ht
- samples/benchmarks/template/include.mt
- samples/benchmarks/template/include.tt
- samples/benchmarks/template/include.tx
- samples/benchmarks/template/include.yatt
- samples/benchmarks/template/list.cs
- samples/benchmarks/template/list.ht
- samples/benchmarks/template/list.mst
- samples/benchmarks/template/list.mt
- samples/benchmarks/template/list.tj
- samples/benchmarks/template/list.tt
- samples/benchmarks/template/list.tx
- samples/benchmarks/template/list.yatt
- samples/benchmarks/yt-cascade.pl
- samples/benchmarks/yt-for.pl
- samples/benchmarks/yt-x-poor-env.pl
- samples/benchmarks/yt-x-rich-env.pl
- samples/db_backed/1/.symlinks
- samples/db_backed/1/app.psgi
- samples/db_backed/1/html/.htyattrc.pl
- samples/db_backed/1/html/envelope.ytmpl
- samples/db_backed/1/html/index.yatt
- samples/db_backed/1/html/login.ydo
- samples/db_backed/1/html/logout.ydo
- samples/db_backed/1/html/main.css
- samples/db_backed/1/html/printenv.yatt
- samples/db_backed/1/html/register.yatt
- samples/db_backed/1/html/resetpass.yatt
- samples/db_backed/1/t/.htaccess
- samples/db_backed/1/t/.symlinks
- samples/db_backed/1/t/0register.t
- samples/db_backed/1/t/1-basic.xhf
- samples/db_backed/1/t/basic.inc.xhf
- samples/db_backed/1/t/http_localhost.t
- samples/db_backed/1/t/psgi_offline.t
- samples/db_backed/1/t/t_lib.pl
- samples/db_backed/1/t/t_register.pm
- samples/db_backed/1/t/z_cleanup.t
- samples/db_backed/1/var/.htaccess
- samples/db_backed/1/ytmpl/.htaccess
- samples/db_backed/1/ytmpl/error.ytmpl
- samples/db_backed/1/ytmpl/show_expr.yatt
- samples/db_backed/1/ytmpl/std.ytmpl/envelope.ytmpl
- samples/db_backed/1/ytmpl/warn.ytmpl
- samples/db_backed/2/.symlinks
- samples/db_backed/2/app.psgi
- samples/db_backed/2/html/.htyattrc.pl
- samples/db_backed/2/html/.symlinks
- samples/db_backed/2/html/envelope.ytmpl
- samples/db_backed/2/html/index.yatt
- samples/db_backed/2/html/login.ydo
- samples/db_backed/2/html/logout.ydo
- samples/db_backed/2/html/main.css
- samples/db_backed/2/html/register.yatt
- samples/db_backed/2/t/.htaccess
- samples/db_backed/2/t/.symlinks
- samples/db_backed/2/t/0register.t
- samples/db_backed/2/t/1-basic.xhf
- samples/db_backed/2/t/basic.inc.xhf
- samples/db_backed/2/t/http_localhost.t
- samples/db_backed/2/t/psgi_offline.t
- samples/db_backed/2/t/t_register.pm
- samples/db_backed/2/t/z_cleanup.t
- samples/db_backed/2/var/.htaccess
- samples/db_backed/2/ytmpl/.htaccess
- samples/db_backed/2/ytmpl/error.ytmpl
- samples/db_backed/2/ytmpl/show_expr.yatt
- samples/db_backed/2/ytmpl/std.ytmpl/envelope.ytmpl
- samples/db_backed/2/ytmpl/warn.ytmpl
- samples/find_yatt_lib.pl
- samples/minimum.psgi
- samples/more/1/app.psgi
- samples/more/1/public/.htyattrc.pl
- samples/more/1/public/index.yatt
- samples/more/2/app.psgi
- samples/more/2/public/foo.yatt
- samples/more/2/public/index.yatt
- samples/more/3/app.psgi
- samples/more/3/public/.htyattconfig.xhf
- samples/more/3/public/index.yatt
- samples/mysql-use-htdbpass.zsh
- samples/oldsessioncompat.psgi
- samples/runfcgi
- samples/runplack-env-dev.cgi
- samples/runyatt.cgi
- samples/sess_backed/1/.symlinks
- samples/setup-all.zsh