Help us shape the future of Go! Take the 2026 Go Developer Survey

internal/

directory
v1.4.15 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 19, 2026 License: MIT

Directories

Path Synopsis
Package access implements the business logic behind `nself access grant / revoke / list` — managing SSH public keys in the authorized_keys file of an already-deployed nself host.
Package access implements the business logic behind `nself access grant / revoke / list` — managing SSH public keys in the authorized_keys file of an already-deployed nself host.
Package admin provides admin dashboard support: audit logging, ACL, multi-project management, and remote connect helpers.
Package admin provides admin dashboard support: audit logging, ACL, multi-project management, and remote connect helpers.
Package agentsetup renders what an AI agent needs to work with an nSelf project: the stdio MCP client config (Claude Code, Cursor, Codex, generic) and the project AGENTS.md (P7-SURF-05, cap:cli.agent-setup).
Package agentsetup renders what an AI agent needs to work with an nSelf project: the stdio MCP client config (Claude Code, Cursor, Codex, generic) and the project AGENTS.md (P7-SURF-05, cap:cli.agent-setup).
Package aiprofile implements AI_PROFILE enforcement, budget caps, feature flags, per-tier timeouts, and rate-limit coordination.
Package aiprofile implements AI_PROFILE enforcement, budget caps, feature flags, per-tier timeouts, and rate-limit coordination.
Package apidocs generates an OpenAPI 3.1 spec from the Hasura introspection result and any registered plugin REST routes.
Package apidocs generates an OpenAPI 3.1 spec from the Hasura introspection result and any registered plugin REST routes.
Package auth — HTTP client for nSelf auth server operations.
Package auth — HTTP client for nSelf auth server operations.
Package backup provides path validation helpers for backup operations.
Package backup provides path validation helpers for backup operations.
destinations
Package destinations — destination.go: the Destination interface, Parse and the kind registry.
Package destinations — destination.go: the Destination interface, Parse and the kind registry.
pitr
Package pitr implements point-in-time recovery via pg_basebackup and WAL archiving.
Package pitr implements point-in-time recovery via pg_basebackup and WAL archiving.
Package build — alertmanager.go: Build-pipeline integration for the Alertmanager routing config, with ɳSentry-aware receiver + route generation.
Package build — alertmanager.go: Build-pipeline integration for the Alertmanager routing config, with ɳSentry-aware receiver + route generation.
builtin
Package bundle implements the canonical nSelf paid plugin bundle catalog plus install/remove orchestration with license validation, version pinning, and atomic rollback on failure (S2.T03/T04/T22).
Package bundle implements the canonical nSelf paid plugin bundle catalog plus install/remove orchestration with license validation, version pinning, and atomic rollback on failure (S2.T03/T04/T22).
appready
Package appready defines what "app-ready" means for a bundle install (P7-PLUG-19, cap:cli.bundle-app-ready) and runs the steps after the plugin files are on disk.
Package appready defines what "app-ready" means for a bundle install (P7-PLUG-19, cap:cli.bundle-app-ready) and runs the steps after the plugin files are on disk.
ledger
atomic.go — the durable file writer shared by the ledger and the remove intent.
atomic.go — the durable file writer shared by the ledger and the remove intent.
Package canon holds the declared command canon: the embedded side table that records what cobra cannot know about a command (canon status, side-effect class, output kind, JSON support, state exit codes and flag escalations).
Package canon holds the declared command canon: the embedded side table that records what cobra cannot know about a command (canon status, side-effect class, output kind, JSON support, state exit codes and flag escalations).
cmd
ci
Package ci — serve.go
Package ci — serve.go
Package cmdregistry derives the deterministic command registry document (contract:cli.command-registry v1) from a cobra tree, the declared canon data and the JSON data-type map.
Package cmdregistry derives the deterministic command registry document (contract:cli.command-registry v1) from a cobra tree, the declared canon data and the JSON data-type map.
Package compat is the single switch ADR 0021 requires for every P7 change that breaks an existing user-visible behaviour.
Package compat is the single switch ADR 0021 requires for every P7 change that breaks an existing user-visible behaviour.
compattest
Package compattest runs a test body in both ADR 0021 compat modes.
Package compattest runs a test body in both ADR 0021 compat modes.
Package compose: service toggle helper.
Package compose: service toggle helper.
monitoring
Package monitoring — alert rule and Alertmanager config generators.
Package monitoring — alert rule and Alertmanager config generators.
Package config — user-level telemetry preference management.
Package config — user-level telemetry preference management.
bindings
Package bindings declares, once, which command flags supply which configuration keys (contract:config.env, Constitution 6.1).
Package bindings declares, once, which command flags supply which configuration keys (contract:config.env, Constitution 6.1).
Package controlplane implements the shared control-plane core consumed by both the nSelf CLI and the nSelf Admin companion.
Package controlplane implements the shared control-plane core consumed by both the nSelf CLI and the nSelf Admin companion.
promote
Package promote runs an environment promotion as an injected transaction.
Package promote runs an environment promotion as an injected transaction.
sim
Package sim provides a multi-server Docker sshd simulation harness for integration-testing the control-plane pipeline without touching live hosts.
Package sim provides a multi-server Docker sshd simulation harness for integration-testing the control-plane pipeline without touching live hosts.
Package cost implements per-service cost alerting for nSelf AI and media plugins.
Package cost implements per-service cost alerting for nSelf AI and media plugins.
Package database — drill.go: high-level DR drill orchestration.
Package database — drill.go: high-level DR drill orchestration.
vectorsearch
Package vectorsearch generates the pgvector k-NN SQL function for one table column and mirrors its Hasura tracking entry (P7-ADOPT-07, EPIC ADOPT D7).
Package vectorsearch generates the pgvector k-NN SQL function for one table column and mirrors its Hasura tracking entry (P7-ADOPT-07, EPIC ADOPT D7).
Package deploy provides deployment management for the nSelf CLI.
Package deploy provides deployment management for the nSelf CLI.
archguard
Package archguard checks image platforms before a remote deploy changes a host.
Package archguard checks image platforms before a remote deploy changes a host.
bluegreen
Package bluegreen implements zero-downtime blue/green and canary deploys for the nSelf CLI (B47 + B48).
Package bluegreen implements zero-downtime blue/green and canary deploys for the nSelf CLI (B47 + B48).
pintest
Package pintest gives tests a HOME whose directory chain passes the pinned-host-keys ancestor rule (sdk/go/remote, sshd secure_path style): no directory above the pin store may be group or world writable unless it is a sticky directory such as /tmp.
Package pintest gives tests a HOME whose directory chain passes the pinned-host-keys ancestor rule (sdk/go/remote, sshd secure_path style): no directory above the pin store may be group or world writable unless it is a sticky directory such as /tmp.
progress
Package progress writes contract:cli.deploy-progress v1: the NDJSON stream that `nself deploy --json --stream` and `nself deploy promote <src> <tgt> --json --stream` print.
Package progress writes contract:cli.deploy-progress v1: the NDJSON stream that `nself deploy --json --stream` and `nself deploy promote <src> <tgt> --json --stream` print.
Package deprecation — G4: sunset date computation for per-plugin API entries.
Package deprecation — G4: sunset date computation for per-plugin API entries.
dockertest
Package dockertest decides whether a test that needs a Linux docker daemon runs, skips or fails on the current host (D-0286).
Package dockertest decides whether a test that needs a Linux docker daemon runs, skips or fails on the current host (D-0286).
S77-T08: doctor --deep check for orphaned Hasura remote schemas.
S77-T08: doctor --deep check for orphaned Hasura remote schemas.
Package domain provides DNS propagation polling and nginx server block generation for custom domain provisioning.
Package domain provides DNS propagation polling and nginx server block generation for custom domain provisioning.
Package embedded provides the wasmtime + pglite embedded-PostgreSQL path for nSelf stacks that run without an external Postgres container.
Package embedded provides the wasmtime + pglite embedded-PostgreSQL path for nSelf stacks that run without an external Postgres container.
Package env implements multi-environment management for nSelf projects.
Package env implements multi-environment management for nSelf projects.
Registry fragment: ACME certificate codes (E470-E474, P7-LIVE-22).
Registry fragment: ACME certificate codes (E470-E474, P7-LIVE-22).
Package exporter writes a read-only, snapshot-consistent portable bundle.
Package exporter writes a read-only, snapshot-consistent portable bundle.
Package featureflags provides a built-in, file-backed feature flag registry for the nSelf CLI binary.
Package featureflags provides a built-in, file-backed feature flag registry for the nSelf CLI binary.
Package generate provides the schema codegen engine for nself generate.
Package generate provides the schema codegen engine for nself generate.
Package hasura provides the single step-function entry point that wires Hasura metadata application into the nself lifecycle (start/deploy), so that `<project>/hasura/metadata/` on disk is never silently ignored.
Package hasura provides the single step-function entry point that wires Hasura metadata application into the nself lifecycle (start/deploy), so that `<project>/hasura/metadata/` on disk is never silently ignored.
Package health provides health checking utilities for nSelf services.
Package health provides health checking utilities for nSelf services.
Package hostcase supplies the case normalization shared by HTTP allowlists.
Package hostcase supplies the case normalization shared by HTTP allowlists.
Package httptimeout provides timeout-bounded *http.Client values per scope.
Package httptimeout provides timeout-bounded *http.Client values per scope.
Package importer coordinates portable imports without exposing source credentials.
Package importer coordinates portable imports without exposing source credentials.
appwrite
Package appwrite imports an Appwrite project through its REST API.
Package appwrite imports an Appwrite project through its REST API.
firebase
Package firebase registers the Firebase importer source (`nself db import firebase`).
Package firebase registers the Firebase importer source (`nself db import firebase`).
hasuracloud
Package hasuracloud registers the hasura-cloud importer.
Package hasuracloud registers the hasura-cloud importer.
hasurameta
Package hasurameta reads a source Hasura's metadata and recomposes a portable bundle.
Package hasurameta reads a source Hasura's metadata and recomposes a portable bundle.
load
Package load applies verified bundles to fresh, started targets.
Package load applies verified bundles to fresh, started targets.
nhost
Package nhost registers the nhost importer.
Package nhost registers the nhost importer.
nself
Package nself registers the portable-bundle importer: the re-import half of `nself db export`.
Package nself registers the portable-bundle importer: the re-import half of `nself db export`.
postgres
Package postgres registers the base snapshot importer.
Package postgres registers the base snapshot importer.
scratch
Package scratch turns generated DDL and COPY files into a portable Postgres bundle.
Package scratch turns generated DDL and COPY files into a portable Postgres bundle.
supabase
Package supabase registers the Supabase importer.
Package supabase registers the Supabase importer.
testkit
Package testkit provides isolated source fixtures and target projects.
Package testkit provides isolated source fixtures and target projects.
verify
Package verify defines the importer's zero-mismatch rule.
Package verify defines the importer's zero-mismatch rule.
Package installer provides automated installation of Ollama and related local-LLM infrastructure for nSelf Block A (Zero-Config AI).
Package installer provides automated installation of Ollama and related local-LLM infrastructure for nSelf Block A (Zero-Config AI).
Package installmeta persists install-time metadata to ~/.nself/install-meta.json.
Package installmeta persists install-time metadata to ~/.nself/install-meta.json.
Package invoke is the one execution core that MCP and HTTP share (contract:cli.machine-request v1, EPIC P7-SURF D2).
Package invoke is the one execution core that MCP and HTTP share (contract:cli.machine-request v1, EPIC P7-SURF D2).
Package license — banner.go provides warning banner text for grace period states.
Package license — banner.go provides warning banner text for grace period states.
entitlement
Package entitlement writes the ping-issued token consumed by plugin runtimes.
Package entitlement writes the ping-issued token consumed by plugin runtimes.
Package lock is the project lock nself.lock.yaml (contract:cli.lockfile v1, P7-LIVE-09, EPIC D10): which CLI minor, service images and plugin versions a project was built with.
Package lock is the project lock nself.lock.yaml (contract:cli.lockfile v1, P7-LIVE-09, EPIC D10): which CLI minor, service images and plugin versions a project was built with.
Package machineauth is the machine-surface bearer token: where it comes from, how it is created, how a request is checked against it, and which bind addresses may carry it.
Package machineauth is the machine-surface bearer token: where it comes from, how it is created, how a request is checked against it, and which bind addresses may carry it.
Package maintenance — daily Hasura metadata backup cron registration.
Package maintenance — daily Hasura metadata backup cron registration.
Package mcpgen generates the MCP surface from the machine registry (contract:cli.mcp-tools v2, EPIC P7-SURF D5).
Package mcpgen generates the MCP surface from the machine registry (contract:cli.mcp-tools v2, EPIC P7-SURF D5).
Package metrics emits Prometheus-compatible metrics for one-shot nSelf CLI command invocations (backup.go: backup/verify results; license.go: license grace-period state; stripe.go: webhook processing outcomes) by writing node_exporter textfile-collector .prom files rather than serving a live /metrics endpoint.
Package metrics emits Prometheus-compatible metrics for one-shot nSelf CLI command invocations (backup.go: backup/verify results; license.go: license grace-period state; stripe.go: webhook processing outcomes) by writing node_exporter textfile-collector .prom files rather than serving a live /metrics endpoint.
Package migrate provides migration helpers for legacy nSelf project layouts.
Package migrate provides migration helpers for legacy nSelf project layouts.
firebase
Package firebase implements the Firebase → nSelf migration scaffold.
Package firebase implements the Firebase → nSelf migration scaffold.
supabase
Package supabase implements the Supabase → nSelf migration pipeline.
Package supabase implements the Supabase → nSelf migration pipeline.
Package migrationai provides AST-based schema delta detection and AI-assisted SQL migration generation for nSelf projects.
Package migrationai provides AST-based schema delta detection and AI-assisted SQL migration generation for nSelf projects.
Package model detects which plugin distribution model is in effect for a given plugin in the current project: Model A (Docker compose-managed, source under plugins-pro-src/) or Model B (single-binary, installed under ~/.nself/plugins/<name>/).
Package model detects which plugin distribution model is in effect for a given plugin in the current project: Model A (Docker compose-managed, source under plugins-pro-src/) or Model B (single-binary, installed under ~/.nself/plugins/<name>/).
Package nginx provides Nginx configuration generation and management for the nSelf CLI.
Package nginx provides Nginx configuration generation and management for the nSelf CLI.
Package nginxtopo resolves on-disk nginx directory topology for projects fronted by another stack's nginx (NGINX_FRONTED_BY / config.NginxConfig.
Package nginxtopo resolves on-disk nginx directory topology for projects fronted by another stack's nginx (NGINX_FRONTED_BY / config.NginxConfig.
Package oauth provides manual OAuth token refresh helpers.
Package oauth provides manual OAuth token refresh helpers.
Package objstore is a small stdlib S3 client: SigV4, path style, ListObjectsV2 with pagination, GetObject, PutObject, HeadBucket and CreateBucket (EPIC D19, P7-ADOPT-23).
Package objstore is a small stdlib S3 client: SigV4, path style, ListObjectsV2 with pagination, GetObject, PutObject, HeadBucket and CreateBucket (EPIC D19, P7-ADOPT-23).
Package observability instruments long-running nSelf Go services (the embedded servers behind `nself admin`, plugin daemons, and any process that stays up long enough to be scraped) with a live Prometheus registry, an HTTP /metrics endpoint, OpenTelemetry tracing, structured JSON logging, and request/field redaction.
Package observability instruments long-running nSelf Go services (the embedded servers behind `nself admin`, plugin daemons, and any process that stays up long enough to be scraped) with a live Prometheus registry, an HTTP /metrics endpoint, OpenTelemetry tracing, structured JSON logging, and request/field redaction.
Package onboarding implements the 6-stage onboarding funnel check for nself doctor --install-check.
Package onboarding implements the 6-stage onboarding funnel check for nself doctor --install-check.
Package oplock is the project operation lock (EPIC P7-LIVE D12, A-21).
Package oplock is the project operation lock (EPIC P7-LIVE D12, A-21).
oplockcmd
Package oplockcmd binds the project operation lock to a cobra command.
Package oplockcmd binds the project operation lock to a cobra command.
Package output writes command results and errors for humans and machines.
Package output writes command results and errors for humans and machines.
Package plugin — lifecycle audit helpers.
Package plugin — lifecycle audit helpers.
catalog
Package catalog is the CLI side of contract:plugins.catalog v1 (P7-PLUG-09): the one JSON document at https://plugins.nself.org/catalog.json that lists every plugin of both tiers, its commands and its bundles.
Package catalog is the CLI side of contract:plugins.catalog v1 (P7-PLUG-09): the one JSON document at https://plugins.nself.org/catalog.json that lists every plugin of both tiers, its commands and its bundles.
count
Package count is the CLI's single source for "how many plugins are there".
Package count is the CLI's single source for "how many plugins are there".
lifecycle
Package lifecycle provides the dormant-plugin state machine for the nSelf plugin license lifecycle.
Package lifecycle provides the dormant-plugin state machine for the nSelf plugin license lifecycle.
manifestv2
Package manifestv2 owns the plugin manifest v2 contract (contract:plugin.manifest).
Package manifestv2 owns the plugin manifest v2 contract (contract:plugin.manifest).
mount
Package mount discovers the CLI command surface an installed plugin declares (contract:cli.plugin-command-mount v1).
Package mount discovers the CLI command surface an installed plugin declares (contract:cli.plugin-command-mount v1).
readiness
Package readiness verifies that a plugin has applied its own boot-time migrations (contract:plugin.boot-migrations v1, ADR 0010).
Package readiness verifies that a plugin has applied its own boot-time migrations (contract:plugin.boot-migrations v1, ADR 0010).
requires
Package requires checks a plugin's requires.postgres_extensions against the project's Postgres before the plugin is downloaded (P7-ADOPT-06).
Package requires checks a plugin's requires.postgres_extensions against the project's Postgres before the plugin is downloaded (P7-ADOPT-06).
scaffold
Package scaffold provides the canonical plugin scaffolding logic shared between the nself CLI (plugin new command) and the standalone new-plugin binary in plugin-sdk-go/devkit.
Package scaffold provides the canonical plugin scaffolding logic shared between the nself CLI (plugin new command) and the standalone new-plugin binary in plugin-sdk-go/devkit.
verify/signature/signaturetest
Package signaturetest gives tests a throwaway release key and swaps the compiled-in key table and floor, restoring both on t.Cleanup.
Package signaturetest gives tests a throwaway release key and swaps the compiled-in key table and floor, restoring both on t.Cleanup.
Package portable reads and writes the vendor-neutral nself portable export bundle (contract:cli.portable-export v1, P7-ADOPT-23).
Package portable reads and writes the vendor-neutral nself portable export bundle (contract:cli.portable-export v1, P7-ADOPT-23).
Package ports provides port-holder identification utilities for the nSelf CLI.
Package ports provides port-holder identification utilities for the nSelf CLI.
imageswitch
Package imageswitch moves an existing non-pgvector Postgres cluster to the pgvector image of the same major version without touching the old volume (EPIC P7-ADOPT D6, P7-ADOPT-22).
Package imageswitch moves an existing non-pgvector Postgres cluster to the pgvector image of the same major version without touching the old volume (EPIC P7-ADOPT D6, P7-ADOPT-22).
tablehash
Package tablehash computes a per-table row count and an order-independent content hash, the single definition of "zero mismatch" shared by the importer, the exporter, the round trip and the image switch (EPIC D8, contract:cli.portable-export v1, P7-ADOPT-23).
Package tablehash computes a per-table row count and an order-independent content hash, the single definition of "zero mismatch" shared by the importer, the exporter, the round trip and the image switch (EPIC D8, contract:cli.portable-export v1, P7-ADOPT-23).
Package promote implements staging-to-production promotion with diff preview and rollback.
Package promote implements staging-to-production promotion with diff preview and rollback.
Package reconcile is the pure half of the change-plan engine (P7-LIVE-01).
Package reconcile is the pure half of the change-plan engine (P7-LIVE-01).
Package repoqa holds repository-wide invariant tests: formatting, layout, and code-rule gates that apply to the whole tree rather than to one package.
Package repoqa holds repository-wide invariant tests: formatting, layout, and code-rule gates that apply to the whole tree rather than to one package.
Package runbook implements the SRE runbook library and claw-ops auto-execution engine.
Package runbook implements the SRE runbook library and claw-ops auto-execution engine.
Package runner implements `nself runner provision` and `nself runner verify` (G-012): building and auditing self-hosted GitHub Actions CI runner hosts.
Package runner implements `nself runner provision` and `nself runner verify` (G-012): building and auditing self-hosted GitHub Actions CI runner hosts.
Package runtime detects the local container runtime (Docker, OrbStack, Podman) and reports its name, binary path, version, and enterprise-mode hint.
Package runtime detects the local container runtime (Docker, OrbStack, Podman) and reports its name, binary path, version, and enterprise-mode hint.
Package scaffold provides CS_N custom service scaffolding for nself projects.
Package scaffold provides CS_N custom service scaffolding for nself projects.
Package search provides MeiliSearch integration helpers for the nSelf CLI.
Package search provides MeiliSearch integration helpers for the nSelf CLI.
Package secrets — rotation scheduling, dual-key windows, and expiry alerts.
Package secrets — rotation scheduling, dual-key windows, and expiry alerts.
Package seed implements the DB seeding fixtures system for nSelf projects.
Package seed implements the DB seeding fixtures system for nSelf projects.
Package sentryapi is the typed REST client for the ɳSentry cloud API.
Package sentryapi is the typed REST client for the ɳSentry cloud API.
Package server implements `nself server` (G-011): provisioning, listing, resizing, and destroying cloud servers, backed by the Hetzner Cloud API.
Package server implements `nself server` (G-011): provisioning, listing, resizing, and destroying cloud servers, backed by the Hetzner Cloud API.
Package service provides lifecycle management for individual nSelf optional services (start, stop, restart, ps, update, scale).
Package service provides lifecycle management for individual nSelf optional services (start, stop, restart, ps, update, scale).
Package setup implements the nself init wizard: project scaffolding, secret generation, .env file creation, and .nself/ directory setup.
Package setup implements the nself init wizard: project scaffolding, secret generation, .env file creation, and .nself/ directory setup.
Package sharedproxy is contract:cli.shared-proxy v1: the registration file a project writes under a shared host proxy's nginx/shared/ directory.
Package sharedproxy is contract:cli.shared-proxy v1: the registration file a project writes under a shared host proxy's nginx/shared/ directory.
Package sqlallowlist enforces a DDL allowlist for SQL statements submitted through the nself_run_migration MCP tool.
Package sqlallowlist enforces a DDL allowlist for SQL statements submitted through the nself_run_migration MCP tool.
ssl
Package sysexec is the single door through which the trust, SSL and DNS setup code reaches the operating system: it runs external commands and says whether the process is headless.
Package sysexec is the single door through which the trust, SSL and DNS setup code reaches the operating system: it runs external commands and says whether the process is headless.
Package telemetry — opt-in anonymous CLI telemetry client (S65.T01 / Q07).
Package telemetry — opt-in anonymous CLI telemetry client (S65.T01 / Q07).
templates
clone
Package clone provides embedded app-clone templates for nself init --template.
Package clone provides embedded app-clone templates for nself init --template.
Package tenant manages multi-tenant lifecycle operations for a self-hosted nSelf deployment.
Package tenant manages multi-tenant lifecycle operations for a self-hosted nSelf deployment.
Package testwatch gives a test package a hard wall-clock limit shorter than go test's default ten minutes, so a lock that is never released fails the package in about a minute with a goroutine dump instead of freezing a CI host for fifteen (cam handoff 2026-10-13, the bundle operation-lock hang).
Package testwatch gives a test package a hard wall-clock limit shorter than go test's default ten minutes, so a lock that is never released fails the package in about a minute with a goroutine dump instead of freezing a CI host for fifteen (cam handoff 2026-10-13, the bundle operation-lock hang).
Package updatecheck is the opt-in, once-per-24h "newer nself exists" hint.
Package updatecheck is the opt-in, once-per-24h "newer nself exists" hint.
upgrade
plan
Package plan is the upgrade step model shared by `nself update --plan|--yes` and `nself update stack` (cap:cli.update-plan, P7-LIVE-10; P7-PLUG-31 runs the same step list, PLUG D10).
Package plan is the upgrade step model shared by `nself update --plan|--yes` and `nself update stack` (cap:cli.update-plan, P7-LIVE-10; P7-PLUG-31 runs the same step list, PLUG D10).
stack
Package stack executes the shared upgrade plan with a durable recovery journal.
Package stack executes the shared upgrade plan with a durable recovery journal.
Package webhook provides HMAC-SHA256 signing and dispatch for nSelf webhook deliveries.
Package webhook provides HMAC-SHA256 signing and dispatch for nSelf webhook deliveries.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL