wwwwwwwwwwwwwwwwwww
Changelog
Weekly updates and changes to Takeout
Week of March 23, 2026
eb209cf6
Upgrades
- Tamagui and One framework upgraded to latest canary
Improvements
- Login page redesigned with animated logo, enter transitions, and glass card styling at the bottom of the screen
- /home route redirect moved into layout to avoid intercepting nested tab routes like /home/search and /home/profile
- Feed set as default home tab with /home redirecting to /home/feed
- FastSquircleView replaced with plain View for React Native 0.83 compatibility since react-native-fast-squircle is incompatible
- Reanimated 4.2.x compatibility patch added for Vite builds
- SSR permissions test page refactored for web-only rendering
Bug fixes and chores (9)
Week of March 16, 2026
aac96bb5
Features
- Major framework upgrade: React Native 0.83, Expo 55, Zero 0.26, Drizzle v1, React 19.2, and Vite 8 with multi-stage Docker builds using the official bun image, oxlint TypeScript plugin, and per-user zero kvStore
- Maestro native E2E test flows for app launch, login, and comment posting with testIDs added to key components for element targeting
- Zero error boundary with user-facing retry UI that shows sync error details and a retry button, replacing the previous silent failure mode
- Zero connection state monitoring with disconnect/reconnect toast notifications and auto-reload/reset actions when client data errors occur
- on-zero
createZeroServeraccepts an optional external connection pool for non-standard environments like Cloudflare Workers with PGlite env:updaterewritten with preset system supporting custom files, strategy auto-detection for yaml/js/dotenv/ts files, and merged withgenerate-envinto a single command
Improvements
- Native auth restructured to happen after login for better performance, avoiding zero sync errors before the splash screen finishes
- Docker switched from bind-mounted directories to named volumes, fixing permission issues when host UID/GID doesn’t match the container user
- on-zero permission and ensure error checks use string-based name comparison instead of instanceof, fixing false negatives caused by Vite’s dependency optimization creating duplicate module instances
- Zero concurrent mode fix: replaced
use()withuseContext()for React 19 concurrent safety, and disabledunstable_batchedUpdateson native since React 19 auto-batches (passing it caused re-entrant work loop errors) - Switched from op-sqlite to expo-sqlite for zero native storage, and removed incompatible packages (expo-glass-effect, react-native-fast-squircle, vxrn/expo-plugin) for React Native 0.83 compatibility
- All oxlint warnings resolved across codebase with proper ignore patterns
- react-native StyleSheet dependency removed by inlining absoluteFill across 9 files
- Links now inherit font properties from parent components
findStragglersuses pgrep instead of ps for sandbox compatibilitytko run --no-rootfixed to treat the flag as a leaf node, preventing duplicate script execution when parent and child both resolve the same scripts- Loosened peer dependency ranges to prevent bundler module duplication
- Force clear session on auth error for clean recovery
- Playwright test caching added with increased timeout
- Removed duplicate useUser hook in favor of useUserById from features/user
- Minio removed from deploy configuration
- Integration tests updated with API-based SSR permissions verification
Bug fixes and chores (19)
Week of March 9, 2026
4cbf2849
Features
- on-zero
awaitEffectsoption for server mutations lets async tasks be awaited before returning instead of fire-and-forget, with authData moved into an options object for a cleaner API PermissionErrorclass for typed permission denials, letting callers distinguish expected access denials from unexpected errors via error name- Notification close button
Improvements
- serverWhere SSR evaluation fixed by converting module-level state to a global singleton, preventing Vite’s module duplication from creating separate server/client state instances that caused permission filters to not apply during SSR
- on-zero server-side detection improved with
isServerRuntime()helper that auto-detects Node/Bun without relying on Vite environment variables, fixing mutator permission checks outside Vite contexts - on-zero code generation now includes read-only models (those without a mutate export), ensuring Zero schema registration works for all tables
- on-zero code generation handles Symbol.iterator and other symbol-keyed
TypeScript properties without crashing by skipping synthetic
__@prefixed names - Mutator error logging gated behind DEBUG flag, and expected permission rejections no longer logged as errors to reduce log noise
- Loosened peer dependency ranges to prevent bundler module duplication issues
- Skills docs now require frontmatter, fixed stale symlinks, and removed tko-scripts autogeneration
Bug fixes and chores (11)
Week of March 2, 2026
8f3883ce
Features
- on-zero deep TypeScript to validator generation - automatically generates runtime validators from your mutation argument types, with full support for nested objects, arrays, unions, and optional fields
- on-zero
ControlQueriescomponent for disabling query subtrees - wrap parts of your component tree to conditionally disable all Zero queries underneath - on-zero
getQuery()for accessing raw query objects outside React components - on-zero
setAuthDataexported from public API for manual auth state control - on-zero dynamic environment state replaces static isServer detection, fixing edge cases where server/client detection was wrong
--default-allflag for CLI script groups - automatically selects all scripts in a group without prompting/report-issuecommand for filing issues with rich system context- database indexes added for common query patterns, plus a
zero/analyze-indexesscript for finding missing indexes - mutation validators support in zero server configuration
Improvements
runandrun-allscripts rewritten with deep testing, proper process cleanup, and no sub-process spawning for more reliable signal handling@take-out/runpackage extracted from scripts for cleaner separation of process management concerns- on-zero models can now omit mutators entirely for read-only tables
- on-zero HMR boundary moved from generated code to vite plugin, so generated file changes no longer trigger full page reloads
- integration tests stabilized with API-based login instead of UI-driven login and proper wait conditions
- uncloud deploy containers (migrate, minio-init) kept alive with healthchecks so dependent services don’t start too early
- PTY runner kills entire process group to prevent orphaned processes
- SIGHUP handled to prevent orphaned processes when terminal closes
- on-zero crash-prevention added to postgres error handling in zero server
- on-zero permission throws now treated as denials with dev-mode warnings for unexpected errors, preventing crashes from misbehaving permission functions
- on-zero permission check fixed for upsert operations when the target row doesn’t exist yet, matching the existing insert behavior
- on-zero environment detection in SSR mutators uses the creation-time value instead of a potentially stale global state
Upgrades
- One upgraded to 1.10.2 for faster Chrome DevTools source searching
Bug fixes and chores (15)
Week of February 23, 2026
cec96db5
Features
- on-zero
authDataargument added to zero query with async local context for concurrent request safety - on-zero
getAuth()andensureAuth()helpers exported for easier access to auth data in queries and mutations - on-zero
zeroServer.mutateauto-resolves authData so you no longer need to pass it manually - on-zero
awaitAsyncTasksoption forzeroServer.mutate- async tasks now fire-and-forget by default to match the mutate API endpoint behavior cmd().env()chainable for setting environment variables in CLI scripts- dev CLI docs added covering keyboard shortcuts and process focusing
Improvements
- on-zero dev mode performance improved by disabling expensive JSON stringify for query key comparison
- drizzle migration journal now updated when renaming migration numbers, preventing out-of-sync state
- context menu styling improved for post actions and avatar menu
- better terminal restore from TTY with improved process exit handling
- smoother handoff back to shell after CLI process exit
useAsyncEffectloop warning now includes function name, deps, and component stack for easier debugging- migrations set
search_pathto public explicitly, fixing issues when a pg schema matching the db user exists - EAS build config updated to include bun version 1.3.9
Bug fixes and chores (8)
Week of February 17, 2026
060abdbf
Features
- iOS create post widget using Voltra for quick posting from home screen
- Better Zero documentation in skills
Improvements
- PTY runner properly restores terminal to cooked mode on exit, preventing broken terminal state after Ctrl+C
- Migration runner only ignores actual duplicate key errors, not all constraint violations
Bug fixes and chores (3)
Week of February 10, 2026
bb43e47f
Features
tko runkeyboard shortcuts for restarting and killing individual processes — letter-based shortcuts auto-computed from process labels, stdin forwarding to focused process- iOS simulator skill added with 21 scripts for building, testing, accessibility auditing, gesture/keyboard automation, and simulator lifecycle management
tko skillscommand extracted to dedicated script with expanded skill management functionality--ptymode forrun-allcommand provides interactive dashboard with process management- on-zero server validation hooks with configurable admin bypass for custom mutation validation
- Shared deploy health helpers with restart loop detection for safer deployments
- Migration timeouts for easier debugging of hanging migrations
bootstrap.shscript for reliable first-time project setup
Upgrades
- Tamagui upgraded to 2.0 RC11
- One upgraded to 1.6.13
- Bun upgraded to v1.3.9
Improvements
- Process exit cleanup simplified from recursive pgrep tree-walking to process
groups (
kill -pid), fixing hangs in complex multi-process exit scenarios - better-auth-utils passes session token in auth header based on session presence instead of being gated on the JWT mode flag
- on-zero HMR support with unified Vite and CLI plugins for faster development iteration
- on-zero cleanup and unification of Vite and CLI code generation
- Auth/mutator requests only logged on error or when DEBUG is set, reducing log noise
- PTY resize errors caught gracefully when file descriptor already closed
- Exclude init containers from restart loop detection in health checks
- SSH retry logic with 3 attempts and 5s delay for more reliable deployments
- Cross-subdomain cookies only enabled in production, fixing local development auth
- Migration savepoint resilience for lost tracking records
- Sanitized savepoint names for migrations with hyphens
Bug fixes and chores (22)
Week of February 3, 2026
0918f5d1
Features
- Push notification system - notification model, queries, server actions, device registration, and in-app notification list with real-time updates
- Notification listener and emitter architecture for decoupled notification handling across the app
- Notification prompt flow with persistent storage to avoid re-prompting users
- Intercepting routes for feed detail - posts open in a modal overlay on web while preserving direct URL navigation
- Push notification toggle in settings
cmd()script helper - tagged template API for cleaner CLI scripts with auto-generated--help, typed argument parsing, and built-inrun()contextrun()function for one-shot non-reactive Zero queries - defaults to server fetch ('complete'), pass'cached'for local-only readsusePermissionnow supportspermissionStrategyoption - choose between'optimistic'(evaluate client-side),'optimistic-deny'(false until server confirms), or'optimistic-allow'(true until server confirms)- on-zero
run()works in both queries and mutations, accepting regular query functions alongside synced queries - Local MCP server config added (
.claude/mcp.json) for bun-based tooling setup - Burnt and Zeego native integrations added to setup
- Type-aware oxlint via
oxlint-tsgolint- linter now uses TypeScript type information for more accurate rules - Dev-only docs support in skills generator - documentation can be flagged as dev-only so it’s available during development but excluded from production builds
Upgrades
- Tamagui upgraded to 2.0 RC6 with theme and font refinements
- One upgraded to 1.6.1 with HTML cache fixes
- Zero upgraded to 0.25.12 with less noisy logging
Improvements
- Auth simplified - removed JWT token validation (leftover from Tauri integration), streamlined to session-based auth with cleaner Zero push/pull handlers
- on-zero permissions no longer require explicit export - permissions are now read directly from the model definition
- on-zero
usePermissionmoved to server-side named query to work with Zero 0.25’s materialized query model - each table gets its own materialized permission view instead of one shared query - on-zero generate
--aftercommand now runs on initial watch startup and scopes formatting to only generated files, preventing watcher feedback loops - on-zero generate uses a cache directory for output so
--afternever triggers file writes in the source tree, avoiding watcher feedback loops with linting - nested
serverWherecalls inside permission builders now evaluate correctly on the client - previously inner serverWhere was no-op’d, breaking compound permission checks zeroServer.query()now actually executes the query viatx.run()instead of returning the query builder- all scripts rewritten to use
cmd()API - 71 files migrated from raw exec/spawn to typed, self-documenting commands with automatic help generation - scripts directory renamed from
ci/toops/(avoids conflict with bun’s built-inbun cicommand), andops cirenamed toops release - CI pipeline split into separate
test.tsandrelease.ts- test runner extracted for independent use, release just orchestrates test + build + deploy - Env vars simplified -
VITE_PUBLIC_ZERO_SERVERandWEB_DOMAIN/ZERO_DOMAINreplaced with justVITE_ZERO_HOSTNAMEandVITE_WEB_HOSTNAME(hostname only, protocol constructed at runtime) - Zero env vars centralized through
package.jsonenv defaults -> auto-generated.env-> dockerenv_fileinstead of hardcoded values in docker-compose run-frontend-dev.tsmerged intorun-frontend.ts --devflag, eliminating duplicate script- CLI startup made faster by lazy-importing dependencies instead of importing everything up-front
- package dependencies made lighter - moved to optional peerDependencies so consumers don’t install everything
- helpers moved into
packages/scripts/for reuse across projects (github-tail, multipass, parse-env-file, process-compose-env, ssh, uncloud helpers) - consistent
fs.xyzimport pattern adopted across all scripts instead of mixed destructured imports - Zero version sync extracted to shared script and removed from env pipeline to simplify postinstall
env:updatenow resolves$dep:version references as fallbacks in CI config, so CI no longer depends on manually-set GitHub secrets for dependency versionsenv-server.tspath resolution now tries bothsrc/constants/andsrc/server/locations for compatibility across project structures- compose env processing improved - handles multi-line values (PEM keys) and
quotes values containing yaml-breaking special characters (
:,#,{, etc.) - migration schema resolution uses
public.migrationsexplicitly to avoid conflicts when a pg schema matching the db user exists - React 19.1
captureOwnerStackused instead of broken__CLIENT_INTERNALSinternal for component stack traces - release publish now pins
workspace:*deps to actual versions during pack and restores them after, preventing broken publishes - permissions integration test suite added covering mutation guards and query-based permission checks
- HotUpdater enhanced with dynamic server URL handling and crash history tracking API
- Hot-updater debug info component shows update status, bundle ID, and version info in settings on native
- GradientBlurView and PageLayout split into separate native/web files to prevent native deps from leaking into web
- TabBar refactored to use View instead of Animated.View with improved glass effect border radius
- ProfileEditPage cleaned up - removed transition effects, improved button accessibility
- Comment flow integration test added for full create/verify/cleanup lifecycle
- Feed detail page refactored with cleaner layout
- Default animation durations removed from animationsApp config
- Default username display changed from “No name” to “Unknown”
- Stricter tsconfig across all packages catches more type issues
- Dev cleanup script added for robust process and port cleanup
peerDependenciesMetaadded for optional react and @rocicorp/zero in helpersupdate-local-envrenamed togenerate-envsince it’s used in CI too, not just locallysync-promptrenamed tosync-repofor clarity
Bug fixes and chores (45)
Week of January 27, 2026
d22f54b3
Features
- Delete post action in post menu
- Content moderation for launch - AWS Rekognition image moderation blocks nudity, violence, and hate symbols on upload, plus profanity filter for posts/comments with leetspeak detection
- Rate limiting for launch - 30 mutations per minute per user via Zero config
run-allCLI command runs multiple package.json scripts in parallel with--flags=lastoption to forward args only to the final scriptargs()helper for cleaner script argument parsing across all CLI scripts- Demo reset script to restore demo database to seed state
- JWKS error detection and warning with
db:clear-jwksscript to fix auth secret mismatches - Auto-sync Zero version to env on postinstall
Upgrades
- Tamagui upgraded to 2.0 RC with cleaner config setup and improved build system
- One upgraded to 1.4.8 with better dev tools behavior
- Zero upgraded to 0.25.11 with bug fixes
over-zeropackage published to npm - removed local workspace version in favor of publishedon-zeropackage
Improvements
- Faster dev compilation - Tamagui compiler now disabled entirely in dev mode instead of running with extraction disabled
- Unified login page - removed separate native file, consolidated web/native handling
- Unified search page - removed separate native file, shared responsive implementation
- Unified
upandupdate-depsscripts withupgradeSetsconfig for cleaner package upgrades - HeroSection and MainHeader responsive improvements
- Fixed feed/profile overlay bug on web - profile pages now properly replace feed instead of floating on top
- Popover animations restored by removing
contain=layoutconstraint - Profile page loading simplified to subtle spinner
- Menu animations improved with
quickestLessBouncytransition - Disabled mobile tap highlight for cleaner touch feedback
- Zero production tuning docs added with performance recommendations
- Button and Tooltip component documentation added
- Configurable ports for multi-project use - all scripts and docker-compose now
read from
.env.development - Migrations consolidated into single initial schema with new
db:reset-schemascript for clean resets - Script helpers moved off bun-specific APIs to standard node:child_process for broader compatibility
- Splash animation updated to use rotateZ
- Improved icon script to support additional font weights
- Smarter docs skill linking with auto-detection
- CI fails faster on errors
Bug fixes and chores (52)
Week of January 20, 2026
29254c43
Features
@take-out/nativepackage with crypto polyfill for React Native- BlurView component with native expo-blur integration
- Block filtering with
notBlockedByViewerserverWhere - blocked users’ posts never sync to client - FeedContent component with paginated posts and AnimatePresence transitions
- PostCommentPreview for inline comment display on posts
- Image dimensions stored in database for better layout calculations
- CLI script caching system for faster script discovery
- Keyboard-aware feed detail page with smooth scroll-to-end on native
- Dynamic OG image generation for index and docs pages
- Bottom tab bar with responsive layout for mobile
- Floating create button for quick post creation
- Settings page sidebar layout with mobile-specific design
- Mock AI chat UI with native input component
- Docs menu on mobile for better navigation
- Scrollbar color customization
- HeadInfo titles added to logged-in pages
- Enhanced comment input with better keyboard handling and interaction
- Global
run()helper for one-shot Zero queries without React hooks create-takeoutpackage for bootstrapping new Takeout projects- Web onboarding UI with multi-step slides and configuration
- Protected component (from One) for cleaner authentication routing
- CLI
--autoand--printflags for sync command automation - Onboarding storage for persisting user progress
Upgrades
- Tamagui upgraded to 2.0 canary with improved Select, animation fixes, RNGH-powered press events, and better sheet handling
- One upgraded to 1.2.81 with native devtools fix
Improvements
- React Compiler enabled in Metro for native builds with memoized components
- Flattened docs directory structure for better organization
- Consolidated native layout files - removed duplicate
_layout.native.tsxfiles across routes - Simplified auth signup flow - removed separate native OTP and method pages
- Post queries now include user relation by default
- Redesigned native login page with haptic feedback
- Faster dev mode by disabling React compiler during development
- Env sync now supports variable filtering and blocks placeholder values
- Fixed auth state race condition that caused redirect flicker on page reload
- Profile page layout with max width and centering
- Responsive site header improvements
- ScrollHeader optimized for mobile with improved shadow logic
- Dialog and sheet component refinements
- Gallery uses Pressable for close action fixing real device issues
- Standardized transition timing to 200ms across components
- Sticky docs sidebar for better navigation
- Moved to new headless Stack API for cleaner native navigation
- Removed Animated from react-native-web-lite for reduced bundle size
- Responsive auth layout on web with dark theme support
- Improved shimmer loading states to prevent flickering
- Redesigned landing page hero section with memoized terminal components
- Improved CLI skills generation with auto-linking to docs
- Avatar now links directly to profile on web (replaced popover menu)
- Cleaned up unused theme files and vite config
- Better testing documentation in README
Bug fixes and chores (85)
See older changes for previous updates.
Edit this page on GitHub.