Time for this month’s Tempest status update. Highlights:
- The limitations with creating grains mentioned in last month’s update have been fixed.
- There have been various UI improvements
- Tempest now supports email-based login
- Some first steps have been made towards internationalization.
- The machinery for installing apps is in place (though there is no UI for it yet, and it needs more thorough testing).
Grain Creation
Last month I reported that it was now possible to create grains, but that there were a couple limitations that still needed to be addressed. Those have since been fixed; grain creation works as expected for all cases.
UI Improvements
I made a number of small improvements to the UI.
For starters, we do a better job of picking a title for a new grain; the
first pass at this feature just called all new grains “Untitled grain,”
which is unhelpful. We now do “Untitled <appTame>
<nounPhrase>
,” as
Sandstorm does.
In the process of doing this I discovered that if the app manifest’s
Action.nounPhrase
field is empty (as it is for some very old apps),
Sandstorm will jump through some hoops to come up with a suitable
value based on older, deprecated fields. I’m not going to implement this
for Tempest; instead if nounPhrase
is not set it defaults to grain
.
There are only a couple apps that this affects, the most notable one
being Davros, for which Jake has already opened a pull request to
fix the issue.
Also, there’s a close button for open grains, and a number of styling improvements.
Email Login
Tempest now supports email login! It works much the same way it does in Sandstorm: punch in an email address and it will mail you a token/link.
For now, SMTP configuration happens via environment variables, as described in the README. In the future we’ll have a UI for configuration which can handle this as well as other things.
Internationalization
I’ve taken the first steps towards internationalizing Tempest. Specifically, I wrote a small package to parametrize the UI code over a locale object, so instead of doing:
"Hello, " + name
You now write:
l10n.Fmt("Hello, %0", name)
…where l10n
is an object that you’ll pass around as a parameter.
We still need to build out some machinery for extracting all the strings to be translated, actually picking a locale, and some other things, but this means that when we’re ready to do that we won’t also have to hunt down every UI string and change each call site to be translatable, as we did when Sandstorm was first internationalized.
App Installation
Finally, and most excitingly, the basic machinery is in place to install
apps. This includes logic for unpacking and validating an spk (which
is available as part of a general-purpose Go package, under
pkg/exp/spk
in the repo), as well as Cap’n Proto APIs for feeding an
spk to the server and getting back a reference to the installed package
(which can then be used to create grains).
It isn’t integrated into the UI yet, and it needs more robust testing, but this is a major milestone.