API Reference
이 컨텐츠는 아직 번역되지 않았습니다.
Astro
global
The Astro
global is available in all contexts in .astro
files. It has the following functions:
Astro.glob()
Astro.glob()
is a way to load many local files into your static site setup.
.glob()
only takes one parameter: a relative URL glob of which local files you’d like to import. It’s asynchronous, and returns an array of the exports from matching files.
.glob()
can’t take variables or strings that interpolate them, as they aren’t statically analyzable. (See the troubleshooting guide for a workaround.) This is because Astro.glob()
is a wrapper of Vite’s import.meta.glob()
.
You can also use import.meta.glob()
itself in your Astro project. You may want to do this when:
- You need this feature in a file that isn’t
.astro
, like an API route.Astro.glob()
is only available in.astro
files, whileimport.meta.glob()
is available anywhere in the project. - You don’t want to load each file immediately.
import.meta.glob()
can return functions that import the file content, rather than returning the content itself. Note that this import includes all styles and scripts for any imported files. These will be bundled and added to the page whether or not a file is actually used, as this is decided by static analysis, not at runtime. - You want access to each file’s path.
import.meta.glob()
returns a map of a file’s path to its content, whileAstro.glob()
returns a list of content. - You want to pass multiple patterns; for example, you want to add a “negative pattern” that filters out certain files.
import.meta.glob()
can optionally take an array of glob strings, rather than a single string.
Read more in the Vite documentation.
Markdown Files
Markdown files have the following interface:
You can optionally provide a type for the frontmatter
variable using a TypeScript generic.
Astro Files
Astro files have the following interface:
Other Files
Other files may have various different interfaces, but Astro.glob()
accepts a TypeScript generic if you know exactly what an unrecognized file type contains.
Astro.props
Astro.props
is an object containing any values that have been passed as component attributes. Layout components for .md
and .mdx
files receive frontmatter values as props.
📚 Learn more about how Markdown and MDX Layouts handle props.
📚 Learn how to add TypeScript type definitions for your props.
Astro.params
Astro.params
is an object containing the values of dynamic route segments matched for this request.
In static builds, this will be the params
returned by getStaticPaths()
used for prerendering dynamic routes.
In SSR builds, this can be any value matching the path segments in the dynamic route pattern.
See also: params
Astro.request
Astro.request
is a standard Request object. It can be used to get the url
, headers
, method
, and even body of the request.
See also: Astro.url
With the default output: 'static'
option, Astro.request.url
does not contain search parameters, like ?foo=bar
, as it’s not possible to determine them ahead of time during static builds. However in output: 'server'
mode, Astro.request.url
does contain search parameters as it can be determined from a server request.
Astro.response
Astro.response
is a standard ResponseInit
object. It has the following structure.
status
: The numeric status code of the response, e.g.,200
.statusText
: The status message associated with the status code, e.g.,'OK'
.headers
: AHeaders
instance that you can use to set the HTTP headers of the response.
Astro.response
is used to set the status
, statusText
, and headers
for a page’s response.
Or to set a header:
Astro.cookies
Added in:
astro@1.4.0
Astro.cookies
contains utilities for reading and manipulating cookies in server-side rendering mode.
Name | Type | Description |
---|---|---|
get | (key: string) => AstroCookie | Gets the cookie as an AstroCookie object, which contains the value and utility functions for converting the cookie to non-string types. |
has | (key: string) => boolean | Whether this cookie exists. If the cookie has been set via Astro.cookies.set() this will return true, otherwise it will check cookies in the Astro.request . |
set | (key: string, value: string | number | boolean | object, options?: CookieOptions) => void | Sets the cookie key to the given value. This will attempt to convert the cookie value to a string. Options provide ways to set cookie features, such as the maxAge or httpOnly . |
delete | (key: string, options?: CookieDeleteOptions) => void | Marks the cookie as deleted. Once a cookie is deleted Astro.cookies.has() will return false and Astro.cookies.get() will return an AstroCookie with a value of undefined . Options allow setting the domain and path of the cookie to delete. |
headers | () => Iterator<string> | Gets the header values for Set-Cookie that will be sent out with the response. |
AstroCookie
Getting a cookie via Astro.cookies.get()
returns a AstroCookie
type. It has the following structure.
Name | Type | Description |
---|---|---|
value | string | undefined | The raw string value of the cookie. |
json | () => Record<string, any> | Parses the cookie value via JSON.parse() , returning an object. Throws if the cookie value is not valid JSON. |
number | () => number | Parses the cookie value as a Number. Returns NaN if not a valid number. |
boolean | () => boolean | Converts the cookie value to a boolean. |
Astro.redirect()
Astro.redirect()
allows you to redirect to another page.
A page (and not a child component) must return
the result of Astro.redirect()
for the redirect to occur.
Astro.canonicalURL
Use Astro.url
to construct your own canonical URL.
The canonical URL of the current page.
Astro.url
Added in:
astro@1.0.0-rc
A URL object constructed from the current Astro.request.url
URL string value. Useful for interacting with individual properties of the request URL, like pathname and origin.
Equivalent to doing new URL(Astro.request.url)
.
You can also use Astro.url
to create new URLs by passing it as an argument to new URL()
.
Astro.clientAddress
Added in:
astro@1.0.0-rc
Specifies the IP address of the request. This property is only available when building for SSR (server-side rendering) and should not be used for static sites.
Astro.site
Astro.site
returns a URL
made from site
in your Astro config. If site
in your Astro config isn’t defined, Astro.site
won’t be defined.
Astro.generator
Added in:
astro@1.0.0
Astro.generator
is a convenient way to add a <meta name="generator">
tag with your current version of Astro. It follows the format "Astro v1.x.x"
.
Astro.slots
Astro.slots
contains utility functions for modifying an Astro component’s slotted children.
Astro.slots.has()
Type: (slotName: string) => boolean
You can check whether content for a specific slot name exists with Astro.slots.has()
. This can be useful when you want to wrap slot contents, but only want to render the wrapper elements when the slot is being used.
Astro.slots.render()
Type: (slotName: string, args?: any[]) => Promise<string>
You can asynchronously render the contents of a slot to a string of HTML using Astro.slots.render()
.
This is for advanced use cases! In most circumstances, it is simpler to render slot contents with the <slot />
element.
Astro.slots.render()
optionally accepts a second argument: an array of parameters that will be forwarded to any function children. This can be useful for custom utility components.
For example, this <Shout />
component converts its message
prop to uppercase and passes it to the default slot:
A callback function passed as <Shout />
’s child will receive the all-caps message
parameter:
Astro.self
Astro.self
allows Astro components to be recursively called. This behaviour lets you render an Astro component from within itself by using <Astro.self>
in the component template. This can be helpful for iterating over large data stores and nested data-structures.
This component could then be used like this:
And would render HTML like this:
Astro.locals
Astro.locals
is an object containing any values from the context.locals
object from a middleware. Use this to access data returned by middleware in your .astro
files.
Endpoint Context
Endpoint functions receive a context object as the first parameter. It mirrors many of the Astro
global properties.
context.params
context.params
is an object containing the values of dynamic route segments matched for this request.
In static builds, this will be the params
returned by getStaticPaths()
used for prerendering dynamic routes.
In SSR builds, this can be any value matching the path segments in the dynamic route pattern.
See also: params
context.props
context.props
is an object containing any props
passed from getStaticPaths()
. Because getStaticPaths()
is not used when building for SSR (server-side rendering), context.props
is only available in static builds.
See also: Data Passing with props
context.request
A standard Request object. It can be used to get the url
, headers
, method
, and even body of the request.
See also: Astro.request
context.cookies
context.cookies
contains utilities for reading and manipulating cookies.
See also: Astro.cookies
context.url
A URL object constructed from the current context.request.url
URL string value.
See also: Astro.url
context.clientAddress
Specifies the IP address of the request. This property is only available when building for SSR (server-side rendering) and should not be used for static sites.
See also: Astro.clientAddress
context.site
context.site
returns a URL
made from site
in your Astro config. If undefined, this will return a URL generated from localhost
.
See also: Astro.site
context.generator
context.generator
is a convenient way to indicate the version of Astro your project is running. It follows the format "Astro v1.x.x"
.
See also: Astro.generator
context.redirect()
context.redirect()
returns a Response object that allows you to redirect to another page. This function is only available when building for SSR (server-side rendering) and should not be used for static sites.
See also: Astro.redirect()
context.locals
context.locals
is an object used to store and access arbitrary information during the lifecycle of a request.
Middleware functions can read and write the values of context.locals
:
API endpoints can only read information from context.locals
:
See also: Astro.locals
getStaticPaths()
If a page uses dynamic params in the filename, that component will need to export a getStaticPaths()
function.
This function is required because Astro is a static site builder. That means that your entire site is built ahead of time. If Astro doesn’t know to generate a page at build time, your users won’t see it when they visit your site.
The getStaticPaths()
function should return an array of objects to determine which paths will be pre-rendered by Astro.
It can also be used in static file endpoints for dynamic routing.
The getStaticPaths()
function executes in its own isolated scope once, before any page loads. Therefore you can’t reference anything from its parent scope, other than file imports. The compiler will warn if you break this requirement.
params
The params
key of every returned object tells Astro what routes to build. The returned params must map back to the dynamic parameters and rest parameters defined in your component filepath.
params
are encoded into the URL, so only strings are supported as values. The value for each params
object must match the parameters used in the page name.
For example, suppose that you have a page at src/pages/posts/[id].astro
. If you export getStaticPaths
from this page and return the following for paths:
Then Astro will statically generate posts/1
, posts/2
, and posts/3
at build time.
Data Passing with props
To pass additional data to each generated page, you can also set a props
value on every returned path object. Unlike params
, props
are not encoded into the URL and so aren’t limited to only strings.
For example, suppose that you generate pages based off of data fetched from a remote API. You can pass the full data object to the page component inside of getStaticPaths
:
You can also pass a regular array, which may be helpful when generating or stubbing a known list of routes.
Then Astro will statically generate posts/1
and posts/2
at build time using the page component in pages/posts/[id].astro
. The page can reference this data using Astro.props
:
paginate()
Pagination is a common use-case for websites that Astro natively supports via the paginate()
function. paginate()
will automatically generate the array to return from getStaticPaths()
that creates one URL for every page of the paginated collection. The page number will be passed as a param, and the page data will be passed as a page
prop.
paginate()
assumes a file name of [page].astro
or [...page].astro
. The page
param becomes the page number in your URL:
/posts/[page].astro
would generate the URLs/posts/1
,/posts/2
,/posts/3
, etc./posts/[...page].astro
would generate the URLs/posts
,/posts/2
,/posts/3
, etc.
paginate()
has the following arguments:
pageSize
- The number of items shown per pageparams
- Send additional parameters for creating dynamic routesprops
- Send additional props to be available on each page
The pagination page
prop
Pagination will pass a page
prop to every rendered page that represents a single page of data in the paginated collection. This includes the data that you’ve paginated (page.data
) as well as metadata for the page (page.url
, page.start
, page.end
, page.total
, etc). This metadata is useful for things like a “Next Page” button or a “Showing 1-10 of 100” message.
Name | Type | Description |
---|---|---|
page.data | Array | Array of data returned from data() for the current page. |
page.start | number | Index of first item on current page, starting at 0 (e.g. if pageSize: 25 , this would be 0 on page 1, 25 on page 2, etc.). |
page.end | number | Index of last item on current page. |
page.size | number | How many items per-page. |
page.total | number | The total number of items across all pages. |
page.currentPage | number | The current page number, starting with 1 . |
page.lastPage | number | The total number of pages. |
page.url.current | string | Get the URL of the current page (useful for canonical URLs) |
page.url.prev | string | undefined | Get the URL of the previous page (will be undefined if on page 1). |
page.url.next | string | undefined | Get the URL of the next page (will be undefined if no more pages). |
import.meta
All ESM modules include a import.meta
property. Astro adds import.meta.env
through Vite.
import.meta.env.SSR
can be used to know when rendering on the server. Sometimes you might want different logic, like a component that should only be rendered in the client:
Images (astro:assets
)
getImage()
getImage()
relies on server-only APIs and breaks the build when used on the client.
The getImage()
function is intended for generating images destined to be used somewhere else than directly in HTML, for example in an API Route. It also allows you to create your own custom <Image />
component.
getImage()
takes an options object with the same properties as the Image component (except alt
).
It returns an object with the following properties:
Content Collections (astro:content
)
Added in:
astro@2.0.0
Content collections offer APIs to configure and query your Markdown or MDX documents in src/content/
. For features and usage examples, see our content collections guide.
defineCollection()
defineCollection()
is a utility to configure a collection in a src/content/config.*
file.
This function accepts the following properties:
type
Added in:
astro@2.5
Type: 'content' | 'data'
Default: 'content'
type
is a string that defines the type of entries stored within a collection:
'content'
- for content-authoring formats like Markdown (.md
), MDX (.mdx
), or Markdoc (.mdoc
)'data'
- for data-only formats like JSON (.json
) or YAML (.yaml
)
This means collections cannot store a mix of content and data formats. You must split these entries into separate collections by type.
schema
Type: TSchema extends ZodType
schema
is an optional Zod object to configure the type and shape of document frontmatter for a collection. Each value must use a Zod validator.
See the Content Collection
guide for example usage.
reference()
Type: (collection: string) => ZodEffects<ZodString, { collection, id: string } | { collection, slug: string }>
The reference()
function is used in the content config to define a relationship, or “reference,” from one collection to another. This accepts a collection name and validates the entry identifier(s) specified in your content frontmatter or data file.
This example defines references from a blog author to the authors
collection and an array of related posts to the same blog
collection:
See the Content Collection
guide for example usage.
getCollection()
Type: (collection: string, filter?: (entry: CollectionEntry<collection>) => boolean) => CollectionEntry<collection>[]
getCollection()
is a function that retrieves a list of content collection entries by collection name.
It returns all items in the collection by default, and accepts an optional filter
function to narrow by entry properties. This allows you to query for only some items in a collection based on id
, slug
, or frontmatter values via the data
object.
See the Content Collection
guide for example usage.
getEntry()
Added in:
astro@2.5.0
Types:
(collection: string, contentSlugOrDataId: string) => CollectionEntry<collection>
({ collection: string, id: string }) => CollectionEntry<collection>
({ collection: string, slug: string }) => CollectionEntry<collection>
getEntry()
is a function that retrieves a single collection entry by collection name and either the entry id
(for type: 'data'
collections) or entry slug
(for type: 'content'
collections). getEntry()
can also be used to get referenced entries to access the data
, body
, or render()
properties:
See the Content Collections
guide for examples of querying collection entries.
getEntries()
Added in:
astro@2.5
Types:
(Array<{ collection: string, id: string }>) => Array<CollectionEntry<collection>>
(Array<{ collection: string, slug: string }>) => Array<CollectionEntry<collection>>
getEntries()
is a function that retrieves multiple collection entries from the same collection. This is useful for returning an array of referenced entries to access their associated data
, body
, and render()
properties.
getEntryBySlug()
Type: (collection: string, slug: string) => CollectionEntry<collection>
Use the getEntry()
function to query content entries. This accepts the same arguments as getEntryBySlug()
, and supports querying by id
for JSON or YAML collections.
getEntryBySlug()
is a function that retrieves a single collection entry by collection name and entry slug
.
See the Content Collection
guide for example usage.
Collection Entry Type
Query functions including getCollection()
, getEntry()
, and getEntries()
each return entries with the CollectionEntry
type. This type is available as a utility from astro:content
:
The CollectionEntry<TCollectionName>
type is an object with the following values. TCollectionName
is the name of the collection you’re querying (e.g. CollectionEntry<'blog'>
).
id
Available for: type: 'content'
and type: 'data'
collections
Example Types:
- content collections:
'entry-1.md' | 'entry-2.md' | ...
- data collections:
'author-1' | 'author-2' | ...
A unique ID using the file path relative to src/content/[collection]
. Enumerates all possible string values based on the collection entry file paths. Note that collections defined as type: 'content'
include the file extension in their ID, while collections defined as type: 'data'
do not.
collection
Available for: type: 'content'
and type: 'data'
collections
Example Type: 'blog' | 'authors' | ...
The name of a top-level folder under src/content/
in which entries are located. This is the name used to reference the collection in your schema, and in querying functions.
data
Available for: type: 'content'
and type: 'data'
collections
Type: CollectionSchema<TCollectionName>
An object of frontmatter properties inferred from your collection schema (see defineCollection()
reference). Defaults to any
if no schema is configured.
slug
Available for: type: 'content'
collections only
Example Type: 'entry-1' | 'entry-2' | ...
A URL-ready slug for Markdown or MDX documents. Defaults to the id
without the file extension, but can be overridden by setting the slug
property in a file’s frontmatter.
body
Available for: type: 'content'
collections only
Type: string
A string containing the raw, uncompiled body of the Markdown or MDX document.
render()
Available for: type: 'content'
collections only
Type: () => Promise<RenderedEntry>
A function to compile a given Markdown or MDX document for rendering. This returns the following properties:
<Content />
- A component used to render the document’s contents in an Astro file.headings
- A generated list of headings, mirroring Astro’sgetHeadings()
utility on Markdown and MDX imports.remarkPluginFrontmatter
- The modified frontmatter object after any remark or rehype plugins have been applied. Set to typeany
.
See the Content Collection
guide for example usage.
Other Content Collection Types
The astro:content
module also exports the following types for use in your Astro project:
CollectionKey
A string union of all collection names defined in your src/content/config.*
file. This type can be useful when defining a generic function that accepts any collection name.
ContentCollectionKey
A string union of all the names of type: 'content'
collections defined in your src/content/config.*
file.
DataCollectionKey
A string union of all the names of type: 'data'
collection defined in your src/content/config.*
file.
SchemaContext
The context
object that defineCollection
uses for the function shape of schema
. This type can be useful when building reusable schemas for multiple collections.
This includes the following property:
image
- Theimage()
schema helper that allows you to use local images in Content Collections
Middleware (astro:middleware
)
Added in:
astro@2.6.0
Middleware allows you to intercept requests and responses and inject behaviors dynamically every time a page or endpoint is about to be rendered. For features and usage examples, see our middleware guide.
onRequest()
A required exported function from src/middleware.js
that will be called before rendering every page or API route. It accepts two optional arguments: context and next(). onRequest()
must return a Response
: either directly, or by calling next()
.
next()
A function that intercepts (reads and modifies) the Response
of a Request
or calls the “next” middleware in the chain and returns a Response
. For example, this function could modify the HTML body of a response.
This is an optional argument of onRequest()
, and may provide the required Response
returned by the middleware.
sequence()
A function that accepts middleware functions as arguments, and will execute them in the order in which they are passed.
createContext()
A low-level API to create an APIContext
to be passed to an Astro middleware onRequest()
function.
This function can be used by integrations/adapters to programmatically execute the Astro middleware.
trySerializeLocals()
A low-level API that takes in any value and tries to return a serialized version (a string) of it. If the value cannot be serialized, the function will throw a runtime error.
Built-in Components
Astro includes several built-in components for you to use in your projects. All built-in components are available in .astro
files via import {} from 'astro:components';
.
<Code />
This component provides syntax highlighting for code blocks at build time (no client-side JavaScript included). The component is powered internally by Shiki and it supports all popular themes and languages. Plus, you can add your custom themes and languages by passing them to theme
and lang
respectively.
<Fragment />
A component used with set:*
directives to render HTML content without any additional wrapping elements:
See more about using fragments in Astro syntax.
<Prism />
To use the Prism
highlighter component, first install the @astrojs/prism
package:
This component provides language-specific syntax highlighting for code blocks by applying Prism’s CSS classes. Note that you need to provide a Prism CSS stylesheet (or bring your own) for syntax highlighting to appear! See the Prism configuration section for more details.
See the list of languages supported by Prism where you can find a language’s corresponding alias. And, you can also display your Astro code blocks with lang="astro"
!
<Image />
Properties
- src (required)
- alt (required)
- width and height (required for
public/
and remote images) - format
- quality
- densities
- widths
In addition to the properties above, the <Image />
component accepts all properties accepted by the HTML <img>
tag.
See more in the Images Guide.
<Picture />
Added in:
astro@3.3.0
Use the built-in <Picture />
Astro component to display a responsive image with multiple formats and/or sizes.
See more in the Images Guide.
Properties
<Picture />
accepts all the properties of the <Image />
component, plus the following:
formats
An array of image formats to use for the <source>
tags. By default, this is set to ['webp']
.
fallbackFormat
Format to use as a fallback value for the <img>
tag. Defaults to .png
for static images, .gif
for animated images, and .svg
for SVG files.
pictureAttributes
An object of attributes to be added to the <picture>
tag. Use this property to apply attributes to the outer <picture>
element itself. Attributes applied to the <Picture />
component directly will apply to the inner <img>
element, except for those used for image transformation.
<Content />
A generic component used to render the content of a content collection entry.
First, query one or more entries using getCollection()
or getEntry()
. Then, the entry.render()
function can return the <Content />
component for use in a .astro
file template.
<ViewTransitions />
Opt in to using view transitions on individual pages by importing and adding the <ViewTransitions />
routing component to <head>
on every desired page.
See more about how to control the router and add transition directives to page elements and components.
<Debug />
This component provides a way to inspect values on the client-side, without any JavaScript.
Reference