Oh no! Where's the JavaScript?
Your Web browser does not have JavaScript enabled or does not support JavaScript. Please enable JavaScript on your Web browser to properly view this Web site, or upgrade to a Web browser that does support JavaScript.

Amelinium Web Browser & Emalinium E-mail Client

Last updated on 9 hours ago
B
BohunSenior Member
Posted 25 days ago
I felt compelled to buy the author a coffee, since apparently he spent the whole night crafting these changes ;-)
https://ko-fi.com...

Folks! We have an email program! Smile
Edited by Bohun on 17-09-2026 02:57, 25 days ago
deadwood, OlafSch, aha, retrofaza, miker1264, Deremon
serk118ukserk118ukSoftware Dev
Posted 24 days ago
Wow YAMYAM..Great news
deadwood, retrofaza, Argo, OlafSch, Deremon, miker1264
B
BohunSenior Member
Posted 24 days ago
Yam was a fantastic email program; unfortunately, it didn't support IMAP... Emalinium does.
Argo, miker1264, OlafSch
B
BohunSenior Member
Posted 23 days ago
@juen, post #748

1.2.2
- New: AmigaOS 4 (PowerPC) builds - Amelinium_OS4 and Emalinium_OS4
- HTTPS through a proxy now works. The browser opens a tunnel, the way
other browsers do; before this some HTTPS sites loaded and others did
not, with no pattern the user could see
- Saving a page now uses the page's own file name instead of always
calling it page.html
- The ttf button on the toolbar now downloads the TrueType fonts when
they are missing, exactly like the menu entry does. Turning fonts on
from the toolbar used to do nothing on a fresh install
- Pictures written with a line break or a tab around the = in the tag
are now loaded. Such pages were missing images, and the space they
should have taken collapsed
- <br clear=left|right|all> now moves the content after it below the
floating element, as it did in the browsers these pages were written for
- Widths above 200% are honoured. A block asking for 600% came out three
times too narrow, which broke wide sliders and carousels
- align on an image submit button now floats it, like every other browser
- vertical-align written in a stylesheet now works for super, sub,
text-top and text-bottom; table cells set to baseline line their text
up on one baseline instead of sitting at the top
- Percentage widths now get their exact share of the container instead of
always rounding down. Three columns at 33.333% fill a 999px container
exactly, where before they lost three pixels - for blocks, floats and
inline-blocks alike, and for columns sized with box-sizing: border-box.
Two 50% columns in an odd-width container still sit side by side, and a
min-width or max-width on such a column is no longer overridden
- Cookies a site marks SameSite=Strict or SameSite=Lax are no longer sent
when another site's page pulls that site's images or stylesheets. They
still go out normally when you open the site yourself, and when the site
loads its own files
- A page's images, stylesheets and scripts now name that page as the
referrer. They used to name the page you were on before it
- Search menu: lite.duckduckgo.com added
- A failed connection now says WHAT went wrong - the reply timed out, the
connection was reset, the server closed without answering, the request
could not be sent - instead of a single "Connection Failed" for every
case. Going Back or switching tabs also names the HTTP status, and says
so plainly when the browser itself refused (a redirect to https on a
build without AmiSSL)

http://juen.in download here this and other software!
http://juen.in/su... - if you like my work
OlafSch, aha, retrofaza
O
OlafSchMember
Posted 23 days ago
at least on 68k it will soon replace iBrowse as standard
B
BohunSenior Member
Posted 22 days ago
1.2.3
! - New: PowerUP builds for a PPC card in a classic Amiga (Blizzard PPC or
CyberStorm PPC under OS 3.x) - Amelinium_PUP and Emalinium_PUP. The
browser has JavaScript and HTTPS; TLS is compiled in, so AmiSSL is not
needed and not used on this target.
! - New: JavaScript in the AmigaOS 4 build. Amelinium_OS4 never had it before,
which was not obvious - the binary looked and started the same, and the
difference showed only on a page that needs scripts.
- PowerUP: Date.now() returned the same instant forever, any number above
2147483647 printed wrong, and x|0 gave the wrong answer for such numbers.
One cause: floor, ceil and modf in the target's C library round through a
32-bit integer, which the PowerPC saturates. This target now brings its
own three, so clocks, Math and number printing behave like everywhere else.
- PowerUP: a hexadecimal number written as 0xNN was read as zero, so, for
example, String.fromCharCode(0xFB01) produced a NUL byte.
- PowerUP: the thousands separator for Polish, Czech, Russian and the other
languages that use a space came out as the text "u00a0" in
Intl.NumberFormat.
- Tables: a cell whose rowspan reaches past the end of the table no longer
leaves its row short, so the cell stopped sticking out of the row.
- min-width: auto was ignored. A page that removes its desktop minimum this
way - which is how responsive sites do it - came out wider than the
window, so every percentage and every centred block was measured against
the wrong width.
- Grid: a column sized auto next to 1fr came out zero-width. That is the
ordinary "logo on the left, content on the right" header.
- flex-wrap did not break a line when an item's own minimum already filled
it, so the items after it were laid out past the right edge of the
container.
- Content written inside a table but outside a cell now moves in front of
the table, the way every browser does it. Old hand-written pages rely on
this, and without it everything below such a table was misplaced.
- A page sent with a compression we cannot decode (Brotli, for example) now
says so on an error page that names the encoding, instead of drawing the
compressed bytes as text.
- Text areas: the scrollbar can be grabbed (its clickable area used to sit
beside the field, over the page), and lines no longer spill above and
below the box.
- Keyboard and screen font now speak the system's character set. Settings ->
Keyboard/font offers Latin-1, Latin-2 and CP1250. Before this, national
characters looked right on screen and arrived at the server as garbage -
the two errors cancelled out locally, which is why it went unnoticed.
- The title bar no longer keeps "- Loading..." after the page has finished.
- version <file> from the Shell now answers on the 64-bit ARM builds; the
$VER: string was missing there.


http://juen.in
http://juen.in/su...
D
deadwoodAROS Dev
Posted 22 days ago
And here is latest Amelinium working directly under Linux Smile

axrt.org/media/amelinium-axruntime.png
aha, Bohun, retrofaza, miker1264
B
BohunSenior Member
Posted 22 days ago
1.2.4
- New: Settings -> "Polish letters with Alt". With it on, Alt plus
a c e l n o s x z types the Polish letters directly, whatever keymap the
system has loaded - Shift gives the capitals. It is off by default and
changes nothing when off, so Alt+A still gives the letter your keymap
says. Added because on a machine with no Polish keymap the keyboard never
produces a Polish byte at all, so no choice of encoding could help.
If the letters look wrong on screen but arrive correctly in the page, your
screen font simply has no Polish glyphs - pick the encoding your font uses
from the same list, or turn TrueType on.
- Fixed: on the Workbench screen the browser overwrote the shared palette, so
the colours of everything else on Workbench went wrong until those programs
were restarted. Own screens were never affected. This was new in 1.2.3.
- The right-click context menu is drawn in the screen font now - the same one
the window title uses. It used to take the System Default Text font, which
is a different preference, so on a Workbench where the two differ the menu
looked out of place.
- Settings -> Keyboard/font is now a submenu offering twelve encodings
instead of three. Amiga has its own ones: AmigaPL for Polish and
Amiga-1251 for Russian put the national letters at byte positions no PC
encoding uses, so a keymap that speaks them looked like garbage before.
The list also has Latin-2/3/4/5/9/10, ISO-8859-5, KOI8-R and CP1250.
Pick the one your keymap and your screen font use; the setting is
remembered, and -charset NAME does the same from the Shell.
- Latin-9 (ISO-8859-15) could be read but not written: a euro sign typed
into a form was dropped, and a currency sign was sent as a euro.
R
retrofazaDistro Maintainer
Posted 16 days ago
1.2.6
- Fixed (AGA/OCS/ECS own screens): pictures kept in the disk cache by an
earlier version came back as coloured garbage in 1.2.5, whose chipset
screen stores bitplanes interleaved. The cache now records the layout and
decodes such a picture again instead of showing it scrambled. The first
visit to a page after upgrading fetches its pictures once more.
- Fixed (AROS): the Home button's house icon was drawn scrambled.
- Tabs and panels built from radio buttons and CSS alone (:checked + label
+ .tab
) now open and switch when clicked.
- youtube.com's front page: the top bar with its menu icon now appears.
- Many layout fixes found by comparing pages with a modern browser:
letter spacing in em and fractional pixels, spaces at the start and end
of a line no longer widen buttons and menus, flex columns shrink items
with a stated height, justify-content after an item stops growing,
selectors with escaped characters (Tailwind's gap-0.5, md:gap-5), media
queries with a percentage now never match, calc() in gap, padding,
margin, top/left and grid lines, min-width on images, absolutely
positioned boxes with min-height in percent, and more.

1.2.5
- IMPORTANT when upgrading: Amelinium_040, Amelinium_060 and their _JS
versions now need a real maths coprocessor. A 68EC040, 68LC040, 68EC060 or
68LC060 has none and will refuse to start, saying so. Use Amelinium_020 or
Amelinium_020_JS on those machines - that is what they were getting
anyway, because until now the accelerated builds linked 68000 libraries.
In exchange the 040 and 060 builds now really use the processor they are
named after: JavaScript arithmetic runs on the coprocessor instead of in
software, and pictures decode faster.
- New: video playback. A <video> with an MP4 file (H.264 picture, AAC
sound) shows its poster and a player bar with play/pause and a seek
groove, and starts playing while the file is still arriving. Clicking
anywhere on the groove jumps there, even far past what has arrived - the
download simply restarts from that point. Sound goes through Paula in
stereo, the picture through a built-in H.264 decoder, each in its own
process so the browser stays usable. The download is held in a fixed
16 MB ring on disk, so a long film does not need its full size in free
space. Available in the 040 and 060 builds and in the AROS, AmigaOS 4 and
PPC-card builds; the 68000 and 020 builds do not carry the decoders.
- New: a YouTube watch address opens in Amelinium's own player page instead
of youtube.com, which needs JavaScript and cannot load here. The page shows
the title, channel and length. Settings -> Video quality picks 144p (the
default), 240p, 360p or sound only; Settings -> Video playback picks how
often a new picture is decoded - key frames only by default, which costs
least. At 1, 6, 12 or 24 frames per second the frames that are not going
to be shown and that no other frame depends on (more than half of a
YouTube film) are skipped without decoding. Decoding a picture is heavy
work: a 640x360 frame can take seconds on a plain 040, so 144p is the
setting for a classic machine.
In the builds with JavaScript, 144p and 240p play for the whole length of
the film, fetched the way YouTube's own embedded player fetches them
(YouTube's player code is downloaded once and kept in the cache), and
the seek groove jumps anywhere in them, backwards too. The
builds without JavaScript get 144p and 240p only up to about a minute of
film; anything longer comes as 360p there, and the player page says so.
- New: WWW -> Video -> "YouTube search (Invidious)" - a YouTube search page
light enough to render here. Opening one of its videos asks whether to
play it in Amelinium's own player, with "Always" if you want it to stop
asking.
- New: Amelinium_WOS and Emalinium_WOS - a WarpOS build for a PPC card in a
classic Amiga, with JavaScript, HTTPS and TrueType fonts. This is the
FIRST version of this target and it may not be perfect - please report
what you run into. One thing is known already: laying out a page takes
considerably longer on it than on the PowerUP build of the same page, so
a big site will feel slow.
- Faster: JavaScript source is read a quarter to a third faster, so
script-heavy pages get going sooner - YouTube's player code alone is
ready about eight seconds earlier on a 68040. How scripts behave does not
change.
- Better picture on AGA/ECS: the browser's own screen is now opened
interleaved, so a picture on its way to the screen no longer flashes in
wrong colours while it is drawn plane by plane - most visibly with every
new frame of a video. RTG screens are not affected.
- Fixed: a download that the server cut short was reported as finished,
leaving a half file that looked whole. It is now shown as interrupted,
and Resume continues it from where it stopped.
- Fixed: JavaScript: dates written with a time zone or in e-mail form
(new Date( "2026-09-24T10:00:00+02:00" ), Date.parse) were read wrong or
not at all; obj[key]() evaluated obj twice; slice, splice and friends
misbehaved when given Infinity; a typed array's .buffer was a method
instead of a property; eval() inside a function could not see the
function's own variables; btoa and atob mishandled characters above 127;
a regular expression right after if (...), for (...) or while (...) made
the whole script fail to load (Babel, among others). And from the second
page of a session on, some built-in functions - Number.isInteger,
String.fromCharCode, Boolean's methods, DataView and typed array methods
among them - could silently turn into unrelated functions, so scripts
that worked on the first page failed on the next one.
- Fixed: HTML entities written without a semicolon - &lt &gt &amp and the
rest of the legacy list - now decode, as they do in every other browser.
They appear in plenty of old pages.
- Fixed: with many bookmarks the menu silently stopped at the fortieth one.
It now fits as many as the screen can show and splits into B1, B2, ... when
it needs to.
- Fixed: Page -> View Source ignored the scrollbar arrows, did not follow the
knob while dragging, and drew with the page font instead of the screen font.
- Fixed: clicking a #name anchor, or opening an address that carries one, now
jumps to it.
- Fixed: images embedded in the page itself (data: URLs) longer than about a
kilobyte were not loaded at all.
- Fixed: text-align set on a table did not reach its cells.
- New: PageUp and PageDown scroll a page, on keyboards that have them
(a PC-style keyboard on AmigaOS 4 or AROS).
- Fixed: selecting text and copying it could pick up a second copy of part of
the selection, and a selection finished outside the window was not copied
at all.
- Fixed: a plain .txt file was rendered far too large and did not wrap.
- Fixed: SVG pictures written directly into a page now draw their outlines,
lines and text - until now only the filled shapes appeared, so logos and
icons made of strokes were blank and labels were missing.
- Fixed: an <a name="..."> anchor with no href was drawn as a blue underlined
link.
- Fixed: a crash on AROS on pages that use :hover on an element with no
parent.
- Fixed: many page layouts now match other browsers more closely, found by
comparing sites element by element. Among them: menus built from floating
list items with height:100% links no longer collapse to nothing; a
"sticky footer" page (html, body { height: 100% }) is as tall as the
window; table rows ignore min-height and max-height as other browsers do;
percentage margins inside flex rows (Bootstrap column offsets) land in the
right place; hidden SVG icon sheets take no space; a floating box with a
horizontal rule inside is no longer twice as wide; the gap above a heading
after an invisible "skip to content" link is correct; flex items align,
wrap and line up on text like elsewhere; line-height written as calc()
works; rem sizes follow a root font size set through a variable; a text
field with a percentage width no longer pushes a table wider than the
page; and <input type="hidden"> never takes space, whatever the page's
stylesheet says. Also: max-height: none now lifts an earlier limit, so
sections that open without JavaScript are no longer empty; Tailwind class
names with escaped characters (such as [&>svg]:h-full) match; an SVG with
only a height keeps its proportions; </br> breaks the line as in every
browser; custom element names longer than eleven letters match in
selectors; the -webkit- spellings of flexbox work; media queries for
features Amelinium does not know no longer apply by accident;
:first-child and similar conditions on a parent in a selector are
checked; :any-link and :not() on a parent element work; Tailwind's
space-y-* spacing and its @property variables apply; ::before and
::after built from several rules or inside @layer get all of them;
children of a display: contents box inside a flex or grid container
become blocks; calc() widths of flex items keep their pixel part;
left: auto (and the other sides) cancels an earlier value; a very wide
logo keeps its proportions under max-width; and a page opened from disk
finds its stylesheets and pictures when they are addressed as ./ or ../.
Further: rules that start with an attribute, such as
[role=complementary] h3 or [x] .a+.b, apply; percentage padding on flex
items, and padding or margin written with calc() in the shorthand
(Tailwind), come out right; text placed straight into a flex container no
longer takes the container's own width; an SVG icon given only a width
keeps its proportions; a selector like .menu > a i no longer reaches icons
nested deeper; and alternate style sheets ( rel="alternate stylesheet" )
are no longer applied on top of the main one.
- Emalinium: the message list now really sorts by date, newest first, and
stays sorted after deleting a message. The Compose window opens far larger,
can be resized, and keeps what you have typed while you resize it. Its
scrollbar arrows work too.
O
OlafSchMember
Posted 16 days ago
youtube main page not (yet) works

but you can use another page to access youtube and it works very weil. Tested version with 68040 + JS on AROS 68k
R
retrofazaDistro Maintainer
Posted 15 days ago
http://juen.in/su...

1.2.7
- Fixed: a long movie (hours, hundreds of thousands of frames) stayed on
"Fetching the movie... 1%" forever; the sample table is now read in one
p**** so such a file starts playing within seconds.
- JavaScript: pages keep far less memory - scripts that run for a long
time (web applications) no longer run out of memory, because unused
objects are now collected while the page is open, not only when leaving.
- JavaScript: large scripts load faster and use much less memory (function
bodies are compiled when first called).
- JavaScript: custom elements (customElements.define), MutationObserver,
WeakRef, FinalizationRegistry; top-level variables are now properties of
window, as in other browsers.
- Movies: full screen. A new toolbar button (and one at the right end of
the player bar) asks for a screen mode, with the best mode for the movie
already selected. Esc or the right mouse button leaves, the left button
or Space pauses, a click on the bar seeks, cursor keys skip 10 s and
change the volume.
- Movies: volume slider with a mute button on the player bar; the setting
is remembered.
- Movies play faster: the picture is converted and scaled several times
faster (most on 8-bit and AGA screens), frames are handed over without
waiting for the next tick, and AAC sound needs about a third less CPU.
- Internet radio: the <audio> element, AAC and MP3 streams and .pls /
.m3u playlists play in the browser; WWW menu -> Radio lists stations
with format and bitrate. A 68040/25 keeps up with AAC and 22 kHz MP3;
44.1 kHz MP3 needs a faster CPU. HE-AAC streams play at reduced quality
(mono). Same executables as the movie player.
- Fixed: search and other forms handled by page scripts (olx.pl) did
nothing - the submit event is now sent to scripts.
- Fixed: pages that scroll their body instead of the whole document
(news.google.com) could not be scrolled past the first screen.
- JavaScript: await no longer freezes the page while it waits; __proto__
works as in other browsers.
- JavaScript: spreading or looping over a text (for-of, [...s], Array.from)
gives whole characters - Polish and other accented letters were split
into two broken halves.
- Fixed (AGA/OCS/ECS screens, since 1.2.5): some icons drawn at their own
size (for example "Premium" on wp.pl) were scrambled.
R
retrofazaDistro Maintainer
Posted 15 days ago
http://juen.in/su...

1.2.8
- Internet radio: WWW menu -> Radio PL (TOK FM, Radio ZET, Antyradio,
Chillizet, Radio 357, Radio Nowy Swiat, RMF and more) and Radio DE
(Deutschlandfunk, SWR3, 1LIVE, NDR 2, Bayern 3, Antenne Bayern and
more); FIP and KEXP added to Radio.
- MP3 sound needs about a quarter less CPU, and AAC sound (radio and the
soundtrack of movies) a little less again - with exactly the same
sound as before.
- Fixed: movies (YouTube too) skipped frames while the stream was still
loading and played in bursts with a short stop every second - they now
play smoothly.
- A short link (tinyurl, bit.ly...) that leads to a YouTube movie now
opens it in the built-in player.
- JavaScript: string length, indexes and regular expressions count
characters (as other browsers do), not bytes - Polish and other
accented letters no longer break text handling and form checks.
- JavaScript: element.attributes, document as a Node, and error
messages (toString) behave as in other browsers.
- JavaScript: Shadow DOM (attachShadow, slots) and element.style.cssText.
- JavaScript: numbers are printed and read exactly as in other browsers
(0.1+0.2 gave "0.3", very large and very small numbers lost digits).
- JavaScript: typed arrays and DataView share their buffer correctly
between views, and values out of range wrap around as they should.
- JavaScript: building long texts piece by piece is much faster.
- JavaScript: DOM methods report errors as other browsers do (a node
inserted into itself, a method called on something that is not a
node) instead of silently doing nothing.
- Movies: the full-screen button is now only on the player bar (it was
also on the main toolbar).
- JavaScript: custom elements created through innerHTML or importNode
work at once; the arguments object behaves as in other browsers.
- Fixed: styles did not follow a class that a page script added to an
element already on screen, and a rule like #id.class > .x could hit
elements it should not.
- CSS: the scale property.
- Fixed: Settings -> Screen Mode crashed on 64-bit AROS (hosted) when the
browser ran on Workbench; it now uses the same requester as at startup
and lists 24-bit modes.
- New: MorphOS versions of the browser and mail client (first release).
B
BohunSenior Member
Posted 14 days ago
An update to version 1.2.9 was released. I updated the browser automatically, but after restarting, I got a "Guru Meditation" error. I initially thought the build had failed, but when I reverted to the previous version and the update notification appeared again, I decided to take the risk—and this time, the update succeeded.
R
retrofazaDistro Maintainer
Posted 5 days ago
1.3.1
- The PDF viewer (pdfjs drawer) downloads itself the first time a PDF is
opened, when it is missing - after "Install now" only the program was
updated, so every PDF was saved to disk instead of shown.
- CSS: rules like .menu>li>div>.button (a chain of '>' with two or more
steps, common in Bootstrap menus) now apply.
- CSS: ::before/::after icons whose content and size come from different
rules (Font Awesome 6 and similar icon sets) are shown.
- PDF: pictures inside a PDF (photos, diagrams) were drawn as black boxes
on the Amiga. They are shown now.
- JavaScript: getBoundingClientRect() of an inline element with a margin
reports the element itself, not its margin.
- CSS: a box stretched with left/right and box-sizing:border-box has the
height the page asks for (menus and overlays were taller).
- CSS: transform: translate3d() moves the box, and a mistyped prefixed
copy no longer cancels a correct transform (hidden side menus showed).
- CSS: the font shorthand understands size words (font: x-small Arial).
- CSS: grid columns sized "auto" stay at their content width when the
grid is centred (justify-content), and <br> inside a flex or grid row
takes its place like in other browsers.

1.3.0
The biggest changes first:
- PDF files open in a built-in viewer (pdf.js) in the JavaScript builds;
WWW -> PDF lists Amiga user guides from Aminet.
- Frames ( <iframe> ) run their own scripts, are drawn from what those
scripts build, and talk to the page with postMessage.
- <canvas> has a working 2D drawing context (shapes, text, gradients,
shadows, reading pixels back); the canvas itself is not shown yet.
- Emoji have their own font (Noto Emoji) instead of empty boxes.
- Sound can go through AHI as well as Paula (Settings -> Sound output).
- JavaScript is faster (function calls and arithmetic 10-30% on a 68040,
timers no longer wait for the screen tick) and far closer to Chrome:
fetch(), XMLHttpRequest, async generators, Trusted Types, many Web APIs.
- CSS: :has(), colours in oklch()/lab()/color() (Tailwind 4), <picture>,
srcset sizes, min()/max()/clamp() with percentages, and many layout
fixes found by comparing random sites with Chrome.
All changes:
- JavaScript: pages sent with Cross-Origin-Opener-Policy and
Cross-Origin-Embedder-Policy are cross-origin isolated like in other
browsers (crossOriginIsolated, SharedArrayBuffer, performance.now()
with 5 microsecond steps, 100 elsewhere); Atomics is available;
ArrayBuffer gained byteLength, resize, transfer and detached.
- JavaScript: navigator.storage.getDirectory() gives a working private
file system (files and folders kept in memory for the session,
writable streams, sync access handles in workers).
- JavaScript: toString() of object and class methods, getters, setters
and async functions returns their source text like other browsers.
- JavaScript: Error.stack of a script written inside the page counts lines
and columns from the start of the page (not of the script), columns past
65535 no longer wrap, and calls through o[key]() point where Chrome does.
- JavaScript: canvas measureText() returns a TextMetrics object whose fields
are prototype getters, like in other browsers.
- JavaScript: DOM interfaces inherit from their parent interfaces as in the
standard (MouseEvent from UIEvent, Comment from CharacterData, FileReader
from EventTarget and so on), and every interface prototype has its own
constructor property.
- Emoji are drawn and measured with their own font (Noto Emoji, fetched
with the other TrueType fonts) instead of an empty box, also in canvas
measureText() and fillText(); emoji sequences joined with ZWJ (families,
couples) are one picture, and characters beyond U+FFFF are no longer
replaced by "?".
- JavaScript: style.setProperty() ignores a priority other than "important"
and a value carrying "!important", like other browsers;
getPropertyPriority() exists, and the style attribute changed from a
script reads back as "name: value;" pairs.
- JavaScript: performance entries carry the Server-Timing metrics the server
sent (serverTiming with PerformanceServerTiming objects), for the page,
frames and fetched resources.
- HTML comments are now part of the page for scripts (comment nodes, as in
other browsers), and a short comment such as "<!-->" no longer hides the
text that follows it.
- JavaScript: constructors such as URL, FormData, Headers and DOMException
report their real names.
- JavaScript: TextEncoder and TextDecoder work like in other browsers:
encodeInto(), the encoding names (latin1, utf-16 and the others), the
fatal and ignoreBOM options, decoding a stream in pieces, and the
TextEncoderStream and TextDecoderStream classes.
- JavaScript: <link> elements created by scripts are proper
HTMLLinkElement objects, and getComputedStyle() of an element that is
not in the page answers with empty values, as in other browsers.
- JavaScript: writing to a WritableStream or TransformStream is queued
like in other browsers, so the stream code runs in the right order
instead of inside write().
- JavaScript: element properties have the right types and defaults
(draggable, spellcheck and translate are true/false, <meter> and
<progress> report numbers, scripts created by a script are async), and
getComputedStyle() reflects styles a script just added, also inside
frames. Setting innerText turns line breaks into <br>.
- JavaScript: text drawn on a <canvas> keeps its true edge smoothing, so
pixels read back with getImageData() match other browsers more closely.
- JavaScript: Object.getOwnPropertyNames() of a Proxy around a function
lists the function's own properties, and performance.memory reports
exact numbers on web pages, as in other browsers.
- JavaScript: matchMedia() returns a proper MediaQueryList, the browser's
own bookkeeping attributes are no longer visible to page scripts, and
nonce attributes are hidden as in other browsers when the page sends a
Content-Security-Policy header.
- JavaScript: each frame numbers its setTimeout()/setInterval() timers
on its own, and clearTimeout() in a frame no longer cancels the page's
timers.
- JavaScript: navigator.plugins and navigator.mimeTypes are proper
PluginArray and MimeTypeArray objects.
- JavaScript: requestAnimationFrame() and requestIdleCallback() number
their callbacks on their own and animation frames get a high-resolution
timestamp, as in other browsers.
- JavaScript: Date.parse() and new Date( "..." ) accept the same date
formats as other browsers ( for example "2020-12-1", "Dec 1 999" or
"12/1/2020 10:00 PM" ).
- JavaScript: structuredClone() copies dates, regular expressions, maps,
sets, typed arrays, errors and cyclic objects like other browsers and
reports DataCloneError for things that cannot be copied; Object(5n),
BigInt.prototype methods and JSON.stringify() with BigInt behave as
specified.
- JavaScript: crypto.getRandomValues() and crypto.randomUUID() no longer
use up the numbers a page gets from Math.random().
- JavaScript: canvas drawing casts shadows (shadowBlur, shadowColor,
shadowOffsetX/Y).
- JavaScript: adding a frame from a script no longer runs pending promise
callbacks in the middle of that script.
- JavaScript: each frame has its own eval(), so code evaluated through a
frame's eval() runs in that frame (needed by Cloudflare checks).
- JavaScript: frames with a srcdoc attribute load that content (they
used to stay empty).
- JavaScript: Array methods called on a string, such as
Array.prototype.map.call( "abc", f ), work as in other browsers.
- JavaScript: TextEncoder.encode() returns a Uint8Array and a Blob made
of binary data keeps the bytes instead of the text "1,2,3".
- Downloads from itch.io work again: the purchase page no longer runs the
browser out of memory (a large canvas used to cost hundreds of
megabytes), so the download page loads with its styles and the Download
buttons start the file as before.
- JavaScript: typed arrays over a million elements are created (an
invalid length now throws RangeError), canvas.toDataURL() produces a
compressed PNG quickly, and JSON.stringify of a typed array gives an
object like other browsers.
- JavaScript: getBoundingClientRect() of an inline element includes an
empty inline-block or ::after{content:""} inside it, and its height is
the height of its text, not of an image or box placed in it.
- JavaScript: performance.timing and the navigation entry report the real
phases of loading a page (DNS, connection, request, response,
DOMContentLoaded, load), performance.now() counts from the start of the
navigation, and DOMContentLoaded handlers run before load handlers;
" ".repeat() no longer gives an empty string for long results.
- JavaScript: Function.prototype.bind can be taken and called as a value
(Function.prototype.bind.call(f, ...)), Object.getPrototypeOf works on
numbers and strings, RegExp flags/source/compile, the regexp symbol
methods, Symbol.description, the remaining well-known symbols,
isWellFormed/toWellFormed and getYear/setYear exist, and built-in
objects list their own properties in the same order as other browsers.
- JavaScript: timers and inter-frame messages no longer wait for the
1/10 second screen tick, so scripts that chain zero-delay timeouts or
talk between frames run far faster; nested timers keep the standard
4 ms minimum.
- Internet radio: Radio Kiss Morava added to WWW menu -> Radio.
- JavaScript: strict mode, class static members and private fields, super,
destructuring from strings, Sets and generators and into object
properties, and several smaller fixes to objects, Map and JSON.parse.
- JavaScript: promises accept "thenable" objects such as the ones jQuery
and many libraries return (the result used to arrive as the object
itself), and error types (TypeError, RangeError...) are told apart
correctly; AggregateError added.
- JavaScript: dates - years beyond 9999, month overflow in setMonth, Date()
called as a function and invalid dates in JSON follow the standard.
- Layout: nested rows on Bootstrap pages (.row inside .row) get their full
width and spacing, and getComputedStyle() reports real widths and
heights in pixels.
- Layout: a box beside a float may let its margin overlap the float, as in
other browsers (code blocks on Bootstrap pages were too narrow).
- Stylesheets whose media list spans several lines are loaded (w3.org lost
its layout), and matchMedia() answers like the stylesheet does.
- Old Internet Explorer style hacks (* html ...) are ignored as in other
browsers (they broke layouts such as eff.org).
- CSS rules such as .row:nth-child(2) .item or li:first-child span
(a structural condition on an ancestor) are applied instead of skipped.
- JavaScript: spreading sets, strings and generators into function calls,
Map and Set built from any iterable, and matchAll() results work.
- JavaScript: SVG elements written in the page have their proper types
(SVGRectElement, SVGPathElement...), so getBBox() works on them, including
exact bounds of paths, curves and arcs; getElementsByTagName() with the
name of a custom or SVG element no longer returns every element.
- Layout: form fields and buttons that a stylesheet turns into table cells
(Bootstrap 3 search boxes) stay ordinary inline fields, as in other
browsers.
- Layout: a fieldset's legend sits on its top border with a gap in the
frame, as in other browsers (it used to sit inside the box), and
fieldsets get the standard default frame and spacing.
- Stylesheets: class names, ids and attribute values are case-sensitive
on modern pages, as in other browsers (a rule for .myRow no longer
styles class="myrow" ); old pages without a doctype keep the lenient
matching, now also in querySelector() and getElementsByClassName().
- Forms: the label of an input button stays on one line and a width given
to the button is kept; an input of type button without a value is
empty, not "Button". A <title> written inside the page body no longer
moves into the head.
- Layout: the grid shorthand with auto-flow (grid: auto / auto-flow 200px)
works, so product carousels and tile rows on shop themes are laid out
side by side instead of in one long column.
- Layout: images sized in percent (width: 100%) no longer force their
column or box to the picture's full size; two equal columns stay equal
and boxes around such images shrink to the space available.
- Layout: a <canvas> (charts, games, drawings) takes up its space on the
page as in other browsers (300x150 by default, or the size it states)
instead of collapsing to nothing; its content is not drawn yet.
- Style: rules using :popover-open, and negated states such as
:not(:disabled), :not(:checked) or :not(:popover-open), now apply; menus
that are hidden until opened no longer show up on the page, and a rule
for an open popover no longer hits closed ones.
- Layout: a height written as calc() with a percentage in an element's
own style attribute (height: calc(100% - 20px)) now resolves against its
container instead of turning into a fixed 100 pixel minimum, and
margin: calc(...) 0 there no longer puts the same margin on all sides.
- Layout: an image that has not loaded yet (or uses a placeholder) keeps
the proportions its width and height attributes give it, so pictures
scaled down with max-width no longer collapse or stretch before they
arrive; aspect-ratio also survives a max-width limit, and a box with a
set height and aspect-ratio takes its width from the ratio.
- Pages opened from disk: a picture whose file is missing now shows its
alternative text, as it does for a missing picture on the web, instead
of an empty box of the picture's size.
- Style: a rule for menu items three levels deep (for example
"nav ul ul li a" ) no longer also hits the top-level items, which made
every entry of such a menu as wide as its drop-down.
- JavaScript: background page requests (XMLHttpRequest) now finish after
the script that sent them has continued, as in other browsers, and a
request that cannot reach its server reports an error instead of an
empty success - pages that retry or fall back on failure now do so.
- JavaScript: page requests with very long addresses (over 1024
characters) are no longer cut short.
- JavaScript: scripts can read every response header of their page
requests (getResponseHeader), with the same cross-site limits as other
browsers, and pictures created by scripts inside a frame now load.
- JavaScript: scripts inside a frame see the Crypto and SubtleCrypto
interfaces, like scripts on the page.
- JavaScript: error messages read like in other browsers, and several
mistakes now raise an error as they should (setting a property on null,
'in' or 'instanceof' on a non-object, spreading a number, destructuring
null, calling a string method on null).
- JavaScript: XMLHttpRequest offers the full standard set of properties
and constants, including responseType "json" and "arraybuffer".
- JavaScript: XMLHttpRequest reports its progress step by step and passes
a proper event object to its handlers, and buffers made by the engine
are real ArrayBuffers.
- JavaScript: <canvas> has a 2D drawing context. Scripts can draw
rectangles, lines, curves, circles, gradients and text, clip and blend,
copy pictures and other canvases onto it, and read the pixels back; a
canvas is still not shown on screen.
- A PNG picture whose data is damaged but whose header is fine now counts
as loaded, with its size and transparent pixels, as in other browsers.
- JavaScript: fetch() works properly. Every answer used to arrive with
status 0 and an empty body, and a failed connection was reported as an
answer instead of an error; responses now carry their real status,
status text, headers and body, a body can be read once, and a network
failure rejects with "Failed to fetch", as in other browsers.
- JavaScript: code run through eval() no longer reads its own names from
memory that was already released - this caused random wrong names,
"is not a constructor" errors and crashes on heavy pages.
- JavaScript: reading a variable that was never declared now throws
ReferenceError ("x is not defined") instead of quietly giving
undefined, and several other errors are now thrown where every browser
throws them (String.fromCodePoint with an invalid value, a prototype
chain that would loop, "caller" and "callee" in strict code).
- JavaScript: XMLHttpRequest statusText is the server's own phrase
( "Unauthorized" ), not always "OK".
- JavaScript: FontFace and document.fonts follow the CSS Font Loading
rules: asking for a local font that is not installed now fails the way
it does in other browsers, instead of claiming every font exists.
- JavaScript: navigator.storage, navigator.permissions, getGamepads,
getBattery, speechSynthesis, Notification, BroadcastChannel,
screen.orientation and navigator.gpu now exist, answering honestly for
this machine (no gamepads, no voices, no GPU, mains power).
- JavaScript: Trusted Types (trustedTypes, policies, TrustedHTML and
TrustedScript). A frame whose Content-Security-Policy requires them now
refuses eval() and new Function() on plain strings, as other browsers
do; innerHTML accepts a TrustedHTML value.
- Layout: stretched flex items take the height of their row even when
their content is taller, and overflow: clip no longer lets a flex item
shrink below its content.
- Layout: absolutely positioned boxes with top, bottom and auto margins are
centred vertically; grid columns no longer grow to fit an item that has
min-width: 0; :not() with several structural conditions works;
CSS rules that combine an attribute test with :not(#id), or an
ancestor written as #id.cl**** apply exactly where they should.
- Movies: picture and sound stay in step - the picture ran about a tenth
of a second ahead of the sound, more on AmigaOS 4.
- Fixed: a very long text page (one text block over 64 KB, such as a
whole manual in one <pre>) was cut short, and its later lines were
drawn over the top of the page.
- Frames (<iframe>) run their own scripts and talk to the page with
postMessage, as security checks and embedded widgets need.
- YouTube: the cookie consent window fits the screen, its text scrolls
to the end and its buttons show their labels.
- YouTube: the cookie consent choice is saved, search results appear,
and the YouTube logo and channel pictures show.
- Pictures that a page's own scripts add or change are loaded now, with
the load events pages wait for (thumbnails on YouTube and on many
modern sites stayed empty before).
- Fixed: a symbol such as a bullet could turn into odd characters where
a page lets long words break anywhere.
- JavaScript: text built piece by piece in a loop (s += x) is much
faster, and very long results no longer come out cut short.
- JavaScript: regular expressions match repeats longer than 511
characters (long addresses and texts failed to match before).
- JavaScript: new Image() and new Audio() create real elements; images
that scripts create report complete only once loaded.
- Fixed: a script copying a promise, Map or similar built-in object (as
YouTube does) could crash the browser a while later.
- JavaScript: IntersectionObserver behaves as in other browsers, so pages
no longer load their own slower replacement for it.
- YouTube: the cookie consent window has its white background (its text
was drawn straight over the page).
- Fixed: a style sheet that a script adds to a page with no style sheet of
its own had no effect.
- YouTube: icons show (logo, menu, buttons, list markers) - scripts now
see the contents of SVG pictures, and arcs in SVG paths are drawn as
real curves.
- Fixed: an element hidden with an invalid opacity value (as YouTube sets
it) stays visible, as in other browsers.
- A scrolling box inside a window that stays in place (position: fixed,
as in most dialogs) now scrolls its content, not just its scrollbar.
- Clicks reach boxes that a page positions freely (absolute, fixed) also
right after the page has changed them.
- Layout: percentage heights inside CSS grids, icons mirrored with
scale, var()var() written without a space.
- JavaScript: many fixes to text with non-English letters, number
formatting, Intl, element scroll
positions, getBoundingClientRect inside scrolled boxes, and custom
elements (the building blocks of YouTube and similar sites).
- JavaScript: localStorage and sessionStorage accept the short form
(localStorage.key = value, localStorage.key) and list stored keys;
MessageChannel messages arrive without timer delay, so pages built with
React respond faster; constants really are constant; Proxy objects work
with for-in, JSON and property descriptors; Object.keys() of built-in
objects and of the window lists the same as in other browsers; SVG text
elements report character positions.
- Layout: text set in fractional font sizes (16.5px) gets its proper
line height; percentage table columns are measured from the table
width; flex carousels wider than 32767 pixels are laid out correctly;
a closed <details> stays closed even when a style sheet sets display
on its content; <marquee> text is laid out like in other browsers (on
one line, not scrolling).
- Style: flex-basis with calc(), grid rows in fr units inside a grid of
automatic height (including collapsed 0fr accordions), and width or
max-width written with min(), max() or clamp() and one or more
percentages (Elementor background videos no longer shrink to nothing).
- Style: !important now also wins for widths and heights in percent,
calc() or auto, and for percentage padding and max-width; several
selector forms ( ".item:last-child:after", a class written after :not(),
long sibling names, "!important" rules with two ancestors) apply exactly
where they should; getComputedStyle() answers for every property.
- Style: rules meant for forced colors, high contrast, inverted colors or
HDR screens no longer apply on an ordinary screen (GitHub links were
drawn in the wrong colour).
- Scrolling: pages whose content scrolls inside the body while the page
itself does not (Google News) can be scrolled with the main scrollbar,
wheel and keys.
- Frames show the content their own scripts build; frames created inside
other frames and frames loaded from blob: addresses work.
- JavaScript: lists such as querySelectorAll(), children, childNodes,
form.elements and attributes are proper NodeList, HTMLCollection and
NamedNodeMap objects with item(), namedItem() and forEach(); classList,
URLSearchParams, FormData and Headers can be looped over (YouTube).
- JavaScript: Math.sin, cos, tan, atan2, cbrt, log2 and their relatives
give exactly the results other browsers give (sin of very large numbers
and even of Math.PI came out different before).
- JavaScript: Date.now() and performance.now() tick in fractions of a
millisecond and agree with each other.
- JavaScript: many smaller additions so pages see a standard browser:
CSS.supports(), screen and window sizes from the real screen,
performance.memory, location and history as proper objects, element
types reported correctly, and requests to other sites send only the
site name as referrer, as other browsers do.
- A page that builds an empty frame (about:blank) and puts pictures or
links into it no longer stops the whole browser with an "insert volume
about" requester; such addresses are resolved against the page, as in
other browsers.
- JavaScript: array methods (push, map, filter, join...) work on reactive
arrays such as those of Vue 3 applications; they used to return empty
or wrong results.
- JavaScript: Promise.withResolvers() and Promise.try(), URL.canParse()
and URL.parse(); new URL() rejects an address that is not a URL, and
event.eventPhase reports the real phase of an event.
- itch.io downloads now start in time on a 68020 with JIT as well: the
page no longer fetches its background picture again at every layout
check, and JavaScript timers keep running while the window is inactive.
- JavaScript runs faster: function calls, variable access and simple
arithmetic are roughly 10-30% quicker on a 68040, and canvas drawing
(charts, games) is several times faster.
- Layout closer to other browsers: !important inside style="", <picture>
takes its image from the matching <source>, width/height attributes
only on elements that allow them, <hr size>, <svg width="1em">, chained
child selectors (.a>.b>.c) and tag-qualified ancestors (header.x .y),
auto margins of grid and flex items, wrapping flex rows (Bootstrap
columns), fixed elements inside transformed ones, rem sizes set by a
later stylesheet, container units (cqw) and percentages inside calc().
- SVG text: a font-size attribute is honoured, and text lengths measured
by scripts match other browsers.
- JavaScript: mouse events carry the same fields as in other browsers
(pointer events, coordinates), and mouse movement over a frame reaches
the scripts of that frame.
- JavaScript: a form submitted by a script uses its own method (POST),
history.replaceState() changes the page address, canvas measureText()
gives fractional widths, and objects used as property keys, permission
queries and many smaller details behave as in other browsers.
- JavaScript: error objects, built-in constructors (Map, Promise, typed
arrays need "new" ), Element/HTMLElement/HTMLDocument/CSSStyleDeclaration
prototypes and the order of onclick-style handlers versus
addEventListener now match other browsers; Uint8Array() called without
"new" no longer crashes the engine.
- JavaScript: every frame has its own DOM prototypes and constructors;
event, screen and element properties live on their interface
prototypes as in other browsers; a frame's window size follows its
<iframe> (width/height and style); document.styleSheets lists the
rules of <style> elements; getBoundingClientRect() returns a DOMRect.
- JavaScript: an emoji built from two halves ("uD83D" + "uDE00") is
now the same string as the emoji itself; documents made with
DOMParser or createHTMLDocument search their own tree; Float16Array,
ImageData colour settings, CSSRuleList and performance.mark/measure
entries work as in other browsers.
- Fixed: a table cell right after a <caption> no longer ends up inside
the caption; absolutely positioned boxes keep their left margin;
<progress> and <meter> have their standard size.
- CSS: colours written with color(), lab(), lch(), oklab() and oklch()
(used by Tailwind 4 for its whole palette) are understood; a canvas
created with colorSpace "display-p3" keeps its pixels in that space.
- JavaScript: innerHTML and outerHTML are no longer cut off after about
8 KB, and the text of <script> and <style> comes back without
entities; a Proxy can be used as a getter or setter; a frame reports
its own navigation timing instead of the page's.
- JavaScript: error stack traces look like Chrome's (script address,
the right line and column in every frame, "Object.render", "new F");
scripts added by a page fire "load" or "error" when they finish;
performance.getEntriesByType("resource") lists the page's scripts,
frames and requests; Math functions and isNaN call an object's
valueOf; array callbacks get the right "this"; event listeners
registered for the capture phase run before the target, as in other
browsers.
- CSS: a negated element name (:not(html), :not(p)) is honoured in
!important rules and on ancestors (Shopify shops built on the Dawn
theme), and so are :last-child and similar conditions on ancestors in
!important rules.
- CSS: the rem unit follows html{font-size: calc(var(--x) * 62.5%)} (the
Shopify Dawn theme), so sizes given in rem on those shops are no
longer 60% too large.
- CSS: line-height: calc(1 + 0.8 / var(--x)) and other calc() giving a
plain number are understood - such text no longer collapses into lines
two pixels high.
- CSS: @supports (inset: ...) and the related properties now answer
yes, so fallback blocks written for browsers without inset (Shopify
Dawn footers) are no longer applied.
- CSS: ::before and ::after rules check all of their ancestor conditions
(an outer cl**** :not(), a tag name, :nth-child() on an element in
between), so they no longer appear where the page did not ask for them.
- CSS: column-count now also splits inline content (inline-block cards,
plain text) into columns line by line, balanced like other browsers;
a multi-column box no longer lets its first child's top margin leak
out.
- CSS: a flex item stretched across a column flex container keeps its
max-width.
- CSS: heights in percent above 100% (height: 200%) work.
- CSS: absolutely or fixed positioned boxes stretched between left and
right with a max-width and auto margins are centred (Bootstrap toasts).
- CSS: a selector starting with an id and followed by an attribute
condition (#loader[data-v-1a2b], as written by Vue scoped styles)
matches again.
- CSS: an image with an empty src (<img src="">) is laid out like in other
browsers - an empty inline element in standards mode (no longer a
box of its CSS width), square with one given dimension in quirks mode;
an <img> with neither src nor alt no longer gets a 16 pixel stand-in
for the dimension the page did not give.
- CSS: rules whose last class name is longer than 63 characters (Shopify
section classes) apply again in descendant selectors, ::before/::after
and !important.
- CSS: grid-template-columns: repeat(auto-fill, 25%) and other auto-fill
repeats with percentage or calc() tracks produce the right number of
columns (they collapsed to one); percentage tracks, also inside calc(),
keep their fractional part (16.6667% is six columns, not five).
- CSS: a class or id written after an attribute condition (#menu[open].on,
div[data-v].active, .a[x].b.c) no longer makes the whole rule ignored.
- CSS: min(), max() and clamp() nested inside calc() are understood
(calc(100% - 2 * clamp(20px, 4vw, 64px))) - such page containers no
longer collapse to zero width.
- Images served with a Content-Encoding no browser knows (aws-chunked from
S3-style storage) are shown instead of being dropped; only real
compression we cannot unpack (br, zstd, deflate) is refused.
- CSS: an image or SVG whose given width works out to zero (width: 100%
inside a zero-wide box, or a calc() that comes out negative) is zero
wide instead of taking its natural size.
- Fixed: parsing a style sheet that outgrew its first rule table read
memory that had just been freed.
- CSS: an ancestor written with an attribute between two classes
(.a[data-x].b .c, .a[data-x].b span) is matched instead of the whole
rule being dropped.
- Images: a picture chosen from srcset takes its natural size from the
srcset width and the sizes attribute (or the 2x/1.5x density), so a
1600w photo shown with sizes="400px" is 400 pixels wide, not 1600;
sizes also picks a smaller file when the picture is shown small.
- Layout: a menu item ending in an empty inline-block (a:after with
content:"") no longer makes the whole menu bar taller.
- CSS: a ::before/::after made absolute or a block by a rule that does
not set content now takes effect (grids no longer get an extra cell).
- Layout: a box with aspect-ratio grows to fit taller content, as in
other browsers (unless it scrolls or sets a min-height).
- Layout: grid items honour the order property.
- Images: an inline SVG with only a viewBox (no width or height) fills
the width of its container and adds nothing to the width of a
shrinking box, as in other browsers; a picture with a percentage width
wider than 100% is no
longer squeezed into its container.
- Layout: a grid item larger than its cell is centred (or end-aligned)
past the cell edges, as in other browsers.
- JavaScript: RegExp.$1 to $9, RegExp.input, lastMatch, lastParen,
leftContext and rightContext hold the result of the last match, like in
other browsers.
- JavaScript: Error.stack names the receiver of a method called on an
object made with Object.create() or on a Proxy like Chrome does, and
assigning to a static property of a function defined with a setter
calls that setter.
- JavaScript: delete works on functions (static properties, name and
length); a bound function takes "bound " when the target has no string
name; unknown tags such as <blah> or <applet> are HTMLUnknownElement.
- JavaScript: bind() on a function wrapped in a Proxy keeps its name and
length ("bound querySelectorAll" instead of an empty name).
- Sound: Settings -> Sound output chooses between Paula (audio.device,
the default) and AHI (ahi.device, 16 bits, through whatever AHI is set
up to use - a sound card, 14-bit Paula or the system mixer). Movies and
radio stations started afterwards use it; if AHI cannot play, the
player falls back to Paula.
- JavaScript: async generators (async function*) and for await loops
work as in other browsers; "for await" used to run like a plain loop
without waiting.
- JavaScript: naturalWidth and naturalHeight of an image chosen from
srcset take the candidate's density into account, like the layout does.
- CSS: rules with a structural condition on an ancestor such as
li:not(:first-child), or on an ancestor further up the selector
(.list li:not(:first-child) .title a), now apply.
- JavaScript: document.querySelector() with an id followed by more of the
selector ("#menu a", "#box > p") found nothing; it does now.
- JavaScript: content generated by CSS ::before and ::after no longer
shows up in children, childNodes, textContent or innerHTML.
- CSS: the :has() selector works in its common forms (.card:has(img),
li:has(> ul), .menu:not(:has(.active))).
- Images: a block-level picture with a percentage width is rounded to the
nearest pixel like other blocks, not truncated.
- CSS: max-width, min-width, max-height and min-height set to initial,
unset or revert (and max-width: none in a style attribute) cancel an
earlier limit.
- JavaScript: destructuring (const {x} = obj, function({x}) {...}) reads
getters defined in classes and prototypes, and works on strings and
functions; it used to give undefined.
- Fixed: calling a method directly on a value read from a Map or WeakMap
(map.get(key).method()) could destroy that value inside the map, causing
random errors in scripts that keep objects in maps.
- PDF files open in a built-in viewer, like in Firefox: a grey toolbar
that stays at the top with Previous / Next, page number, zoom and
Download, and pages drawn as you scroll to them. It is pdf.js by Mozilla
(Apache 2.0) in the new pdfjs drawer; JavaScript builds only. Without
that drawer, or in a build without JavaScript, a PDF is downloaded as
before and the status bar says why. The WWW menu has a new PDF submenu
with Amiga user guides (A500 to A4000, CD32) from Aminet.
- JavaScript: DOMMatrix and DOMMatrixReadOnly exist, and a canvas
getTransform() returns one.
- CSS: style sheets that start with a byte order mark, @charset or a
@layer statement load their @import files again (whole frameworks such
as Bootstrap were missing), and @import with layer() or supports() works.
- Check boxes and radio buttons keep their 13x13 size when a page gives
form fields padding or a border, and offsetWidth/clientWidth ignore
transforms (scale) as in other browsers.
- Fixed: JavaScript returning a let/const variable from inside a block,
loop or switch ({ const x = ...; return x; }) gave undefined or another
value, and a const declared in one switch case hid a variable of the
same name after the switch (PDF tables were lost because of it).
Edited by amigamia on 11-10-2026 09:57, 9 hours ago
J
Jeff1138Member
Posted 4 days ago
Hi,

Now shows stef be dpaint.js sadly not very responsive at the moment but great to see
B
BohunSenior Member
Posted 4 days ago
Try with 1.3.3 Smile
Edited by Bohun on 08-10-2026 11:34, 3 days ago
Bohun attached the following image:
amelinium.png
B
BohunSenior Member
Posted 14 hours ago
I have a question for Raspberry Pi users. Does the latest Amelinium 1.3.5 build work for you?
J
Jeff1138Member
Posted 13 hours ago
Hi,

Nothing different so far, loads sites as normal and youtube works. I do run the browser out of RAM: as I do not trust sd cards yet
B
BohunSenior Member
Posted 13 hours ago
Indeed, when I booted from RAM, it updated without errors. I thought I had a good microSD card (Sandisk), but I got an unpleasant surprise. The question is whether it's the file system or the card. Overall, it's bad news Sad
B
BohunSenior Member
Posted 9 hours ago
I decided to switch to an M.2 NVMe drive. Small 16GB drives have low power consumption, which the USB port should be able to handle. I ordered an Intel Optane M10; I'll let you know how it performs when it arrives.

Amelinium 1.3.6 released Smile
You can view all discussion threads in this forum.
You cannot start a new discussion thread in this forum.
You cannot reply in this discussion thread.
You cannot start on a poll in this forum.
You cannot upload attachments in this forum.
You can download attachments in this forum.
Moderator: Administrator
Users who participated in discussion: serk118uk, deadwood, retrofaza, Amiwell79, miker1264, OlafSch, Jeff1138, Bohun