<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ciigo, branch main</title>
<subtitle>Static web server with AsciiDoc and Markdown.</subtitle>
<id>http://git.kilabit.info/ciigo/atom?h=main</id>
<link rel='self' href='http://git.kilabit.info/ciigo/atom?h=main'/>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/ciigo/'/>
<updated>2026-04-04T11:12:37Z</updated>
<entry>
<title>Release ciigo v0.17.0 (2026-04-04)</title>
<updated>2026-04-04T11:12:37Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2026-04-04T11:12:37Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/ciigo/commit/?id=18be9adb63484367bb3972d3842a52cd5268e6cf'/>
<id>urn:sha1:18be9adb63484367bb3972d3842a52cd5268e6cf</id>
<content type='text'>
**🌱 cmd/ciigo: add option to set base path and shutdown idle duration**

The `-base-path` option set the URL prefix for serving HTTP request.
This allow serving the content under the prefix other than "/".

The `-shutdown-idle` option set the duration when server will stop accepting
new connections and shutting down.
This option can be helpful to reduce the resources on local environment.

**🌼 all: make the anchor symbol position on the right side of headers**

Previously, when `:sectanchors:` is set, the default anchor symbol
position is absolute on the left side of heading text with block display
option (the symbol located outside of box area of headers).
In special case, this cause an overflow when the generated HTML are
rendered inside flex with fixed height (the body is scrollable with empty
content on bottom).

This module changes the anchor symbol position to the right side of
heading text to prevent scroll on such layout, without absolute position
and normal inline layout.
</content>
</entry>
<entry>
<title>go.mod: update all dependencies</title>
<updated>2026-04-04T11:04:01Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2026-04-04T11:04:01Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/ciigo/commit/?id=185a0d1ae67c545a79525fb825474256479a6465'/>
<id>urn:sha1:185a0d1ae67c545a79525fb825474256479a6465</id>
<content type='text'>
This set the minimum Go version to 1.26.0.
</content>
</entry>
<entry>
<title>_static: remove the flex-direction in headings</title>
<updated>2026-04-04T11:01:45Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2026-04-04T11:01:45Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/ciigo/commit/?id=60081b107767ae33f011459d193bfcbab02e78c8'/>
<id>urn:sha1:60081b107767ae33f011459d193bfcbab02e78c8</id>
<content type='text'>
The fix for anchor position has been updated in asciidoctor-go,
so lets remove the quick fix in here.
</content>
</entry>
<entry>
<title>all: make the anchor symbol position on the right side of headers</title>
<updated>2026-03-26T08:41:06Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2026-03-26T08:41:06Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/ciigo/commit/?id=2ec679da42354a3be81e617da27bc84977729e33'/>
<id>urn:sha1:2ec679da42354a3be81e617da27bc84977729e33</id>
<content type='text'>
Previously, when `:sectanchors:` is set, the default anchor symbol
position is absolute on the left side of heading text with block display
option (the symbol located outside of box area of headers).
In special case, this cause an overflow when the generated HTML are
rendered inside flex with fixed height (the body is scrollable with empty
content on bottom).

This module changes the anchor symbol position to the right side of
heading text to prevent scroll on such layout, without absolute position
and normal inline layout.
</content>
</entry>
<entry>
<title>cmd/ciigo: add option to set base path and shutdown idle duration</title>
<updated>2026-02-11T15:50:53Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2026-02-11T15:50:27Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/ciigo/commit/?id=00dfc937cec1b7eb9ebb1024fae5228ebf9f0341'/>
<id>urn:sha1:00dfc937cec1b7eb9ebb1024fae5228ebf9f0341</id>
<content type='text'>
The `-base-path` option set the URL prefix for serving HTTP request.
This allow serving the content under the prefix other than "/".

The `-shutdown-idle` option set the duration when server will stop
accepting new connections and shutting down.
This option can be helpful to reduce the resources on local environment.
</content>
</entry>
<entry>
<title>Release ciigo v0.16.0 (2026-02-09)</title>
<updated>2026-02-09T06:18:08Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2026-02-09T06:18:08Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/ciigo/commit/?id=1e833ea2a7d0300915c4c8a5c7bef09909ada915'/>
<id>urn:sha1:1e833ea2a7d0300915c4c8a5c7bef09909ada915</id>
<content type='text'>
**🌱 all: embed CSS and index HTML template using memfs**

Previously, with direct embed, every time we change the CSS or index
template, we need to restart the "ciigo serve" command.

Using memfs make us easy to update and see the changes directly, without
restarting the server.

**🌼 all: improve the default stylesheet and template**

Add common styles for asciidoctor elements with dark theme.
Common styles including title, header, anchor, lists, table, and footer.

The foreground color changes to conform with color-contrast
ratio threshold, with score AAA. [1]

Add ARIA role to each section of pages: banner for topbar,
main for page, and contentinfo for footer.
This is to make the webpage more robust and functional no matter
what screen reader technology is used. [2]

For touch devices, increase the line height on Table of Contents.
This is to help users who may have difficulty in confidently targeting or
operating small controls. [3]

In the default template, instead of splitting the topbar into top-heading
and menu, breaking it down by class item.

[1]: https://dequeuniversity.com/rules/axe/4.11/color-contrast +
[2]: https://dequeuniversity.com/rules/axe/4.11/landmark-one-main +
[3]: https://dequeuniversity.com/rules/axe/4.11/target-size

**🌱 all: allow combination of default and custom stylesheet**

To combine default stylesheet with custom CSS, set the value to "default"
and the file name of custom CSS, separated by comma.
This is the recommended way to use custom stylesheet since it can be set
only on specific pages.

----
// In asciidoctor:
:stylesheet: default, custom.css

// In markdown:
stylesheet: default, custom.css
----

To disable default stylesheet and only using custom CSS, set the value only
to the file name of custom CSS.

Another way to use custom stylesheet is by creating your own template and
pass it to `serve` or `convert` command.
This method makes the stylesheet applied to all pages.

**🌼 all: add field Listener to ServeOptions**

The field Listener allow passing [net.Listener] instance for accepting
HTTP connection.

One of the use case is to activate the ciigo serve using systemd.socket(5).

**🌱 all: redirect request for .adoc or .md to the HTML file**

During serve, onGet method, if the node does not exist and the request
path end with .adoc or .md, redirect the client to the .html location
with status 303 (See Other).

**🪵 all: embed struct [lib/http.ServerOptions] directly to [ServeOptions]**

At this point, all of the fields in the struct ServeOptions is the
same with [lib/http.ServerOptions] except IsDevelopment and
ConvertOptions.

For field IsDevelopment we keep in the struct.
For field ConvertOptions we remove it and let the caller pass it on
Serve function or InitHTTPServer method.
</content>
</entry>
<entry>
<title>go.mod: update all dependencies</title>
<updated>2026-02-09T06:09:15Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2026-02-09T06:09:15Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/ciigo/commit/?id=98c83f1b87672edd114397c5602de71ca94207dd'/>
<id>urn:sha1:98c83f1b87672edd114397c5602de71ca94207dd</id>
<content type='text'>
This update affect the test on onGet, where request to directory that
does not end with slash will be redirected with status code 301 (Moved
Permanently) instead of 302 (Found).
</content>
</entry>
<entry>
<title>all: embed struct [lib/http.ServerOptions] directly to [ServeOptions]</title>
<updated>2026-02-07T09:03:19Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2026-02-07T09:03:19Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/ciigo/commit/?id=3714f15bf29cfb79c3623784e391a7a4854f6815'/>
<id>urn:sha1:3714f15bf29cfb79c3623784e391a7a4854f6815</id>
<content type='text'>
At this point, all of the fields in the struct ServeOptions is the
same with [lib/http.ServerOptions] except IsDevelopment and
ConvertOptions.

For field IsDevelopment we keep in the struct.
For field ConvertOptions we remove it and let the caller pass it on
Serve function or InitHTTPServer method.
</content>
</entry>
<entry>
<title>server: enable ServerOptions HandleFS by default</title>
<updated>2026-02-04T23:22:10Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2026-02-04T23:22:10Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/ciigo/commit/?id=759c9b8e542d2ce159228e35c6d4138fbaef25de'/>
<id>urn:sha1:759c9b8e542d2ce159228e35c6d4138fbaef25de</id>
<content type='text'>
This allow request for .adoc/.md get redirected to .html in production
environment, as we have in https://golang-id.org/proposal/ .
</content>
</entry>
<entry>
<title>all: redirect request for .adoc or .md to the HTML file</title>
<updated>2026-02-04T20:40:34Z</updated>
<author>
<name>Shulhan</name>
<email>ms@kilabit.info</email>
</author>
<published>2026-02-04T17:00:23Z</published>
<link rel='alternate' type='text/html' href='http://git.kilabit.info/ciigo/commit/?id=aba22ce712d13b0b99b56a860f57c9142d9440e3'/>
<id>urn:sha1:aba22ce712d13b0b99b56a860f57c9142d9440e3</id>
<content type='text'>
During serve, onGet method, if the node does not exist and the request
path end with .adoc or .md, redirect the client to the .html location
with status 303 (StatusSeeOther).
</content>
</entry>
</feed>
