惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

S
Secure Thoughts
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Heimdal Security Blog
SecWiki News
SecWiki News
H
Hacker News: Front Page
N
News | PayPal Newsroom
L
LINUX DO - 最新话题
N
News and Events Feed by Topic
TaoSecurity Blog
TaoSecurity Blog
AI
AI
C
Cybersecurity and Infrastructure Security Agency CISA
Scott Helme
Scott Helme
PCI Perspectives
PCI Perspectives
S
Securelist
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Cyberwarzone
Cyberwarzone
A
Arctic Wolf
Forbes - Security
Forbes - Security
T
Tor Project blog
Spread Privacy
Spread Privacy
WordPress大学
WordPress大学
I
Intezer
Martin Fowler
Martin Fowler
Help Net Security
Help Net Security
P
Proofpoint News Feed
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Cisco Talos Blog
Cisco Talos Blog
Latest news
Latest news
博客园 - 司徒正美
W
WeLiveSecurity
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
V
V2EX
P
Palo Alto Networks Blog
Google DeepMind News
Google DeepMind News
IT之家
IT之家
阮一峰的网络日志
阮一峰的网络日志
V
Vulnerabilities – Threatpost
Jina AI
Jina AI
S
Security Affairs
Hacker News - Newest:
Hacker News - Newest: "LLM"
Simon Willison's Weblog
Simon Willison's Weblog
Project Zero
Project Zero
T
Threatpost
P
Privacy International News Feed
人人都是产品经理
人人都是产品经理
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Application and Cybersecurity Blog
Application and Cybersecurity Blog
博客园 - Franky
Hugging Face - Blog
Hugging Face - Blog
Apple Machine Learning Research
Apple Machine Learning Research

Show HN

GitHub - steveking-gh/firmion: Firmion is DSL and engine for firmware image generation. GitHub - villagesql/villagesql-skills: Agent skills for VillageSQL - gemini-cli-extension; claude-code-plugin GitHub - flightdeckhq/flightdeck: Observability and control plane for AI agents. CSP Radar GitHub - Light-Heart-Labs/DreamServer: Turn your PC, Mac, or Linux box into an AI server. LLM inference, chat UI, voice, agents, workflows, RAG, and image generation. GitHub - Diplomat-ai/diplomat-agent-ts: What can your TypeScript AI agent do to the real world? Scan your code. See which tool calls have zero checks Code Block Selector - Visual Studio Marketplace Prometheus dependency graph — interactive showcase | Riftmap Show HN: I made a vi-like modal keyboard plugin for Figma GitHub - run-llama/liteparse: A fast, helpful, and open-source document parser GitHub - dalemyers/Roar: A macOS CLI tool for notifications GitHub - district-solutions/open-agent-tools-coder: Enables small-to-large self-hosted ai models to use local source code when running tool-calling agentic workloads. We actively data mine 20,900+ (2+ TB) popular github repos using large and small ai models to create reuseable: json, markdown and parquet files for local-first tool-calling models. GitHub - progapandist/stripeek: A local TUI proxy for real-time Stripe API debugging, built for navigating complex payloads fast. GitHub - sir1st/hermes-desktop: All-in-one cross-platform desktop app for Hermes Agent — bundles Python + hermes-agent + hermes-web-ui GitHub - astefanutti/shaderbang: Shebang for Shaders Show HN: Generate Claude Code Workflows using Spec Driven Development approach GitHub - nixys/nxs-universal-chart: The Helm chart you can use to install any of your applications into Kubernetes/OpenShift Show HN: AI agents for UK GDAD PCF roles and their skills The Two Pillars: Mixer Mode and Meta-Software in the Reorganization of Software Work After AI GitHub - JaiCode08/teleport-env What 1,000+ Harness Experiments Taught Me About Self-Improving Agents Show HN: Liiists, a Markdown-first, iOS and CLI list app SwiperTab – Get this Extension for 🦊 Firefox (en-US) GitHub - kouhxp/fftext: Summarize, explain, fact-check, or translate any text, URL, or file. No GPU. No cloud. One command GitHub - sweetpad-dev/sweetpad: Develop Swift/iOS projects using VSCode GitHub - dogmaticdev/IRON: IRON a.k.a. Intermediate Representation Object Notation is a Interpreter/Database that is used to create Programming Languages. GitHub - sjhalani7/vaen: Package your AI coding harness into a portable .agent file, and share it across repos, teams, & the community without ever having to copy-paste instructions, skills, MCP config, or secrets. Show HN: Gandalf the Grader Show HN: Citadeld – replay any CI failure locally from a single file GitHub - tdortman/cuSBF: High-Performance GPU Super Bloom Filter coral-ai/claude-code-token-xray at main · Coral-Bricks-AI/coral-ai GitHub - ulyssestenn/funes: Funes is a Git-based framework for LLM-managed knowledge work: an AI Librarian ingests raw sources, builds an interlinked Markdown knowledge base, and uses it to produce cited reports, analyses, and other outputs. GitHub - ThatXliner/gah: Git Add Hunk, built for agents to use GitHub - harmont-dev/harmont-cli: Command-line client for the Harmont CI platform GitHub - brooksmcmillin/mcp-authflow: OAuth 2.0 Authorization Server framework for MCP servers GitHub - javaid-codes/audit-supply-chain-agents GitHub - amorey/gochan: A small library of common channel architectures for Go, inspired by Rust GitHub - arifozgun/OpenGem: Free, Open-Source AI API Gateway with Gemini, OpenAI & Anthropic Compatibility in 1 file GitHub - Pranesh950/BioPetals: 🌸 Run BIOxAI models at home, BitTorrent-style. Fine-tuning and inference up to 10x faster than offloading GitHub - cnguyen14/bounty-doctor: Diagnose a GitHub bounty issue before you waste hours: detects honeypot scam repos, AI-bot attempt swarms, and stale contests. Show HN: CoreMCP – MCP Server for On-Prem DBs Show HN: KittyHTML – Render HTML/CSS as an inline image in your terminal GitHub - bingud/filemat: Web-based file manager Show HN: TruthLens – Free multi-signal deepfake image detector GitHub - apexlocal-jz/claude-usage-tray: Windows system-tray app showing your Claude Code rate-limit usage at a glance. Zero deps, ~300 lines of PowerShell. Cross-IDE (works regardless of VS Code, Cursor, plain terminal). Release v0.1.2.1 · kouhxp/yapsnap GitHub - noopolis/moltnet: Self-hostable chat network for AI agents. Pre-built bridges for Claude Code, Codex, and the Claws. Rooms, DMs, history. No Slack bots, no Matrix, no glue code. GitHub - tamerh/enju: Coordinating Humans, AI Agents, and Compute as Peers on a Shared Workflow Graph Show HN: Continuity-auth – Respect-weighted rate limits for the open web GitHub - luml-ai/luml: AI lifecycle platform where engineers and agents track experiments, train models, and ship to production. GitHub - mrdanielcasper/CoreTex: A UNIX-inspired, biomimetic, flat-file AI harness and knowledge engine. GitHub - clemg/pierre-github: Pierre's diffs.com and trees.software for Github GitHub - lyriks-io/unspaghettit: Behavior-driven AI development without prompt spaghetti. GitHub - sofumel/claude-handoff-revive: Resume Claude Code work after rate/usage/context limits without replaying the prior transcript. Auto-saves at 90%/95% usage. Plugin-installable, 10 languages. GitHub - dotexorg/saferpc: Typed, end-to-end encrypted RPC over any bidirectional channel. GitHub - BeeZeeAgent/beezee: Agent harness orchestration Legato Next.js Boilerplate for Internal Tools · CoreUI GitHub - clark-labs-inc/clark-hash: Clark Hash, 32x smaller searchable sketches for embeddings GitHub - ZeroPointRepo/youtube-mcp: The fastest YouTube transcript + YouTube search MCP for AI agents. Try for free. Typing Mastery — climb toward 100+ WPM, deliberately GitHub - Andebugulin/Awareen GitHub - fayzan123/claude-workflow-composer: Visual desktop app for composing multi-agent coding workflows. Drag agents, attach skills and MCPs, wire handoffs, export to .claude/ GitHub - harshaneel/humanize: Best static AI text humanizer. Two research-grounded skills that work in any LLM (Claude, ChatGPT, Gemini, Codex): humanize beats perplexity-based detectors, ai-check produces forensic scoring with evidence-quoted flags. Nine levers, 50+ peer-reviewed sources, 2024-2026 detection literature. GitHub - StackOneHQ/stack-nudge GitHub - nodes-app/swift-markdown-engine: A native AppKit Markdown editor for macOS, built on TextKit 2 and bridged to SwiftUI. We hardened an LLM agent. Each defense we added made it more exploitable. GitHub - alkait/WhatsKept: Agent-queryable WhatsApp history from an iOS backup — a single Go binary. GitHub - octelium/cordium: Open-source, general-purpose sandbox platform for devs and AI agents that provides identity-based secure access to infrastructure without credentials. WAR.GOV/UFO Microfilm5 GitHub - scosman/videowright: Build animated explainer videos with your coding agent GitHub - dipankar/dscode: The code editor you can take apart. GitHub - zoharbabin/web-researcher-mcp: MCP server (Go) for AI assistants: web search, content extraction, academic/patent/news research. Multi-provider routing, 4-tier scraping, search lenses. Works with Claude, Cursor, and any MCP client. GitHub - ruvnet/RuView: π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pixel of video. GitHub - scanaislop/aislop: Catch the slop AI coding agents leave in your code: narrative comments, swallowed exceptions, as-any casts, dead code, oversized functions. 50+ rules across 7 languages (TypeScript, JavaScript, Python, Go, Rust, Ruby, PHP). Sub-second, deterministic, no LLM at runtime. MIT-licensed. GitHub - kouhxp/cheap-im: CPU-only voice agent approximating Thinking Machines' Interaction Models demo GitHub - unprovable/OrchidMantis: Orchid Mantis — standalone framework for Zero-Knowledge Proofs of eXploit (ZKPoX). GitHub - MarcellM01/TinySearch: Shrink the web for your local LLMs! GitHub - TangibleResearch/Halgorithem: A Algo designed to detect AI Hallucitions GitHub - DO-SAY-GO/freelang: I love freelang GitHub - CarpseDeam/Aura-IDE: An AI coding harness that shaped itself - Planner/Worker agents, repo awareness, surgical edits, validation, recovery, and safe diff approvals. GitHub - chojs23/concord: A feature-rich TUI client for Discord GitHub - tommyjepsen/awesome-ux-skills: UX & AI Product designs skills you can use today in Claude Code GitHub - aerf-spec/aerf: Agent Evidence Receipt Format (AERF) — an open specification for tamper-evident, independently verifiable records of AI agent actions. GitHub - kklimuk/docx-cli: CLI for AI agents (Claude, Codex) to read, edit, and comment on .docx files with full format fidelity. GitHub - Jwrede/tokentoll: Catch LLM cost changes in code review. Infracost for LLM spend. GitHub - samchon/ttsc: A `typescript-go` toolchain for compiler-powered plugins and type-safe execution + 500x faster lint integrated into compiler GitHub - Higangssh/homebutler: 🏠 Manage your homelab from chat. Single binary, zero dependencies. GitHub - olalie/tapmap: See where your computer connects and what stands out on a live world map. GitHub - Diplomat-ai/diplomat-agent: What can your AI agent do to the real world? Scan your code. See which tool calls have zero checks GitHub - Bajusz15/beacon: Open-source agent for secure remote access, monitoring, and deploys across home-lab and self-hosted machines like Raspberry Pi, N100, or any Linux server. Open web based TTY or tunnel Home Assistant and other local services securely without opening ports. BigTech AI News - Chrome 应用商店 GitHub - vinhnx/VTCode: VT Code is an open-source coding agent with LLM-native code understanding and robust shell safety. Supports multiple LLM providers with automatic failover and efficient context management. GitHub - michaelaz774/decision-engine: A decision operating system for startup founders, powered by Claude Code. Synthesizes wisdom from 25+ legendary founders and investors into interactive AI-driven decision frameworks. GitHub - Chrilleweb/dotenv-diff: Validate environment variable usage in your codebase GitHub - Lumen-Labs/brainapi2: BrainAPI is a knowledge graph–powered AI memory layer that transforms unstructured data into structured knowledge, enabling intelligent search, recommendations, and contextual memory for AI agents and applications. GitHub - familiar-software/familiar: Let AI watch you work. Familiar lets your AI update its memory, skills, and knowledge by watching your screen. GitHub - skorotkiewicz/rudo: A small, elegant dock for Wayland GitHub - muxshed/shed: One stream in, or many. Every destination, simultaneously. No cloud middleman, no per-channel fees, no limits. make sidebar/address bar rounded corner toggleable
GitHub - mourner/suncalc: A tiny JavaScript library for calculating sun/moon positions and phases.
mourner · 2026-06-18 · via Show HN

SunCalc is a tiny, dependency-free JavaScript library for calculating sun position, sunlight phases (sunrise, sunset, dusk, etc.), moon position, moonrise and moonset times, and lunar phase for any location and time.

It matches the accuracy and conventions of timeanddate.com and the U.S. Naval Observatory. Calculations are based on the formulas from Jean Meeus' Astronomical Algorithms. You can read about different twilight phases calculated by SunCalc in the Twilight article on Wikipedia.

Build Status Simply Awesome

Example

import * as SunCalc from 'suncalc';

const times = SunCalc.getTimes(new Date(), 51.5, -0.1); // get today's sunlight times for London
console.log(`Sunrise time: ${times.sunrise.toLocaleString()}`);

const sunrisePos = SunCalc.getPosition(times.sunrise, 51.5, -0.1); // get Sun position at today's sunrise
console.log(`Sunrise direction: ${sunrisePos.azimuth} degrees`);

Install

Install with npm: npm install suncalc, then import it as a module:

import * as SunCalc from 'suncalc';

Or use it directly in the browser via jsDelivr:

<script type="module">
    import * as SunCalc from 'https://cdn.jsdelivr.net/npm/suncalc/+esm';
</script>

Alternatively, there's a browser bundle that exposes a SunCalc global variable:

<script src="https://cdn.jsdelivr.net/npm/suncalc"></script>

Reference

Sun position

SunCalc.getPosition(date, lat, lng)

Returns an object with the following properties:

  • altitude: apparent (refraction-corrected) sun altitude above the horizon in degrees, e.g. 0 at the horizon and 90 at the zenith (straight overhead)
  • azimuth: sun azimuth in degrees, clockwise from north (0 = N, 90 = E, 180 = S, 270 = W)

Sunlight times

SunCalc.getTimes(date, lat, lng, height = 0)

Returns sunlight times for the solar day containing date, at the given latitude, longitude and (optional) observer height above the horizon in meters.

The result is an object whose properties are Date objects (or null when the event doesn't occur that day). Listed in the order they occur over the solar day, with example times for Kyiv (50.45°N, 30.52°E) on 24 August 2026, shown in local time (EEST, UTC+3):

Property Description Kyiv example
nadir nadir (darkest moment of the night, sun is in the lowest position) 01:00
nightEnd night ends (morning astronomical twilight starts) 03:51
nauticalDawn nautical dawn (morning nautical twilight starts) 04:41
dawn dawn (morning nautical twilight ends, morning civil twilight starts) 05:24
sunrise sunrise (top edge of the sun appears on the horizon) 05:59
sunriseEnd sunrise ends (bottom edge of the sun touches the horizon) 06:03
goldenHourEnd morning golden hour (soft light, best time for photography) ends 06:44
solarNoon solar noon (sun is in the highest position) 13:00
goldenHour evening golden hour starts 19:15
sunsetStart sunset starts (bottom edge of the sun touches the horizon) 19:56
sunset sunset (sun disappears below the horizon, evening civil twilight starts) 19:59
dusk dusk (evening nautical twilight starts) 20:34
nauticalDusk nautical dusk (evening astronomical twilight starts) 21:18
night night starts (dark enough for astronomical observations) 22:06

solarNoon and nadir are always present. At high latitudes, when the sun stays above or below the rise/set altitude for the whole day, the rise/set-related times are null and one of these flags is set:

  • alwaysUp: true when the sun never sets that day (polar day)
  • alwaysDown: true when the sun never rises that day (polar night)

The returned Dates are absolute UTC instants with no time zone of their own (as everywhere in SunCalc). To show one in a specific zone, format it with an explicit timeZone — daylight saving time is then applied for you:

times.sunset.toLocaleString('en-GB', {timeZone: 'Europe/Kyiv'}); // → "24/08/2026, 19:59:00"

With no timeZone, toLocaleString uses the machine's local zone, so the same code prints different clock times on different machines.

SunCalc.addTime(angleInDegrees, morningName, eveningName)

Adds a custom time when the sun reaches the given altitude angle (in degrees) to the results returned by SunCalc.getTimes. The morningName is used for the ascending (morning) crossing and eveningName for the descending (evening) one.

SunCalc.times contains all currently defined times as [angleInDegrees, morningName, eveningName] rows.

For example, to add the blue hour (roughly −4° to −8°) with your own preferred angles:

SunCalc.addTime(-4, 'morningBlueHourEnd', 'blueHour');
SunCalc.addTime(-8, 'morningBlueHour', 'blueHourEnd');

Moon position

SunCalc.getMoonPosition(date, lat, lng)

Returns an object with the following properties:

  • altitude: apparent moon altitude above the horizon in degrees
  • azimuth: moon azimuth in degrees, clockwise from north
  • distance: distance to the moon in kilometers
  • parallacticAngle: parallactic angle of the moon in degrees

Moon illumination

SunCalc.getMoonIllumination(date)

Returns an object with the following properties:

  • fraction: illuminated fraction of the moon; varies from 0.0 (new moon) to 1.0 (full moon). It reaches the exact extremes only at perfect syzygy (eclipses), so a "full" moon typically peaks a hair under 1.0
  • phase: moon phase; varies from 0.0 to 1.0, described below
  • angle: position angle of the bright limb in degrees, reckoned eastward from the north point of the disk
  • waxing: true while the moon is waxing (new → full), false while waning (full → new)

The phase value maps to the named phases like this:

Phase Name
0 New Moon
Waxing Crescent
0.25 First Quarter
Waxing Gibbous
0.5 Full Moon
Waning Gibbous
0.75 Last Quarter
Waning Crescent

The four named values (0, 0.25, 0.5, 0.75) are exact instants; any other value falls in one of the crescent/gibbous ranges between them. So phase: 0.4945… is not "Full Moon" — it's late Waxing Gibbous, just shy of full. To map a value to one of the eight names, snap it to the nearest one-eighth:

const names = ['New Moon', 'Waxing Crescent', 'First Quarter', 'Waxing Gibbous',
               'Full Moon', 'Waning Gibbous', 'Last Quarter', 'Waning Crescent'];
const {phase} = SunCalc.getMoonIllumination(new Date());
const name = names[Math.round(phase * 8) % 8];

Use phase for the name and fraction for how lit the disk is — and since fraction only reaches an exact 0 or 1 at an eclipse, don't test it for equality with those.

By subtracting getMoonPosition().parallacticAngle from angle (both in degrees) you get the zenith angle of the moon's bright limb (anticlockwise). The zenith angle can be used to draw the moon's shape from the observer's perspective (e.g. moon lying on its back).

Moon rise and set times

SunCalc.getMoonTimes(date, lat, lng)

Returns an object with the following properties:

  • rise: moonrise time as a Date
  • set: moonset time as a Date
  • alwaysUp: true if the moon is always above the horizon during the day
  • alwaysDown: true if the moon is always below the horizon

Unlike the sun, the moon can rise and set zero, one, or two times within a single day, so this function scans a fixed 24-hour window: the UTC calendar day of the given date (consistent with the rest of the API, which treats dates as UTC instants). If you want the window to follow an observer's local civil day, pass a date set to their local midnight.

Accuracy

Every function is built on higher-order astronomical models from Jean Meeus' Astronomical Algorithms and validated against JPL Horizons and the U.S. Naval Observatory. Typical errors:

Position Rise/set times Distance
Sun ~0.08° ~15 s
Moon ~0.09° ~15 s ~20 km

Rise and set times are accurate to ~15 seconds — at the floor of what the USNO's whole-minute reference data can even measure.

Changelog

See the Releases page for the full changelog. Note that v2.0 is a precision-focused rewrite with breaking changes to units and conventions — see its release notes before upgrading.