Repository navigation
SoftN v0.0.26
SoftN v0.0.26
What's new
- Upgrading from v0.0.25: the engine is still ZIPP v0.0.29, so a FormLogic that installs this release keeps the server sandbox it built for v0.0.25, and nothing a browser loads changes. On the server two fixes below change what an app's backend may notice: a request whose transaction SQLite ends under it (
INSERT OR ROLLBACK) writes nothing more, on every host, and the PHP host'ssoftn.time.parseZonedreads a fixed offset past 14 hours. FormLogic's native-app tests pass on this release's runtime under Node and under softn-runner. New is softn-runner (the next entry), which the FormLogic runtime archive now carries innative-runtime/bin/for Linux and Windows x86-64 (about 53 MB for the two) with its licences. A FormLogic from commit c3854f0d on starts it for native apps and needs no Node on the server for them (FORMLOGIC_NATIVE_RUNNER=nodekeeps Node); an older one, v0.1.12 among them, installs the archive as before, does not look inbin/, and runsrunner.mjsunder Node. - An app's private server logic can run without Node.
apps/softn-runneris one program that takes the request the PHP host'sruntime/runner.mjstakes (the same stdin, environment and deadline) and gives the same answer and the same line in the operator's log, byte for byte on every case compared but one:softn.time.formatof a time more than 262,000 years either side of year 0, which the README explains. The app's logic runs on ZIPP v0.0.29'ssafe-sandboxengine built for WebAssembly, behind the same preamble, inside a wasmtime instance that has the clock and randomness and nothing else: no file, no network, no environment, and one host call,db.query, whose every answer the runner decides. The rest is native, each part a port of the Node runner's file of the same job (the bundle and configuration checks, migrations, the rate limit, SQLite opened and guarded asnode:sqliteis,softn.sql,softn.crypto, record events), andsoftn.timeis the Rust host's own. A request is answered in about a fifth of the Node runner's time (about 40 ms where it takes 160 to 200, on Linux and on Windows), by one file of about 27 MB, static for Linux x86-64 and for Windows x86-64, where Node is 93 to 127 MB; its third-party licences go with it (SOFTN-RUNNER-THIRD-PARTY-LICENSES.txt, written from Cargo's record of what it compiles in). The Node runner's own suite runs on it in CI (SOFTN_TEST_RUNNER). It also stops what it can stop itself a quarter of a second before the deadline, the app's logic and any SQL statement of the request, so such a request is rolled back and answered where the Node runner's process was killed, and SQLite keeps its temporary data in memory, at most 1 GiB;apps/softn-runner/README.mdlists what else differs. The FormLogic runtime archive carries both builds asnative-runtime/bin/softn-runner-<platform>, recorded innative-runtime/provenance.json, so a FormLogic that knows to start it runs native apps with no Node on the server; one that does not runsrunner.mjsunder Node as before. - A request whose transaction SQLite ends under it writes nothing more. An
INSERT OR ROLLBACKthat meets a conflict, or a column declaredON CONFLICT ROLLBACK, rolls the whole transaction back, and SQLite carries on in autocommit: on the PHP host and on the Rust host each statement the handler made after it was committed by itself, whatever the request answered. A handler that caught the failure and went on writing kept those writes although the request answered host_error, and one that asked for the rollback answered host_error too. Now no host call runs once the transaction has ended (the script is toldTransaction rolled back), the request answers host_error, and a handler that asked for the rollback keeps its own answer. softn-runner does the same, where a write the soft deadline interrupted ends the transaction too.route-declarations.test.mjsholds both runners to it, and the Rust host has a test of its own. softn.time.parseZonedon the PHP host reads a fixed offset past 14 hours (+15:00, out to±23:59, asformatalready did) as the Rust host does; it said the time did not exist during daylight saving. A zone's offsets today are all within 14 hours, so for any other zone it searches as before, and only when nothing within 14 hours matches does it look further.- Dependencies: XDB's lock takes rustls 0.23.45 (GHSA-2mjx-qc3c-rqvc, moderate: TLS 1.3 handshake messages accepted across encryption levels), a crate no XDB build compiles but its lock named; softn-runner is built on wasmtime 45.0.3, past GHSA-4ch3-9j33-3pmj (moderate: WASI hard links past a directory's permissions), which a runner whose guest has no directory could not meet; its own toolchain is Rust 1.99.0, the guest's still ZIPP's 1.92.0. Every crate of every Cargo.lock in the repository was checked against GitHub's advisory database, and npm's audit finds nothing.
Downloads
| Download | What it is | Pick it when |
|---|---|---|
softn-website-v0.0.26-zipp-v0.0.29.zip |
The complete softn.com website. The whole softn.com in one folder: the landing page, the app directory, the web runtime, Builder, Studio, the documentation and the directory API. | You want to run your own SoftN site: a directory people can publish apps to and play them from. |
softn-app-static-v0.0.26.zip |
One app on a page (static). The smallest way to host one SoftN app: a plain page with a loading spinner, a permission bar and your app, with no SoftN branding and no server code. | You have a .softn app and a web host, and you want the app on a page of your own site. |
softn-app-static-with-backend-linux-x64-v0.0.26.zip |
One app on a page, with an optional PHP server backend. The static single-app page above, plus a backend/ folder that lets the app run its own private server logic and SQLite database on an Apache/PHP host, with no service to keep running. |
Your app has a private server part (server/ logic, SQL migrations, routes) and your host is Apache with PHP on Linux x86-64. |
softn-app-private-v0.0.26.zip |
One app served privately by PHP. The single-app page again, but PHP renders it and hands the app's files to the browser piece by piece behind a viewer cookie, so the .softn file itself is never at a URL. |
You do not want visitors (or crawlers) to be able to download your app as one file. |
softn-app-private-with-backend-linux-x64-v0.0.26.zip |
One app served privately by PHP, with an optional server backend. The privately served page above together with the PHP server backend: three folders, webroot/, private/ and backend/. The app works at once without the backend; you enable the backend when the app needs it. |
You want the .softn file kept off every URL and the app has a private server part. |
softn-formlogic-runtime-v0.0.26.zip |
The SoftN runtime for FormLogic. Everything FormLogic embeds from SoftN, already built: the sandboxed frame FormLogic runs an app in, Builder and Studio as editors inside FormLogic, the server-side runtime for native apps, and the starter adapter. FormLogic’s build downloads this from the latest SoftN release instead of building SoftN from source. | You run FormLogic and its build cannot reach GitHub; download this and point SOFTN_RELEASE_ARCHIVE at it. |
Each archive unzips with a README.md at the top that explains it; RELEASE-GUIDE.md below compares them all.
The backend download targets Linux x86-64 with Apache/PHP and process execution enabled. It is a generic, unconfigured distribution: install your own public and private app bundles and preserve existing configuration, keys and databases when upgrading. Native XDB synchronization remains a Rust-host feature.
The complete website archive's name carries the tag of the zipp engine inside it. It ships no
example apps: the directory starts empty, and .softn files dropped on any
page of the site publish into it — one, or a folder at once, with the admin
key from data/config.json lifting the hourly limit for the site owner. The
example apps are published as .softn downloads with every
softn-Examples release.
The desktop loader and builder are not attached to releases; they build from
this tag's manifests with npm run tauri build in their apps. RELEASE-GUIDE.md
below compares every download and says which one to take.
The single-app archive includes a small counter example; replace it with your own bundle. It has no app download controls, but browser-delivered app bytes remain extractable. Required license notices are included in all archives.
Built with ZIPP v0.0.29 (its javascript-python-base engine, javascript engine and torch package; the release SHA256SUMS has sha256 d92c1d763caf703143a52291fee3723f2d486745640adc2db3aa3812f521f4a7).