Welcome to Tidal
Tidal is a 3D web3 fishing game on Solana. Cast, hook & fight real fish, build your collection, and earn $TIDE you can withdraw to your own wallet.
Web (desktop & mobile): https://t.co/zs3yqDBPU1 (installable as an app — "Add to Home Screen")
Telegram Mini App: @TidalFishingBot → tap the menu button
Works with any Solana Wallet-Standard wallet (Phantom, Solflare, Backpack…) + Solana Mobile
$TIDE token
Network: Solana mainnetContract (CA): CiNiAdT5ongCHFJDv1ewoxMWCL1C4dt6Ua9KGRsmpump
Trade on https://t.co/wxSdrf8QoD / Jupiter / any Solana DEX · charts on DexScreener & Solscan
This is the only official CA. Never trust any other address or DM.
Two ways to play
Casual Angler — just fish for fun. No bait, cast freely, catch & release. Great for learning.
Pro Angler — the full economy. Every cast spends bait, and your catches are worth real $TIDE you can sell & withdraw.
Flip between them anytime with the mode button (top corner). New players start in Casual.
Controls
- Casting: Move mouse to aim
· Hold Click / Space to charge & cast · Click / Space to set the hook
· R to reel in Fighting: Hold Click / Space reel
· Mouse / ◄► / A·D lean into its runs
· ▲ / W heave it out
· Shift dodge a surge Menus: M Map
· B Shop
· J Journal
· C Collection
· A Achievements
· L Leaderboard
· P Profile
· Esc pause
· ? controls guide (WASD works the same as the arrow keys.)
Fair play Catches and payouts are server-validated and rate-limited to keep the economy fair.
Play legit — cheating tools just get the wallet banned. Tight lines, anglers!
Earning & withdrawingPlay in Pro mode, catch fish, and sell your haul for $TIDE.
Pay for bait, gear, maps & Anglers with SOL or $TIDE (priced live via Jupiter — same value either way).
Withdraw earned $TIDE to your wallet from the wallet panel.
📷 You must hold at least 1,000,000 $TIDE in your wallet to unlock withdrawals.
Join the discord if you'd like to talk with the team or community: https://t.co/7TOLBw5FAU
I am very proud to announce the new use of fish, you may now exchange all caught fish for raffle tickets, and we will be raffling off 1 @collector_crypt gacha pack per day to users!
We will become the greatest fishing game in the world!
$TIDE
Changelog
Rendering
- Water reflection RT 1024→512; god-ray samples 48→16; PCFSoftShadowMap→PCFShadowMap; shadow far 220→120
- Render loop skips while tab hidden
- Eliminated per-frame Vector3/Color allocations in sky, water, clouds, cameraRig, postfx (module-scoped scratch)
- environment.js now uses the strong deep-dispose
Memory
- audioManager: disconnect gain/source/filter nodes on teardown (fixes WebAudio graph node leaks in 4 paths)
- chat seen Set capped at 2000
Network (client)
- Wallet balance poll 25s→60s + paused while hidden
- token.js caches owning token program per mint (halves RPC calls)
- Autosave skips while hidden; forceSyncNow coalesces event bursts; added force-bypass
- Shared client TTL cache for /api/leaderboard (apiCache.js)
- Chat poll adaptive back-off 4s→30s when idle
Server (api-server/server.js) — live on Render ✅
- Per-IP ban-check cache (5min TTL, cleared on ban/unban/auto-ban) — checkBans ran on every request
- /api/leaderboard 30s in-memory cache (GROUP BY aggregate)
- detectTokenProgram mint→program cache
- Cache-Control on all GETs — verified live: health no-store, leaderboard public, max-age=30, world public, max-age=10
- 17/17 catchRules tests still pass
Assets
- Music re-encoded 256k→112k (96k for the 31-min village track): 65.5MB → 31.3MB, decode-verified, durations intact
- Removed orphan background-music.mp3 (−4.2MB) + sw.js precache entry; bumped SW v2→v3
Deployed & verified: frontend live (index-DpTvpwoa.js matches build, track6 now 21.4MB, orphan returns SPA fallback), server headers live, commit 191bdf8 pushed.
Deliberately skipped (with rationale)
VRM texture optimization — VRMs are geometry-dominated (luffy 18MB w/ only 1.3MB textures), so texture resize is low-yield; the high-yield path (mesh compression) risks breaking VRM avatars (no Draco/meshopt decoder in the loader) and can't be render-verified headlessly.postfx half-res RT — its RenderPass is the first pass, so halving it would blur the whole scene, not just post-fx.
I also differentiated between casual angler and Proffesional angler, so that people who just want to play can play, and people who want to earn can buy bait to cast with!
I just shipped a major update for mobile, moving the menu bar to the bottom of the screen and making it alot easier to catch fish, some people complained it was difficult to catch fish on mobile, well now its just about the same as on desktop!
Hey everyone, i apologize for not having as much communication as i should have had, I wanted to get the game to a clear MVP before the big marketing push, trust you guys are extremely early.
Will start tweeting nonstop moving forward