<?xml version="1.0"?>
<rss xmlns:source="https://source.scripting.com/" version="2.0">
	<channel>
		<title>frontier.root updates</title>
		<link>https://github.com/scripting/helloFrontier/issues/</link>
		<description>New features and fixes for Dave Winer's 2026 project to reboot UserLand Frontier on modern hardware, in an RSS 2.0 'codecasting' feed.</description>
		<language>en-us</language>
		<copyright>Copyright 2007-2026 Scripting News, Inc and Dave Winer.</copyright>
		<pubDate>Mon, 05 Oct 2026 17:13:36 GMT</pubDate>
		<lastBuildDate>Mon, 05 Oct 2026 17:13:36 GMT</lastBuildDate>
		<cloud domain="rpc.rsscloud.io" port="5337" path="/pleaseNotify" registerProcedure="" protocol="http-post"/>
		<docs>http://scripting.com/stories/2007/02/16/whatIsCodecasting.html</docs>
		<generator>UserLand Frontier v11.0</generator>
		<item>
			<description>&lt;b&gt;tcp.websocket&lt;/b&gt;. tcp.websocket -- a new class of verbs. you can now make a websocket client or server in Frontier. </description>
			<pubDate>Mon, 05 Oct 2026 17:13:36 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00049.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00049.part" length="5103" type="application/x-frontier-tabl"/>
			</item>
		<item>
			<description>&lt;b&gt;op.setHtmlFormatting&lt;/b&gt;. Created. Turns HTML formatting on or off in the front outline window: on, markup shows as formatting; off, the tags show as typed. Answers true when it changed anything. The kernel verb since Frontier 7.0b28; the HTML menu's Format Text command (cmd-`) toggles with it.</description>
			<pubDate>Mon, 05 Oct 2026 17:12:36 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00048.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00048.part" length="1010" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;op.getHtmlFormatting&lt;/b&gt;. Created. Answers true when HTML formatting is on in the front outline window, false otherwise, and false for anything but an outline.</description>
			<pubDate>Mon, 05 Oct 2026 17:12:22 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00047.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00047.part" length="806" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;op.attributes.edit&lt;/b&gt;. New. Cribbed the attribute editor from Drummer, DW's current outliner product. </description>
			<pubDate>Mon, 05 Oct 2026 17:11:45 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00046.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00046.part" length="880" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;Flickr.init&lt;/b&gt;. Removed the apiKey and apiSecret, thanks to GitHub for the alert.</description>
			<pubDate>Sat, 03 Oct 2026 17:33:42 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00045.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00045.part" length="3433" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;bookmarksMenu.virginMenu&lt;/b&gt;. The Bookmarks menu we start with.</description>
			<pubDate>Thu, 01 Oct 2026 15:30:12 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00044.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00044.part" length="1634" type="application/x-frontier-mbar"/>
			</item>
		<item>
			<description>&lt;b&gt;bookmarksMenu.addBookmark&lt;/b&gt;. The new command goes in the middle of the menu, above the separator that sits above Add Boilerplate..., so the menu reads: Add Bookmark, a line, the bookmarks, a line, Add Boilerplate, Edit Bookmarks. DW's 9/29 layout: &quot;gets the rare-used commands out of the way.&quot; A menu laid out the old way, with no Add Boilerplate command to find, gets the command at the end as before.</description>
			<pubDate>Thu, 01 Oct 2026 15:29:37 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00043.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00043.part" length="3471" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;workspace.userlandSamples.bluesky.postWithImage&lt;/b&gt;. Demo of a Bluesky post with a picture. </description>
			<pubDate>Thu, 01 Oct 2026 15:29:17 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00042.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00042.part" length="2019" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;bluesky.newPost&lt;/b&gt;. The picture's size goes to Bluesky with the picture, so it draws the box the right shape before the picture loads. </description>
			<pubDate>Thu, 01 Oct 2026 15:28:32 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00041.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00041.part" length="11125" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;html.getImageInfo&lt;/b&gt;. Created. One routine for what a picture is and how big it is.</description>
			<pubDate>Thu, 01 Oct 2026 15:28:01 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00040.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00040.part" length="7295" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;window.getTitle&lt;/b&gt;. Added a test code bundle.</description>
			<pubDate>Mon, 28 Sep 2026 17:22:02 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00039.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00039.part" length="633" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;string.getRandomSnarkySlogan&lt;/b&gt;. Created. I've been accumulating snarky slogans for years, and when I think of one that's worth keeping, I add it to the list. You can have a random one just by calling this function. It's nice for demos and test code, and generally getting a sense that there are actual people behind this thing! ;-)</description>
			<pubDate>Mon, 28 Sep 2026 15:38:38 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00038.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00038.part" length="1058" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;string.htmlToMarkdown&lt;/b&gt;. Created. Converts HTML to Markdown.</description>
			<pubDate>Mon, 28 Sep 2026 15:34:02 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00037.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00037.part" length="719" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;string.markdownToHtml&lt;/b&gt;. Updated, changed the description in the Changes section. No one needs to know about wpidentity in this context. DW</description>
			<pubDate>Mon, 28 Sep 2026 15:33:51 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00036.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00036.part" length="719" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;table.mergeOptions&lt;/b&gt;. Created. Defines a way to share options from callers where there are default values that many apps don't need to include.</description>
			<pubDate>Mon, 28 Sep 2026 15:22:14 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00034.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00034.part" length="1220" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;rootUpdates.update&lt;/b&gt;. Needed to release this to get everything working again. Early days (right now Claude and I are the only users).</description>
			<pubDate>Sat, 26 Sep 2026 17:57:20 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00031.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00031.part" length="35676" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;xml.entityEncode&lt;/b&gt;. Kernelized.</description>
			<pubDate>Sat, 26 Sep 2026 16:29:07 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00030.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00030.part" length="5366" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;workspace.userlandSamples.mastodon&lt;/b&gt;. Sample scripts for Mastodon.</description>
			<pubDate>Sat, 26 Sep 2026 16:28:32 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00028.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00028.part" length="4642" type="application/x-frontier-tabl"/>
			</item>
		<item>
			<description>&lt;b&gt;mastodon&lt;/b&gt;. First release of mastodon glue scripts table.</description>
			<pubDate>Sat, 26 Sep 2026 16:27:14 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00026.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00026.part" length="30062" type="application/x-frontier-tabl"/>
			</item>
		<item>
			<description>&lt;b&gt;fileMenu.saveNamedRoot&lt;/b&gt;. New. A simple way to backup a root file, using its name, something like frontier.root or nodeEditor.root. There are other ways to do it but this is the most sensible, at least for nightly backups. </description>
			<pubDate>Mon, 21 Sep 2026 17:17:35 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00025.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00025.part" length="964" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;date.secondsSinceFractional&lt;/b&gt;. Created. date.secondsSince, a great utility for log messages and such, in Frontier has always been expressed in whole numbers, when there are times when you need more precision. The difference here is that the &lt;i&gt;when&lt;/i&gt; value must come from clock.milliseconds, where you used clock.now for date.secondsSince. </description>
			<pubDate>Thu, 17 Sep 2026 14:43:57 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00024.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00024.part" length="1429" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;bookmarksMenu.getLogic&lt;/b&gt;. Use string.addressToString to shorten the resulting address. First appearance of this new verb in the shipping root. </description>
			<pubDate>Tue, 15 Sep 2026 15:10:23 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00023.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00023.part" length="1808" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;json.decompile&lt;/b&gt;. Kernelized. JSON.decompile ran as the 2010 UserTalk below; the kernel verb writes the same text -- xml.compile's shape read back: a table as an object, its /atts first, then the names that occur once in table order, then each repeated name as an array; a table of empty names as an array; numbered names without their number, /pcdata as #value; a scalar as itself; tabs and a carriage return per line, the last comma dropped as before. Checked against the script on nine tables, byte for byte. One difference: the 2010 replace table turned &amp;#8220; and &amp;#8221; into a bare double quote inside the string, which isn't JSON; the kernel writes an escaped quote. Running the script here also found indexOf missing from the language; it is in the kernel now. Below is the UserTalk code we're replacing.</description>
			<pubDate>Mon, 14 Sep 2026 22:02:24 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00022.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00022.part" length="9592" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;json.compile&lt;/b&gt;. Kernelized. JSON.compile ran as the 2010 UserTalk scanner below, one verb call per character: 12,141 verb calls and 1.1 seconds on a 5K file here, where Berkeley is instant -- his report 9/13 on workspace.getServerAddress. The kernel verb builds the same table: xml.compile's shape, numbered names, an array as repeated names, null as nil, an empty array as an empty list, a scalar at the top as the whole answer, flParseAtts making /atts and /pcdata from a #value. One difference: escapes inside a string are decoded by the JSON rules (\n is a newline, \u00e9 is the letter); the scanner below kept the letter after the backslash. Below is the UserTalk code we're replacing.</description>
			<pubDate>Mon, 14 Sep 2026 22:02:05 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00021.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00021.part" length="11598" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;html.directory.getRawHtml&lt;/b&gt;. Released for Atlantis. frontier.root had the 2012 version, two parameters; this is the 2017 version, eight parameters. nodeEditorSuite.uploadScripts needs it to render a project the way Berkeley does.</description>
			<pubDate>Mon, 14 Sep 2026 22:00:41 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00020.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00020.part" length="7531" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;string.addressToString&lt;/b&gt;. Searches are now unicase. </description>
			<pubDate>Mon, 14 Sep 2026 17:45:48 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00019.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00019.part" length="1960" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;tcp.httpClient&lt;/b&gt;. Does https. Pull the scheme off the front of server into flSecure, default the port to 443 when secure, and hand the built request to tcp.httpTransport (which does the request over the wire, TLS when secure) in place of opening a raw stream. The cookie handling and the proxy switch are unchanged.</description>
			<pubDate>Mon, 14 Sep 2026 17:45:10 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00018.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00018.part" length="32752" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;tcp.httpReadUrl&lt;/b&gt;. Carry the scheme into server so an https url reads. server = urllist [1] + urllist [2], passed to tcp.httpClient in place of urllist [2]. Before this the scheme was dropped and https urls came back empty.</description>
			<pubDate>Mon, 14 Sep 2026 17:44:35 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00017.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00017.part" length="4949" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;tcp.httpTransport&lt;/b&gt;. New. The transport under tcp.httpClient: it takes the request the glue built and does it over the wire, TLS when flSecure. tcp.httpClient opens a plain stream and can't reach an https server on its own, so this is where the secure request happens. Reuses the kernel http fetch, so TLS and chunked encoding are handled there.</description>
			<pubDate>Mon, 14 Sep 2026 17:29:48 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00016.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00016.part" length="1039" type="application/x-frontier-scpt"/>
			</item>
		<item>
			<description>&lt;b&gt;op.console&lt;/b&gt;. First release of op.console, does console-type logging in an outline in scratchpad.log. Very useful when you don't have a debugger, yet. </description>
			<pubDate>Thu, 10 Sep 2026 15:59:34 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00014.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00014.part" length="2780" type="application/x-frontier-tabl"/>
			</item>
		<item>
			<description>&lt;b&gt;workspace.userlandSamples.helloFrontier&lt;/b&gt;. Sorting out the diff betw http and https. Long story. ;-)</description>
			<pubDate>Wed, 09 Sep 2026 17:26:14 GMT</pubDate>
			<guid isPermaLink="false">https://bits.codecasting.org/frontier.root/00013.part</guid>
			<enclosure url="https://bits.codecasting.org/frontier.root/00013.part" length="3059" type="application/x-frontier-scpt"/>
			</item>
		</channel>
	</rss>
