The native Reader is for any application, service, tool, or game that needs to
open and verify AmoosedWeb content. AmoosedWeb::NativeReader is the general
CMake target; AmoosedWeb::GameReader remains a preview compatibility target.
Its C++ CallbackHttpHost bounds and checks caller supplied HTTP responses
before core verification. Preview C revision 16 can prepare a site with that
transport, and a Windows plain-C fixture verifies generated-site content
through it. The Windows Node-API bridge now routes npm's injected
fetcher through this native boundary. Its clean installed Windows npm
consumer now compares native injected-fetch metadata and bytes with the current
Reader across all six carrier modes and external member content, and rejects a
wrong key, altered media, and existing output. The same gate now checks that
rejected fetches and HTTP failures surface as native network errors, while bad
ranges and short bodies surface as verification errors. A changed final URL and
malformed ETag also surface as native network errors. The Node callback path
requests identity encoding and rejects compressed responses as network errors;
direct C callbacks still need to supply the exact carrier bytes because the
preview response struct has no content-encoding field.
The Windows WinHTTP adapter independently rejects compressed range, full-body,
and HEAD responses even when the server ignores its identity request.
Wider transport failure and target-host parity remain open. The local Windows release build of
amoosedweb-reader now uses this bridge by default through the same four
public functions. It bundles the matching Node-API addon and C DLL, while
Linux and macOS retain the JavaScript Reader. Its clean installed consumer
reads every public demo resource and checks exact hashes and no overwrite.
This source change has not been published to the npm registry.
Game catalogue and experiment APIs are optional layers. An engine-specific
Game SDK can be packaged separately once the general Reader is stable.
The first native release target is Windows x64. Complete the static-hosting compiler, Reader, language bindings, clean installed-consumer gates, and the 1.0 ABI freeze for that target before expanding release support. Existing Linux implementation and passing preview fixtures are retained, but a Windows release does not wait for Linux or imply Linux support. Adding Linux to a later release requires its own clean package and target-host evidence.
The local Windows x64 standalone compiler ZIP now uses a small C++ amw.exe
dispatcher and packaged C++ commands instead of a Node single-executable
application. It carries the shared help catalogue, runtime, templates, skills,
Reader DLL, and required third-party notice, but no Node executable or C++
implementation source. node tools/check-native-compiler-zip.js extracts the
archive into a clean directory and checks every command's help, a Unicode
starter build, verified Pages packaging and backup, invitation links, and a
local fake deployment handoff. It now also runs the same Windows media and
preview-server interoperability fixtures used by installed npm/.NET packages,
and checks hosted listing, download, member-key rejection, and full pull from
the extracted ZIP. The ZIP is an owner-side release artifact; these local
checks do not publish it or establish full command parity.
The local Windows x64 AmoosedWeb.Reader.NativeDefaultPreview NuGet review
package now exposes the existing AmoosedReader method signatures with the
revision-16 C library as the default backend. Its exact-version native binary
dependency is installed through NuGet; it carries no embedded Node CLI or
implementation source. Run node tools/check-dotnet-native-default-preview.js <folder-with-GameReader-Native-nupkg> to pack and install it into an isolated
cache, read a locally hosted carrier site, compare exact output bytes, pull
every indexed resource, and check that repeated downloads preserve existing
files. The published
AmoosedWeb.Reader now selects the C reader by default in the local Windows
release build, and AmoosedWeb.Native copies its matching DLL beside the
consumer application without packaging the embedded-Node CLI or site runtime.
A clean install of the official package built from this checkout lists and
downloads all 13 public demo resources with exact digests and no overwrite.
The local 0.27.1 Native NuGet archive is 126,731 bytes and its inventory has only
the Reader DLL, build target, license, and README. The local Compiler NuGet
tool now omits its embedded Node executable; its documented Windows commands
route to native tools and its .NET launcher handles informational output. The explicit CLI
constructor remains available. This local package change does not
mean the registry already carries it or that the preview ABI has 1.0 stability.
The clean NuGet consumer now also exercises an external-index member edition:
it rejects a missing index credential and absent or incorrect member key,
leaves no partial protected output, verifies exact protected bytes, and keeps
an existing file. The Windows clean installed native-default NuGet consumer
also builds and reads all six carrier modes through the familiar
AmoosedReader API, checking exact bytes, digests, and no-overwrite output for
each. An opt-in check lists the public amoosed.com HTTPS site,
downloads a bounded public resource, verifies its digest, and preserves the
output on a second download. This covers one real public host; private target
hosts, transport failures, and the full release matrix still need evidence.
The separate installed Node Reader HTTPS gate reads every public resource
within a bounded 64 MiB set, checks its digest against verified metadata,
compares exact bytes with the JavaScript Reader for resources with at most
64 parts, confirms protected content stays locked without a key, and checks
no-overwrite on a downloaded resource. The many-part case needs the native
Reader's bounded adjacent-range cache; the JavaScript reference currently
issues an individual request for each part. This is still one public host,
not target-host coverage for every supported deployment.
The Windows x64 clean-installed review package passed that gate against the
current amoosed.com release: 13 public resource digests, nine exact JavaScript
byte comparisons, locked member content, and no overwrite. Its 2,155-part
Ruma image completed through bounded native range windows.
The opt-in gate for the locally built official AmoosedWeb.Reader NuGet
package now downloads all 13 public resources from the same HTTPS host,
checks each digest and no-overwrite behavior, and rejects member content
without a key or partial output. It passed from a clean local package install;
the registry package and other hosts are not covered by this result.
The same clean-install gate now damages the hosted discovery index and an
indexed byte inside an appended carrier on separate local copies of the release.
The installed .NET Reader reports a verification failure in both cases; the
carrier failure leaves no partial resource file. These checks protect the
official package path in addition to the native core fixtures.
The proposed NGINX host integration is another native-core consumer, not a
game SDK. Its module should use the public C ABI for offline deployment
validation and a versioned release manifest, while NGINX handles per-request
routing, policy, and byte serving. Do not call blocking remote Reader operations
inside an NGINX worker or add host-specific symbols to the stable amw1_ ABI
without the usual parity and compatibility gates. Static hosting and its
developer tools take priority; this adapter remains a later phase.
1. Finish the native Reader
- Keep the preview C ABI as the cross-language boundary. The C++17 interface uses standard-library types and is not a cross-compiler binary ABI promise.
- Test hosted and external indexes, public and member data, all published carrier codecs, cancellation, error categories, and no-overwrite output on every claimed platform. Windows x64 and Ubuntu Linux x64 review ZIPs pass local clean-consumer gates; broader platform and operation parity remain.
- Install only public headers, prebuilt libraries, runtime dependencies, examples, license, and ABI inventory for third-party developers. Keep implementation source in the separately encrypted licensed member edition.
- Freeze a new
amw1_C symbol namespace only after the complete operation matrix and clean consumer builds pass. Preserve status values, ownership, calling convention, and symbol inventory within 1.x.
2. Move compiler behavior into native code
The current compiler and distributed native CLI still execute JavaScript with an embedded Node.js runtime. Replace the implementation in tested slices:
The Windows AmoosedWeb.Compiler NuGet tool now runs init, init-game, init-share,
update-project, install-skill, update-skill, rotate-project, build-project,
validate-game, export-runtime, bundle, compile, pack, unpack, verify,
member-file, media-key, pixel-capacity, carrier-embed,
carrier-extract, carrier-verify,
carrier-embed-set, carrier-extract-set, carrier-verify-set,
verify-site, verify-bundle, unpack-bundle,
package-pages,
verify-managed, verify-backup, remote-list, remote-get, remote-pull,
and check-host through
packaged C++ tools beside the self-contained CLI. The release gate clean-installs the tool,
builds and verifies a starter, checks private key creation and no-overwrite,
rejects a changed carrier, and packages and verifies the Pages inventory and
private backup without upload. The game validator and runtime exporter also
run natively, with clean package parity checks. The native initializer copies
packaged, version-matched starter inputs into a new Git repository without
replacing an existing project. The clean npm gate compares every generated
starter file against the packaged JavaScript initializer; init-share also
checks a multi-carrier sample and an external-index build. The native updater
requires a clean independent Git root and ignored private .amw/ files,
upgrades unchanged older starter inputs, preserves owner edits, and rejects
tracked private files in the clean npm gate. Other published compiler commands still use the
embedded Node CLI; this remains a
partial migration.
The six public agent skills are now shipped as version-matched files beside a
native Windows installer. Clean installed npm and .NET consumers check that
ordinary installation preserves differing existing text, explicit update
refreshes it, all update skips absent skills, and a selected update may add
one. Owner-only repository skills are not packaged.
The Windows packages now route project key rotation through a C++ tool as well.
It rotates member keys, public encoding salts, and external index keys without
passing secrets through arguments. Clean installed consumers check member and
hosted-site rotation followed by a native rebuild. The .NET package gate also
checks private index archival, new credential generation, and an authenticated
external-site rebuild. Its clean .NET gate also makes the configuration
read-only to force failure after the index-key swap, then checks that the prior
configuration and key are restored and no new member key remains. Broader
interruption and recovery cases remain open.
The Windows compiler commands also route hosted remote-list, remote-get,
and remote-pull through the revision-16 native Reader C library. The clean
installed npm and .NET gates exercise public and member files through a local
HTTP site, including a private index in the .NET case. The remote commands
retain the Reader's verified no-overwrite download behavior. Wider transport
and target-host checks remain part of the Reader 1.0 gate. Both Windows
command packages now use a native check-host executable for runtime route
headers and CSP, index range and cache rules, carrier ranges or media HEAD,
and verified resources. It uses the packaged policy and version, and stages
resource checks in an owner-only temporary directory. Clean installed gates
check a valid local host and reject a deliberately missing cache header.
Both Windows command packages now route serve to a loopback-only C++ preview
server. It preserves the local server's GET/HEAD byte ranges, content types,
cache and CSP headers, and virtual app boot fallback. A response-parity gate
compares eleven requests against the JavaScript server and rejects an encoded
parent-path escape; clean installed npm and .NET tools run that gate.
The Windows-built amoosedweb-compiler npm package dispatches the commands
listed above to C++. Its other commands remain in the bundled JavaScript CLI.
For verify-site, protected resources without a member key receive stored-part
hash checks; keyed plaintext authentication remains the stricter native SDK
operation. The Windows command now consumes AMW_CONTENT_KEY_HEX for that
keyed check and rejects a wrong or malformed key in clean installed npm and
.NET package tests. verify-bundle reuses the native integrity checks and
requires the directory to contain exactly the indexed carriers, including the
hosted favicon when applicable. Clean package gates reject an extra file.
unpack-bundle reuses that verification and the native Reader to publish
recovered resources as a new directory only after every resource verifies.
Member bundles require the key; clean npm and .NET consumers check exact public
and member bytes, wrong-key cleanup, and no overwrite. The clean .NET gate also
extracts an externally indexed member overlay using its separate credential.
The Windows bundle CONFIG SITE APP OUTPUT [INDEX_OUT] command now reads
the authored inputs in place through the native C++ overlay builder. Clean
installed npm and .NET consumers compare hosted and external carrier bytes
with the JavaScript command; external .amwkey and ICO bytes match too. The builder
keeps the separate credential owner-only and refuses existing outputs.
A package built on another operating system keeps the JavaScript
command path until native builds are available there.
The Windows npm and .NET compiler packages now route compile DOCUMENT.json OUTPUT.amw through the C++ document composer and wire writer. Clean installed
gates compare exact bytes with the JavaScript compiler for plain Unicode,
private-index, and hosted webApp documents, and reject an invalid authored
document before creating output. The matching native local verifier now powers
pack, unpack, and verify in both Windows packages. Clean installed gates
compare v2 universal carrier bytes with JavaScript, recover exact original and
document bytes, reject a changed carrier, and read legacy v1 footers. Broader
large-file and output-failure parity remains open.
The Windows npm and .NET command packages also write .amwmember credentials
through a native tool. Clean consumers compare its token bytes with the
JavaScript format and confirm that an existing output is preserved. The
credential is written with a current-user Windows ACL and no replacement.
The Windows packages now route key-link and member-link through
a C++ command. It validates compact bearer files, verifies index ICO carrier
and document bytes, checks the secure origin and protected return path, and
matches JavaScript URLs in direct and clean-package fixtures. Optional SVG QR
output uses the pinned MIT-licensed Nayuki generator and a private, new-only
file. Its matrix encodes the same bearer URL with medium error correction.
The installed Windows commands also use the packaged native OS key generator
for media-key and the native PNG adapter for pixel-capacity. Clean consumers
check private key shape, refusal to replace a key, and capacity parity against
the JavaScript PNG reader. The single-file encrypted carrier commands now use
bounded Windows CNG GCM chaining and staged, exclusive output. A
cross-implementation fixture verifies native-to-JavaScript and
JavaScript-to-native recovery, wrong keys, modified carrier bytes, no
overwrite, and multi-block input. The folder-set commands now use the same
native CNG path. They authenticate each encrypted shard, reject missing or
duplicate parts, verify the complete set digest, and publish only after the
full payload matches. The clean Windows package gates exercise all three
commands. Remaining standalone media encoding and decoding are still open.
The Windows pixel-encode and pixel-decode commands now use the native
PNG adapter and CNG AES-GCM envelope. A bidirectional JavaScript/native
fixture checks recovered bytes, wrong keys, damaged input, absent keys,
and no-overwrite behavior. Clean npm and .NET consumers exercise both
commands. The standalone WAV, PNG frame, and MP4 exchange commands now have
native Windows slices described below; broader size and interruption gates remain.
The bounded audio-file-encode and audio-file-decode commands now use the
native standalone WAV writer and Reader on Windows. They carry one 1–4068 byte
payload using AMW_MEDIA_KEY_HEX; a direct interoperability fixture compares
both directions with JavaScript and checks wrong-key, damaged-input, and
no-overwrite behavior. Clean npm and .NET compiler consumers run that fixture.
The Windows audio-decode command now assembles numbered WAV exchange parts
through the native Reader. It checks each authenticated shard, the whole
archive digest, every file digest, portable paths, and no-overwrite publication
inside a private staging directory. A JavaScript-produced two-part fixture
recovers nested Unicode files and rejects wrong keys, duplicate parts, altered
WAV bytes, and a crafted traversal entry. The matching Windows audio-encode
command now inventories regular input files, hashes each twice around private
archive staging, writes authenticated WAV shards, checks each with the native
Reader, and publishes the complete numbered set without overwriting. A
two-part fixture round-trips nested Unicode files through JavaScript and the
native decoder, and checks dry-run estimates and existing destinations. The
separate Windows audio-encode-set command now builds indexed multi-clip WAV
packets with three copies distributed across clips, optional PCM cover tracks,
and private no-overwrite staging. The direct and clean npm/.NET fixtures restore
two native-produced clips with the JavaScript Reader, both with and without
covers. Windows audio-decode-set now recovers JavaScript and native sets
through the C++ Reader, authenticating every packet and the media key before
no-overwrite publication. Its direct and clean-package gates reject wrong
keys, altered packet digests, unsafe paths, and existing output. The
Windows video-decode now uses that same archive verifier after scanning an
MP4 UUID exchange box and authenticating its AES-GCM envelope. A two-part
JavaScript-produced MP4 set restores an 8 MiB-plus file through the packaged
native command; wrong keys, duplicate parts, altered authentication tags, and
existing destinations fail without new output. Windows video-encode now
validates the original MP4 cover, stages an authenticated archive, appends one
UUID box to each byte-identical cover, and publishes the numbered set without
overwriting. A two-part native-produced set round-trips through JavaScript and
native decoders, with matching dry-run estimates. Windows frame-decode-set
now restores the indexed
PNG pixel and legacy tile modes through the native media adapter and CNG,
including packet and whole-payload authentication before no-overwrite output.
Direct and clean npm/.NET tests cover both modes, wrong keys, altered packet
hashes, unsafe names, and existing destinations. The matching native
frame-encode-set now writes both PNG modes from an authenticated ciphertext
packet map, verifies each frame through the native Reader, stages privately,
and publishes without overwriting. Direct and clean-package tests recover
its output through both the JavaScript and native Readers. Large-file, source mutation,
and interruption coverage remain open.
The owner-side AmoosedWeb.NodeCompiler preview now wraps the installed
revision-9 Compiler C library through Node-API worker calls for full-site
builds and offline verification. Local Windows x64 and Linux x64 source-free
npm tarballs pass clean consumers that build hosted and external-index member
editions, including
wrong-key, existing-output, pre-start cancellation, and game catalogue checks.
The Windows x64 tarball now also contains the matching C++ Pages tools. Its
clean installed consumer builds a distribution, verifies the Pages inventory
and private source/key backup, and rejects an existing output. This path runs
native executables for release packaging, while site builds and verification
continue through the Compiler C library; neither path uploads.
The local Windows x64 npm review tarball now also installs an
amw-native-preview command that invokes that same native backend for
build-site, verify-site, and package-pages. Its clean installed consumer
builds and verifies an external-index member site, rejects a missing member
key and existing destination, and prepares a hosted Pages distribution with a
managed inventory and private backup. The small Node.js command wrapper still
requires Node.js, while the carrier codec and release tools run in C/C++.
The Windows npm compiler preview tarball and Windows .NET tool preview now package
the five version-matched browser runtime routes. Clean installed consumers
build and prepare Pages distributions from the packaged runtime without a
separate runtime argument. The Pages commands accept an explicit runtime
directory override for custom installations. A local
byte comparison found the five Windows preview runtime files identical to the
current generated Pages release files. Broader command and release parity
remains open.
Both installed Windows command previews now expose export-runtime through
the matching native C++ exporter. Their package checks compare every exported
route byte and SHA-256 contract entry with the packaged runtime, verify the
compiler version, and reject an existing export destination.
The Windows Pages, runtime-export, overlay, and verification command entry
points now convert wide Windows arguments to strict UTF-8 before parsing paths.
Clean installed npm and .NET tool fixtures run their project, runtime export,
Pages packaging, inventory, and dry-run deployment paths below directories
whose names contain Polish characters.
Both the npm and .NET review command packages now carry a compiled Windows
amw-native-keygen executable. It uses the operating system CSPRNG, creates
one private new key file, and refuses to replace an existing file. Their clean
installed consumers verify the generated hex format and no-overwrite rule.
Both packages now expose validate-game through a compiled native validator.
It uses the same catalogue and referenced-file checks as the native build,
returns the published command's JSON summary, and rejects absent catalogues
and invalid records. Clean installed consumers exercise these cases under
Unicode project paths. The shared native game parser now rejects catalogue and
experiment revisions above JavaScript's safe integer range.
This moves key generation out of language-specific wrappers. A separate native
build-project command now creates or reuses the project's private member and
external-index hex keys, builds and verifies the site, and writes external
credentials in a private project directory. Clean installed npm and .NET tool
consumers exercise first and repeat builds, key reuse, verification, and failed
build cleanup. The command now writes a private .amwmember file whose bytes
match the JavaScript member-token format; both clean consumers decode it and
reject a conflicting saved credential. The native command now accepts the
published AMW_CONTENT_KEY_HEX and AMW_INDEX_KEY_HEX environment inputs,
rejects malformed or conflicting values, and does not persist the supplied hex
key when no saved copy exists. Both clean consumers verify that behavior.
The command now writes digest-named external ICO and .amwkey files directly
under .amw/indexes/, reuses matching bytes, and rejects conflicting saved
files. The Windows Pages packager now calls this project builder for ordinary
invocations without explicit key paths. Clean installed npm and .NET tool
consumers prepare external-index member distributions from saved and
environment-supplied keys, verify their inventory and backup, compare the
carrier bytes with a standalone project build, and check that private project
files stay out of pages/. The full published CLI lifecycle still needs parity.
Both Windows command packages also expose verify-managed, verify-backup,
and verify-pages, backed by the native managed-manifest verifier. Clean
installed consumers check the Pages asset inventory and private backup
independently and together, then reject changed HTML and backup receipts.
They now also carry the native Pages deploy handoff. Its --dry-run checks the
same distribution without upload, including rejection of a modified asset in
clean installed consumers. A real upload requires an installed Wrangler or
explicit Node and Wrangler paths and remains the owner's action.
The Windows npm compiler and .NET tool packages also expose that handoff through
amw deploy-pages DIST PROJECT [branch] --dry-run. Clean installed consumers
check the native preflight and reject tampered Pages bytes. Both packages use
the native handoff for real uploads too. Explicit Node and Wrangler paths may
be supplied; otherwise Windows runs installed npx.cmd wrangler after the
inventory and private backup pass. A clean-package test replaces npx.cmd
with a local stand-in and confirms the handoff without uploading. Neither path
uploads during --dry-run.
The Windows npm and .NET review commands now run both native inventory and
private-backup verification for verify-pages. Clean installed consumers reject
a changed page and a damaged backup receipt independently through that command.
The official Windows .NET Compiler package now omits the embedded amw.exe.
Its documented commands route to packaged C++ tools; the .NET launcher handles
grouped and per-command help, version output, guide/store links, and invalid
arguments. The packaged help catalogue is generated from the same authored
command list as the JavaScript CLI. The clean installed-consumer gate checks
the package inventory, representative command output, and native media,
Pages, site, and Reader paths. Broader command and target-host parity remains
before a stable native compiler claim.
The installed C SDK now includes the package license consumed by both the C
and Node review packages. This is a
separate review package, not a replacement for the published npm compiler:
the remaining compiler commands, native deployment handoff,
and wider clean target-host tests remain before a native-backed npm
compiler can be offered. Keep keys as raw buffers outside command arguments and
preserve the C status code through the wrapper.
An owner-side Windows x64 .NET 10 compiler review package now calls the same
revision-9 C boundary for hosted and external-index member builds and offline
verification. Its NuGet package includes the prebuilt DLL but no embedded-Node
CLI or implementation source. It also includes the matching C++ Pages tools.
A clean installed consumer verifies both editions, typed missing-key and
existing-output failures, pre-start cancellation, game validation, and a Pages
distribution with its managed inventory and private source/key backup.
It does not yet replace the published AmoosedWeb.Compiler tool: command
parity, native deployment handoff, and release policy remain.
The separate local Windows x64 AmoosedWeb.Compiler.NativeToolPreview NuGet
tool now executes build-site and verify-site through the same C library and
package-pages through the matching C++ tools. A clean dotnet tool install
consumer built and verified an external-index member site, rejected an absent
member key and existing destination, and prepared a hosted Pages distribution
whose managed inventory and private backup both verified. The package contains
the native DLL and tools but no amw.exe, embedded Node runtime, or C++ source.
It has a smaller command set than the published compiler tool, so the public
package stays unchanged until command parity and release checks pass.
The native project builder now checks an optional game catalogue and all
referenced game records before it publishes an overlay. The Windows gate
npm run test:native-game-build compares accepted and rejected fixtures with
the JavaScript game validator. The clean installed .NET compiler consumer also
checks that missing game assets return the input-error status and malformed
records return bad-format, then verifies a valid game build. Its review gate
uses an isolated NuGet cache so a previous package with the same preview
version cannot mask a rebuilt native DLL. This closes a build-time validation
gap for game projects; it does not make either preview wrapper a replacement for the
published npm or .NET compiler.
- Add native parsers and writers for the fixed header, section manifest,
favicon discovery index, external encrypted index, and site resource map.
Check exact wire bytes and rejection behavior against existing fixtures.
The first owner-side C++ writer now encodes canonical document sections and
universal append footers, plus append/PNG-chunk/MP4-UUID resource carriers.
It also encodes public and AES-GCM protected resource parts, matching the
JavaScript bytes on local Linux and Windows fixtures. It also serializes
assembled byte-addressable resource metadata as canonical
webAppJSON. An in-memory bundle operation combines assets, site encoding-key derivation, public/member part encoding, round-robin placement, append/PNG-chunk/MP4-UUID carrier packing, and manifest writing with JavaScript byte parity. A hosted-index fixture now validates the base document's title, blocks, theme, links, and bootstrap, then writes a complete discovery favicon with exact JavaScript byte parity. The native virtual app favicon writer now embeds an identity document with exact JavaScript byte parity. Supplied byte-carrierwebAppJSON is now checked by parsing and regenerating the native manifest; other manifest modes fail closed. Private-index fixtures now write encrypted index bytes into append, PNG ancillary chunk, and MP4 UUID first carriers and produce separate ICO and compact.amwkeycredentials. They check JavaScript bytes and reconstruct public/member resources with either form. An owner-side native overlay command now reads authored project inputs and produces hosted or external byte-carrier overlays. Public, member, and external-index fixtures match the JavaScript compiler byte for byte and pass Reader verification. The external credential ICO and.amwkeystay in a separate private directory. On Windows the native builder protects that directory with an owner-only, non-inherited ACL before writing credentials; a late cancellation removes the staged directory and files. This is a prerequisite for automatic native key lifecycle and the eventual compiler package replacement. Saved hex keys now accept uppercase and lowercase digits with surrounding spaces, tabs, or line endings, matching common JavaScript project inputs. The native key reader holds the text in a bounded stack buffer and clears it on every exit. Hosted project assembly also accepts the public encoding salt used for site-key rotation and authored asset-to-carrier placements. An opt-in native full-site mode now copies the ordinary site, installs the supplied site-owned runtime, and writes Pages routing and header rules. Its hosted and external-index member output matches the JavaScript project builder byte for byte on Linux and Windows fixtures. Streaming project I/O, other media modes, key lifecycle, backups, and packaging remain. An offline native site verifier now authenticates every indexed resource from local hosted or external carriers and rejects loose app source, damaged bytes, symlinks, and source maps. Native overlay and full-site builds now invoke it on staged bytes before publishing output. Its internal C++ result now distinguishes input, format, authentication, verification, unsupported, cancellation, and internal failures without parsing diagnostic text. Windows and Linux generated-site fixtures check cancellation, damage, and missing-site categories. A separate owner-sideamwc_preview_*C library now exposes local verification and site builds through nine checked exports and a plain-C fixture. Its CMake package can be installed for local review on Windows and Linux; it is not a published or stable compiler SDK. A separate native managed-manifest tool writes and verifies the same Pages file-hash inventory as the JavaScript packager, including file-count and size limits. The native snapshot mode can now copy project source and private key inputs to a protected local directory and write a receipt besidepages/; the native and JavaScript verifiers check that receipt and its file hashes. A native Pages command now stages a complete site, inventory, private snapshot, andDEPLOY.txtand publishes only after its native checks pass. It does not upload. A native deploy command now rechecks the managed inventory and private backup immediately before handing onlypages/to an explicitly selected local Wrangler CLI, with a verify-only dry run. Broader carrier parity remains before this preview can replace the distributedamw package-pagespath. - Add native AES-CTR/GCM packaging, hash verification, and deterministic key handling. The native part writer now performs site CTR encoding and optional deterministic-nonce member GCM sealing. Site encoding-key derivation matches the JavaScript public, salted, and private-index cases on Linux and Windows. The external index writer derives its GCM nonce and locator from a saved key and verifies the matching private site encoding key. End-to-end project encryption now works for byte-addressable first carriers; broader key lifecycle and other carrier modes remain. Never package private keys or source snapshots into a public site.
- Encode append, PNG ancillary, PNG low-bit, WAV tones, sparse frames, and MP4
UUID carriers with the same reconstruction guarantees as the current
compiler. Test each produced carrier through Node, browser, and native
Readers, including damaged and truncated cases. A standalone native WAV
tone writer now matches JavaScript bytes for bare, mono-cover, and stereo-cover
website shards on Linux and Windows. The native site builder now places
public and member parts into WAV carriers and writes matching
audioCarriersmaps; Linux and Windows full-site fixtures check byte parity with the JavaScript builder. A Windows protected-WAV overlay fixture also verifies exact carrier bytes and member-resource recovery. Native project builds now reject PNG ancillary and MP4 UUID carrier URLs whose extensions the JavaScript compiler rejects, even when their bytes contain valid media. This closes one package-parity gap for the native npm and .NET review paths. The native bundle and private-index writers also accept uppercase media extensions that JavaScript accepts, with hosted PNG/MP4 overlay bytes checked against JavaScript on Windows and Linux. A portable pixel writer and platform PNG adapters now match the JavaScript low-bit packet, decoded pixels, and recovered payload on Linux and Windows. The native site builder places public and protected resources in PNG low-bit carriers; a full-site parity fixture checks manifests, recovered resources, and decoded image pixels across the two compilers. A standalone native AWF2 writer now packs one sparse-frame shard and compares decoded pixels and recovered bytes with JavaScript on Linux and Windows. The native site builder now places a public or member shard inframe-lumaand a full-site fixture compares the manifest, recovered resources, and decoded pixels on Linux and Windows. An opt-in Chrome gate boots native-built PNG low-bit and AWF2 sites with the release runtime, then fetches a protected resource from each through the site worker after confirming that it is locked without the member key. It changes an encoded pixel bit and two AWF2 bit copies in their hosted PNGs and checks browser rejection of both damaged carriers. The same gate now opens a native-built external-index site in Chrome using its generated.amwkeyinvitation, verifies that the index import form is shown without that credential, then checks that a protected resource stays locked until a separate member key is supplied. This tests browser access to the generated private edition, not only offline Reader reconstruction. Evaluate one optional FFmpeg-backed authoring adapter shared by Windows and Linux for inputs that need media conversion, such as normalizing a music or video soundtrack to the bounded PCM WAV cover accepted by the native writer. Invoke an explicitly selected executable with argument arrays, cap input/output size and execution time, and validate the resulting PCM before packing. Keep FFmpeg output outside the final carrier after its bytes are fixed and hashed. Current Linux libpng decoding and Windows image adapters remain suitable for the exact PNG pixel contract; append/PNG-chunk/MP4-UUID placement and WAV packet modulation still need AmoosedWeb's own deterministic logic. The Reader must verify published carrier bytes directly and must not require FFmpeg to read today's formats. Do not bundle FFmpeg until the selected build and its redistribution terms have been reviewed against FFmpeg's license guidance. Test the same conversion fixture on Windows and Linux and compare decoded PCM, encoded carrier recovery, sizes, and performance before making it a supported tool. Investigate a separate GStreamer plugin so callers can compose AmoosedWeb media work with string-described pipelines, alongside ordinary GStreamer elements. GStreamer'sgst_parse_launchaccepts pipeline descriptions, and its plugin model supports loadable elements. The native core now writes and recovers a self-contained standalone media exchange WAV file. The writer seals a payload with the separate media key and a fresh nonce from the crypto host's platform CSPRNG; the Reader verifies repeated packets and authenticates the AES-GCM envelope. A Windows/Linux fixture compares exact one- and multi-packet WAV bytes with JavaScript and checks damaged-copy, wrong-key, malformed-WAV, and lost-signal results. Compiler C preview revision 9 exposes bounded single-file WAV writing throughamwc_preview_audio_encode_file, and Reader preview revision 14 exposes authenticated recovery throughamw_preview_audio_decode_file. The writer uses a fresh nonce and a caller-owned output buffer; the C fixture checks a round trip across the two libraries on Windows and Linux. The Reader's installed plain-C example is compiled and exercised against clean Windows and Linux SDK installs. Neither a GStreamer element nor an indexed multi-clip decoder ships today. A caller-supplied nonce remains available only through a clearly marked deterministic fixture helper. Websitewav-4fsk1is a different path whose native decoder uses the verified site's packet catalogue. The broader compiler C ABI and indexed multi-clip exchange remain open. The first milestone is a local, source-free consumer spike using the installed revision-14 C library as the codec boundary: load the plugin from an installed binary, run a string-described pipeline, and compare its recovered bytes and failure categories with the plain-C standalone example. Make that spike reproducible with an installed SDK, rungst-inspect-1.0 amwwavdecodefor element discovery, and usegst-launch-1.0to check parsing and the expected missing-key error. Run authenticated recovery through the GStreamer library API, where the key can be supplied after parsing and before playback. Record the exact GStreamer version and plugin search path on Windows and Linux. The plugin is an optional package with its own dependency and license review; it must not become a dependency of the core Reader or static-hosted sites. Start the plugin with a bounded whole-WAV input element. A candidate local pipeline isfilesrc location=carrier.wav ! amwwavdecode name=decoder ! filesink location=recovered.bin; the element name and caps are provisional. In an application, parse this local pipeline, finddecoder, supply the 32-byte media key through a non-string credential setter before moving to PLAYING, and clear the caller's key copy afterward. Do not encode the key in a pipeline property, URI, environment variable, orgst-launch-1.0argument. The command-line run is only an element-discovery/diagnostic check until a safe local key handoff exists. This matches the existing native WAV parser's complete-file input. A later PCM-input variant may accept exact, unconverted samples fromwavparse, butwavparseremoves the WAV container, so that variant needs a separate native PCM decoder and explicit rate/channel/sample-format caps. Do not placeaudioconvert, a resampler, or a lossy codec before either decoder: changing samples can destroy the embedded tone packet. The element must enforce a whole-input size bound, retain output in a bounded private spool, and emit no recovered bytes until the native core verifies the complete payload and, where applicable, authenticates it. On error, cancellation, or missing credential, discard the spool and emit an error rather than a partial resource. Website WAV carriers additionally require the verified index and original carrier bytes, so a separate site-resource source element would be needed for them. Decide how a companion encode element receives both cover audio and payload data before fixing its pads or caps. A separate authoring adapter could use GStreamer to normalize a cover WAV before the native writer packs bytes; that is comparable to the FFmpeg authoring option above, not a replacement for AmoosedWeb's packet or verification logic. Treat pipeline descriptions as local executable configuration, never as untrusted site metadata or a stable C ABI input. Usegst_parse_launch_fullwith fatal parse errors in a production adapter, and inspect the instantiated elements before running it. Keep secrets out of pipeline strings and logs; pass them through a deliberate local credential interface. Bound anyappsrc/appsinkqueues and propagate back-pressure rather than dropping samples; their documented queues can otherwise grow if the application stops consuming data. Implement the first element as a whole-stream decoder that buffers bounded input and publishes output only at EOS after authentication. A conventional per-bufferGstBaseTransformis not a good fit for that transaction; its documented base-class model is primarily one input buffer to one output buffer. Test element discovery, parsed library pipelines, CLI discovery and missing-key behavior, exact recovered bytes, rejection of damage and missing keys, transactionality, cancellation, and back-pressure on both Windows and Linux. GStreamer'sgst-launch-1.0guide identifies the CLI as a debugging tool; production integrations should use the library API. Its appsink and appsrc documentation describes the queue controls. Review the exact runtime and plugin dependencies before redistribution: GStreamer's licensing FAQ says plugins can carry different effective licenses and recommends checking each installed plugin withgst-inspect-1.0. Keep this plugin optional and outside the static-hosting and core SDK critical path until those gates pass. It is a proposal, not a supported encoder or Reader today. - Build the native project compiler, verifier, and Pages packager around those codecs. Preserve explicit release file lists, source/key backups, and the no-upload behavior of build and package commands.
- Replace the distributed compiler CLI only when every shipped command and supported target platform has parity tests. Measure installed bytes and startup memory before and after; a smaller package is an outcome to verify, not a reason to drop features.
An owner-side compiler 1.0 C ABI draft proposes a
separate amwc1_ query, cancellation handle, static-site build, and offline
verification. It is compile-checked as C and C++ but has no implementation or
installed header. Its build call requires an already verified site-owned
runtime and caller-supplied keys; it cannot replace the public compiler CLI or
the Pages backup/release workflow. Freeze its symbols, numeric statuses, and
ownership only after the native implementation and platform parity prove them.
The experimental amwc_preview_* C boundary exercises local verification and
hosted, member, and external project builds. It does not implement this
amwc1_ proposal or a complete replacement for the public compiler CLI.
3. Use the native core from every SDK
Complete the Windows npm and .NET Reader and compiler migrations, including their clean installed-consumer and release gates, before changing the Unreal plugin or starting the PixelMaze port. The Unreal adapter should consume the same verified native package that those language bindings have already tested.
- Keep the existing npm Reader and compiler commands and the NuGet Reader and tool APIs as compatibility surfaces. Their implementation should call the same native Reader and compiler core, rather than maintain separate codec implementations indefinitely.
- Give Node.js a thin native binding to the C ABI (for example N-API) and
distribute version-matched binaries for each claimed platform. The npm
compiler CLI may call a standalone native compiler executable where that
gives a simpler and safer process boundary. Do not silently fall back to a
different codec when the native binary is missing.
Windows x64 and Ubuntu 22.04 x64 owner-side Node-API previews now list resource metadata,
reads fully verified bytes, accepts
AbortSignal, and downloads without overwrite through the revision 16 C ABI on Windows and revision 14 on Linux. Its hosted, external, member, frame, and audio fixtures pass locally. The local Windows official npm build now selects the native bridge by default, but the registry package has not been updated. Broader transport and error parity and other native platforms remain. The preview'sopenSite()keeps one verified index snapshot across serialized list, read, and download operations, andclose()waits for accepted work. Its whole-site pull checks the complete path list and downloads through that same snapshot without replacing existing files. A Windows clean-installed review tarball now also exercises the published Reader function names at the package root for hosted, external, member, and whole-site operations. Callers close the session explicitly. On Windows, an injected transport now reaches the native Reader through a bounded Node-API callback bridge, and the package omits the JavaScript fallback. Broader injected-transport and error-behavior parity remain before claiming stable native parity. The direct native API remains available at./nativein the review tarball. The preview accepts.amwkey, packed ICO,.amwmember, and hexadecimal member key files; it checks member edition IDs against the verified index. Separate source-free Windows and Linux x64 npm review tarballs build from installed SDKs, check exact file inventories, and pass their hosted, external, member, key-file, wrong-edition, session, media, damaged-carrier, cancellation, and whole-site pull and no-overwrite fixtures after clean local installs. The Linux addon's runpath is$ORIGINonly. Both tarballs are marked private and are not registry releases; the Linux validation host is Ubuntu 22.04. The Windows0.28.17-preview.1and Linux0.28.14-preview.3Node review tarballs also exposedecodeStandaloneWav()through an async worker. Both clean consumers recover exact standalone bytes and reject an incorrect media key and damaged WAV. Their receipts read the matching revision-16 or revision-14 header instead of recording the older revision 13. An opt-in Windows clean-install gate compares all public amoosed.com resource metadata and one bounded resource's bytes between this native package and the current JavaScript Reader over HTTPS, then tests native no-overwrite. - Give the .NET Reader a P/Invoke facade over the same stable C ABI. Give the .NET compiler tool a native compiler executable or interop wrapper from the same native implementation. No embedded Node.js runtime belongs in the final NuGet dependencies.
- Run the same hosted, external, member, media, damaged-carrier, cancellation, and output-race fixtures through native C++, npm, and NuGet public APIs. Compare command output, resource metadata, bytes, and error categories. A platform package is ready only after a clean consumer installs and runs it.
4. Publish language-specific integrations
The stable C ABI also supports PHP, Ruby, Go, and Java without separate carrier implementations. Each binding should expose the language's familiar API while preserving native error categories, cancellation, secret-file handling, and verified no-overwrite downloads. Reader bindings come first; compiler APIs follow the native compiler parity gates above.
- PHP: a Composer package with a small native extension or FFI layer, choosing the mechanism through clean consumer tests on supported PHP versions.
- Ruby: a gem with a native extension or FFI layer and platform-matched native binaries.
- Go: a module using cgo for the C ABI, with explicit headers, library search paths, and supported target triples. Keep a process wrapper available where cgo is unsuitable for a supported deployment target.
- Java: a Maven Central artifact with a small JNI or Foreign Function and Memory API binding, selected according to the Java versions we support. Keep native binaries version-matched and document their loading and redistribution requirements.
Each package needs its own versioned distribution, platform inventory, license, install guide, runnable examples, and package-registry publication workflow. Do not call a platform supported until its clean package consumer can install it and run the shared fixture suite. The native library's ABI version is independent of language-package versioning; wrappers must check the native capabilities they require at runtime. The owner publication handoff records registry destinations, account setup, and the release gate separately from this public technical roadmap.
Owner-side build scripts may continue using Node.js during the transition. The Windows x64 npm compiler now uses Node.js only as a command launcher. Its installed package contains the C++ dispatcher and native command tools, with no JavaScript compiler codec fallback. The Windows standalone compiler and NuGet tool likewise use the native dispatcher without an embedded Node.js runtime. Other platform packages and the browser runtime retain their current paths until their native gates pass.
5. Evaluate a browser WebAssembly target
After the native Reader and compiler pass the static-hosting and SDK parity gates, compile their portable codec and verification core to WebAssembly. Emscripten can connect C/C++ functions to JavaScript, but the browser still needs a small JavaScript adapter for same-origin fetch, service-worker requests, Web Crypto or equivalent native crypto, image/audio decoding, and verified download delivery. Compile the portable core only: WinHTTP, filesystem output, Node-API, and NGINX adapters remain host-specific. Keep the site-owned worker and its origin/security model; a Wasm module does not itself provide that.
Begin with a Reader proof that decodes hosted and external indexes plus every
published carrier mode from the same fixtures as the existing browser and
native Readers. Measure total compressed download size, startup time, peak
linear memory, range-request behavior, and cancellation on target browsers.
Then test the native compiler core as an optional browser authoring tool,
including private-key handling and large-project limits. Use a narrow C-style
export/JavaScript import boundary with explicit memory ownership; the stable
amw1_ host ABI rules inform it, but a Wasm/JavaScript distribution is a
separate compatibility target. Do not replace the production JavaScript
worker or compiler until the browser fixtures and release gates pass.